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;
        }
Exemplo n.º 2
0
        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 });
        }