示例#1
0
        /// <summary>
        /// Saves all of the regions from the source model into the destination.
        /// </summary>
        /// <param name="src">The source</param>
        /// <param name="dest">The destination</param>
        private static void SaveRegions(PageEditModel src, Piranha.Models.PageModel dest)
        {
            var modelRegions = (IDictionary <string, object>)dest.Regions;

            foreach (var region in src.Regions)
            {
                if (region is PageEditRegion)
                {
                    if (!modelRegions.ContainsKey(region.Id))
                    {
                        modelRegions[region.Id] = Piranha.Models.PageModel.CreateRegion(dest.TypeId, region.Id);
                    }

                    var reg = (PageEditRegion)region;

                    if (reg.FieldSet.Count == 1)
                    {
                        modelRegions[region.Id] = reg.FieldSet[0].Value;
                    }
                    else
                    {
                        var modelFields = (IDictionary <string, object>)modelRegions[region.Id];

                        foreach (var field in reg.FieldSet)
                        {
                            modelFields[field.Id] = field.Value;
                        }
                    }
                }
                else
                {
                    if (modelRegions.ContainsKey(region.Id))
                    {
                        var list = (Piranha.Models.IRegionList)modelRegions[region.Id];
                        var reg  = (PageEditRegionCollection)region;

                        // At this point we clear the values and rebuild them
                        list.Clear();

                        foreach (var set in reg.FieldSets)
                        {
                            if (set.Count == 1)
                            {
                                list.Add(set[0].Value);
                            }
                            else
                            {
                                var modelFields = (IDictionary <string, object>)Piranha.Models.PageModel.CreateRegion(dest.TypeId, region.Id);

                                foreach (var field in set)
                                {
                                    modelFields[field.Id] = field.Value;
                                }
                                list.Add(modelFields);
                            }
                        }
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Localizes the client page model depending on the current UI culture.
        /// </summary>
        /// <param name="model">The page model</param>
        public static void LocalizePageModel(Piranha.Models.PageModel model)
        {
            var def = Utils.GetDefaultCulture();

            //
            // Check that we have a culture other than the default culture
            //
            if (def.Name != CultureInfo.CurrentUICulture.Name)
            {
                var js = new JavaScriptSerializer();

                using (var db = new Db()) {
                    var translation = db.PageTranslations
                                      .Include(p => p.Regions)
                                      .Where(p => p.PageId == model.Page.Id && !p.IsDraft)
                                      .SingleOrDefault();

                    // Map page values
                    ((Piranha.Models.Page)model.Page).Title           = translation.Title;
                    ((Piranha.Models.Page)model.Page).NavigationTitle = translation.NavigationTitle;
                    ((Piranha.Models.Page)model.Page).Keywords        = translation.Keywords;
                    ((Piranha.Models.Page)model.Page).Description     = translation.Description;

                    // Map regions
                    foreach (var reg in translation.Regions)
                    {
                        var template = Piranha.Models.RegionTemplate.GetSingle(reg.TemplateId);
                        if (template != null)
                        {
                            var    internalId = template.InternalId;
                            var    type       = Extend.ExtensionManager.Current.GetType(reg.Type);
                            object val        = null;

                            if (typeof(IHtmlString).IsAssignableFrom(type))
                            {
                                val = new HtmlString(reg.Body);
                            }
                            else
                            {
                                val = js.Deserialize(reg.Body, type);

                                val = ((Extend.IExtension)val).GetContent(model);
                            }
                            ((IDictionary <string, object>)model.Regions)[internalId] = val;
                        }
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// Loads all of the regions from the source model into the destination.
        /// </summary>
        /// <param name="src">The source</param>
        /// <param name="dest">The destination</param>
        private static void LoadRegions(Piranha.Models.PageModel src, PageEditModel dest)
        {
            if (dest.PageType != null)
            {
                foreach (var region in dest.PageType.Regions)
                {
                    var regions = (IDictionary <string, object>)src.Regions;

                    if (regions.ContainsKey(region.Id))
                    {
                        PageEditRegionBase editRegion;

                        if (region.Collection)
                        {
                            editRegion = new PageEditRegionCollection();
                        }
                        else
                        {
                            editRegion = new PageEditRegion();
                        }
                        editRegion.Id      = region.Id;
                        editRegion.Title   = region.Title ?? region.Id;
                        editRegion.CLRType = editRegion.GetType().FullName;

                        IList items = new List <object>();

                        if (region.Collection)
                        {
                            items = (IList)regions[region.Id];
                        }
                        else
                        {
                            items.Add(regions[region.Id]);
                        }

                        foreach (var item in items)
                        {
                            if (region.Fields.Count == 1)
                            {
                                editRegion.Add(new PageEditFieldSet()
                                {
                                    new PageEditField()
                                    {
                                        Id      = region.Fields[0].Id,
                                        Title   = region.Fields[0].Title ?? region.Fields[0].Id,
                                        CLRType = item.GetType().FullName,
                                        Value   = (Extend.IField)item
                                    }
                                });
                            }
                            else
                            {
                                var fieldData = (IDictionary <string, object>)item;
                                var fieldSet  = new PageEditFieldSet();

                                foreach (var field in region.Fields)
                                {
                                    if (fieldData.ContainsKey(field.Id))
                                    {
                                        fieldSet.Add(new PageEditField()
                                        {
                                            Id      = field.Id,
                                            Title   = field.Title ?? field.Id,
                                            CLRType = fieldData[field.Id].GetType().FullName,
                                            Value   = (Extend.IField)fieldData[field.Id]
                                        });
                                    }
                                }
                                editRegion.Add(fieldSet);
                            }
                        }
                        dest.Regions.Add(editRegion);
                    }
                }
            }
        }