示例#1
0
        public ActionResult Index()
        {
            var viewModel = new MigrateViewModel {
                ContentTypes = new List <ContentTypeEntry>()
            };

            foreach (var contentType in _contentDefinitionManager.ListTypeDefinitions().OrderBy(c => c.Name))
            {
                // only display parts with fields
                if (contentType.Parts.Any(x => x.PartDefinition.Fields.Any()))
                {
                    viewModel.ContentTypes.Add(new ContentTypeEntry {
                        ContentTypeName = contentType.Name
                    });
                }
            }

            if (!viewModel.ContentTypes.Any())
            {
                _orchardServices.Notifier.Warning(T("There are no content types with custom fields"));
            }

            if (!_featureManager.GetEnabledFeatures().Any(x => x.Id == "Orchard.Fields"))
            {
                _orchardServices.Notifier.Warning(T("You need to enable Orchard.Fields in order to migrate current fields."));
            }

            return(View(viewModel));
        }
示例#2
0
 private IEnumerable <ContentTypeDefinition> GetCreatableTypes(bool andContainable)
 {
     return(_contentDefinitionManager.ListTypeDefinitions().Where(ctd =>
                                                                  Services.Authorizer.Authorize(Permissions.CreateContent, _contentManager.New(ctd.Name)) &&
                                                                  ctd.Settings.GetModel <ContentTypeSettings>().Creatable&&
                                                                  (!andContainable || ctd.Parts.Any(p => p.PartDefinition.Name == "ContainablePart"))));
 }
示例#3
0
 public IEnumerable <ContentTypeDefinition> GetTerritoryTypes()
 {
     return(_contentDefinitionManager.ListTypeDefinitions()
            .Where(ctd => ctd.Parts.Any(pa => pa
                                        .PartDefinition.Name.Equals(TerritoryPart.PartName, StringComparison.InvariantCultureIgnoreCase)) &&
                   _authorizer.Authorize(TerritoriesPermissions.GetTerritoryPermission(ctd))));
 }
示例#4
0
        public IEnumerable <Permission> GetPermissions()
        {
            // manage rights only for Creatable types
            var creatableTypes = _contentDefinitionManager.ListTypeDefinitions()
                                 .Where(ctd => ctd.Settings.GetModel <ContentTypeSettings>().Creatable);

            foreach (var provider in _dynamicProviders)
            {
                foreach (var template in provider.GetCreatableContentPermissionTemplates())
                {
                    foreach (var type in creatableTypes)
                    {
                        yield return(CreateDynamicPermission(template, type));
                    }
                }
            }

            var widgetTypes = _contentDefinitionManager.ListTypeDefinitions()
                              .Where(ctd => ctd.Settings["Stereotype"] == "Widget");

            foreach (var provider in _dynamicProviders)
            {
                foreach (var template in provider.GetWidgetPermissionTemplates())
                {
                    foreach (var type in creatableTypes)
                    {
                        yield return(CreateDynamicPermission(template, type));
                    }
                }
            }
        }
示例#5
0
 public IEnumerable <Permission> ListTerritoryTypePermissions()
 {
     return(_contentDefinitionManager.ListTypeDefinitions()
            .Where(ctd => ctd.Parts.Any(pa => pa
                                        .PartDefinition.Name.Equals(TerritoryPart.PartName, StringComparison.InvariantCultureIgnoreCase)))
            .Select(ctd => GetTerritoryPermission(ctd)));
 }
示例#6
0
 protected override DriverResult Editor(ContainerPart part, dynamic shapeHelper)
 {
     if (!_contentDefinitionManager.ListTypeDefinitions().Any(typeDefinition => typeDefinition.Parts.Any(partDefinition => partDefinition.PartDefinition.Name == "ContainablePart")))
     {
         _orchardServices.Notifier.Warning(T("There are no content types in the system with a Containable part attached. Consider adding a Containable part to some content type, existing or new, in order to relate items to this (Container enabled) item."));
     }
     return(Editor(part, (IUpdateModel)null, shapeHelper));
 }
示例#7
0
        public override void Build(BuildContext context)
        {
            // Get all ContentTypes that contain TerritoryHierarchyPart or TerritoryPart
            // because we will export their definitions and all ContentItems.
            var hierarchyTypes = _contentDefinitionManager.ListTypeDefinitions()
                                 .Where(ctd => ctd.Parts.Any(pa => pa
                                                             .PartDefinition.Name.Equals(TerritoryHierarchyPart.PartName, StringComparison.InvariantCultureIgnoreCase)))
                                 .Select(ctd => ctd.Name);
            var territoryTypes = _contentDefinitionManager.ListTypeDefinitions()
                                 .Where(ctd => ctd.Parts.Any(pa => pa
                                                             .PartDefinition.Name.Equals(TerritoryPart.PartName, StringComparison.InvariantCultureIgnoreCase)))
                                 .Select(ctd => ctd.Name);

            // Add a command telling to try and enable this feature
            context.RecipeDocument.Element("Orchard")
            .Add(EnableFeatureElement());

            // Export the TerritoryInternalRecords: This adds to the exported xml commands to recreate the records.
            context.RecipeDocument.Element("Orchard")
            .Add(ExportInternalRecordsCommands());

            // Export ContentDefinitions
            if (hierarchyTypes.Any())
            {
                context.RecipeDocument.Element("Orchard")
                .Add(ExportMetadata(hierarchyTypes));
            }
            if (territoryTypes.Any())
            {
                context.RecipeDocument.Element("Orchard")
                .Add(ExportMetadata(territoryTypes));
            }

            // Export ContentItems
            // 1. Export Hierarchies
            // Get the ContentItems for the hierarchies (they have references to their territories)
            var hierarchyItems = hierarchyTypes.Any()
                ? _contentManager
                                 .Query(VersionOptions.Latest, hierarchyTypes.ToArray())
                                 .List().ToList()
                : Enumerable.Empty <ContentItem>().ToList();

            if (hierarchyItems.Any())
            {
                context.RecipeDocument.Element("Orchard")
                .Add(ExportData(hierarchyTypes, hierarchyItems));
            }
            // 2. Export Territories
            foreach (var hierarchy in hierarchyItems.Select(ci => ci.As <TerritoryHierarchyPart>()))
            {
                if (hierarchy.Territories.Any())
                {
                    context.RecipeDocument.Element("Orchard")
                    .Add(ExportTerritories(hierarchy.Territories));
                }
            }
        }
示例#8
0
        protected override DriverResult Editor(ContentPart part, Fields.SmartContentPickerField field, dynamic shapeHelper)
        {
            return(ContentShape("Fields_SmartContentPicker_Edit", GetDifferentiator(field, part),
                                () => {
                var settings = field.PartFieldDefinition.Settings.GetModel <SmartContentPickerFieldSettings>();
                IEnumerable <ContentTypeDefinition> contentTypes;
                if (!String.IsNullOrEmpty(settings.DisplayedContentTypes))
                {
                    var rawTypes = settings.DisplayedContentTypes.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                    contentTypes = _contentDefinitionManager
                                   .ListTypeDefinitions()
                                   .Where(x => x.Parts.Any(p => rawTypes.Contains(p.PartDefinition.Name)) || rawTypes.Contains(x.Name))
                                   .ToArray();
                }
                else
                {
                    contentTypes = GetCreatableTypes(false).ToList();
                }

                var contentItems = Services.ContentManager.Query(VersionOptions.Latest, contentTypes.Select(ctd => ctd.Name).ToArray())
                                   .OrderBy <TitlePartRecord>(cr => cr.Title)
                                   //.OrderByDescending<CommonPartRecord>(cr => cr.ModifiedUtc)
                                   .List();

                var contentType = contentTypes.Select(ctd => ctd.Name).ToArray();

                if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner))
                {
                    if (contentType.Contains("App"))
                    {
                        //App content item permission filtering by role
                        var roles = (Services.WorkContext.CurrentUser.ContentItem).As <UserRolesPart>().Roles;
                        contentItems = contentItems.Where(ci => roles.Select(x => x).Intersect((ci.As <ContentPermissionsPart>().ViewContent == null ? "0" : ci.As <ContentPermissionsPart>().ViewContent).Split(',')).Any());
                    }
                    else
                    {
                        //filter by owned items
                        //contentItems = contentItems.Where(cr => cr.As<CommonPart>().Owner.Id == Services.WorkContext.CurrentUser.Id);
                        contentItems = contentItems.Where(cr => Services.WorkContext.CurrentUser.Id == (cr.As <CommonPart>().Owner == null ? 0 : cr.As <CommonPart>().Owner.Id));
                    }
                }

                var model = new SmartContentPickerFieldViewModel
                {
                    Field = field,
                    Part = part,
                    ContentItems = _contentManager.GetMany <ContentItem>(field.Ids, VersionOptions.Published, QueryHints.Empty).ToList(),
                    AvailableContentItems = contentItems
                };

                //model.SelectedIds = string.Concat(",", field.Ids);

                return shapeHelper.EditorTemplate(TemplateName: "Fields/SmartContentPicker.Edit", Model: model, Prefix: GetPrefix(field, part));
            }));
        }
        protected override DriverResult Editor(CustomFormPart part, dynamic shapeHelper)
        {
            return(ContentShape("Parts_CustomForm_Fields", () => {
                var contentTypes = _contentDefinitionManager.ListTypeDefinitions().Select(x => x.Name).OrderBy(x => x);
                var viewModel = new CustomFormPartEditViewModel {
                    ContentTypes = contentTypes,
                    CustomFormPart = part
                };

                return shapeHelper.EditorTemplate(TemplateName: "Parts.CustomForm.Fields", Model: viewModel, Prefix: Prefix);
            }));
        }
示例#10
0
        public int Create()
        {
            foreach (var typeDefinition in _contentDefinitionManager.ListTypeDefinitions())
            {
                if (typeDefinition.Settings.ContainsKey("ContentTypeSettings.Creatable") && Convert.ToBoolean(typeDefinition.Settings["ContentTypeSettings.Creatable"], CultureInfo.InvariantCulture))
                {
                    typeDefinition.Settings["ContentTypeSettings.Listable"] = "True";
                    _contentDefinitionManager.StoreTypeDefinition(typeDefinition);
                }
            }

            return(1);
        }
        public void GetNavigation(NavigationBuilder builder)
        {
            // if the user may edit at least one type of Listable content,
            // we add the link to the admin menu for them
            var contentTypeDefinitions = _contentDefinitionManager
                                         .ListTypeDefinitions()
                                         .OrderBy(d => d.Name);
            var listableContentTypes = contentTypeDefinitions
                                       .Where(ctd => ctd
                                              .Settings
                                              .GetModel <ContentTypeSettings>()
                                              .Listable);
            ContentItem listableCi = null;

            foreach (var contentTypeDefinition in listableContentTypes)
            {
                listableCi = _contentManager.New(contentTypeDefinition.Name);
                if (_authorizer.Authorize(Permissions.EditContent, listableCi))
                {
                    builder.Add(T("Content"),
                                menu => menu
                                .Add(T("Advanced Search"), "0.5", item => item.Action("List", "Admin", new { area = "Laser.Orchard.AdvancedSearch" }).LocalNav())
                                );
                    break;
                }
            }
        }
示例#12
0
        public override IDisplayResult Edit(MenuPart part)
        {
            return(Initialize <MenuPartEditViewModel>("MenuPart_Edit", async model =>
            {
                var menuItemContentTypes = _contentDefinitionManager.ListTypeDefinitions().Where(t => t.GetSettings <ContentTypeSettings>().Stereotype == "MenuItem");
                var notify = false;

                foreach (var menuItem in part.ContentItem.As <MenuItemsListPart>().MenuItems)
                {
                    if (!menuItemContentTypes.Any(c => c.Name == menuItem.ContentType))
                    {
                        _logger.LogWarning("The menu item content item with id {ContentItemId} has no matching {ContentType} content type definition.", menuItem.ContentItem.ContentItemId, menuItem.ContentItem.ContentType);
                        await _notifier.WarningAsync(H["The menu item content item with id {0} has no matching {1} content type definition.", menuItem.ContentItem.ContentItemId, menuItem.ContentItem.ContentType]);
                        notify = true;
                    }
                }

                if (notify)
                {
                    await _notifier.WarningAsync(H["Publishing this content item may erase created content. Fix any content type issues beforehand."]);
                }

                model.MenuPart = part;
                model.MenuItemContentTypes = menuItemContentTypes;
            }));
        }
示例#13
0
        public async Task FilterAsync(IQuery <ContentItem> query, ListContentsViewModel model, PagerParameters pagerParameters, IUpdateModel updateModel)
        {
            var viewModel = new ListPartContentAdminFilterModel();

            if (await updateModel.TryUpdateModelAsync(viewModel, ""))
            {
                // Show list content items
                if (viewModel.ShowListContentTypes)
                {
                    var listableTypes = _contentDefinitionManager
                                        .ListTypeDefinitions()
                                        .Where(x =>
                                               x.Parts.Any(p =>
                                                           p.PartDefinition.Name == nameof(ListPart)))
                                        .Select(x => x.Name);

                    query.With <ContentItemIndex>(x => x.ContentType.IsIn(listableTypes));
                }

                // Show contained elements for the specified list
                else if (viewModel.ListContentItemId != null)
                {
                    query.With <ContainedPartIndex>(x => x.ListContentItemId == viewModel.ListContentItemId);
                }
            }
        }
示例#14
0
        public override IDisplayResult Edit(ContentTypePartDefinition contentTypePartDefinition, IUpdateModel updater)
        {
            if (!String.Equals(nameof(ProjectionPart), contentTypePartDefinition.PartDefinition.Name, StringComparison.Ordinal))
            {
                return(null);
            }

            return(Initialize <ProjectionPartSettingsViewModel>("ProjectionPartSettings_Edit", model =>
            {
                model.ProjectionPartSettings = contentTypePartDefinition.GetSettings <ProjectionPartSettings>();
                model.EnablePositioning = model.ProjectionPartSettings.EnablePositioning;
                //  model.ListViewProviders = _listViewService.Providers.ToList();
                model.AdminListViewName = model.ProjectionPartSettings.AdminListViewName;
                model.PageSize = model.ProjectionPartSettings.PageSize;


                model.ContainedContentTypes = model.ProjectionPartSettings.ContainedContentTypes;
                model.ContentTypes = new NameValueCollection();

                foreach (var contentTypeDefinition in _contentDefinitionManager.ListTypeDefinitions())
                {
                    model.ContentTypes.Add(contentTypeDefinition.Name, contentTypeDefinition.DisplayName);
                }
            }).Location("Content"));
        }
        public static IEnumerable <ContentTypeDefinition> ListUserDefinedTypeDefinitions(this IContentDefinitionManager contentDefinitionManager)
        {
            var contentTypes = contentDefinitionManager.ListTypeDefinitions();
            var parts        = contentDefinitionManager.ListPartDefinitions();

            return(contentTypes.Where(t => parts.Any(p => p.Name == t.Name)));
        }
        private XElement ExportMetadata(IEnumerable <string> contentTypes)
        {
            var typesElement  = new XElement("Types");
            var partsElement  = new XElement("Parts");
            var typesToExport = _contentDefinitionManager.ListTypeDefinitions()
                                .Where(typeDefinition => contentTypes.Contains(typeDefinition.Name))
                                .ToList();
            var partsToExport = new List <string>();

            foreach (var contentTypeDefinition in typesToExport)
            {
                foreach (var contentPartDefinition in contentTypeDefinition.Parts)
                {
                    if (partsToExport.Contains(contentPartDefinition.PartDefinition.Name))
                    {
                        continue;
                    }
                    partsToExport.Add(contentPartDefinition.PartDefinition.Name);
                    partsElement.Add(_contentDefinitionWriter.Export(contentPartDefinition.PartDefinition));
                }
                typesElement.Add(_contentDefinitionWriter.Export(contentTypeDefinition));
            }

            return(new XElement("Metadata", typesElement, partsElement));
        }
        private XElement ExportMetadata(IEnumerable <string> contentTypes)
        {
            var typesElement  = new XElement("Types");
            var partsElement  = new XElement("Parts");
            var typesToExport = _contentDefinitionManager.ListTypeDefinitions()
                                .Where(typeDefinition => contentTypes.Contains(typeDefinition.Name))
                                .ToList();
            var partsToExport = new Dictionary <string, ContentPartDefinition>();

            foreach (var contentTypeDefinition in typesToExport.OrderBy(x => x.Name))
            {
                foreach (var contentPartDefinition in contentTypeDefinition.Parts.OrderBy(x => x.PartDefinition.Name))
                {
                    if (partsToExport.ContainsKey(contentPartDefinition.PartDefinition.Name))
                    {
                        continue;
                    }
                    partsToExport.Add(contentPartDefinition.PartDefinition.Name, contentPartDefinition.PartDefinition);
                }
                typesElement.Add(_contentDefinitionWriter.Export(contentTypeDefinition));
            }

            foreach (var part in partsToExport.Values.OrderBy(x => x.Name))
            {
                partsElement.Add(_contentDefinitionWriter.Export(part));
            }

            return(new XElement("ContentDefinition", typesElement, partsElement));
        }
示例#18
0
        private async Task <XRpcArray> MetaWeblogGetUserBlogsAsync(XmlRpcContext context, string userName, string password)
        {
            var user = await ValidateUserAsync(userName, password);

            XRpcArray array = new XRpcArray();

            // Look for all types using ListPart
            foreach (var type in _contentDefinitionManager.ListTypeDefinitions())
            {
                if (!type.Parts.Any(x => x.Name == nameof(ListPart)))
                {
                    continue;
                }

                foreach (var list in await _session.Query <ContentItem, ContentItemIndex>(x => x.ContentType == type.Name).ListAsync())
                {
                    // User needs to at least have permission to edit its own blog posts to access the service
                    if (await _authorizationService.AuthorizeAsync(user, Permissions.EditContent, list))
                    {
                        var metadata           = _contentManager.PopulateAspect <ContentItemMetadata>(list);
                        var displayRouteValues = metadata.DisplayRouteValues;

                        array.Add(new XRpcStruct()
                                  .Set("url", context.Url.Action(displayRouteValues["action"].ToString(), displayRouteValues["controller"].ToString(), displayRouteValues, context.HttpContext.Request.Scheme))
                                  .Set("blogid", list.ContentItemId)
                                  .Set("blogName", metadata.DisplayText));
                    }
                }
            }

            return(array);
        }
示例#19
0
 public IEnumerable <EditTypeViewModel> GetTypes()
 {
     return(_contentDefinitionManager
            .ListTypeDefinitions()
            .Select(ctd => new EditTypeViewModel(ctd))
            .OrderBy(m => m.DisplayName));
 }
示例#20
0
        public void GetNavigation(NavigationBuilder builder)
        {
            var contentTypeDefinitions = _contentDefinitionManager
                                         .ListTypeDefinitions().OrderBy(d => d.Name);
            var contentTypes = contentTypeDefinitions
                               .Where(ctd => ctd.Settings.GetModel <ContentTypeSettings>().Listable)
                               .OrderBy(ctd => ctd.DisplayName);

            if (contentTypes.Any())
            {
                builder
                .AddImageSet("content")
                .Add(T("Content"), "1.4", menu => {
                    menu.LinkToFirstChild(false);
                    foreach (var contentTypeDefinition in contentTypes)
                    {
                        if (string.Compare(
                                contentTypeDefinition.Settings["ContentTypeSettings.Listable"],
                                "true", StringComparison.OrdinalIgnoreCase) == 0)
                        {
                            ContentTypeDefinition definition = contentTypeDefinition;
                            menu.Add(T(contentTypeDefinition.DisplayName), "5", item =>
                                     item.Action("List", "Admin",
                                                 new RouteValueDictionary {
                                { "area", "Laser.Orchard.AdvancedSearch" },
                                { "model.Id", definition.Name }
                            })
                                     .Permission(DynamicPermissions.CreateDynamicPermission(
                                                     DynamicPermissions.PermissionTemplates["EditOwnContent"],
                                                     definition)));
                        }
                    }
                });
            }
        }
示例#21
0
        public override IDisplayResult Edit(ContentTypePartDefinition contentTypePartDefinition, IUpdateModel updater)
        {
            if (!String.Equals(nameof(FlowPart), contentTypePartDefinition.PartDefinition.Name))
            {
                return(null);
            }

            return(Initialize <FlowPartSettingsViewModel>("FlowPartSettings_Edit", model =>
            {
                model.FlowPartSettings = contentTypePartDefinition.GetSettings <FlowPartSettings>();
                model.ContainedContentTypes = model.FlowPartSettings.ContainedContentTypes;
                model.ContentTypes = new NameValueCollection();

                foreach (var contentTypeDefinition in _contentDefinitionManager.ListTypeDefinitions().Where(t => t.GetSettings <ContentTypeSettings>().Stereotype == "Widget"))
                {
                    model.ContentTypes.Add(contentTypeDefinition.Name, contentTypeDefinition.DisplayName);
                }

                model.Classes = model.FlowPartSettings.ContainerSettings.Classes;
                model.Display = model.FlowPartSettings.ContainerSettings.Display;
                model.Direction = model.FlowPartSettings.ContainerSettings.Direction;
                model.Wrap = model.FlowPartSettings.ContainerSettings.Wrap;
                model.JustifyContent = model.FlowPartSettings.ContainerSettings.JustifyContent;
                model.AlignItems = model.FlowPartSettings.ContainerSettings.AlignItems;
                model.AlignContent = model.FlowPartSettings.ContainerSettings.AlignContent;

                model.EnableWidgetsPicker = model.FlowPartSettings.EnableWidgetsPicker;
                model.EnableContentBlocksPicker = model.FlowPartSettings.EnableContentBlocksPicker;
                model.ContentBlocksLibraryAliasId = model.FlowPartSettings.ContentBlocksLibraryAliasId;
            }).Location("Content"));
        }
示例#22
0
        public void GetNavigation(NavigationBuilder builder)
        {
            var contentTypeDefinitions = _contentDefinitionManager.ListTypeDefinitions().OrderBy(d => d.Name);

            builder.AddImageSet("content")
            .Add(T("Content"), "1.4", menu => menu
                 .Permission(Permissions.EditOwnContent)
                 .Add(T("Content Items"), "1", item => item.Action("List", "Admin", new { area = "Contents", id = "" }).LocalNav()));
            var contentTypes = contentTypeDefinitions.Where(ctd => ctd.Settings.GetModel <ContentTypeSettings>().Creatable).OrderBy(ctd => ctd.DisplayName);

            if (contentTypes.Any())
            {
                builder.Add(T("New"), "-1", menu => {
                    menu.LinkToFirstChild(false);
                    foreach (var contentTypeDefinition in contentTypes)
                    {
                        var ci  = _contentManager.New(contentTypeDefinition.Name);
                        var cim = _contentManager.GetItemMetadata(ci);
                        var createRouteValues = cim.CreateRouteValues;
                        // review: the display name should be a LocalizedString
                        if (createRouteValues.Any())
                        {
                            menu.Add(T(contentTypeDefinition.DisplayName), "5", item => item.Action(cim.CreateRouteValues["Action"] as string, cim.CreateRouteValues["Controller"] as string, cim.CreateRouteValues)
                                     // Apply "PublishOwn" permission for the content type
                                     .Permission(DynamicPermissions.CreateDynamicPermission(DynamicPermissions.PermissionTemplates[Permissions.PublishOwnContent.Name], contentTypeDefinition)));
                        }
                    }
                });
            }
        }
        public void Describe(DescribeContext context)
        {
            Func <IShapeFactory, object> form =
                shape => {
                var f = Shape.Form(
                    Id: "AnyOfContentTypes",
                    _Parts: Shape.SelectList(
                        Id: "contenttypes", Name: "ContentTypes",
                        Title: T("Content types"),
                        Description: T("Select some content types."),
                        Size: 10,
                        Multiple: true
                        )
                    );

                f._Parts.Add(new SelectListItem {
                    Value = "", Text = T("Any").Text
                });

                foreach (var contentType in _contentDefinitionManager.ListTypeDefinitions().OrderBy(x => x.DisplayName))
                {
                    f._Parts.Add(new SelectListItem {
                        Value = contentType.Name, Text = contentType.DisplayName
                    });
                }

                return(f);
            };

            context.Form("ContentTypesFilter", form);
        }
        public IEnumerable <ContentTypeDefinition> ListRoutableTypeDefinitions()
        {
            var ctds  = _contentDefinitionManager.ListTypeDefinitions();
            var rctds = ctds.Where(ctd => _options.ContentTypeOptions.Any(o => o.ContentType == ctd.Name));

            return(rctds);
        }
示例#25
0
        public override IDisplayResult Edit(ContentTypePartDefinition contentTypePartDefinition, IUpdateModel updater)
        {
            if (!String.Equals(nameof(CrossReferencePart), contentTypePartDefinition.PartDefinition.Name, StringComparison.Ordinal))
            {
                return(null);
            }

            return(Initialize <CrossReferencePartSettingsViewModel>("CrossReferencePartSettings_Edit", model =>
            {
                model.CrossReferencePartSettings = contentTypePartDefinition.GetSettings <CrossReferencePartSettings>();
                model.PageSize = model.CrossReferencePartSettings.PageSize;
                model.ContainedContentTypes = model.CrossReferencePartSettings.ContainedContentTypes;
                model.ContentTypes = new NameValueCollection();
                // model.PagerSlimDisabled = model.CrossReferencePartSettings.PagerSlimDisabled;

                foreach (var contentTypeDefinition in _contentDefinitionManager.ListTypeDefinitions())
                {
                    model.ContentTypes.Add(contentTypeDefinition.Name, contentTypeDefinition.DisplayName);
                }
                model.EnablePositioning = model.CrossReferencePartSettings.EnablePositioning;
                model.AllowUserToSwitchListViews = model.CrossReferencePartSettings.AllowUserToSwitchListViews;
                model.AllowUserToSwitchListViewsFrontEnd = model.CrossReferencePartSettings.AllowUserToSwitchListViewsFrontEnd;
                model.AllowUserToAddChildItems = model.CrossReferencePartSettings.AllowUserToAddChildItems;
                model.ShowLatestVersion = model.CrossReferencePartSettings.ShowLatestVersion;
                model.ListViewProviders = _listViewService.Providers.ToList();
                model.AdminListViewName = model.CrossReferencePartSettings.AdminListViewName;
                model.FrontEndListViewName = model.CrossReferencePartSettings.FrontEndListViewName;
                model.FrontEndListViews = model.CrossReferencePartSettings.FrontEndListViews;
                model.Relation = model.CrossReferencePartSettings.Relation;
            }).Location("Content"));
        }
 public IList <ContentTypeDefinition> GetSettingsTypes()
 {
     return(_contentDefinitionManager
            .ListTypeDefinitions()
            .Where(x => x.Settings.ToObject <ContentTypeSettings>().Stereotype == "CustomSettings")
            .ToArray());
 }
        /// <summary>
        /// Migrate existing ContentPart settings to WithSettings<typeparamref name="TSettings"/>
        /// This method will be removed in a future release.
        /// </summary>
        /// <typeparam name="TPart"></typeparam>
        /// <typeparam name="TSettings"></typeparam>
        /// <param name="manager"></param>
        public static void MigratePartSettings <TPart, TSettings>(this IContentDefinitionManager manager)
            where TPart : ContentPart where TSettings : class
        {
            var contentTypes = manager.ListTypeDefinitions();

            foreach (var contentType in contentTypes)
            {
                var partDefinition = contentType.Parts.FirstOrDefault(x => x.PartDefinition.Name == typeof(TPart).Name);
                if (partDefinition != null)
                {
                    var existingSettings = partDefinition.Settings.ToObject <TSettings>();

                    // Remove existing properties from JObject
                    var properties = typeof(TSettings).GetProperties();
                    foreach (var property in properties)
                    {
                        partDefinition.Settings.Remove(property.Name);
                    }

                    // Apply existing settings to type definition WithSettings<T>
                    manager.AlterTypeDefinition(contentType.Name, typeBuilder =>
                    {
                        typeBuilder.WithPart(partDefinition.Name, partBuilder =>
                        {
                            partBuilder.WithSettings(existingSettings);
                        });
                    });
                }
            }
        }
        public override async Task <IDisplayResult> EditAsync(TermContainerPart part, BuildPartEditorContext context)
        {
            var taxonomyIdViewModel = new TaxonomyPartIdViewModel();

            if (await context.Updater.TryUpdateModelAsync(taxonomyIdViewModel) &&
                !String.IsNullOrEmpty(taxonomyIdViewModel.TaxonomyContentItemId))
            {
                // By design only supports the first field using the contained editor.
                var selectables = _contentDefinitionManager.ListTypeDefinitions()
                                  .SelectMany(ctd => ctd.Parts.Where(p => p.PartDefinition.Fields.Any(f => f.FieldDefinition.Name == nameof(TaxonomyField) &&
                                                                                                      f.GetSettings <TaxonomyFieldSettings>().TaxonomyContentItemId == taxonomyIdViewModel.TaxonomyContentItemId &&
                                                                                                      f.Editor() == "Contained")));

                var entries = selectables.Select(ctd => new ContentTypeEntryViewModel
                {
                    ContentTypeName        = ctd.ContentTypeDefinition.Name,
                    IsSelected             = part.ContainedContentTypes.Any(selected => String.Equals(selected, ctd.ContentTypeDefinition.Name, StringComparison.OrdinalIgnoreCase)),
                    ContentTypeDisplayName = ctd.ContentTypeDefinition.DisplayName
                }).ToArray();

                return(Initialize <TermContainerPartViewModel>("TermContainerPart", model =>
                {
                    model.TermContainerPart = part;
                    model.Multiple = part.Multiple;
                    model.ContainedContentTypes = entries;
                }));
            }
            else
            {
                return(null);
            }
        }
示例#29
0
 private IEnumerable <string> GetContentTypes()
 {
     return(_contentDefinitionManager
            .ListTypeDefinitions()
            .Select(t => t.Name)
            .OrderBy(x => x));
 }
        public async Task FilterAsync(ContentOptionsViewModel model, IQuery <ContentItem> query, IUpdateModel updater)
        {
            var viewModel = new LocalizationContentsAdminFilterViewModel();

            if (await updater.TryUpdateModelAsync(viewModel, "Localization"))
            {
                // Show localization content items
                // This is intended to be used by adding ?Localization.ShowLocalizedContentTypes to an AdminMenu url.
                if (viewModel.ShowLocalizedContentTypes)
                {
                    var localizedTypes = _contentDefinitionManager
                                         .ListTypeDefinitions()
                                         .Where(x =>
                                                x.Parts.Any(p =>
                                                            p.PartDefinition.Name == nameof(LocalizationPart)))
                                         .Select(x => x.Name);

                    query.With <ContentItemIndex>(x => x.ContentType.IsIn(localizedTypes));
                }

                // Show contained elements for the specified culture
                else if (!String.IsNullOrEmpty(viewModel.SelectedCulture))
                {
                    query.With <LocalizedContentItemIndex>(i => (i.Published || i.Latest) && i.Culture == viewModel.SelectedCulture);
                }
            }
        }