Exemple #1
0
        /// <summary>
        /// Creates a new block of the specified type.
        /// </summary>
        /// <param name="type">The block type</param>
        /// <returns>The new block</returns>
        public BlockEditModel CreateBlock(string type)
        {
            var blockType = App.Blocks.GetByType(type);

            if (blockType != null)
            {
                var block = (Extend.Block)_factory.CreateBlock(type);

                if (block is Extend.BlockGroup)
                {
                    var item = new BlockEditModel
                    {
                        Meta = new ContentMeta
                        {
                            Name      = blockType.Name,
                            Title     = block.GetTitle(),
                            Icon      = blockType.Icon,
                            Component = "block-group"
                        }
                    };

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


                    var groupItem = new BlockGroupEditModel
                    {
                        Type = block.Type
                    };

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

                            groupItem.Fields.Add(new FieldEditModel
                            {
                                Type  = fieldType.TypeName,
                                Model = (Extend.IField)prop.GetValue(block),
                                Meta  = new FieldMeta
                                {
                                    Name      = prop.Name,
                                    Component = fieldType.Component,
                                }
                            });
                        }
                    }
                    item.Model = groupItem;

                    return(item);
                }
                else
                {
                    return(new BlockEditModel
                    {
                        Model = block,
                        Meta = new ContentMeta
                        {
                            Name = blockType.Name,
                            Title = block.GetTitle(),
                            Icon = blockType.Icon,
                            Component = blockType.Component
                        }
                    });
                }
            }
            return(null);
        }
Exemple #2
0
        public async Task <PageEditModel> GetById(Guid id)
        {
            var page = await _api.Pages.GetByIdAsync(id);

            if (page != null)
            {
                var type = App.PageTypes.GetById(page.TypeId);

                var model = new PageEditModel
                {
                    Id              = page.Id,
                    SiteId          = page.SiteId,
                    ParentId        = page.ParentId,
                    SortOrder       = page.SortOrder,
                    TypeId          = page.TypeId,
                    Title           = page.Title,
                    NavigationTitle = page.NavigationTitle,
                    Slug            = page.Slug,
                    MetaKeywords    = page.MetaKeywords,
                    MetaDescription = page.MetaDescription,
                    Published       = page.Published.HasValue ? page.Published.Value.ToString("yyyy-MM-dd HH:mm") : null
                };

                foreach (var regionType in type.Regions)
                {
                    var region = new RegionEditModel
                    {
                        Meta = new RegionMeta
                        {
                            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>)page.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 RegionItemEditModel();

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

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

                            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 page.Blocks)
                {
                    var blockType = App.Blocks.GetByType(block.Type);

                    if (block is Extend.BlockGroup)
                    {
                        var group = new BlockEditModel
                        {
                            Meta = new ContentMeta
                            {
                                Name      = blockType.Name,
                                Icon      = blockType.Icon,
                                Component = "block-group"
                            }
                        };

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

                        var groupItem = new BlockGroupEditModel
                        {
                            Type = block.Type
                        };

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

                                groupItem.Fields.Add(new FieldEditModel
                                {
                                    Type  = fieldType.TypeName,
                                    Model = (Extend.IField)prop.GetValue(block),
                                    Meta  = new FieldMeta
                                    {
                                        Name      = prop.Name,
                                        Component = fieldType.Component,
                                    }
                                });
                            }
                        }

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

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