public async Task <ContentEditModel> Save(ContentEditModel model) { try { await _content.SaveAsync(model); } catch (ValidationException e) { model.Status = new StatusMessage { Type = StatusMessage.Error, Body = e.Message }; return(model); } var ret = await _content.GetByIdAsync(model.Id, model.LanguageId); ret.Status = new StatusMessage { Type = StatusMessage.Success, Body = "The content was successfully saved" }; return(ret); }
public ActionResult EditContent(ContentEditModel contentEdit) { var modelId = contentEdit.ModelData["id"]; // Get the model. var model = (new ExampleRepository()).LoadModel(); // Check the property to change. if (contentEdit.PropertyName == "Title") { model.Title = contentEdit.NewValue; } else if (contentEdit.PropertyName == "Subtitle") { model.Subtitle = contentEdit.NewValue; } else if (contentEdit.PropertyName == "ParagraphText") { model.ParagraphText = contentEdit.NewValue; } else if (contentEdit.PropertyName == "Counter") { model.Counter = int.Parse(contentEdit.NewValue); } // Save the changes. (new ExampleRepository()).SaveModel(model); return(Json(new { success = true })); }
public ActionResult Create(ContentEditModel model) { if (!ModelState.IsValid) { return(View(model)); } try { model = _contentService.SaveModel(model, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId); model = new ContentEditModel { FeedbackMessage = FeedbackMessageModel.CreateSuccessMessage("Content Saved successfully! Create another.") }; ModelState.Clear(); return(View(model)); } catch (Exception ex) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(string.Format("System Failure! Message: {0}", ex.Message)); _logger.Info(string.Format("Create New Content {0}! Message: {1} \nStackTrace: {2}", model.Title, ex.Message, ex.StackTrace)); return(View(model)); } }
public ContentEditModel SaveModel(ContentEditModel model, long orgRoleUserId) { var obj = Mapper.Map <ContentEditModel, Content>(model); if (model.Id > 0) { var inDb = _contentRepository.Get(model.Id); obj.DataRecorderMetaData = inDb.DataRecorderMetaData; obj.DataRecorderMetaData.DateModified = DateTime.Now; obj.DataRecorderMetaData.DataRecorderModifier = new OrganizationRoleUser(orgRoleUserId); } else { obj.DataRecorderMetaData = new DataRecorderMetaData { DateCreated = DateTime.Now, DataRecorderCreator = new OrganizationRoleUser(orgRoleUserId) }; } obj = _contentRepository.Save(obj); return(Mapper.Map <Content, ContentEditModel>(obj)); }
/// <summary> /// Transform content to a edit model. /// </summary> /// <param name="content">The dynamic content object</param> /// <returns>Edit model</returns> private async Task <ContentEditModel> Transform(DynamicContent content) { var config = new Config(_api); var type = App.ContentTypes.GetById(content.TypeId); var languages = await _api.Languages.GetAllAsync(); var categories = await _api.Content.GetAllCategoriesAsync(type.Group); var tags = await _api.Content.GetAllTagsAsync(type.Group); var model = new ContentEditModel { Id = content.Id, TypeId = content.TypeId, PrimaryImage = content.PrimaryImage, Title = content.Title, Excerpt = content.Excerpt, UseBlocks = type.UseBlocks, UseCategory = type.UseCategory, UseTags = type.UseTags, UsePrimaryImage = type.UsePrimaryImage, UseExcerpt = type.UseExcerpt, UseHtmlExcerpt = config.HtmlExcerpt, UseTranslations = languages.Count() > 1, Languages = languages, SelectedCategory = type.UseCategory ? content.Category?.Title : null, SelectedTags = type.UseTags ? content.Tags.Select(t => t.Title).ToList() : null, Categories = categories.Select(c => c.Title).ToList(), Tags = tags.Select(c => c.Title).ToList() }; foreach (var regionType in type.Regions) { var region = new Models.Content.RegionModel { Meta = new Models.Content.RegionMeta { Id = regionType.Id, Name = regionType.Title, Description = regionType.Description, Placeholder = regionType.ListTitlePlaceholder, IsCollection = regionType.Collection, Expanded = regionType.ListExpand, Icon = regionType.Icon, Display = regionType.Display.ToString().ToLower() } }; var regionListModel = ((IDictionary <string, object>)content.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 Models.Content.RegionItemModel(); foreach (var fieldType in regionType.Fields) { var appFieldType = App.Fields.GetByType(fieldType.Type); var field = new Models.Content.FieldModel { Meta = new Models.Content.FieldMeta { Id = fieldType.Id, Name = fieldType.Title, Component = appFieldType.Component, Placeholder = fieldType.Placeholder, IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth), IsTranslatable = typeof(ITranslatable).IsAssignableFrom(appFieldType.Type), Description = fieldType.Description, Settings = fieldType.Settings } }; if (typeof(SelectFieldBase).IsAssignableFrom(appFieldType.Type)) { foreach (var item in ((SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items) { field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title); } } if (regionType.Fields.Count > 1) { field.Model = (IField)((IDictionary <string, object>)regionModel)[fieldType.Id]; if (regionType.ListTitleField == fieldType.Id) { regionItem.Title = field.Model.GetTitle(); field.Meta.NotifyChange = true; } } else { field.Model = (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); } if (type.UseBlocks) { model.UseBlocks = true; foreach (var block in content.Blocks) { var blockType = App.Blocks.GetByType(block.Type); if (block is BlockGroup) { var group = new Models.Content.BlockGroupModel { Id = block.Id, Type = block.Type, Meta = new Models.Content.BlockMeta { Name = blockType.Name, Icon = blockType.Icon, Component = blockType.Component, Width = blockType.Width.ToString().ToLower(), IsGroup = true, isCollapsed = config.ManagerDefaultCollapsedBlocks, ShowHeader = !config.ManagerDefaultCollapsedBlockGroupHeaders } }; group.Fields = ContentUtils.GetBlockFields(block); bool firstChild = true; foreach (var child in ((BlockGroup)block).Items) { blockType = App.Blocks.GetByType(child.Type); if (!blockType.IsGeneric) { // Regular block item model group.Items.Add(new Models.Content.BlockItemModel { IsActive = firstChild, Model = child, Meta = new Models.Content.BlockMeta { Name = blockType.Name, Title = child.GetTitle(), Icon = blockType.Icon, Component = blockType.Component, Width = blockType.Width.ToString().ToLower() } }); } else { // Generic block item model group.Items.Add(new Models.Content.BlockGenericModel { Id = child.Id, IsActive = firstChild, Model = ContentUtils.GetBlockFields(child), Type = child.Type, Meta = new Models.Content.BlockMeta { Name = blockType.Name, Title = child.GetTitle(), Icon = blockType.Icon, Component = blockType.Component, Width = blockType.Width.ToString().ToLower() } }); } firstChild = false; } model.Blocks.Add(group); } else { if (!blockType.IsGeneric) { // Regular block item model model.Blocks.Add(new Models.Content.BlockItemModel { Model = block, Meta = new Models.Content.BlockMeta { Name = blockType.Name, Title = block.GetTitle(), Icon = blockType.Icon, Component = blockType.Component, Width = blockType.Width.ToString().ToLower(), isCollapsed = config.ManagerDefaultCollapsedBlocks } }); } else { // Generic block item model model.Blocks.Add(new Models.Content.BlockGenericModel { Id = block.Id, Model = ContentUtils.GetBlockFields(block), Type = block.Type, Meta = new Models.Content.BlockMeta { Name = blockType.Name, Title = block.GetTitle(), Icon = blockType.Icon, Component = blockType.Component, Width = blockType.Width.ToString().ToLower(), isCollapsed = config.ManagerDefaultCollapsedBlocks } }); } } } } // Custom editors foreach (var editor in type.CustomEditors) { model.Editors.Add(new Models.Content.EditorModel { Component = editor.Component, Icon = editor.Icon, Name = editor.Title }); } return(model); }
/// <summary> /// Save content /// </summary> /// <param name="model">The edit model</param> public async Task SaveAsync(ContentEditModel model) { var contentType = App.ContentTypes.GetById(model.TypeId); if (contentType != null) { if (model.Id == Guid.Empty) { model.Id = Guid.NewGuid(); } var content = await _api.Content.GetByIdAsync(model.Id, model.LanguageId); if (content == null) { content = await _factory.CreateAsync <DynamicContent>(contentType); content.Id = model.Id; } content.TypeId = model.TypeId; content.Title = model.Title; content.Excerpt = model.Excerpt; content.PrimaryImage = model.PrimaryImage; // Save category if (contentType.UseCategory) { content.Category = new Taxonomy { Title = model.SelectedCategory }; } // Save tags if (contentType.UseTags) { content.Tags.Clear(); foreach (var tag in model.SelectedTags) { content.Tags.Add(new Taxonomy { Title = tag }); } } // Save regions foreach (var region in contentType.Regions) { var modelRegion = model.Regions .FirstOrDefault(r => r.Meta.Id == region.Id); if (region.Collection) { var listRegion = (IRegionList)((IDictionary <string, object>)content.Regions)[region.Id]; listRegion.Clear(); foreach (var item in modelRegion.Items) { if (region.Fields.Count == 1) { listRegion.Add(item.Fields[0].Model); } else { var postRegion = new ExpandoObject(); foreach (var field in region.Fields) { var modelField = item.Fields .FirstOrDefault(f => f.Meta.Id == field.Id); ((IDictionary <string, object>)postRegion)[field.Id] = modelField.Model; } listRegion.Add(postRegion); } } } else { var postRegion = ((IDictionary <string, object>)content.Regions)[region.Id]; if (region.Fields.Count == 1) { ((IDictionary <string, object>)content.Regions)[region.Id] = modelRegion.Items[0].Fields[0].Model; } else { foreach (var field in region.Fields) { var modelField = modelRegion.Items[0].Fields .FirstOrDefault(f => f.Meta.Id == field.Id); ((IDictionary <string, object>)postRegion)[field.Id] = modelField.Model; } } } } // Save blocks content.Blocks.Clear(); foreach (var block in model.Blocks) { if (block is Models.Content.BlockGroupModel blockGroup) { var groupType = App.Blocks.GetByType(blockGroup.Type); if (groupType != null) { var pageBlock = (BlockGroup)Activator.CreateInstance(groupType.Type); pageBlock.Id = blockGroup.Id; pageBlock.Type = blockGroup.Type; foreach (var field in blockGroup.Fields) { var prop = pageBlock.GetType().GetProperty(field.Meta.Id, App.PropertyBindings); prop.SetValue(pageBlock, field.Model); } foreach (var item in blockGroup.Items) { if (item is Models.Content.BlockItemModel blockItem) { pageBlock.Items.Add(blockItem.Model); } else if (item is Models.Content.BlockGenericModel blockGeneric) { var transformed = ContentUtils.TransformGenericBlock(blockGeneric); if (transformed != null) { pageBlock.Items.Add(transformed); } } } content.Blocks.Add(pageBlock); } } else if (block is Models.Content.BlockItemModel blockItem) { content.Blocks.Add(blockItem.Model); } else if (block is Models.Content.BlockGenericModel blockGeneric) { var transformed = ContentUtils.TransformGenericBlock(blockGeneric); if (transformed != null) { content.Blocks.Add(transformed); } } } // Save content await _api.Content.SaveAsync(content, model.LanguageId); } else { throw new ValidationException("Invalid Content Type."); } }
/// <summary> /// Transform content to a edit model. /// </summary> /// <param name="content">The dynamic content object</param> /// <returns>Edit model</returns> private ContentEditModel Transform(DynamicContent content) { var config = new Config(_api); var type = App.ContentTypes.GetById(content.TypeId); var model = new ContentEditModel { Id = content.Id, TypeId = content.TypeId, PrimaryImage = content.PrimaryImage, Title = content.Title, UsePrimaryImage = type.UsePrimaryImage, UseExcerpt = type.UseExcerpt, UseHtmlExcerpt = config.HtmlExcerpt }; foreach (var regionType in type.Regions) { var region = new Models.Content.RegionModel { Meta = new Models.Content.RegionMeta { Id = regionType.Id, Name = regionType.Title, Description = regionType.Description, Placeholder = regionType.ListTitlePlaceholder, IsCollection = regionType.Collection, Expanded = regionType.ListExpand, Icon = regionType.Icon, Display = regionType.Display.ToString().ToLower() } }; var regionListModel = ((IDictionary <string, object>)content.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 Models.Content.RegionItemModel(); foreach (var fieldType in regionType.Fields) { var appFieldType = App.Fields.GetByType(fieldType.Type); var field = new Models.Content.FieldModel { Meta = new Models.Content.FieldMeta { Id = fieldType.Id, Name = fieldType.Title, Component = appFieldType.Component, Placeholder = fieldType.Placeholder, IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth), Description = fieldType.Description } }; if (typeof(SelectFieldBase).IsAssignableFrom(appFieldType.Type)) { foreach (var item in ((SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items) { field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title); } } if (regionType.Fields.Count > 1) { field.Model = (IField)((IDictionary <string, object>)regionModel)[fieldType.Id]; if (regionType.ListTitleField == fieldType.Id) { regionItem.Title = field.Model.GetTitle(); field.Meta.NotifyChange = true; } } else { field.Model = (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); } // Custom editors foreach (var editor in type.CustomEditors) { model.Editors.Add(new Models.Content.EditorModel { Component = editor.Component, Icon = editor.Icon, Name = editor.Title }); } return(model); }
/// <summary> /// Save content /// </summary> /// <param name="model">The edit model</param> public async Task SaveAsync(ContentEditModel model) { var contentType = App.ContentTypes.GetById(model.TypeId); if (contentType != null) { if (model.Id == Guid.Empty) { model.Id = Guid.NewGuid(); } var content = await _api.Content.GetByIdAsync(model.Id); if (content == null) { content = await _factory.CreateAsync <DynamicContent>(contentType); content.Id = model.Id; } content.TypeId = model.TypeId; content.Title = model.Title; content.Excerpt = model.Excerpt; content.PrimaryImage = model.PrimaryImage; // Save regions foreach (var region in contentType.Regions) { var modelRegion = model.Regions .FirstOrDefault(r => r.Meta.Id == region.Id); if (region.Collection) { var listRegion = (IRegionList)((IDictionary <string, object>)content.Regions)[region.Id]; listRegion.Clear(); foreach (var item in modelRegion.Items) { if (region.Fields.Count == 1) { listRegion.Add(item.Fields[0].Model); } else { var postRegion = new ExpandoObject(); foreach (var field in region.Fields) { var modelField = item.Fields .FirstOrDefault(f => f.Meta.Id == field.Id); ((IDictionary <string, object>)postRegion)[field.Id] = modelField.Model; } listRegion.Add(postRegion); } } } else { var postRegion = ((IDictionary <string, object>)content.Regions)[region.Id]; if (region.Fields.Count == 1) { ((IDictionary <string, object>)content.Regions)[region.Id] = modelRegion.Items[0].Fields[0].Model; } else { foreach (var field in region.Fields) { var modelField = modelRegion.Items[0].Fields .FirstOrDefault(f => f.Meta.Id == field.Id); ((IDictionary <string, object>)postRegion)[field.Id] = modelField.Model; } } } } // Save content await _api.Content.SaveAsync(content); } else { throw new ValidationException("Invalid Content Type."); } }