/// <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); } } } } } }
/// <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; } } } } }
/// <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); } } } }