public virtual Item GetTag(string tagName, CustomTaggerSettingModel settings, List <Item> allTags, Item parentItem = null)
 {
     tagName = RemoveDiacritics(tagName);
     if (parentItem == null)
     {
         return(allTags.FirstOrDefault(i => i.Name == ItemUtil.ProposeValidItemName(tagName)));
     }
     return(allTags.FirstOrDefault(i => i.Name == ItemUtil.ProposeValidItemName(tagName) && i.ParentID == parentItem.ID));
 }
        public virtual Item AddTag(TagData data, Item parentItem, CustomTaggerSettingModel settings, List <Item> allTags)
        {
            var existingTag = GetTag(data.TagName, settings, allTags, parentItem);

            if (existingTag != null)
            {
                return(existingTag);
            }
            return(CreateNewTag(data, parentItem, settings));
        }
        protected virtual Item CreateNewTag(TagData data, Item parentItem, CustomTaggerSettingModel settings)
        {
            string tagName  = RemoveDiacritics(data.TagName);
            string itemName = ItemUtil.ProposeValidItemName(RemoveDiacritics(data.TagName), "tag");

            using (new SecurityDisabler())
            {
                var tagItem = parentItem.Add(itemName, settings.TagEntryTemplate);
                tagItem.Editing.BeginEdit();
                tagItem.Fields[Sitecore.FieldIDs.DisplayName].Value = tagName;
                if (!settings.TagEntryValueFieldId.IsNull)
                {
                    tagItem.Fields[settings.TagEntryValueFieldId].Value = tagName;
                }
                tagItem.Editing.EndEdit();
                return(tagItem);
            }
        }
 public virtual Item CreateNewCategory(string categoryName, CustomTaggerSettingModel settings)
 {
     categoryName = RemoveDiacritics(categoryName);
     if (string.IsNullOrWhiteSpace(categoryName))
     {
         return(null);
     }
     using (new SecurityDisabler())
     {
         var categoryItem = settings.TagsCollectionRootItem.Add(ItemUtil.ProposeValidItemName(categoryName), settings.TagCategoryTemplate);
         categoryItem.Editing.BeginEdit();
         categoryItem.Fields[Sitecore.FieldIDs.DisplayName].Value = categoryName;
         if (!settings.TagCategoryValueFieldId.IsNull)
         {
             categoryItem.Fields[settings.TagCategoryValueFieldId].Value = categoryName;
         }
         categoryItem.Editing.EndEdit();
         return(categoryItem);
     }
 }
        public List <Item> AllCategories(CustomTaggerSettingModel settings)
        {
            var query = $"fast:{settings.TagsCollectionRootItem.Paths.Path}//*[@@templateid='{settings.TagCategoryTemplate.ID}']";

            return(settings.TagsCollectionRootItem.Database.SelectItems(query).ToList());
        }