public ProductAttributeTests()
 {
     parser              = new ProductAttributeProvider();
     partDefinition      = new ContentPartDefinition("Product");
     boolFieldDefinition = new ContentPartFieldDefinition(
         new ContentFieldDefinition(nameof(BooleanProductAttributeField)),
         "BooleanField", new JObject())
     {
         PartDefinition = partDefinition
     };
     numericFieldDefinition = new ContentPartFieldDefinition(
         new ContentFieldDefinition(nameof(NumericProductAttributeField)),
         "NumericField", new JObject())
     {
         PartDefinition = partDefinition
     };
     textFieldDefinition = new ContentPartFieldDefinition(
         new ContentFieldDefinition(nameof(TextProductAttributeField)),
         "TextField", new JObject())
     {
         PartDefinition = partDefinition
     };
     partTypeDefinition = new ContentTypePartDefinition("product", partDefinition, new JObject());
 }
示例#2
0
        public override IEnumerable <TemplateViewModel> TypePartEditor(ContentTypePartDefinition definition)
        {
            if (definition.PartDefinition.Name == "WidgetsContainerPart")
            {
                var model = definition.Settings.GetModel <WidgetsContainerSettings>();

                var currentTheme = _siteThemeService.GetSiteTheme();

                var allowedViewModel = new WidgetsContainerSettingsViewModel();
                allowedViewModel.SelectedZones = model.AllowedZones != null?model.AllowedZones.Split(',') : new string[]
                {
                };
                allowedViewModel.Zones           = _widgetsService.GetZones(currentTheme).ToList();
                allowedViewModel.SelectedWidgets = model.AllowedWidgets != null?model.AllowedWidgets.Split(',') : new string[]
                {
                };
                allowedViewModel.Widgets = _widgetsService.GetWidgetTypeNames().OrderBy(o => o).ToList();
                allowedViewModel.UseHierarchicalAssociation  = model.UseHierarchicalAssociation;
                allowedViewModel.HierarchicalAssociationJson = model.HierarchicalAssociationJson;
                allowedViewModel.TryToLocalizeItems          = model.TryToLocalizeItems;

                yield return(DefinitionTemplate(allowedViewModel));
            }
        }
        async Task <IDisplayResult> IContentPartDisplayDriver.UpdateEditorAsync(ContentPart contentPart, ContentTypePartDefinition typePartDefinition, UpdateEditorContext context)
        {
            var part = contentPart as TPart;

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

            using (BuildPrefix(typePartDefinition, context.HtmlFieldPrefix))
            {
                var updateEditorContext = new UpdatePartEditorContext(typePartDefinition, context);

                _typePartDefinition = typePartDefinition;

                var result = await UpdateAsync(part, context.Updater, updateEditorContext);

                part.ContentItem.Apply(typePartDefinition.Name, part);

                _typePartDefinition = null;

                return(result);
            }
        }
 public PartConfigurerImpl(ContentTypePartDefinition part)
     : base(part)
 {
     Current         = part;
     _partDefinition = part.PartDefinition;
 }
 public UpdatePartEditorContext(ContentTypePartDefinition typePartDefinition, UpdateEditorContext context)
     : base(typePartDefinition, context)
 {
 }
 protected ContentTypePartDefinitionBuilder(ContentTypePartDefinition part)
 {
     Name      = part.PartDefinition.Name;
     _settings = new SettingsDictionary(part.Settings.ToDictionary(kv => kv.Key, kv => kv.Value));
 }
示例#7
0
 public virtual IEnumerable <TemplateViewModel> TypePartEditor(ContentTypePartDefinition definition)
 {
     return(Enumerable.Empty <TemplateViewModel>());
 }
示例#8
0
 protected string GetEditorShapeType(ContentTypePartDefinition typePartDefinition)
 {
     return(GetEditorShapeType(typeof(TPart).Name + "_Edit", typePartDefinition));
 }
        public override IEnumerable <TemplateViewModel> TypePartEditor(ContentTypePartDefinition definition)
        {
            if (definition.PartDefinition.Name != "AutoroutePart")
            {
                yield break;
            }

            var settings = definition.Settings.GetModel <AutorouteSettings>();

            // Get cultures
            settings.SiteCultures = _cultureManager.ListCultures().ToList();
            // Get default site culture
            settings.DefaultSiteCulture = _cultureManager.GetSiteCulture();

            // Adding Patterns for the UI
            List <RoutePattern> newPatterns = new List <RoutePattern>();

            // Adding a null culture for the culture neutral pattern
            var cultures = new List <string>();

            cultures.Add(null);
            cultures.AddRange(settings.SiteCultures);

            foreach (string culture in cultures)
            {
                // Adding all existing patterns for the culture
                newPatterns.AddRange(
                    settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))
                    );

                // Adding a pattern for each culture if there is none
                if (!settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)).Any())
                {
                    newPatterns.Add(new RoutePattern {
                        Culture = culture, Name = "Title", Description = "my-title", Pattern = "{Content.Slug}"
                    });
                }

                // Adding a new empty line for each culture
                newPatterns.Add(new RoutePattern {
                    Culture = culture, Name = null, Description = null, Pattern = null
                });

                // If the content type has no defaultPattern for autoroute, assign one
                var defaultPatternExists = false;
                if (String.IsNullOrEmpty(culture))
                {
                    defaultPatternExists = settings.DefaultPatterns.Any(x => String.IsNullOrEmpty(x.Culture));
                }
                else
                {
                    defaultPatternExists = settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase));
                }

                if (!defaultPatternExists)
                {
                    // If in the default culture check the old setting
                    if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase))
                    {
                        var defaultPatternIndex = settings.DefaultPatternIndex;
                        if (!String.IsNullOrWhiteSpace(defaultPatternIndex))
                        {
                            var patternIndex = defaultPatternIndex;
                            settings.DefaultPatterns.Add(new DefaultPattern {
                                Culture = settings.DefaultSiteCulture, PatternIndex = patternIndex
                            });
                        }
                        else
                        {
                            settings.DefaultPatterns.Add(new DefaultPattern {
                                PatternIndex = "0", Culture = culture
                            });
                        }
                    }
                    else
                    {
                        settings.DefaultPatterns.Add(new DefaultPattern {
                            PatternIndex = "0", Culture = culture
                        });
                    }
                }
            }

            settings.Patterns = newPatterns;

            yield return(DefinitionTemplate(settings));
        }
        private RelationshipDataModel TransformContentTypePartDefinitionToRelationship(ContentTypePartDefinition contentTypePartDefinition, string linkFromName, string linkToName)
        {
            var relationshipDataModel = new RelationshipDataModel
            {
                Id     = linkToName,
                Label  = contentTypePartDefinition.PartDefinition.GetSettings <ContentPartSettings>()?.Description ?? contentTypePartDefinition.Name,
                Domain = linkFromName,
                Range  = linkToName,
            };

            return(relationshipDataModel);
        }
 public EditTypePartViewModel(int index, ContentTypePartDefinition part)
 {
     PartName = part.PartName;
 }
 public override IDisplayResult Edit(ContentTypePartDefinition model, IUpdateModel updater)
 {
     return(Shape("ContentTypePartSettings_Edit", new ShapeViewModel <ContentTypePartDefinition>(model)).Location("Content"));
 }
示例#13
0
        private IEnumerable <ContentTypeDefinition> GetContainedContentTypes(ContentTypePartDefinition typePartDefinition)
        {
            var settings = typePartDefinition.GetSettings <BagPartSettings>();

            return(settings.ContainedContentTypes.Select(contentType => _contentDefinitionManager.GetTypeDefinition(contentType)));
        }
        public override IEnumerable <TemplateViewModel> TypePartEditor(ContentTypePartDefinition definition)
        {
            if (definition.PartDefinition.Name != "AutoroutePart")
            {
                yield break;
            }

            var settings = definition.Settings.GetModel <AutorouteSettings>();

            //get cultures
            settings.SiteCultures = _cultureManager.ListCultures().ToList();
            //get default site culture
            settings.DefaultSiteCulture = _cultureManager.GetSiteCulture();

            //if a culture is not set on the pattern we set it to the default site culture for backward compatibility
            if (!settings.Patterns.Any(x => String.Equals(x.Culture, settings.DefaultSiteCulture, StringComparison.OrdinalIgnoreCase)))
            {
                foreach (RoutePattern pattern in settings.Patterns.Where(x => String.IsNullOrWhiteSpace(x.Culture)))
                {
                    settings.Patterns.Where(x => x.GetHashCode() == pattern.GetHashCode()).FirstOrDefault().Culture = settings.DefaultSiteCulture;
                }
            }

            //Adding Patterns for the UI
            List <RoutePattern> newPatterns = new List <RoutePattern>();
            int current = 0;

            foreach (string culture in settings.SiteCultures)
            {
                foreach (RoutePattern routePattern in settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)))
                {
                    if (settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)))
                    {
                        newPatterns.Add(settings.Patterns[current]);
                    }
                    else
                    {
                        newPatterns.Add(new RoutePattern {
                            Name        = "Title",
                            Description = "my-title",
                            Pattern     = "{Content.Slug}",
                            Culture     = settings.DefaultSiteCulture
                        });
                    }
                    current++;
                }

                //We add a pattern for each culture if there is none
                if (!settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)).Any())
                {
                    newPatterns.Add(new RoutePattern {
                        Culture = culture, Name = "Title", Description = "my-title", Pattern = "{Content.Slug}"
                    });
                }

                //we add a new empty line for each culture
                newPatterns.Add(new RoutePattern {
                    Culture = culture, Name = null, Description = null, Pattern = null
                });

                // if the content type has no defaultPattern for autoroute, then assign one
                if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)))
                {
                    //if we are in the default culture check the old setting
                    if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase))
                    {
                        var defaultPatternIndex = settings.DefaultPatternIndex;
                        if (!String.IsNullOrWhiteSpace(defaultPatternIndex))
                        {
                            var patternIndex = defaultPatternIndex;
                            settings.DefaultPatterns.Add(new DefaultPattern {
                                Culture = settings.DefaultSiteCulture, PatternIndex = patternIndex
                            });
                        }
                        else
                        {
                            settings.DefaultPatterns.Add(new DefaultPattern {
                                PatternIndex = "0", Culture = culture
                            });
                        }
                    }
                    else
                    {
                        settings.DefaultPatterns.Add(new DefaultPattern {
                            PatternIndex = "0", Culture = culture
                        });
                    }
                }
            }

            settings.Patterns = newPatterns;

            yield return(DefinitionTemplate(settings));
        }
        Task <IDisplayResult> IContentFieldDisplayDriver.BuildDisplayAsync(ContentPart contentPart, ContentPartFieldDefinition partFieldDefinition, ContentTypePartDefinition typePartDefinition, BuildDisplayContext context)
        {
            if (!string.Equals(typeof(TField).Name, partFieldDefinition.FieldDefinition.Name) &&
                !string.Equals(nameof(ContentField), partFieldDefinition.FieldDefinition.Name))
            {
                return(Task.FromResult(default(IDisplayResult)));
            }

            var field = contentPart.Get <TField>(partFieldDefinition.Name);

            if (field != null)
            {
                BuildPrefix(typePartDefinition, partFieldDefinition, context.HtmlFieldPrefix);

                var fieldDisplayContext = new BuildFieldDisplayContext(contentPart, typePartDefinition, partFieldDefinition, context);

                _typePartDefinition  = typePartDefinition;
                _partFieldDefinition = partFieldDefinition;

                var result = DisplayAsync(field, fieldDisplayContext);

                _typePartDefinition  = null;
                _partFieldDefinition = null;

                return(result);
            }

            return(Task.FromResult(default(IDisplayResult)));
        }
示例#16
0
 protected ContentTypePartDefinitionBuilder(ContentTypePartDefinition part)
 {
     Name      = part.PartDefinition.Name;
     TypeName  = part.ContentTypeDefinition != null ? part.ContentTypeDefinition.Name : default(string);
     _settings = new SettingsDictionary(part.Settings.ToDictionary(kv => kv.Key, kv => kv.Value));
 }
示例#17
0
        private async Task <IEnumerable <ContentTypeDefinition> > GetContainedContentTypesAsync(IContentDefinitionManager contentDefinitionManager, ContentTypePartDefinition typePartDefinition)
        {
            var settings = typePartDefinition.GetSettings <BagPartSettings>();

            var contentTypes = settings.ContainedContentTypes
                               .Select(contentType => _contentDefinitionManager.GetTypeDefinition(contentType))
                               .Where(contentType => contentType != null);

            var accessibleContentTypes = new List <ContentTypeDefinition>();

            foreach (var contentType in contentTypes)
            {
                var dummyContent = await _contentManager.NewAsync(contentType.Name);

                dummyContent.Owner = GetCurrentOwner();

                if (!await AuthorizeAsync(contentDefinitionManager, CommonPermissions.EditContent, dummyContent))
                {
                    continue;
                }

                accessibleContentTypes.Add(contentType);
            }

            return(accessibleContentTypes);
        }
        private async Task BuildViewModel(MarkdownBodyPartViewModel model, MarkdownBodyPart MarkdownBodyPart, ContentTypePartDefinition definition)
        {
            var contentTypeDefinition     = _contentDefinitionManager.GetTypeDefinition(MarkdownBodyPart.ContentItem.ContentType);
            var contentTypePartDefinition = contentTypeDefinition.Parts.FirstOrDefault(p => p.PartDefinition.Name == nameof(MarkdownBodyPart));
            var settings = contentTypePartDefinition.GetSettings <MarkdownBodyPartSettings>();

            var templateContext = new TemplateContext();

            templateContext.SetValue("ContentItem", MarkdownBodyPart.ContentItem);
            templateContext.MemberAccessStrategy.Register <MarkdownBodyPartViewModel>();

            var markdown = await _liquidTemplatemanager.RenderAsync(MarkdownBodyPart.Markdown, System.Text.Encodings.Web.HtmlEncoder.Default, templateContext);

            model.Html = Markdig.Markdown.ToHtml(markdown ?? "");

            model.ContentItem        = MarkdownBodyPart.ContentItem;
            model.Source             = MarkdownBodyPart.Markdown;
            model.MarkdownBodyPart   = MarkdownBodyPart;
            model.TypePartDefinition = definition;
        }
示例#19
0
        private Task BuildViewModel(TaxonomyMenuItemPartEditViewModel model, TaxonomyMenuItemPart part, ContentTypePartDefinition definition)
        {
            model.Name = part.Name;
            model.TaxonomyContentItemId = part.TaxonomyContentItemId;
            model.TaxonomyMenuItemPart  = part;

            model.TypePartDefinition = definition;

            return(Task.CompletedTask);
        }
示例#20
0
        async Task <IDisplayResult> IContentPartDisplayDriver.BuildEditorAsync(ContentPart contentPart, ContentTypePartDefinition typePartDefinition, BuildEditorContext context)
        {
            var part = contentPart as TPart;

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

            using (BuildPrefix(typePartDefinition, context.HtmlFieldPrefix))
            {
                _typePartDefinition = typePartDefinition;

                var buildEditorContext = new BuildPartEditorContext(typePartDefinition, context);

                var result = await EditAsync(part, buildEditorContext);

                _typePartDefinition = null;

                return(result);
            }
        }
 public ContentTypePartDefinitionBuilderMock(ContentTypePartDefinition part)
     : base(part)
 {
 }
 private void Apply(ContentTypePartDefinition model, ContentTypePartDefinitionRecord record)
 {
     record.Settings = Compose(_settingsFormatter.Map(model.Settings));
 }
 public UpdateFieldEditorContext(ContentPart contentPart, ContentTypePartDefinition typePartDefinition, ContentPartFieldDefinition partFieldDefinition, UpdateEditorContext context)
     : base(contentPart, typePartDefinition, partFieldDefinition, context)
 {
 }
        private static ShapeResult CreateShapeResult(string groupId, string partTypeName, string contentType, ContentTypePartDefinition typePartDefinition, string partPosition)
        {
            var shapeType = "ContentPart_Edit";
            var partName  = typePartDefinition.Name;

            var typePartShapeResult = new ShapeResult(shapeType, ctx => ctx.ShapeFactory.CreateAsync(shapeType));

            typePartShapeResult.Differentiator($"{contentType}-{partName}");
            typePartShapeResult.Name(partName);
            typePartShapeResult.Location($"Parts:{partPosition}");
            typePartShapeResult.OnGroup(groupId);
            typePartShapeResult.Displaying(ctx =>
            {
                // ContentPart_Edit__[PartType]
                // eg ContentPart-ServicePart.Edit
                ctx.Shape.Metadata.Alternates.Add($"{shapeType}__{partTypeName}");

                // ContentPart_Edit__[ContentType]__[PartType]
                // e.g. ContentPart-LandingPage-ServicePart.Edit
                ctx.Shape.Metadata.Alternates.Add($"{shapeType}__{contentType}__{partTypeName}");

                var isNamedPart = typePartDefinition.PartDefinition.IsReusable() && partName != partTypeName;

                if (isNamedPart)
                {
                    // ContentPart_Edit__[ContentType]__[PartName]
                    // e.g. ContentPart-LandingPage-BillingService.Edit ContentPart-LandingPage-HelplineService.Edit
                    ctx.Shape.Metadata.Alternates.Add($"{shapeType}__{contentType}__{partName}");
                }
            });

            return(typePartShapeResult);
        }
        Task <IDisplayResult> IContentPartDisplayDriver.BuildEditorAsync(ContentPart contentPart, ContentTypePartDefinition typePartDefinition, BuildEditorContext context)
        {
            var part = contentPart as TPart;

            if (part == null)
            {
                return(Task.FromResult <IDisplayResult>(null));
            }

            BuildPrefix(typePartDefinition, context.HtmlFieldPrefix);

            var buildEditorContext = new BuildPartEditorContext(typePartDefinition, context);

            return(EditAsync(part, buildEditorContext));
        }
 public BuildPartEditorContext(ContentTypePartDefinition typePartDefinition, BuildEditorContext context)
     : base(context.Shape, context.GroupId, "", context.ShapeFactory, context.Layout, context.Updater)
 {
     TypePartDefinition = typePartDefinition;
 }
        Task <IDisplayResult> IContentPartDisplayDriver.UpdateEditorAsync(ContentPart contentPart, ContentTypePartDefinition typePartDefinition, UpdateEditorContext context)
        {
            var part = contentPart as TPart;

            if (part == null)
            {
                return(Task.FromResult <IDisplayResult>(null));
            }

            BuildPrefix(typePartDefinition, context.HtmlFieldPrefix);

            var updateEditorContext = new UpdatePartEditorContext(typePartDefinition, context);

            var result = UpdateAsync(part, context.Updater, updateEditorContext);

            part.ContentItem.Apply(typePartDefinition.Name, part);

            return(result);
        }
示例#28
0
 public BuildPartDisplayContext(ContentTypePartDefinition typePartDefinition, BuildDisplayContext context)
     : base(context.Shape, context.DisplayType, context.GroupId, context.ShapeFactory, context.Layout, context.Updater)
 {
     TypePartDefinition = typePartDefinition;
 }
示例#29
0
 public EditTypePartViewModel(int index, ContentTypePartDefinition part) {
     Index = index;
     PartDefinition = new EditPartViewModel(part.PartDefinition);
     Settings = part.Settings;
     _Definition = part;
 }
示例#30
0
 private void Apply(ContentTypePartDefinition model, ContentTypePartDefinitionRecord record)
 {
     record.Settings = model.Settings;
 }
        private async Task BuildViewModelAsync(HtmlBodyPartViewModel model, HtmlBodyPart HtmlBodyPart, ContentTypePartDefinition definition)
        {
            var contentTypeDefinition     = _contentDefinitionManager.GetTypeDefinition(HtmlBodyPart.ContentItem.ContentType);
            var contentTypePartDefinition = contentTypeDefinition.Parts.FirstOrDefault(p => p.Name == nameof(HtmlBodyPart));
            var settings = contentTypePartDefinition.GetSettings <HtmlBodyPartSettings>();

            var templateContext = new TemplateContext();

            templateContext.SetValue("ContentItem", HtmlBodyPart.ContentItem);
            templateContext.MemberAccessStrategy.Register <HtmlBodyPartViewModel>();

            model.Html = await _liquidTemplatemanager.RenderAsync(HtmlBodyPart.Html, HtmlEncoder.Default, templateContext);

            model.ContentItem        = HtmlBodyPart.ContentItem;
            model.Source             = HtmlBodyPart.Html;
            model.HtmlBodyPart       = HtmlBodyPart;
            model.TypePartDefinition = definition;
        }