Exemple #1
0
        private List <SitemapItem> GetArchiveItems(Guid id, int level)
        {
            var model = new List <SitemapItem>();
            var posts = api.Posts.GetAll(id).Where(p => p.Published <= DateTime.Now).ToList();

            for (int i = 0; i < posts.Count; i++)
            {
                DynamicPost item   = posts[i];
                var         smItem = new SitemapItem
                {
                    ParentId        = id,
                    SortOrder       = i,
                    Title           = item.Title,
                    NavigationTitle = item.Title,
                    PageTypeName    = item.TypeId,
                    Permalink       = item.Permalink,
                    Published       = item.Published,
                    Created         = item.Created,
                    LastModified    = item.LastModified,
                    Id    = item.Id,
                    Level = level + 1
                };
                model.Add(smItem);
            }
            return(model);
        }
Exemple #2
0
        private PostEditModel Transform(DynamicPost post, bool isDraft)
        {
            var config = new Config(_api);
            var type   = App.PostTypes.GetById(post.TypeId);
            var route  = type.Routes.FirstOrDefault(r => r.Route == post.Route) ?? type.Routes.FirstOrDefault();

            var model = new PostEditModel
            {
                Id                     = post.Id,
                BlogId                 = post.BlogId,
                TypeId                 = post.TypeId,
                PrimaryImage           = post.PrimaryImage,
                Title                  = post.Title,
                Slug                   = post.Slug,
                MetaTitle              = post.MetaTitle,
                MetaKeywords           = post.MetaKeywords,
                MetaDescription        = post.MetaDescription,
                OgTitle                = post.OgTitle,
                OgDescription          = post.OgDescription,
                OgImage                = post.OgImage,
                Excerpt                = post.Excerpt,
                Published              = post.Published?.ToString("yyyy-MM-dd HH:mm"),
                RedirectUrl            = post.RedirectUrl,
                RedirectType           = post.RedirectType.ToString(),
                EnableComments         = post.EnableComments,
                CloseCommentsAfterDays = post.CloseCommentsAfterDays,
                CommentCount           = post.CommentCount,
                State                  = post.GetState(isDraft),
                UseBlocks              = type.UseBlocks,
                UsePrimaryImage        = type.UsePrimaryImage,
                UseExcerpt             = type.UseExcerpt,
                UseHtmlExcerpt         = config.HtmlExcerpt,
                SelectedRoute          = route == null ? null : new RouteModel
                {
                    Title = route.Title,
                    Route = route.Route
                },
                Permissions = App.Permissions
                              .GetPublicPermissions()
                              .Select(p => new KeyValuePair <string, string>(p.Name, p.Title))
                              .ToList(),
                SelectedPermissions = post.Permissions
            };

            foreach (var r in type.Routes)
            {
                model.Routes.Add(new RouteModel
                {
                    Title = r.Title,
                    Route = r.Route
                });
            }

            foreach (var regionType in type.Regions)
            {
                var region = new RegionModel
                {
                    Meta = new RegionMeta
                    {
                        Id           = regionType.Id,
                        Name         = regionType.Title,
                        Description  = regionType.Description,
                        Placeholder  = regionType.ListTitlePlaceholder,
                        IsCollection = regionType.Collection,
                        Expanded     = regionType.ListExpand,
                        Icon         = regionType.Icon,
                        Display      = regionType.Display.ToString().ToLower()
                    }
                };
                var regionListModel = ((IDictionary <string, object>)post.Regions)[regionType.Id];

                if (!regionType.Collection)
                {
                    var regionModel = (IRegionList)Activator.CreateInstance(typeof(RegionList <>).MakeGenericType(regionListModel.GetType()));
                    regionModel.Add(regionListModel);
                    regionListModel = regionModel;
                }

                foreach (var regionModel in (IEnumerable)regionListModel)
                {
                    var regionItem = new RegionItemModel();

                    foreach (var fieldType in regionType.Fields)
                    {
                        var appFieldType = App.Fields.GetByType(fieldType.Type);

                        var field = new FieldModel
                        {
                            Meta = new FieldMeta
                            {
                                Id          = fieldType.Id,
                                Name        = fieldType.Title,
                                Component   = appFieldType.Component,
                                Placeholder = fieldType.Placeholder,
                                IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth),
                                Description = fieldType.Description
                            }
                        };

                        if (typeof(SelectFieldBase).IsAssignableFrom(appFieldType.Type))
                        {
                            foreach (var item in ((SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items)
                            {
                                field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title);
                            }
                        }

                        if (regionType.Fields.Count > 1)
                        {
                            field.Model = (IField)((IDictionary <string, object>)regionModel)[fieldType.Id];

                            if (regionType.ListTitleField == fieldType.Id)
                            {
                                regionItem.Title        = field.Model.GetTitle();
                                field.Meta.NotifyChange = true;
                            }
                        }
                        else
                        {
                            field.Model             = (IField)regionModel;
                            field.Meta.NotifyChange = true;
                            regionItem.Title        = field.Model.GetTitle();
                        }
                        regionItem.Fields.Add(field);
                    }

                    if (string.IsNullOrWhiteSpace(regionItem.Title))
                    {
                        regionItem.Title = "...";
                    }

                    region.Items.Add(regionItem);
                }
                model.Regions.Add(region);
            }

            foreach (var block in post.Blocks)
            {
                var blockType = App.Blocks.GetByType(block.Type);

                if (block is BlockGroup blockGroup)
                {
                    var group = new BlockGroupModel
                    {
                        Id   = block.Id,
                        Type = block.Type,
                        Meta = new BlockMeta
                        {
                            Name        = blockType.Name,
                            Icon        = blockType.Icon,
                            Component   = "block-group",
                            IsGroup     = true,
                            isCollapsed = config.ManagerDefaultCollapsedBlocks,
                            ShowHeader  = !config.ManagerDefaultCollapsedBlockGroupHeaders
                        }
                    };

                    if (blockType.Display != BlockDisplayMode.MasterDetail)
                    {
                        group.Meta.Component = blockType.Display == BlockDisplayMode.Horizontal ?
                                               "block-group-horizontal" : "block-group-vertical";
                    }

                    group.Fields = ContentUtils.GetBlockFields(block);

                    bool firstChild = true;
                    foreach (var child in blockGroup.Items)
                    {
                        blockType = App.Blocks.GetByType(child.Type);

                        if (!blockType.IsGeneric)
                        {
                            group.Items.Add(new BlockItemModel
                            {
                                IsActive = firstChild,
                                Model    = child,
                                Meta     = new BlockMeta
                                {
                                    Name      = blockType.Name,
                                    Title     = child.GetTitle(),
                                    Icon      = blockType.Icon,
                                    Component = blockType.Component
                                }
                            });
                        }
                        else
                        {
                            // Generic block item model
                            group.Items.Add(new BlockGenericModel
                            {
                                IsActive = firstChild,
                                Model    = ContentUtils.GetBlockFields(child),
                                Type     = child.Type,
                                Meta     = new BlockMeta
                                {
                                    Name      = blockType.Name,
                                    Title     = child.GetTitle(),
                                    Icon      = blockType.Icon,
                                    Component = blockType.Component,
                                }
                            });
                        }
                        firstChild = false;
                    }
                    model.Blocks.Add(group);
                }
                else
                {
                    if (!blockType.IsGeneric)
                    {
                        // Regular block item model
                        model.Blocks.Add(new BlockItemModel
                        {
                            Model = block,
                            Meta  = new BlockMeta
                            {
                                Name        = blockType.Name,
                                Title       = block.GetTitle(),
                                Icon        = blockType.Icon,
                                Component   = blockType.Component,
                                isCollapsed = config.ManagerDefaultCollapsedBlocks
                            }
                        });
                    }
                    else
                    {
                        // Generic block item model
                        model.Blocks.Add(new BlockGenericModel
                        {
                            Model = ContentUtils.GetBlockFields(block),
                            Type  = block.Type,
                            Meta  = new BlockMeta
                            {
                                Name        = blockType.Name,
                                Title       = block.GetTitle(),
                                Icon        = blockType.Icon,
                                Component   = blockType.Component,
                                isCollapsed = config.ManagerDefaultCollapsedBlocks
                            }
                        });
                    }
                }
            }

            // Custom editors
            foreach (var editor in type.CustomEditors)
            {
                model.Editors.Add(new EditorModel
                {
                    Component = editor.Component,
                    Icon      = editor.Icon,
                    Name      = editor.Title
                });
            }
            return(model);
        }
Exemple #3
0
        private PostEditModel Transform(DynamicPost post, bool isDraft)
        {
            var type = App.PostTypes.GetById(post.TypeId);

            var model = new PostEditModel
            {
                Id              = post.Id,
                BlogId          = post.BlogId,
                TypeId          = post.TypeId,
                Title           = post.Title,
                Slug            = post.Slug,
                MetaKeywords    = post.MetaKeywords,
                MetaDescription = post.MetaDescription,
                Published       = post.Published.HasValue ? post.Published.Value.ToString("yyyy-MM-dd HH:mm") : null,
                RedirectUrl     = post.RedirectUrl,
                RedirectType    = post.RedirectType.ToString(),
                State           = GetState(post, isDraft),
                UseBlocks       = type.UseBlocks
            };

            foreach (var regionType in type.Regions)
            {
                var region = new RegionModel
                {
                    Meta = new RegionMeta
                    {
                        Id           = regionType.Id,
                        Name         = regionType.Title,
                        Description  = regionType.Description,
                        Placeholder  = regionType.ListTitlePlaceholder,
                        IsCollection = regionType.Collection,
                        Icon         = regionType.Icon,
                        Display      = regionType.Display.ToString().ToLower()
                    }
                };
                var regionListModel = ((IDictionary <string, object>)post.Regions)[regionType.Id];

                if (!regionType.Collection)
                {
                    var regionModel = (IRegionList)Activator.CreateInstance(typeof(RegionList <>).MakeGenericType(regionListModel.GetType()));
                    regionModel.Add(regionListModel);
                    regionListModel = regionModel;
                }

                foreach (var regionModel in (IEnumerable)regionListModel)
                {
                    var regionItem = new RegionItemModel();

                    foreach (var fieldType in regionType.Fields)
                    {
                        var appFieldType = App.Fields.GetByType(fieldType.Type);

                        var field = new FieldModel
                        {
                            Meta = new FieldMeta
                            {
                                Id          = fieldType.Id,
                                Name        = fieldType.Title,
                                Component   = appFieldType.Component,
                                Placeholder = fieldType.Placeholder,
                                IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth),
                                Description = fieldType.Description
                            }
                        };

                        if (typeof(Extend.Fields.SelectFieldBase).IsAssignableFrom(appFieldType.Type))
                        {
                            foreach (var item in ((Extend.Fields.SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items)
                            {
                                field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title);
                            }
                        }

                        if (regionType.Fields.Count > 1)
                        {
                            field.Model = (Extend.IField)((IDictionary <string, object>)regionModel)[fieldType.Id];

                            if (regionType.ListTitleField == fieldType.Id)
                            {
                                regionItem.Title        = field.Model.GetTitle();
                                field.Meta.NotifyChange = true;
                            }
                        }
                        else
                        {
                            field.Model             = (Extend.IField)regionModel;
                            field.Meta.NotifyChange = true;
                            regionItem.Title        = field.Model.GetTitle();
                        }
                        regionItem.Fields.Add(field);
                    }

                    if (string.IsNullOrWhiteSpace(regionItem.Title))
                    {
                        regionItem.Title = "...";
                    }

                    region.Items.Add(regionItem);
                }
                model.Regions.Add(region);
            }

            foreach (var block in post.Blocks)
            {
                var blockType = App.Blocks.GetByType(block.Type);

                if (block is Extend.BlockGroup)
                {
                    var group = new BlockGroupModel
                    {
                        Id   = block.Id,
                        Type = block.Type,
                        Meta = new BlockMeta
                        {
                            Name      = blockType.Name,
                            Icon      = blockType.Icon,
                            Component = "block-group",
                            IsGroup   = true
                        }
                    };

                    if (blockType.Display != BlockDisplayMode.MasterDetail)
                    {
                        group.Meta.Component = blockType.Display == BlockDisplayMode.Horizontal ?
                                               "block-group-horizontal" : "block-group-vertical";
                    }

                    foreach (var prop in block.GetType().GetProperties(App.PropertyBindings))
                    {
                        if (typeof(Extend.IField).IsAssignableFrom(prop.PropertyType))
                        {
                            var fieldType = App.Fields.GetByType(prop.PropertyType);

                            group.Fields.Add(new FieldModel
                            {
                                Model = (Extend.IField)prop.GetValue(block),
                                Meta  = new FieldMeta
                                {
                                    Id        = prop.Name,
                                    Name      = prop.Name,
                                    Component = fieldType.Component,
                                }
                            });
                        }
                    }

                    bool firstChild = true;
                    foreach (var child in ((Extend.BlockGroup)block).Items)
                    {
                        blockType = App.Blocks.GetByType(child.Type);

                        group.Items.Add(new BlockItemModel
                        {
                            IsActive = firstChild,
                            Model    = child,
                            Meta     = new BlockMeta
                            {
                                Name      = blockType.Name,
                                Title     = child.GetTitle(),
                                Icon      = blockType.Icon,
                                Component = blockType.Component
                            }
                        });
                        firstChild = false;
                    }
                    model.Blocks.Add(group);
                }
                else
                {
                    model.Blocks.Add(new BlockItemModel
                    {
                        Model = block,
                        Meta  = new BlockMeta
                        {
                            Name      = blockType.Name,
                            Title     = block.GetTitle(),
                            Icon      = blockType.Icon,
                            Component = blockType.Component
                        }
                    });
                }
            }

            // Custom editors
            foreach (var editor in type.CustomEditors)
            {
                model.Editors.Add(new EditorModel
                {
                    Component = editor.Component,
                    Icon      = editor.Icon,
                    Name      = editor.Title
                });
            }
            return(model);
        }