public static TemplateEditViewModel ToServiceModel(this SaveLayoutModel model) { var serviceModel = new TemplateEditViewModel(); serviceModel.Version = model.Version; serviceModel.Name = model.Name; serviceModel.Url = model.LayoutPath; serviceModel.PreviewImageUrl = model.PreviewUrl; if (model.Options != null) { serviceModel.Options = model.Options.ToServiceModel(); } if (model.Regions != null) { serviceModel.Regions = model .Regions .Select(r => new TemplateRegionItemViewModel { Description = r.Description, Identifier = r.RegionIdentifier }) .ToList(); } return serviceModel; }
public ActionResult RegisterTemplate(TemplateEditViewModel model) { if (ModelState.IsValid) { var viewEngineResult = ViewEngines.Engines.FindView(ControllerContext, model.Url, null); if (viewEngineResult == null || viewEngineResult.View == null) { Messages.AddError(string.Format(PagesGlobalization.SaveTemplate_VirtualPathNotExists_Message, model.Url)); return Json(new WireJson { Success = false }); } if (model.Regions != null && model.Regions.GroupBy(r => r.Identifier).SelectMany(g => g.Skip(1)).Any()) { Messages.AddError(PagesGlobalization.SaveTemplate_DublicateRegionIdentificator_Message); return Json(new WireJson { Success = false }); } var response = GetCommand<SaveTemplateCommand>().ExecuteCommand(model); if (response != null) { if (model.Id.HasDefaultValue()) { Messages.AddSuccess(PagesGlobalization.SaveTemplate_CreatedSuccessfully_Message); } return Json(new WireJson { Success = true, Data = response }); } } return Json(new WireJson { Success = false }); }
/// <summary> /// Saves the layout. /// </summary> /// <param name="model">The model.</param> /// <param name="treatNullsAsLists">if set to <c>true</c> treat null lists as empty lists.</param> /// <param name="createIfNotExists">if set to <c>true</c> create if not exists.</param> /// <returns> /// Saved layout entity /// </returns> public Layout SaveLayout(TemplateEditViewModel model, bool treatNullsAsLists = true, bool createIfNotExists = false) { if (model.Options != null) { optionService.ValidateOptionKeysUniqueness(model.Options); } unitOfWork.BeginTransaction(); var isNew = model.Id.HasDefaultValue(); Layout template = null; if (!isNew) { template = repository.AsQueryable<Layout>() .Where(f => f.Id == model.Id) .FetchMany(f => f.LayoutRegions) .ToList() .FirstOrDefault(); isNew = template == null; if (isNew && !createIfNotExists) { throw new EntityNotFoundException(typeof(Layout), model.Id); } } if (template == null) { template = new Layout { Id = model.Id }; } else if (model.Version > 0) { template.Version = model.Version; } template.Name = model.Name; template.LayoutPath = model.Url; template.PreviewUrl = model.PreviewImageUrl; // Set null list as empty if (treatNullsAsLists) { model.Options = model.Options ?? new List<OptionViewModel>(); model.Regions = model.Regions ?? new List<TemplateRegionItemViewModel>(); } // Edits or removes regions. if (model.Regions != null) { if (template.LayoutRegions != null && template.LayoutRegions.Any()) { foreach (var region in template.LayoutRegions) { var requestRegion = model.Regions != null ? model.Regions.FirstOrDefault(f => f.Identifier.ToLowerInvariant() == region.Region.RegionIdentifier.ToLowerInvariant()) : null; if (requestRegion != null && region.Region.RegionIdentifier.ToLowerInvariant() == requestRegion.Identifier.ToLowerInvariant()) { region.Description = requestRegion.Description; repository.Save(region); } else { repository.Delete(region); } } } if (template.LayoutRegions == null) { template.LayoutRegions = new List<LayoutRegion>(); } var regions = GetRegions(model.Regions); foreach (var requestRegionOption in model.Regions) { if (!template.LayoutRegions.Any(f => f.Region.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase))) { var region = regions.Find(f => f.RegionIdentifier.Equals(requestRegionOption.Identifier, StringComparison.InvariantCultureIgnoreCase)); if (region == null) { if (requestRegionOption.Description == null) { requestRegionOption.Description = string.Empty; } var regionOption = new Region { RegionIdentifier = requestRegionOption.Identifier }; template.LayoutRegions.Add(new LayoutRegion { Description = requestRegionOption.Description, Region = regionOption, Layout = template }); repository.Save(regionOption); } else { var layoutRegion = new LayoutRegion { Description = requestRegionOption.Description, Region = region, Layout = template }; template.LayoutRegions.Add(layoutRegion); repository.Save(layoutRegion); } } } } if (model.Options != null) { optionService.SetOptions<LayoutOption, Layout>(template, model.Options); } repository.Save(template); unitOfWork.Commit(); // Notify if (isNew) { Events.PageEvents.Instance.OnLayoutCreated(template); } else { Events.PageEvents.Instance.OnLayoutUpdated(template); } return template; }
public ActionResult RegisterTemplate(TemplateEditViewModel model) { if (ModelState.IsValid) { if (model.Regions != null && model.Regions.GroupBy(r => r.Identifier).SelectMany(g => g.Skip(1)).Any()) { Messages.AddError(PagesGlobalization.SaveTemplate_DublicateRegionIdentificator_Message); return Json(new WireJson { Success = false }); } var response = GetCommand<SaveTemplateCommand>().ExecuteCommand(model); if (response != null) { if (model.Id.HasDefaultValue()) { Messages.AddSuccess(PagesGlobalization.SaveTemplate_CreatedSuccessfully_Message); } return Json(new WireJson { Success = true, Data = response }); } } return Json(new WireJson { Success = false }); }