public TaxonomyFieldQueryObjectType()
        {
            Name = nameof(TaxonomyField);

            Field <ListGraphType <StringGraphType>, IEnumerable <string> >()
            .Name("termContentItemIds")
            .Description("term content item ids")
            .PagingArguments()
            .Resolve(x =>
            {
                return(x.Page(x.Source.TermContentItemIds));
            });

            Field <StringGraphType, string>()
            .Name("taxonomyContentItemId")
            .Description("taxonomy content item id")
            .Resolve(x =>
            {
                return(x.Source.TaxonomyContentItemId);
            });

            Field <ListGraphType <ContentItemInterface>, IEnumerable <ContentItem> >()
            .Name("termContentItems")
            .Description("the term content items")
            .PagingArguments()
            .ResolveAsync(async x =>
            {
                var ids            = x.Page(x.Source.TermContentItemIds);
                var context        = (GraphQLContext)x.UserContext;
                var contentManager = context.ServiceProvider.GetService <IContentManager>();

                var taxonomy = await contentManager.GetAsync(x.Source.TaxonomyContentItemId);

                if (taxonomy == null)
                {
                    return(null);
                }

                var terms = new List <ContentItem>();

                foreach (var termContentItemId in ids)
                {
                    var term = TaxonomyOrchardHelperExtensions.FindTerm(taxonomy.Content.TaxonomyPart.Terms as JArray, termContentItemId);
                    terms.Add(term);
                }

                return(terms);
            });

            Field <ContentItemInterface, ContentItem>()
            .Name("taxonomyContentItem")
            .Description("the taxonomy content item")
            .ResolveAsync(async x =>
            {
                var context        = (GraphQLContext)x.UserContext;
                var contentManager = context.ServiceProvider.GetService <IContentManager>();
                return(await contentManager.GetAsync(x.Source.TaxonomyContentItemId));
            });
        }
        public async Task <IActionResult> Index(string id, string taxonomyid)
        {
            var taxonomyContentItem = await _contentManager.GetAsync(taxonomyid);

            var termContentItem = TaxonomyOrchardHelperExtensions.FindTerm(taxonomyContentItem.Content.TaxonomyPart.Terms as JArray, id);
            // This part is added automatically to all terms
            // termContentItem.Weld(new TermPart());
            var model = await _contentItemDisplayManager.BuildDisplayAsync(termContentItem, this, "Detail");

            //https://english.orchardproject.hu/blog/the-orchard-dynamic-page-pattern
            return(View(model));
        }
        public async ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, TemplateContext ctx)
        {
            if (!ctx.AmbientValues.TryGetValue("Services", out var services))
            {
                throw new ArgumentException("Services missing while invoking 'inherited_terms'");
            }

            ContentItem taxonomy          = null;
            string      termContentItemId = null;

            var contentManager = ((IServiceProvider)services).GetRequiredService <IContentManager>();

            if (input.Type == FluidValues.Object && input.ToObjectValue() is ContentItem term)
            {
                termContentItemId = term.ContentItemId;
            }
            else
            {
                termContentItemId = input.ToStringValue();
            }

            var firstArg = arguments.At(0);

            if (firstArg.Type == FluidValues.Object && input.ToObjectValue() is ContentItem contentItem)
            {
                taxonomy = contentItem;
            }
            else
            {
                taxonomy = await contentManager.GetAsync(firstArg.ToStringValue());
            }

            if (taxonomy == null)
            {
                return(null);
            }

            var terms = new List <ContentItem>();

            TaxonomyOrchardHelperExtensions.FindTermHierarchy(taxonomy.Content.TaxonomyPart.Terms as JArray, termContentItemId, terms);

            return(FluidValue.Create(terms));
        }
        public override async Task <IDisplayResult> UpdateAsync(TaxonomyField field, IUpdateModel updater, UpdateFieldEditorContext context)
        {
            var model = new EditTagTaxonomyFieldViewModel();

            if (await updater.TryUpdateModelAsync(model, Prefix, f => f.TermContentItemIds))
            {
                var settings = context.PartFieldDefinition.GetSettings <TaxonomyFieldSettings>();

                field.TaxonomyContentItemId = settings.TaxonomyContentItemId;

                field.TermContentItemIds = model.TermContentItemIds == null
                    ? Array.Empty <string>() : model.TermContentItemIds.Split(',', StringSplitOptions.RemoveEmptyEntries);

                if (settings.Required && field.TermContentItemIds.Length == 0)
                {
                    updater.ModelState.AddModelError(
                        nameof(EditTagTaxonomyFieldViewModel.TermContentItemIds),
                        S["A value is required for '{0}'", context.PartFieldDefinition.DisplayName()]);
                }

                // Update display text for tags.
                var taxonomy = await _contentManager.GetAsync(settings.TaxonomyContentItemId, VersionOptions.Latest);

                if (taxonomy == null)
                {
                    return(null);
                }

                var terms = new List <ContentItem>();

                foreach (var termContentItemId in field.TermContentItemIds)
                {
                    var term = TaxonomyOrchardHelperExtensions.FindTerm(taxonomy.Content.TaxonomyPart.Terms as JArray, termContentItemId);
                    terms.Add(term);
                }

                field.SetTagNames(terms.Select(t => t.DisplayText).ToArray());
            }

            return(Edit(field, context));
        }
Exemple #5
0
        private ContentItem  GetTermContentItem(TermEntry entry, ContentItem taxonomy)
        {
            // var term = default(TermPart);
            var termContentItem = default(ContentItem);


            if (taxonomy == null)
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(entry.ContentItemId))
            {
                termContentItem =
                    TaxonomyOrchardHelperExtensions.FindTerm(taxonomy.Content.TaxonomyPart.Terms as JArray,
                                                             entry.ContentItemId);
            }


            return(termContentItem);
        }
Exemple #6
0
        public async ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, LiquidTemplateContext ctx)
        {
            ContentItem taxonomy          = null;
            string      termContentItemId = null;

            if (input.Type == FluidValues.Object && input.ToObjectValue() is ContentItem term)
            {
                termContentItemId = term.ContentItemId;
            }
            else
            {
                termContentItemId = input.ToStringValue();
            }

            var firstArg = arguments.At(0);

            if (firstArg.Type == FluidValues.Object && input.ToObjectValue() is ContentItem contentItem)
            {
                taxonomy = contentItem;
            }
            else
            {
                taxonomy = await _contentManager.GetAsync(firstArg.ToStringValue());
            }

            if (taxonomy == null)
            {
                return(null);
            }

            var terms = new List <ContentItem>();

            TaxonomyOrchardHelperExtensions.FindTermHierarchy(taxonomy.Content.TaxonomyPart.Terms as JArray, termContentItemId, terms);

            return(FluidValue.Create(terms, ctx.Options));
        }
Exemple #7
0
        public override async Task BuildIndexAsync(TaxonomyField field, BuildFieldIndexContext context)
        {
            // TODO: Also add the parents of each term, probably as a separate field

            var options = context.Settings.ToOptions();

            options |= DocumentIndexOptions.Store;

            // Directly selected term ids are added to the default field name
            foreach (var contentItemId in field.TermContentItemIds)
            {
                foreach (var key in context.Keys)
                {
                    context.DocumentIndex.Set(key, contentItemId, options);
                }
            }

            // Inherited term ids are added to a distinct field, prefixed with "Inherited"
            var contentManager = _serviceProvider.GetRequiredService <IContentManager>();
            var taxonomy       = await contentManager.GetAsync(field.TaxonomyContentItemId);

            var inheritedContentItems = new List <ContentItem>();

            foreach (var contentItemId in field.TermContentItemIds)
            {
                TaxonomyOrchardHelperExtensions.FindTermHierarchy(taxonomy.Content.TaxonomyPart.Terms as JArray, contentItemId, inheritedContentItems);
            }

            foreach (var key in context.Keys)
            {
                foreach (var contentItem in inheritedContentItems)
                {
                    context.DocumentIndex.Set(key + ".Inherited", contentItem.ContentItemId, options);
                }
            }
        }