public async Task <IActionResult> Edit(int pageId) { var cmsPage = await _context.CMSPage.SingleOrDefaultAsync(p => p.PageId == pageId); if (cmsPage == null) { return(NotFound()); } // build view model incorporating history and versions CMSViewModel model = new CMSViewModel() { Page = cmsPage }; var q = from h in _context.CMSPageHistory join u in _context.Users on h.ModifiedBy equals u.Id where h.PageId == cmsPage.PageId orderby h.ModifiedDate descending select new CMSPageHistoryViewModel() { ItemId = h.ItemId, PageId = h.PageId, Status = h.Status, Title = h.Title, Url = h.Url, ModifiedDate = h.ModifiedDate, ModifiedBy = h.ModifiedBy, ModifiedByName = string.Format("{0} {1}", u.FirstName, u.LastName), VersionId = h.VersionId }; model.History = await q.ToListAsync(); model.Versions = await _context.CMSPageVersion.Where(p => p.PageId == cmsPage.PageId && p.Status == 1).OrderByDescending(v => v.VersionId).ToListAsync(); model.Content = model.Versions.Count() > 0 ? model.Versions.OrderByDescending(v => v.VersionId).First().Content : string.Empty; // if the url was passed in via the context, use the render view, otherwise show the detail view return(View(model)); }
public async Task <IActionResult> Save(int pageId) { var cmsPage = await _context.CMSPage.SingleOrDefaultAsync(p => p.PageId == pageId); if (cmsPage == null) { return(NotFound()); } // check if anything has changed, and if everything looks ok if (ModelState.IsValid && ( cmsPage.Title != Request.Form["Page.Title"] || cmsPage.Url != Request.Form["Page.Url"] || cmsPage.Status != (Core.Enums.CMS.PageStatus) int.Parse(Request.Form["Page.Status"]) )) { try { cmsPage.Title = Request.Form["Page.Title"]; cmsPage.Url = Request.Form["Page.Url"]; cmsPage.Status = (Core.Enums.CMS.PageStatus) int.Parse(Request.Form["Page.Status"]); cmsPage.ModifiedDate = DateTime.Now; _context.Update(cmsPage); // add the history item for this update CMSPageHistory cmsPageHistory = new CMSPageHistory(); cmsPageHistory.VersionId = cmsPage.VersionId; cmsPageHistory.PageId = cmsPage.PageId; cmsPageHistory.Title = cmsPage.Title; cmsPageHistory.Url = cmsPage.Url; cmsPageHistory.Status = cmsPage.Status; cmsPageHistory.ModifiedBy = _userManager.GetUserId(User); cmsPageHistory.ModifiedDate = DateTime.Now; _context.Add(cmsPageHistory); // write changes to the database await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!CMSPageExists(cmsPage.Url)) { return(NotFound()); } else { throw; } } // update sitemap.json Core.Sitemap.Rebuild(_context); return(RedirectToAction("Index")); } // if we're still here then something is wrong, so build the view model incorporating history and versions CMSViewModel model = new CMSViewModel() { Page = cmsPage }; var q = from h in _context.CMSPageHistory join u in _context.Users on h.ModifiedBy equals u.Id where h.PageId == cmsPage.PageId orderby h.ModifiedDate descending select new CMSPageHistoryViewModel() { ItemId = h.ItemId, PageId = h.PageId, Status = h.Status, Title = h.Title, Url = h.Url, ModifiedDate = h.ModifiedDate, ModifiedBy = h.ModifiedBy, ModifiedByName = string.Format("{0} {1}", u.FirstName, u.LastName), VersionId = h.VersionId }; model.History = await q.ToListAsync(); model.Versions = await _context.CMSPageVersion.Where(p => p.PageId == cmsPage.PageId && p.Status == 1).OrderByDescending(v => v.VersionId).ToListAsync(); model.Content = model.Versions.Count() > 0 ? model.Versions.OrderByDescending(v => v.VersionId).First().Content : string.Empty; model.Page.Title = Request.Form["Page.Title"]; model.Page.Url = Request.Form["Page.Url"]; model.Page.Status = (Core.Enums.CMS.PageStatus) int.Parse(Request.Form["Page.Status"]); // if the url was passed in via the context, use the render view, otherwise show the detail view return(View("Edit", model)); }