public ActionResult Add(PageCreateEditModel model)
        {
            var canPublish = _cmsAuthorization.RequestPermission(CMSPermissions.PublishPage);

            if (ModelState.IsValid)
            {
                if (model.IsApproved)
                    model.IsApproved = canPublish;

                var p = MapPage(model);
                var slug = _pageService.CreateAndValidateSlug(p, false);
                if (!string.IsNullOrEmpty(slug))
                {
                    _pageService.CreatePage(p);
                    var url = Url.Content("~" + p.Path);
                    var contentModel = new ContentPage(p,url);
                    if (Request.IsAjaxRequest())
                        return Json(contentModel);
                }
                else
                {
                    ModelState.AddModelError("","The title specified would result in a duplicate page.  Choose another parent page or modify the slug property.");
                }
            }

            return View(model);
        }
        public ActionResult Add(Guid? parentId)
        {
            var canPublish = _cmsAuthorization.RequestPermission(CMSPermissions.PublishPage);

            var model = new PageCreateEditModel();
            model.ParentId = parentId ?? PageConstants.DefaultPageId;
            model.IsApproved = canPublish;
            model.PublishDateUtc = Client.LocalNow(this.HttpContext);

            return View("AddEdit",model);
        }
        private Page MapPage(PageCreateEditModel model)
        {
            Page p;
            if (model.Id.HasValue)
                p = _pageService.GetPage(model.Id.Value);
            else
            {
                p = new Page();
                p.Id = Guid.NewGuid();
            }
            p.ParentId = model.ParentId;
            p.Title = HttpUtility.HtmlEncode(model.Title);
            p.HtmlDescription = model.HtmlDescription;
            p.CreateDateUtc = DateTime.UtcNow;
            p.IsHomePage = model.IsHomePage;
            if (model.PublishDateUtc.HasValue)
            {
                var offset = Client.GetClientTimezoneOffsetInMinutes(this.HttpContext);
                p.PublishDateUtc = model.PublishDateUtc.Value.AddMinutes(offset);
              //  p.PublishDateUtc = model.PublishDateUtc;
            }
            else
            {
                p.PublishDateUtc = DateTime.UtcNow;
            }

            p.MetaDescription = model.MetaDescription;
            p.MetaKeywords = model.MetaKeywords;
            p.IsApproved = model.IsApproved;
            p.IsActive = true;

            if (!model.Id.HasValue)
            {

                if (!string.IsNullOrEmpty(model.Slug))
                    p.Slug = model.Slug;
                else
                {
                    p.Slug = _formatter.CreateSlug(model.Title, 45);
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(model.Slug))
                    p.Slug = model.Slug.Trim();
            }

            p.LastUpdateDateUtc = p.CreateDateUtc;

            return p;
        }
        public ActionResult Edit(Guid id)
        {
            if (!_cmsAuthorization.RequestPermission(CMSPermissions.EditPage))
                throw new HttpException(403, "Access Denied");

            var canPublish = _cmsAuthorization.RequestPermission(CMSPermissions.PublishPage);

            var page = _pageService.GetPage(id);
            if (page == null)
                throw new HttpException(404, "Page does not exist");

            var model = new PageCreateEditModel(page, this.HttpContext);
            model.IsApproved = canPublish;
            return View("AddEdit",model);
        }