public ActionResult Add(int? parentId = null)
        {
            String baseUrl = "/";
            if (parentId.HasValue)
            {
                LayersCmsPage parent = _pageReads.GetById(parentId.Value);
                if (parent != null)
                {
                    baseUrl = parent.Url;

                    // Insert a forward slash at the end of the url if one hasn't already been set
                    if (!baseUrl.EndsWith("/"))
                        baseUrl = baseUrl + "/";
                }
            }

            // Create the default model
            var model = new CmsPageModel()
                {
                    Active = true,
                    ParentId = parentId,
                    ShowInNavigation = true,
                    Url = baseUrl // Should always start with a forward slash
                };

            return View(model);
        }
        public ActionResult Add(CmsPageModel model)
        {
            if (ModelState.IsValid)
            {
                // Check that the url is unique
                if (_pageReads.GetByUrl(model.Url) != null)
                {
                    ModelState.AddModelError("Url", "This url is already in use. Please enter a different url");
                }

                // Check if any further validation errors have been applied
                if (ModelState.IsValid)
                {
                    // All validation passed
                    // Insert the new record
                    _pageWrites.Insert(new LayersCmsPage()
                        {
                            Active = model.Active,
                            Content = model.Content,
                            CustomScripts = model.CustomScripts,
                            DisplayName = model.DisplayName,
                            MetaDescription = model.MetaDescription,
                            MetaKeywords = model.MetaKeywords,
                            ParentId = model.ParentId,
                            PageTitle = model.PageTitle,
                            PublishEnd = MergeDateAndTime(model.PublishEndDate, model.PublishEndTime),
                            PublishStart = MergeDateAndTime(model.PublishStartDate, model.PublishStartTime),
                            RedirectTypeEnum = RedirectTypeEnum.None,
                            RedirectUrl = null,
                            ShowInNavigation = model.ShowInNavigation,
                            SortOrder = _pageReads.GetMaxSortOrderForParent(model.ParentId),
                            Url = model.Url,
                            WindowTitle = model.WindowTitle
                        });

                    // Redirect to the listing page
                    return RedirectToAction("List");
                }

            }

            // Validation failed, show the original view with errors
            return View();
        }
        public ActionResult Edit(int id, CmsPageModel model)
        {
            if (ModelState.IsValid)
            {
                // Check that the url is unique
                LayersCmsPage pageWithSameUrl = _pageReads.GetByUrl(model.Url);
                if (pageWithSameUrl != null && pageWithSameUrl.Id != id)
                {
                    ModelState.AddModelError("Url", "This url is already in use. Please enter a different url");
                }

                // Check if any further validation errors have been applied
                if (ModelState.IsValid)
                {
                    // All validation passed
                    // Update the record
                    LayersCmsPage existingPage = _pageReads.GetById(id);

                    existingPage.Active = model.Active;
                    existingPage.Content = model.Content;
                    existingPage.CustomScripts = model.CustomScripts;
                    existingPage.DisplayName = model.DisplayName;
                    existingPage.MetaDescription = model.MetaDescription;
                    existingPage.MetaKeywords = model.MetaKeywords;
                    existingPage.ParentId = model.ParentId;
                    existingPage.PageTitle = model.PageTitle;
                    existingPage.PublishEnd = MergeDateAndTime(model.PublishEndDate, model.PublishEndTime);
                    existingPage.PublishStart = MergeDateAndTime(model.PublishStartDate, model.PublishStartTime);
                    existingPage.RedirectTypeEnum = RedirectTypeEnum.None; // Not yet implemented
                    existingPage.RedirectUrl = null; // Not yet implemented
                    existingPage.ShowInNavigation = model.ShowInNavigation;
                    existingPage.Url = model.Url;
                    existingPage.WindowTitle = model.WindowTitle;

                    _pageWrites.Update(existingPage);

                    // Redirect to the listing page
                    return RedirectToAction("List");
                }

            }

            // Validation failed, show the original view with errors
            return View(model);
        }
        public ActionResult Edit(int id)
        {
            LayersCmsPage pageToEdit = _pageReads.GetById(id);

            // Return to the list page if the id is invalid
            if (pageToEdit == null)
                return RedirectToAction("List");

            // Create the view model from the database page
            var model = new CmsPageModel()
                {
                    Active = pageToEdit.Active,
                    Content = pageToEdit.Content,
                    CustomScripts = pageToEdit.CustomScripts,
                    DisplayName = pageToEdit.DisplayName,
                    Id = pageToEdit.Id,
                    MetaDescription = pageToEdit.MetaDescription,
                    MetaKeywords = pageToEdit.MetaKeywords,
                    PageTitle = pageToEdit.PageTitle,
                    ParentId = pageToEdit.ParentId,
                    PublishEndDate = pageToEdit.PublishEnd,
                    PublishEndTime = (pageToEdit.PublishEnd.HasValue ? pageToEdit.PublishEnd.Value.ToString("HH:mm") : null),
                    PublishStartDate = pageToEdit.PublishStart,
                    PublishStartTime = (pageToEdit.PublishStart.HasValue ? pageToEdit.PublishStart.Value.ToString("HH:mm") : null),
                    RedirectType = pageToEdit.RedirectType,
                    RedirectUrl = pageToEdit.RedirectUrl,
                    ShowInNavigation = pageToEdit.ShowInNavigation,
                    Url = pageToEdit.Url,
                    WindowTitle = pageToEdit.WindowTitle
                };

            return View(model);
        }