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();
                        }
                    }
                });
        }
Ejemplo n.º 2
0
        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();
                    }
                }
            });
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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();
                        }
                    }
                });
        }