public ActionResult Create(PageManageModel model, SubmitTypeEnums submit) { if (ModelState.IsValid) { var response = _pageServices.SavePageManageModel(model); if (response.Success) { var pageId = (int)response.Data; SetSuccessMessage(response.Message); switch (submit) { case SubmitTypeEnums.Save: return RedirectToAction("Index"); default: return RedirectToAction("Edit", new { id = pageId }); } } SetErrorMessage(response.Message); } model.Parents = _pageTemplateServices.GetPossibleParents(); model.Positions = EnumUtilities.GetSelectListFromEnum<PageEnums.PositionEnums>(); model.RelativePages = _pageServices.GetRelativePages(model.Id, model.ParentId); model.StatusList = _pageServices.GetStatus(); model.PageTemplates = _pageTemplateServices.GetPageTemplateSelectList(model.PageTemplateId); return View(model); }
/// <summary> /// Save page manage model /// </summary> /// <param name="model"></param> /// <returns></returns> public ResponseModel SavePageManageModel(PageManageModel model) { Page relativePage; ResponseModel response; var page = GetById(model.Id); #region Edit Page if (page != null) { var pageLog = new PageLogManageModel(page); page.Title = model.Title; page.PageTemplateId = model.PageTemplateId; page.FileTemplateId = model.FileTemplateId; page.Status = model.Status; //Set content & caption base on status if (model.Status == (int)PageEnums.PageStatusEnums.Draft) { page.ContentWorking = model.Content; page.CaptionWorking = model.Caption; } else { page.Content = model.Content; page.Caption = model.Caption; } var currentTags = page.PageTags.Select(t => t.TagId).ToList(); foreach (var id in currentTags.Where(id => model.Tags == null || !model.Tags.Contains(id))) { _pageTagRepository.Delete(page.Id, id); } if (model.Tags != null && model.Tags.Any()) { foreach (var tagId in model.Tags) { if (currentTags.All(n => n != tagId)) { var pageTag = new PageTag { PageId = page.Id, TagId = tagId }; _pageTagRepository.Insert(pageTag); } } } page.StartPublishingDate = model.StartPublishingDate; page.EndPublishingDate = model.EndPublishingDate; //Parse friendly url page.FriendlyUrl = string.IsNullOrWhiteSpace(model.FriendlyUrl) ? model.Title.ToUrlString() : model.FriendlyUrl.ToUrlString(); //Get page record order relativePage = GetById(model.RelativePageId); if (relativePage != null) { /* * If position is not changed, donot need to update order of relative pages * If position is changed, check if position is before or after and update the record other of all relative pages */ var relativePages = Fetch(p => p.Id != page.Id && relativePage.ParentId.HasValue ? p.ParentId == relativePage.ParentId : p.ParentId == null) .OrderBy(p => p.RecordOrder); if (model.Position == (int)PageEnums.PositionEnums.Before) { if (page.RecordOrder > relativePage.RecordOrder || relativePages.Any(p => p.RecordOrder > page.RecordOrder && p.RecordOrder < relativePage.RecordOrder)) { page.RecordOrder = relativePage.RecordOrder; var query = string.Format( "Update Pages set RecordOrder = RecordOrder + 1 Where {0} And RecordOrder >= {1}", relativePage.ParentId.HasValue ? string.Format(" ParentId = {0}", relativePage.ParentId) : "ParentId Is NULL", relativePage.RecordOrder); _pageRepository.ExcuteSql(query); } } else { if (page.RecordOrder < relativePage.RecordOrder || relativePages.Any(p => p.RecordOrder < page.RecordOrder && p.RecordOrder > relativePage.RecordOrder)) { page.RecordOrder = relativePage.RecordOrder + 1; var query = string.Format( "Update Pages set RecordOrder = RecordOrder + 1 Where {0} And RecordOrder > {1}", relativePage.ParentId.HasValue ? string.Format(" ParentId = {0}", relativePage.ParentId) : "ParentId Is NULL", relativePage.RecordOrder); _pageRepository.ExcuteSql(query); } } } page.ParentId = model.ParentId; response = HierarchyUpdate(page); if (response.Success) { _clientMenuServices.SavePageToClientMenu(page.Id); _pageLogServices.SavePageLog(pageLog); } return response.SetMessage(response.Success ? _localizedResourceServices.T("AdminModule:::Pages:::Messages:::UpdateSuccessfully:::Update page successfully.") : _localizedResourceServices.T("AdminModule:::Pages:::Messages:::UpdateFailure:::Update page failed. Please try again later.")); } #endregion page = new Page { Title = model.Title, Status = model.Status, Content = model.Content, Caption = model.Caption, ParentId = model.ParentId, RecordOrder = 0, PageTemplateId = model.PageTemplateId, FileTemplateId = model.FileTemplateId, FriendlyUrl = string.IsNullOrWhiteSpace(model.FriendlyUrl) ? model.Title.ToUrlString() : model.FriendlyUrl.ToUrlString() }; //Set content & caption base on status if (model.Status == (int)PageEnums.PageStatusEnums.Draft) { page.ContentWorking = model.Content; page.CaptionWorking = model.Caption; } //Get page record order relativePage = GetById(model.RelativePageId); if (relativePage != null) { if (model.Position == (int)PageEnums.PositionEnums.Before) { page.RecordOrder = relativePage.RecordOrder; var query = string.Format( "Update Pages set RecordOrder = RecordOrder + 1 Where {0} And RecordOrder >= {1}", relativePage.ParentId.HasValue ? string.Format(" ParentId = {0}", relativePage.ParentId) : "ParentId Is NULL", relativePage.RecordOrder); _pageRepository.ExcuteSql(query); } else { page.RecordOrder = relativePage.RecordOrder + 1; var query = string.Format( "Update Pages set RecordOrder = RecordOrder + 1 Where {0} And RecordOrder > {1}", relativePage.ParentId.HasValue ? string.Format(" ParentId = {0}", relativePage.ParentId) : "ParentId Is NULL", relativePage.RecordOrder); _pageRepository.ExcuteSql(query); } } response = HierarchyInsert(page); if (response.Success) { _clientMenuServices.SavePageToClientMenu(response.Data.ToInt()); } return response.SetMessage(response.Success ? _localizedResourceServices.T("AdminModule:::Pages:::Messages:::CreateSuccessfully:::Create page successfully.") : _localizedResourceServices.T("AdminModule:::Pages:::Messages:::CreateFailure:::Create page failed. Please try again later.")); }