Skip to content

Instantly share code, notes, and snippets.

@haliphax
Created June 10, 2019 17:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haliphax/b3589171fd294cb51a6d71b8cea8d515 to your computer and use it in GitHub Desktop.
Save haliphax/b3589171fd294cb51a6d71b8cea8d515 to your computer and use it in GitHub Desktop.
Sitecore bucket condition for determining if a new item is made or derived from a specific template
using Sitecore.Buckets.Rules.Bucketing;
using Sitecore.Data;
using Sitecore.Data.Managers;
using Sitecore.Data.Templates;
using Sitecore.Rules.Conditions;
namespace Custom.Sitecore.Feature.Blog.BucketConditions
{
public class WhenNewItemTemplateIsDerivedFrom<T> : WhenCondition<T> where T : BucketingRuleContext
{
private ID templateId;
public WhenNewItemTemplateIsDerivedFrom()
{
templateId = ID.Null;
}
public WhenNewItemTemplateIsDerivedFrom(ID templateId)
{
this.templateId = templateId;
}
public ID TemplateId
{
get
{
return templateId;
}
set
{
templateId = value;
}
}
protected override bool Execute(T ruleContext)
{
ID newItemTemplateId = ruleContext.NewItemTemplateId;
if (ID.IsNullOrEmpty(newItemTemplateId)) return false;
Template itemTemplate = TemplateManager.GetTemplate(newItemTemplateId, ruleContext.Database);
Template baseTemplate = TemplateManager.GetTemplate(templateId, ruleContext.Database);
return IsDerivedFrom(itemTemplate, baseTemplate);
}
private bool IsDerivedFrom(Template target, Template baseTemplate)
{
if (target.ID == baseTemplate.ID) return true;
var baseTemplates = target.GetBaseTemplates();
if (baseTemplates == null || baseTemplates.Count == 0) return false;
foreach (Template bt in baseTemplates)
if (IsDerivedFrom(bt, baseTemplate)) return true;
return false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment