public TermsPartHandler( IContentDefinitionManager contentDefinitionManager, IRepository<TermsPartRecord> repository, ITaxonomyService taxonomyService, IContentManager contentManager, IProcessingEngine processingEngine, ShellSettings shellSettings, IShellDescriptorManager shellDescriptorManager) { _contentDefinitionManager = contentDefinitionManager; _contentManager = contentManager; Filters.Add(StorageFilter.For(repository)); OnPublished<TermsPart>((context, part) => RecalculateCount(processingEngine, shellSettings, shellDescriptorManager, part)); OnUnpublished<TermsPart>((context, part) => RecalculateCount(processingEngine, shellSettings, shellDescriptorManager, part)); OnRemoved<TermsPart>((context, part) => RecalculateCount(processingEngine, shellSettings, shellDescriptorManager, part)); // Tells how to load the field terms on demand, when a content item it loaded or when it has been created OnInitialized<TermsPart>((context, part) => InitializerTermsLoader(part)); OnLoading<TermsPart>((context, part) => InitializerTermsLoader(part)); OnUpdating<TermsPart>((context, part) => InitializerTermsLoader(part)); OnIndexing<TermsPart>( (context, part) => { foreach (var term in part.Terms) { var termContentItem = context.ContentManager.Get(term.TermRecord.Id); context.DocumentIndex.Add(term.Field, termContentItem.As<TitlePart>().Title).Analyze(); context.DocumentIndex.Add(term.Field + "-id", termContentItem.Id).Store(); // tag the current content item with all parent terms foreach (var parent in taxonomyService.GetParents(termContentItem.As<TermPart>())) { context.DocumentIndex.Add(term.Field + "-id", parent.Id).Store(); } } }); }
public TermsPartHandler( IContentDefinitionManager contentDefinitionManager, IRepository <TermsPartRecord> repository, ITaxonomyService taxonomyService, IContentManager contentManager) { _contentDefinitionManager = contentDefinitionManager; _contentManager = contentManager; Filters.Add(StorageFilter.For(repository)); OnPublished <TermsPart>((context, part) => RecalculateCount(taxonomyService, part)); OnUnpublished <TermsPart>((context, part) => RecalculateCount(taxonomyService, part)); OnRemoved <TermsPart>((context, part) => RecalculateCount(taxonomyService, part)); // Tells how to load the field terms on demand, when a content item it loaded or when it has been created OnLoaded <TermsPart>((context, part) => InitializerTermsLoader(part)); OnCreated <TermsPart>((context, part) => InitializerTermsLoader(part)); OnIndexing <TermsPart>( (context, part) => { foreach (var term in part.Terms) { var termContentItem = context.ContentManager.Get(term.TermRecord.Id); context.DocumentIndex.Add(term.Field, termContentItem.As <TitlePart>().Title).Analyze(); context.DocumentIndex.Add(term.Field + "-id", termContentItem.Id).Store(); // tag the current content item with all parent terms foreach (var parent in taxonomyService.GetParents(termContentItem.As <TermPart>())) { context.DocumentIndex.Add(term.Field + "-id", parent.Id).Store(); } } }); }
private List <int> GetTermsToEvict(TermPart termPart) { List <int> termIds = new List <int>(); // evict term termIds.Add(termPart.Id); // evict parents foreach (var parent in _taxonomyService.GetParents(termPart)) { termIds.Add(parent.Id); } return(termIds); }
public TermsPartHandler( IContentDefinitionManager contentDefinitionManager, IRepository<TermsPartRecord> repository, ITaxonomyService taxonomyService, IContentManager contentManager) { _contentDefinitionManager = contentDefinitionManager; _contentManager = contentManager; Filters.Add(StorageFilter.For(repository)); OnPublished<TermsPart>((context, part) => RecalculateCount(contentManager, taxonomyService, part)); OnUnpublished<TermsPart>((context, part) => RecalculateCount(contentManager, taxonomyService, part)); OnRemoved<TermsPart>((context, part) => RecalculateCount(contentManager, taxonomyService, part)); // tells how to load the field terms on demand OnLoaded<TermsPart>((context, part) => { foreach (var field in part.ContentItem.Parts.SelectMany(p => p.Fields).OfType<TaxonomyField>()) { var tempField = field.Name; var fieldTermRecordIds = part.Record.Terms.Where(t => t.Field == tempField).Select(tci => tci.TermRecord.Id); field._terms.Loader(value => fieldTermRecordIds.Select(id => _contentManager.Get<TermPart>(id)).ToList()); } part._termParts.Loader(value => part.Terms.Select( x => new TermContentItemPart { Field = x.Field, TermPart = _contentManager.Get<TermPart>(x.TermRecord.Id) } )); }); OnIndexing<TermsPart>( (context, part) => { foreach (var term in part.Terms) { var termContentItem = context.ContentManager.Get(term.TermRecord.Id); context.DocumentIndex.Add(term.Field, termContentItem.As<TitlePart>().Title).Analyze(); context.DocumentIndex.Add(term.Field + "-id", termContentItem.Id).Store(); // tag the current content item with all parent terms foreach (var parent in taxonomyService.GetParents(termContentItem.As<TermPart>())) { context.DocumentIndex.Add(term.Field + "-id", parent.Id).Store(); } } }); }