Пример #1
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Alias,Name,Weight,PageContent")] PageEditViewModel newPage)
        {
            if (id != newPage.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                Page page = newPage.GetModelByViewModel();

                try
                {
                    db.Update(page);
                    await db.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PageExists(page.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("List"));
            }
            return(View(newPage));
        }
Пример #2
0
        public ViewResult Create()
        {
            var model = new PageEditViewModel {
                Page  = new Page(),
                Pages = _pRepo.Pages
            };

            return(View("Edit", model));
        }
Пример #3
0
        public ActionResult Create(string Tab)
        {
            Page page = GStoreDb.Pages.Create();

            page.SetDefaultsForNew(CurrentStoreFrontOrThrow.CurrentConfig());
            PageEditViewModel viewModel = new PageEditViewModel(page, isStoreAdminEdit: true, isCreatePage: true, activeTab: Tab);

            return(View("Create", viewModel));
        }
Пример #4
0
        public ViewResult Edit(int pageId)
        {
            var model = new PageEditViewModel {
                Page  = _pRepo.Pages.FirstOrDefault(s => s.PageID == pageId),
                Pages = _pRepo.Pages.Where(c => c.PageID != pageId)
            };

            return(View(model));
        }
Пример #5
0
        /// <summary>
        ///     创一个<see cref="PageEditViewModel{TDto, TKey}"/>实例。一般用于 Edit Action。
        /// </summary>
        /// <param name="model">数据传输对象。</param>
        /// <returns></returns>
        public virtual async Task <PageEditViewModel <TDto, TKey> > CreateEditModelAsync(TDto model)
        {
            var editModel = new PageEditViewModel <TDto, TKey>(model,
                                                               EntityControllerDescriptor.EntityMetadata.EditPropertyMetadatas)
            {
                Title =
                    ((await Repository.SingleByIdAsync(model.Id)) == null ? "新增" : "编辑") +
                    (EntityControllerDescriptor.PageConfig.Title ?? typeof(TEntity).Name)
            };

            return(editModel);
        }
Пример #6
0
 public CreateOrUpdatePageRequest(
     string projectId,
     string userName,
     PageEditViewModel viewModel,
     IPage page,
     ModelStateDictionary modelState
     )
 {
     ProjectId  = projectId;
     UserName   = userName;
     ViewModel  = viewModel;
     Page       = page;
     ModelState = modelState;
 }
Пример #7
0
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var page = await PageEditViewModel.GetViewModelByModelId(id);

            if (page == null)
            {
                return(NotFound());
            }
            return(View(page));
        }
Пример #8
0
        public async Task <IActionResult> CreateOrEdit(PageEditViewModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                if (!string.IsNullOrWhiteSpace(model.CssContent))
                {
                    var uglifyTest = Uglify.Css(model.CssContent);
                    if (uglifyTest.HasErrors)
                    {
                        foreach (var err in uglifyTest.Errors)
                        {
                            ModelState.AddModelError(model.CssContent, err.ToString());
                        }
                        return(BadRequest(ModelState));
                    }
                }

                var req = new UpdatePageRequest
                {
                    HtmlContent     = model.RawHtmlContent,
                    CssContent      = model.CssContent,
                    HideSidebar     = model.HideSidebar,
                    Slug            = model.Slug,
                    MetaDescription = model.MetaDescription,
                    Title           = model.Title,
                    IsPublished     = model.IsPublished
                };

                var uid = model.Id == Guid.Empty ?
                          await _pageService.CreateAsync(req) :
                          await _pageService.UpdateAsync(model.Id, req);

                _cache.Remove(CacheDivision.Page, req.Slug.ToLower());

                return(Json(new { PageId = uid }));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error Create or Edit CustomPage.");
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(e.Message));
            }
        }
Пример #9
0
        public ActionResult Edit(int id)
        {
            var model = db.pages.Find(id);

            if (model == null)
            {
                return(HttpNotFound());
            }

            var viewModel = new PageEditViewModel();

            viewModel.PageId      = model.PageId;
            viewModel.Page        = model.PageName;
            viewModel.IsPublished = model.IsPublished ? "A" : "I";

            return(View(viewModel));
        }
Пример #10
0
        /// <summary>
        ///     创建一个<see cref="PageEditViewModel{TDto, TKey}"/>实例。一般用于 Detail Action。
        /// </summary>
        /// <param name="id">实体主键。</param>
        /// <returns></returns>
        public virtual async Task <PageEditViewModel <TDto, TKey> > CreateDetailModelAsync(string id)
        {
            var entity = await Repository.SingleByIdAsync(ParseEntityKey(id));

            if (entity == null)
            {
                throw new HttpException(404, null);
            }

            var detailModel = new PageEditViewModel <TDto, TKey>(entity.MapToDto <TDto, TKey>(),
                                                                 EntityControllerDescriptor.EntityMetadata.DetailPropertyMetadatas)
            {
                Title = ""
            };

            return(detailModel);
        }
Пример #11
0
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Page page = db.Pages.Find(id);

            if (page == null)
            {
                return(HttpNotFound());
            }
            ViewBag.Page_Url  = page.URL;
            ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
            PageEditViewModel viewMod = new PageEditViewModel(page);

            return(View(viewMod));
        }
Пример #12
0
        public async Task <IActionResult> Edit(int id, PageEditViewModel viewModel)
        {
            //blowing up here

            var page = await _context.Pages.FirstOrDefaultAsync(m => m.Id == id);


            ModelState.Remove("Page.Month");
            ModelState.Remove("Page.Day");
            if (ModelState.IsValid)
            {
                try
                {
                    viewModel.Page               = page;
                    viewModel.Page.Thought       = page.Thought;
                    viewModel.Quote.PageId       = page.Id;
                    viewModel.Quote.Page         = page;
                    viewModel.Quote.CreationDate = DateTime.Now;
                    _context.Add(viewModel.Quote);
                    _context.Update(viewModel.Page);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PageExists(viewModel.Page.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("PageDay", "Pages", new { Id = viewModel.Page.BookId, page = $"{viewModel.Page.Month}-{viewModel.Page.Day}" }));
            }

            if (id != viewModel.Page.Id)
            {
                return(NotFound());
            }


            return(View(viewModel));
        }
Пример #13
0
        public ActionResult Delete(int?id, string Tab)
        {
            if (!id.HasValue)
            {
                return(HttpBadRequest("PageId = null"));
            }

            StoreFront storeFront = CurrentStoreFrontOrThrow;
            Page       page       = storeFront.Pages.Where(p => p.PageId == id.Value).SingleOrDefault();

            if (page == null)
            {
                AddUserMessage("Page not found", "Sorry, the page you are trying to Delete cannot be found. Page id: [" + id.Value + "] for Store Front '" + storeFront.CurrentConfig().Name.ToHtml() + "' [" + storeFront.StoreFrontId + "]", UserMessageType.Danger);
                return(RedirectToAction("Manager"));
            }

            PageEditViewModel viewModel = new PageEditViewModel(page, isStoreAdminEdit: true, isReadOnly: true, isDeletePage: true, activeTab: Tab);

            return(View("Delete", viewModel));
        }
Пример #14
0
        public IActionResult Edit(PageEditViewModel model)
        {
            if (model.Page.ParentID != null)
            {
                model.Page.ParentPage = _pRepo.Pages.FirstOrDefault(p => p.ParentID == model.Page.ParentID);
            }

            if (ModelState.IsValid)
            {
                _pRepo.SavePage(model.Page);
                TempData["message"] = $"{model.Page.PageName} has been saved";
                return(RedirectToAction("Index"));
            }
            else
            {
                TempData["error"] = "The are something error in following fields. Please check.";
                model.Pages       = _pRepo.Pages.Where(c => c.PageID != model.Page.PageID);
                return(View(model));
            }
        }
Пример #15
0
        public ActionResult Edit(PageEditViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                var model = db.pages.Find(viewModel.PageId);
                if (model == null)
                {
                    return(HttpNotFound());
                }

                model.PageName        = viewModel.Page;
                model.IsPublished     = viewModel.IsPublished == "A";
                model.LastUpdatedBy   = User.Identity.Name;
                model.LastUpdatedDate = DateTime.Now;
                db.SaveChanges();

                return(RedirectToAction("index"));
            }

            return(View(viewModel));
        }
Пример #16
0
        public IActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(RedirectToAction("Index"));
            }

            var findPage = _pageService.GetAdmin(id);

            var viewModel = new PageEditViewModel()
            {
                Name          = findPage.Name,
                StatusId      = findPage.StatusId,
                EditorContent = findPage.EditorContent,
                Slug          = findPage.Slug,
                Description   = findPage.Description,
                Id            = findPage.Id
            };

            return(View());
        }
Пример #17
0
        // GET: Pages/Edit/5
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var page = await _context.Pages.FirstOrDefaultAsync(m => m.Id == id);

            var viewModel = new PageEditViewModel()
            {
                Page = page,
            };

            if (page == null)
            {
                return(NotFound());
            }

            return(View(viewModel));
        }
Пример #18
0
        public IActionResult Edit(PageEditViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            string uniqueFileName = null;

            if (viewModel.Photos != null && viewModel.Photos.Count > 0)
            {
                foreach (IFormFile photo in viewModel.Photos)
                {
                    var extension = Path.GetExtension(photo.FileName).ToLower();
                    if (extension == ".jpg" || extension == ".jpeg" || extension == ".png")
                    {
                        string uploadsFolder = Path.Combine(_hostingEnvironment.WebRootPath, "images");
                        uniqueFileName = Guid.NewGuid().ToString() + "_" + photo.FileName;
                        string filePath = Path.Combine(uploadsFolder, uniqueFileName);
                        photo.CopyTo(new FileStream(filePath, FileMode.Create));
                    }
                    else
                    {
                        throw new Exception("Dosya türü .JPG , .JPEG veya .PNG olmalıdır..");
                    }
                }
            }
            var editedPage = new Page()
            {
                ImageUrl      = uniqueFileName,
                Name          = viewModel.Name,
                StatusId      = viewModel.StatusId,
                EditorContent = viewModel.EditorContent,
                Slug          = viewModel.Slug,
                Description   = viewModel.Description
            };

            _pageService.Edit(editedPage);
            return(RedirectToAction("Index"));
        }
Пример #19
0
        public async Task <IActionResult> Edit(Guid id)
        {
            var page = await _pageService.GetAsync(id);

            if (page is null)
            {
                return(NotFound());
            }

            var model = new PageEditViewModel
            {
                Id              = page.Id,
                Title           = page.Title,
                Slug            = page.Slug,
                MetaDescription = page.MetaDescription,
                CssContent      = page.CssContent,
                RawHtmlContent  = page.RawHtmlContent,
                HideSidebar     = page.HideSidebar,
                IsPublished     = page.IsPublished
            };

            return(View("CreateOrEdit", model));
        }
Пример #20
0
        public ActionResult AddBannerElement(string Header_Text, string Summary, int?Banner_ID, int Page_ID, int?Content_Type_ID, int?Content_ID)
        {
            //you are here
            //check image size and validate that image was added
            HttpPostedFileBase file = Request.Files["BannerImage"];

            if (file != null)
            {
                if (file.ContentLength > 0)
                {
                    if (!(file.ContentLength > MAX_IMG_SIZE))
                    {
                        byte[] imageSize = new byte[file.ContentLength];
                        file.InputStream.Read(imageSize, 0, (int)file.ContentLength);
                        string filePath     = Server.MapPath("~/images/banners/") + file.FileName;
                        string fileName     = file.FileName;
                        string fileNameNoEx = Path.GetFileNameWithoutExtension(file.FileName);
                        string ext          = Path.GetExtension(file.FileName);
                        if (ext.ToLower() == ".jpg" || ext.ToLower() == ".png")
                        {
                            if (System.IO.File.Exists(filePath))
                            {
                                int i = 1;
                                filePath = Server.MapPath("~/images/banners/") + fileNameNoEx + i.ToString() + ext;
                                while (System.IO.File.Exists(filePath))
                                {
                                    i++;
                                    filePath = Server.MapPath("~/images/banners/") + fileNameNoEx + i.ToString() + ext;
                                    fileName = fileNameNoEx + i.ToString() + ext;
                                }
                            }
                            file.SaveAs(filePath);
                            Page page = db.Pages.Find(Page_ID);
                            if (Banner_ID != null)
                            {
                                BannerElement newElement = new BannerElement();
                                newElement.Banner_ID   = Banner_ID.Value;
                                newElement.Header_Text = Header_Text;
                                newElement.Summary     = Summary;
                                newElement.Date_Added  = DateTime.Now;
                                newElement.Added_By    = User.Identity.Name.ToString();///TODO: Need authentication here
                                newElement.Archived    = false;
                                newElement.Image_Path  = "images/banners/" + fileName;
                                if (Content_Type_ID != null)//link to content if provided
                                {
                                    if (Content_Type_ID != 0)
                                    {
                                        newElement.Content_ID      = Content_ID;
                                        newElement.Content_Type_ID = Content_Type_ID;
                                    }
                                }
                                db.BannerElements.Add(newElement);
                                db.SaveChanges();
                            }
                            else
                            {
                                Banner newBanner  = new Banner();
                                string bannerName = page.Page_Name + "Banner";
                                if (((List <Banner>)(from b in db.Banners where b.Banner_Name == bannerName select b).ToList()).Count() > 0)
                                {
                                    int    nameCnt   = 1;
                                    string nameStrng = bannerName + nameCnt.ToString();
                                    while (((List <Banner>)(from b in db.Banners where b.Banner_Name == nameStrng select b).ToList()).Count() > 0)
                                    {
                                        nameCnt++;
                                        nameStrng = bannerName + nameCnt.ToString();
                                    }
                                    bannerName = nameStrng;
                                }
                                newBanner.Banner_Name = bannerName;
                                db.Banners.Add(newBanner);
                                db.SaveChanges();

                                page.Banner = newBanner;

                                BannerElement newElement = new BannerElement();
                                newElement.Banner_ID   = newBanner.Banner_ID;
                                newElement.Header_Text = Header_Text;
                                newElement.Summary     = Summary;
                                newElement.Date_Added  = DateTime.Now;
                                newElement.Added_By    = User.Identity.Name.ToString();///TODO: Need authentication here
                                newElement.Archived    = false;
                                newElement.Image_Path  = "images/banners/" + fileName;
                                if (Content_Type_ID != null)//link to content if provided
                                {
                                    if (Content_Type_ID != 0)
                                    {
                                        newElement.Content_ID      = Content_ID;
                                        newElement.Content_Type_ID = Content_Type_ID;
                                    }
                                }
                                db.BannerElements.Add(newElement);
                                db.SaveChanges();
                            }
                            return(RedirectToAction("Edit", new { id = Page_ID }));
                        }
                        else
                        {
                            ModelState.AddModelError("", "Only .png and .jpg images are supported");
                            Page page = db.Pages.Find(Page_ID);
                            if (page == null)
                            {
                                return(HttpNotFound());
                            }
                            ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
                            PageEditViewModel viewMod = new PageEditViewModel(page);
                            return(View("Edit", viewMod));
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("", "Your Banner Image must be less than 10 MB");
                        Page page = db.Pages.Find(Page_ID);
                        if (page == null)
                        {
                            return(HttpNotFound());
                        }
                        ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
                        PageEditViewModel viewMod = new PageEditViewModel(page);
                        return(View("Edit", viewMod));
                    }
                }
                else
                {
                    ModelState.AddModelError("", "You must select a banner image");
                    Page page = db.Pages.Find(Page_ID);
                    if (page == null)
                    {
                        return(HttpNotFound());
                    }
                    ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
                    PageEditViewModel viewMod = new PageEditViewModel(page);
                    return(View("Edit", viewMod));
                }
            }
            else
            {
                ModelState.AddModelError("", "You must select a banner image");
                Page page = db.Pages.Find(Page_ID);
                if (page == null)
                {
                    return(HttpNotFound());
                }
                ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
                PageEditViewModel viewMod = new PageEditViewModel(page);
                return(View("Edit", viewMod));
            }
        }
Пример #21
0
        public async Task <IActionResult> Edit(PageEditViewModel model)
        {
            if (!ModelState.IsValid)
            {
                if (string.IsNullOrEmpty(model.Id))
                {
                    ViewData["Title"] = sr["New Page"];
                }
                else
                {
                    ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, sr["Edit - {0}"], model.Title);
                }
                return(View(model));
            }

            var project = await projectService.GetCurrentProjectSettings();

            if (project == null)
            {
                log.LogInformation("redirecting to index because project settings not found");

                return(RedirectToRoute(pageRoutes.PageRouteName));
            }

            var canEdit = await User.CanEditPages(project.Id, authorizationService);

            if (!canEdit)
            {
                log.LogInformation("redirecting to index because user is not allowed to edit");
                return(RedirectToRoute(pageRoutes.PageRouteName));
            }

            IPage page = null;

            if (!string.IsNullOrEmpty(model.Id))
            {
                page = await pageService.GetPage(model.Id);
            }

            var    needToClearCache = false;
            var    isNew            = false;
            string slug             = string.Empty;;
            bool   slugIsAvailable  = false;

            if (page != null)
            {
                if ((!string.IsNullOrEmpty(page.ViewRoles)))
                {
                    if (!User.IsInRoles(page.ViewRoles))
                    {
                        log.LogWarning($"page {page.Title} is protected by roles that user is not in so redirecting");
                        return(RedirectToRoute(pageRoutes.PageRouteName));
                    }
                }

                if (page.Title != model.Title)
                {
                    needToClearCache = true;
                }
                page.Title           = model.Title;
                page.MetaDescription = model.MetaDescription;
                page.Content         = model.Content;
                if (page.IsPublished != model.IsPublished)
                {
                    needToClearCache = true;
                }
                if (page.PageOrder != model.PageOrder)
                {
                    needToClearCache = true;
                }
                if (!string.IsNullOrEmpty(model.Slug))
                {
                    // remove any bad characters
                    model.Slug = ContentUtils.CreateSlug(model.Slug);
                    if (model.Slug != page.Slug)
                    {
                        slugIsAvailable = await pageService.SlugIsAvailable(model.Slug);

                        if (slugIsAvailable)
                        {
                            page.Slug        = model.Slug;
                            needToClearCache = true;
                        }
                        else
                        {
                            this.AlertDanger(sr["The page slug was not changed because the requested slug is already in use."], true);
                        }
                    }
                }
            }
            else
            {
                isNew            = true;
                needToClearCache = true;
                if (!string.IsNullOrEmpty(model.Slug))
                {
                    // remove any bad chars
                    model.Slug      = ContentUtils.CreateSlug(model.Slug);
                    slugIsAvailable = await pageService.SlugIsAvailable(model.Slug);

                    if (slugIsAvailable)
                    {
                        slug = model.Slug;
                    }
                }

                if (string.IsNullOrEmpty(slug))
                {
                    slug = ContentUtils.CreateSlug(model.Title);
                }

                slugIsAvailable = await pageService.SlugIsAvailable(slug);

                if (!slugIsAvailable)
                {
                    model.DisqusShortname = project.DisqusShortName;
                    //log.LogInformation("returning 409 because slug already in use");
                    ModelState.AddModelError("pageediterror", sr["slug is already in use."]);

                    return(View(model));
                }

                page = new Page()
                {
                    ProjectId       = project.Id,
                    Author          = await authorNameResolver.GetAuthorName(User),
                    Title           = model.Title,
                    MetaDescription = model.MetaDescription,
                    Content         = model.Content,
                    Slug            = slug,
                    ParentId        = "0"

                                      //,Categories = categories.ToList()
                };
            }


            if (!string.IsNullOrEmpty(model.ParentSlug))
            {
                var parentPage = await pageService.GetPageBySlug(model.ParentSlug);

                if (parentPage != null)
                {
                    if (parentPage.Id != page.ParentId)
                    {
                        page.ParentId    = parentPage.Id;
                        page.ParentSlug  = parentPage.Slug;
                        needToClearCache = true;
                    }
                }
            }
            else
            {
                // empty means root level
                page.ParentSlug = string.Empty;
                page.ParentId   = "0";
            }
            if (page.ViewRoles != model.ViewRoles)
            {
                needToClearCache = true;
            }
            page.ViewRoles      = model.ViewRoles;
            page.CorrelationKey = model.CorrelationKey;

            page.PageOrder    = model.PageOrder;
            page.IsPublished  = model.IsPublished;
            page.ShowHeading  = model.ShowHeading;
            page.ShowMenu     = model.ShowMenu;
            page.MenuOnly     = model.MenuOnly;
            page.ShowComments = model.ShowComments;
            if (page.MenuFilters != model.MenuFilters)
            {
                needToClearCache = true;
            }
            page.MenuFilters = model.MenuFilters;
            if (page.ExternalUrl != model.ExternalUrl)
            {
                needToClearCache = true;
            }
            page.ExternalUrl = model.ExternalUrl;

            if (!string.IsNullOrEmpty(model.Author))
            {
                page.Author = model.Author;
            }

            if (!string.IsNullOrEmpty(model.PubDate))
            {
                var localTime = DateTime.Parse(model.PubDate);
                page.PubDate = timeZoneHelper.ConvertToUtc(localTime, project.TimeZoneId);
            }
            if (page.ProjectId != project.Id)
            {
                page.ProjectId = project.Id;
            }

            if (isNew)
            {
                await pageService.Create(page, model.IsPublished);

                this.AlertSuccess(sr["The page was created successfully."], true);
            }
            else
            {
                await pageService.Update(page, model.IsPublished);

                this.AlertSuccess(sr["The page was updated successfully."], true);
            }


            if (needToClearCache)
            {
                pageService.ClearNavigationCache();
            }



            if (page.Slug == project.DefaultPageSlug)
            {
                return(RedirectToRoute(pageRoutes.PageRouteName, new { slug = "" }));
            }

            if (!string.IsNullOrEmpty(page.ExternalUrl))
            {
                this.AlertWarning(sr["Note that since this page has an override url, the menu item will link to the url so the page is used only as a means to add a link in the menu, the content is not used."], true);
                return(RedirectToRoute(pageRoutes.PageEditRouteName, new { slug = page.Slug }));
            }

            //var url = Url.RouteUrl(pageRoutes.PageRouteName, new { slug = page.Slug });
            return(RedirectToRoute(pageRoutes.PageRouteName, new { slug = page.Slug }));
            //return Content(url);
        }
Пример #22
0
        public async Task <IActionResult> Edit(
            string slug       = "",
            string parentSlug = ""
            )
        {
            var projectSettings = await projectService.GetCurrentProjectSettings();

            if (projectSettings == null)
            {
                log.LogInformation("redirecting to index because project settings not found");
                return(RedirectToRoute(pageRoutes.PageRouteName));
            }

            var canEdit = await User.CanEditPages(projectSettings.Id, authorizationService);

            if (!canEdit)
            {
                log.LogInformation("redirecting to index because user cannot edit");
                return(RedirectToRoute(pageRoutes.PageRouteName));
            }

            if (slug == "none")
            {
                slug = string.Empty;
            }

            var model = new PageEditViewModel();

            model.ProjectId       = projectSettings.Id;
            model.DisqusShortname = projectSettings.DisqusShortName;

            IPage page = null;

            if (!string.IsNullOrEmpty(slug))
            {
                page = await pageService.GetPageBySlug(slug);
            }
            if (page == null)
            {
                ViewData["Title"] = sr["New Page"];
                model.Slug        = slug;
                model.ParentSlug  = parentSlug;
                model.PageOrder   = await pageService.GetNextChildPageOrder(parentSlug);

                var rootList = await pageService.GetRootPages().ConfigureAwait(false);

                if (rootList.Count == 0)
                {
                    // expected if home page doesn't exist yet
                    if (slug == "home")
                    {
                        model.Title = sr["Home"];
                    }
                }
                model.Author = await authorNameResolver.GetAuthorName(User);

                model.PubDate = timeZoneHelper.ConvertToLocalTime(DateTime.UtcNow, projectSettings.TimeZoneId).ToString();
            }
            else // page not null
            {
                // if the page is protected by view roles return 404 if user is not in an allowed role
                if ((!string.IsNullOrEmpty(page.ViewRoles)))
                {
                    if (!User.IsInRoles(page.ViewRoles))
                    {
                        log.LogWarning($"page {page.Title} is protected by roles that user is not in so returning 404");
                        return(NotFound());
                    }
                }

                ViewData["Title"]     = string.Format(CultureInfo.CurrentUICulture, sr["Edit - {0}"], page.Title);
                model.Author          = page.Author;
                model.Content         = page.Content;
                model.Id              = page.Id;
                model.CorrelationKey  = page.CorrelationKey;
                model.IsPublished     = page.IsPublished;
                model.ShowMenu        = page.ShowMenu;
                model.MenuOnly        = page.MenuOnly;
                model.MetaDescription = page.MetaDescription;
                model.PageOrder       = page.PageOrder;
                model.ParentId        = page.ParentId;
                model.ParentSlug      = page.ParentSlug;
                model.PubDate         = timeZoneHelper.ConvertToLocalTime(page.PubDate, projectSettings.TimeZoneId).ToString();
                model.ShowHeading     = page.ShowHeading;
                model.Slug            = page.Slug;
                model.ExternalUrl     = page.ExternalUrl;
                model.Title           = page.Title;
                model.MenuFilters     = page.MenuFilters;
                model.ViewRoles       = page.ViewRoles;
                model.ShowComments    = page.ShowComments;
            }


            return(View(model));
        }
Пример #23
0
        public async Task <IActionResult> Edit(
            string slug       = "",
            string parentSlug = ""
            )
        {
            var projectSettings = await projectService.GetCurrentProjectSettings();

            if (projectSettings == null)
            {
                log.LogInformation("redirecting to index because project settings not found");
                return(RedirectToRoute(pageRoutes.PageRouteName));
            }

            var canEdit = await User.CanEditPages(projectSettings.Id, authorizationService);

            if (!canEdit)
            {
                log.LogInformation("redirecting to index because user cannot edit");
                return(RedirectToRoute(pageRoutes.PageRouteName));
            }

            if (slug == "none")
            {
                slug = string.Empty;
            }

            var model = new PageEditViewModel();

            model.ProjectId       = projectSettings.Id;
            model.DisqusShortname = projectSettings.DisqusShortName;
            model.FileBrowseUrl   = Url.Action("CkFileDialog", "FileManager", new { type = "file" });
            model.ImageBrowseUrl  = Url.Action("CkFileDialog", "FileManager", new { type = "image" });
            model.DropFileUrl     = Url.Action("Upload", "FileManager");

            IPage page = null;

            if (!string.IsNullOrEmpty(slug))
            {
                page = await pageService.GetPageBySlug(projectSettings.Id, slug);
            }
            if (page == null)
            {
                ViewData["Title"] = sr["New Page"];
                model.Slug        = slug;
                var rootList = await pageService.GetRootPages().ConfigureAwait(false);

                if (rootList.Count == 0)
                {
                    // expected if home page doesn't exist yet
                    if (slug == "home")
                    {
                        model.Title = "Home";
                    }
                }
                model.Author  = User.GetUserDisplayName();
                model.PubDate = timeZoneHelper.ConvertToLocalTime(DateTime.UtcNow, projectSettings.TimeZoneId).ToString();
            }
            else
            {
                ViewData["Title"]     = string.Format(CultureInfo.CurrentUICulture, sr["Edit - {0}"], page.Title);
                model.Author          = page.Author;
                model.Content         = page.Content;
                model.Id              = page.Id;
                model.CorrelationKey  = page.CorrelationKey;
                model.IsPublished     = page.IsPublished;
                model.ShowMenu        = page.ShowMenu;
                model.MenuOnly        = page.MenuOnly;
                model.MetaDescription = page.MetaDescription;
                model.PageOrder       = page.PageOrder;
                model.ParentId        = page.ParentId;
                model.ParentSlug      = page.ParentSlug;
                model.PubDate         = timeZoneHelper.ConvertToLocalTime(page.PubDate, projectSettings.TimeZoneId).ToString();
                model.ShowHeading     = page.ShowHeading;
                model.Slug            = page.Slug;
                model.ExternalUrl     = page.ExternalUrl;
                model.Title           = page.Title;
                model.ViewRoles       = page.ViewRoles;
                model.ShowComments    = page.ShowComments;
            }


            return(View(model));
        }
Пример #24
0
        public virtual ActionResult Create(PageEditViewModel pageEditViewModel)
        {
            if (pageEditViewModel.PageTemplateId == 0)
            {
                ModelState.AddModelError("PageTemplateId", "Page Template must be selected");
            }

            if (pageEditViewModel.ThemeId == 0)
            {
                ModelState.AddModelError("ThemeId", "Page Theme must be selected");
            }

            if (string.IsNullOrWhiteSpace(pageEditViewModel.Url))
            {
                ModelState.AddModelError("Url", "Url is blank. Enter a valid Url for this page. Example: '/' or '/Contact'");
            }
            else
            {
                if (pageEditViewModel.Url.Trim('/').Trim() == ".")
                {
                    ModelState.AddModelError("Url", "Url '" + pageEditViewModel.Url.ToHtml() + "' is invalid. Example: '/' or '/Contact'");
                }
                if (pageEditViewModel.Url.Contains('?'))
                {
                    ModelState.AddModelError("Url", "Url '" + pageEditViewModel.Url.ToHtml() + "' is invalid. Question mark is not allowed in URL. Example: '/' or '/Contact'");
                }
            }

            StoreFront storeFront = CurrentStoreFrontOrThrow;
            bool       urlIsValid = GStoreDb.ValidatePageUrl(this, pageEditViewModel.Url, storeFront.StoreFrontId, storeFront.ClientId, null);

            if (urlIsValid && ModelState.IsValid)
            {
                try
                {
                    Page page = null;
                    page = GStoreDb.CreatePage(pageEditViewModel, storeFront, CurrentUserProfileOrThrow);
                    AddUserMessage("Page Created!", "Page '" + page.Name.ToHtml() + "' [" + page.PageId + "] was created successfully for Store Front '" + storeFront.CurrentConfig().Name.ToHtml() + "' [" + storeFront.StoreFrontId + "]", UserMessageType.Success);

                    if (pageEditViewModel.CreateMenuItemWithPage)
                    {
                        NavBarItem navBarItem = GStoreDb.CreateNavBarItemForPage(page, CurrentStoreFrontOrThrow, CurrentUserProfileOrThrow);
                        AddUserMessage("Site Menu Updated!", "Page '" + page.Name.ToHtml() + "' [" + page.PageId + "] was added to the site menu for Store Front '" + storeFront.CurrentConfig().Name.ToHtml() + "' [" + storeFront.StoreFrontId + "]", UserMessageType.Success);
                    }
                    if (CurrentStoreFrontOrThrow.Authorization_IsAuthorized(CurrentUserProfileOrThrow, GStoreAction.Pages_View))
                    {
                        return(RedirectToAction("Details", new { id = page.PageId }));
                    }
                    return(RedirectToAction("Manager"));
                }
                catch (Exception ex)
                {
                    string errorMessage = "An error occurred while Creating page '" + pageEditViewModel.Name + "' Url: '" + pageEditViewModel.Url + "' for Store Front '" + storeFront.CurrentConfig().Name.ToHtml() + "' [" + storeFront.StoreFrontId + "] \nError: " + ex.GetType().FullName;

                    if (CurrentUserProfileOrThrow.AspNetIdentityUserIsInRoleSystemAdmin())
                    {
                        errorMessage += " \nException.ToString(): " + ex.ToString();
                    }
                    AddUserMessage("Error Creating Page!", errorMessage.ToHtmlLines(), UserMessageType.Danger);
                    ModelState.AddModelError("Ajax", errorMessage);
                }
            }
            else
            {
                AddUserMessage("Page Create Error", "There was an error with your entry for new page '" + pageEditViewModel.Name.ToHtml() + "' for Store Front '" + storeFront.CurrentConfig().Name.ToHtml() + "' [" + storeFront.StoreFrontId + "]. Please correct it below and save.", UserMessageType.Danger);
            }

            pageEditViewModel.IsStoreAdminEdit = true;
            pageEditViewModel.FillListsIfEmpty(storeFront.Client, storeFront);
            pageEditViewModel.IsCreatePage = true;
            return(View("Create", pageEditViewModel));
        }
Пример #25
0
        public async Task <IActionResult> AjaxPost(PageEditViewModel model)
        {
            // disable status code page for ajax requests
            var statusCodePagesFeature = HttpContext.Features.Get <IStatusCodePagesFeature>();

            if (statusCodePagesFeature != null)
            {
                statusCodePagesFeature.Enabled = false;
            }

            if (string.IsNullOrEmpty(model.Title))
            {
                // if a page has been configured to not show the title
                // this may be null on edit, if it is a new page then it should be required
                // because it is used for generating the slug
                //if (string.IsNullOrEmpty(model.Slug))
                //{
                log.LogInformation("returning 500 because no title was posted");
                return(StatusCode(500));
                //}
            }

            var project = await projectService.GetCurrentProjectSettings();

            if (project == null)
            {
                log.LogInformation("returning 500 blog not found");
                return(StatusCode(500));
            }

            var canEdit = await User.CanEditPages(project.Id, authorizationService);

            if (!canEdit)
            {
                log.LogInformation("returning 403 user is not allowed to edit");
                return(StatusCode(403));
            }

            //string[] categories = new string[0];
            //if (!string.IsNullOrEmpty(model.Categories))
            //{
            //    categories = model.Categories.Split(new char[] { ',' },
            //    StringSplitOptions.RemoveEmptyEntries);
            //}


            IPage page = null;

            if (!string.IsNullOrEmpty(model.Id))
            {
                page = await pageService.GetPage(model.Id);
            }

            var needToClearCache = false;
            var isNew            = false;

            if (page != null)
            {
                page.Title           = model.Title;
                page.MetaDescription = model.MetaDescription;
                page.Content         = model.Content;
                if (page.PageOrder != model.PageOrder)
                {
                    needToClearCache = true;
                }
            }
            else
            {
                isNew            = true;
                needToClearCache = true;
                var slug      = ContentUtils.CreateSlug(model.Title);
                var available = await pageService.SlugIsAvailable(project.Id, slug);

                if (!available)
                {
                    log.LogInformation("returning 409 because slug already in use");
                    return(StatusCode(409));
                }

                page = new Page()
                {
                    ProjectId       = project.Id,
                    Author          = User.GetUserDisplayName(),
                    Title           = model.Title,
                    MetaDescription = model.MetaDescription,
                    Content         = model.Content,
                    Slug            = slug,
                    ParentId        = "0"

                                      //,Categories = categories.ToList()
                };
            }

            if (!string.IsNullOrEmpty(model.ParentSlug))
            {
                var parentPage = await pageService.GetPageBySlug(project.Id, model.ParentSlug);

                if (parentPage != null)
                {
                    if (parentPage.Id != page.ParentId)
                    {
                        page.ParentId    = parentPage.Id;
                        page.ParentSlug  = parentPage.Slug;
                        needToClearCache = true;
                    }
                }
            }
            else
            {
                // empty means root level
                page.ParentSlug = string.Empty;
                page.ParentId   = "0";
            }
            if (page.ViewRoles != model.ViewRoles)
            {
                needToClearCache = true;
            }
            page.ViewRoles = model.ViewRoles;

            page.PageOrder   = model.PageOrder;
            page.IsPublished = model.IsPublished;
            page.ShowHeading = model.ShowHeading;
            if (!string.IsNullOrEmpty(model.PubDate))
            {
                var localTime = DateTime.Parse(model.PubDate);
                page.PubDate = timeZoneHelper.ConvertToUtc(localTime, project.TimeZoneId);
            }

            if (isNew)
            {
                await pageService.Create(page, model.IsPublished);
            }
            else
            {
                await pageService.Update(page, model.IsPublished);
            }


            if (needToClearCache)
            {
                pageService.ClearNavigationCache();
            }

            var url = Url.Action("Index", "Page", new { slug = page.Slug });

            return(Content(url));
        }
Пример #26
0
        public virtual PartialViewResult UpdatePageAjax(int?PageId, PageEditViewModel pageEditViewModel)
        {
            if (!PageId.HasValue)
            {
                return(HttpBadRequestPartial("Page id parameter is null"));
            }

            if (pageEditViewModel.PageId == 0)
            {
                return(HttpBadRequestPartial("Page id in viewmodel is 0"));
            }

            if (PageId.Value != pageEditViewModel.PageId)
            {
                return(HttpBadRequestPartial("Page id mismatch. PageId Parameter " + PageId.Value + " != " + pageEditViewModel.PageId));
            }

            if (pageEditViewModel.PageTemplateId == 0)
            {
                ModelState.AddModelError("PageTemplateId", "Page Template must be selected");
            }

            if (pageEditViewModel.ThemeId == 0)
            {
                ModelState.AddModelError("ThemeId", "Page Theme must be selected");
            }

            if (string.IsNullOrWhiteSpace(pageEditViewModel.Url))
            {
                ModelState.AddModelError("Url", "Url is invalid. Example: '/' or '/Contact'");
            }
            else
            {
                if (pageEditViewModel.Url.Trim('/').Trim() == ".")
                {
                    ModelState.AddModelError("Url", "Url '" + pageEditViewModel.Url.ToHtml() + "' is invalid. Example: '/' or '/Contact'");
                }
                if (pageEditViewModel.Url.Contains('?'))
                {
                    ModelState.AddModelError("Url", "Url '" + pageEditViewModel.Url.ToHtml() + "' is invalid. Question mark is not allowed in URL. Example: '/' or '/Contact'");
                }
            }

            StoreFront storeFront = CurrentStoreFrontOrThrow;
            bool       urlIsValid = GStoreDb.ValidatePageUrl(this, pageEditViewModel.Url, storeFront.StoreFrontId, storeFront.ClientId, pageEditViewModel.PageId);

            if (urlIsValid && ModelState.IsValid)
            {
                Page page = null;
                try
                {
                    page = GStoreDb.UpdatePage(pageEditViewModel, this, storeFront, CurrentUserProfileOrThrow);
                    AddUserMessage("Page Changes Saved!", "Page '" + page.Name.ToHtml() + "' [" + page.PageId + "] saved successfully for Store Front '" + storeFront.CurrentConfig().Name.ToHtml() + "' [" + storeFront.StoreFrontId + "]", UserMessageType.Success);
                    pageEditViewModel = new PageEditViewModel(page, isStoreAdminEdit: true, activeTab: pageEditViewModel.ActiveTab);
                    return(PartialView("_PageEditPartial", pageEditViewModel));
                }
                catch (Exception ex)
                {
                    string errorMessage = "An error occurred while saving your changes to page '" + pageEditViewModel.Name + "' Url: '" + pageEditViewModel.Url + "' [" + pageEditViewModel.PageId + "] for Store Front: '" + storeFront.CurrentConfig().Name + "' [" + storeFront.StoreFrontId + "] \nError: '" + ex.GetType().FullName + "'";

                    if (CurrentUserProfileOrThrow.AspNetIdentityUserIsInRoleSystemAdmin())
                    {
                        errorMessage += " \nException.ToString(): '" + ex.ToString() + "'";
                    }
                    AddUserMessage("Error Saving Page!", errorMessage.ToHtmlLines(), UserMessageType.Danger);
                    ModelState.AddModelError("Ajax", errorMessage);
                }
            }
            else
            {
                AddUserMessage("Page Edit Error", "There was an error with your entry for page " + pageEditViewModel.Name.ToHtml() + " [" + pageEditViewModel.PageId + "] for Store Front '" + storeFront.CurrentConfig().Name.ToHtml() + "' [" + storeFront.StoreFrontId + "]. Please correct it.", UserMessageType.Danger);
            }

            pageEditViewModel.IsStoreAdminEdit = true;
            pageEditViewModel.FillListsIfEmpty(CurrentClientOrThrow, CurrentStoreFrontOrThrow);
            return(PartialView("_PageEditPartial", pageEditViewModel));
        }
Пример #27
0
        public IActionResult Create()
        {
            var model = new PageEditViewModel();

            return(View("CreateOrEdit", model));
        }
Пример #28
0
        public ActionResult Edit(PageEditViewModel pageViewMod)
        {
            Page page = db.Pages.Find(pageViewMod.Page_ID);

            if (db.Pages.Where(x => x.URL.ToLower() == pageViewMod.URL.ToLower() && x.Page_ID != pageViewMod.Page_ID).Count() <= 0)
            {
                if (db.Pages.Where(x => x.Page_Name.ToLower() == pageViewMod.Page_Name.ToLower() && x.Page_ID != pageViewMod.Page_ID).Count() <= 0)
                {
                    //if (ModelState.IsValid)
                    //{
                    page.Page_Name  = pageViewMod.Page_Name;
                    page.URL        = pageViewMod.URL;
                    page.Title_Text = pageViewMod.Title_Text;
                    if (pageViewMod.Is_Default)
                    {
                        List <Page> pages = (List <Page>)db.Pages.Where(x => x.Page_ID != page.Page_ID).ToList();
                        foreach (Page p in pages)
                        {
                            p.Is_Default = false;
                        }
                    }
                    page.Is_Default      = pageViewMod.Is_Default;
                    page.Display_In_Menu = pageViewMod.Display_In_Menu;
                    page.Redirect        = pageViewMod.Redirect;
                    page.Redirect_URL    = pageViewMod.Redirect_URL;
                    page.Allow_Feedback  = pageViewMod.Allow_Feedback;
                    if (page.Allow_Feedback)
                    {
                        if (pageViewMod.Recipients_Temp == null)
                        {
                            pageViewMod.Recipients_Temp = "";
                        }
                        string[] recipients = pageViewMod.Recipients_Temp.Split('|');
                        int      pageID     = page.Page_ID;
                        List <NotificationRecipent> existingRecip = db.NotificationRecipents.Where(x => x.PageRecipientAssigns.Any(y => y.Page_ID == pageID)).ToList();
                        foreach (NotificationRecipent rec in existingRecip)
                        {
                            bool onPage = false;
                            foreach (string recip in recipients)
                            {
                                string[] parts = recip.Split(',');
                                if (parts.Length == 3)
                                {
                                    if (rec.Recipient_Name == parts[1] && rec.Recipient_Email == parts[2])
                                    {
                                        onPage = true;
                                        break;
                                    }
                                }
                            }
                            if (!onPage)
                            {
                                int recID   = rec.Recipient_ID;
                                int page_ID = page.Page_ID;
                                PageRecipientAssign recDelTemp = db.PageRecipientAssigns.Where(x => x.Page_ID == page_ID && x.Recipient_ID == recID).FirstOrDefault();
                                db.PageRecipientAssigns.Remove(recDelTemp);
                                if (db.PageRecipientAssigns.Where(x => x.Recipient_ID == recID && x.Page_ID != page_ID).Count() == 0)
                                {
                                    NotificationRecipent delTemp = db.NotificationRecipents.Where(x => x.Recipient_ID == recID).FirstOrDefault();
                                    db.NotificationRecipents.Remove(delTemp);
                                }
                            }
                        }
                        foreach (string recip in recipients)
                        {
                            string[] parts = recip.Split(',');
                            if (parts.Length == 3)
                            {
                                string recName  = parts[1];
                                string recEmail = parts[2];
                                if (existingRecip.Where(x => x.Recipient_Name == recName && x.Recipient_Email == recEmail).Count() == 0)
                                {
                                    if (db.NotificationRecipents.Where(x => x.Recipient_Email == recEmail && x.Recipient_Name == recName).Count() > 0)
                                    {
                                        NotificationRecipent tempRec = db.NotificationRecipents.Where(x => x.Recipient_Name == recName && x.Recipient_Email == recEmail).FirstOrDefault();

                                        PageRecipientAssign recAss = new PageRecipientAssign();
                                        recAss.Page = page;
                                        recAss.NotificationRecipent = tempRec;
                                        recAss.Date_Added           = DateTime.Now;
                                        recAss.Added_By             = User.Identity.Name.ToString();
                                        db.PageRecipientAssigns.Add(recAss);
                                    }
                                    else
                                    {
                                        NotificationRecipent newRec = new NotificationRecipent();
                                        newRec.Recipient_Name  = recName;
                                        newRec.Recipient_Email = recEmail;
                                        newRec.Date_Added      = DateTime.Now;
                                        newRec.Added_By        = User.Identity.Name.ToString();
                                        db.NotificationRecipents.Add(newRec);

                                        PageRecipientAssign recAss = new PageRecipientAssign();
                                        recAss.Page = page;
                                        recAss.NotificationRecipent = newRec;
                                        recAss.Date_Added           = DateTime.Now;
                                        recAss.Added_By             = User.Identity.Name.ToString();
                                        db.PageRecipientAssigns.Add(recAss);
                                    }
                                }
                            }
                        }
                    }
                    if (pageViewMod.Parent_Page_ID != null)
                    {
                        page.Is_Top = false;
                        Page parentPage = db.Pages.Find(pageViewMod.Parent_Page_ID);
                        parentPage.Has_Children = true;
                    }
                    else if (pageViewMod.Parent_Page_ID == null && page.Parent_Page_ID != null)
                    {
                        if (db.Pages.Where(x => x.Page_ID != page.Page_ID && x.Parent_Page_ID == page.Parent_Page_ID).Count() == 0)
                        {
                            Page parentPage = db.Pages.Find(page.Parent_Page_ID);
                            parentPage.Has_Children = false;
                            db.SaveChanges();
                        }
                        page.Is_Top = true;
                    }
                    page.Parent_Page_ID = pageViewMod.Parent_Page_ID;
                    page.Date_Modified  = DateTime.Now;
                    page.Modified_By    = User.Identity.Name;
                    db.SaveChanges();
                    ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
                    return(RedirectToAction("Edit", new { id = page.Page_ID }));
                }
                else
                {
                    ModelState.AddModelError("", "A Page with the Page Name '" + pageViewMod.Page_Name + "' already exists");
                    ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
                    return(View("Edit", pageViewMod));
                }
            }
            else
            {
                ModelState.AddModelError("", "A Page with the URL '" + pageViewMod.URL + "' already exists");
                ViewBag.Banner_ID = new SelectList(db.Banners, "Banner_ID", "Banner_Name", page.Banner_ID);
                return(View("Edit", pageViewMod));
            }
            //}
            //ModelState.AddModelError("", "An unexpectced error occurred. Invalid Model State. Please try again.");
            //return View(pageViewMod);
        }
Пример #29
0
        public PageEditViewModel GetEdit(ApiCall call)
        {
            // optional type.
            string baseurl = call.Context.WebSite.BaseUrl();

            baseurl = Kooboo.Data.Service.WebSiteService.EnsureHttpsBaseUrlOnServer(baseurl, call.Context.WebSite);
            Guid PageId = call.ObjectId;
            var  sitedb = call.WebSite.SiteDb();

            if (PageId == default(Guid))
            {
                string layoutid = call.GetValue("layoutid");
                string type     = call.GetValue("type");

                var result = new PageEditViewModel();

                if (!string.IsNullOrEmpty(layoutid))
                {
                    var Layout = sitedb.Layouts.GetByNameOrId(layoutid);
                    if (Layout != null)
                    {
                        result.Body = InitPageLayoutSource(Layout);
                    }
                }
                else if (!string.IsNullOrEmpty(type) && (type.ToLower() == "richtext"))
                {
                    result.Body = "";
                }
                else
                {
                    result.Body = "<html><head></head><body><div></div></body></html>";
                    result.Body = HtmlHeadService.SetBaseHref(result.Body, baseurl);
                }

                return(result);
            }

            var page  = sitedb.Pages.Get(PageId);
            var route = sitedb.Routes.GetByObjectId(page.Id);

            var model = new PageEditViewModel();

            model.Id        = page.Id;
            model.Name      = page.Name;
            model.Published = page.Online;
            model.UrlPath   = route == null ? null : route.Name;
            model.Type      = page.Type;

            if (page.Type == PageType.RichText)
            {
                string body     = page.Body;
                var    doc      = Kooboo.Dom.DomParser.CreateDom(body);
                var    titletag = doc.head.getElementsByTagName("title");
                if (titletag != null && titletag.length > 0)
                {
                    model.Title = titletag.item[0].InnerHtml;
                }
                model.Body = doc.body.InnerHtml;
            }

            else
            {
                if (!page.HasLayout)
                {
                    // HtmlHeadService.AppendHeader(page.Body, page.Headers);
                }

                string body = string.IsNullOrEmpty(page.Body) ? string.Empty : HtmlHeadService.SetBaseHref(page.Body, baseurl);

                model.LayoutName        = page.LayoutName;
                model.LayoutId          = Kooboo.Data.IDGenerator.GetOrGenerate(page.LayoutName, ConstObjectType.Layout);
                model.Metas             = page.Headers.Metas;
                model.CustomHeader      = page.Headers.CustomHeader;
                model.MetaBindings      = PageService.GetMetaBindings(sitedb, PageId);
                model.UrlParamsBindings = PageService.GetUrlParas(sitedb, PageId);
                model.ContentTitle      = page.Headers.Titles;
                model.Parameters        = page.Parameters;
                model.Body    = body;
                model.Scripts = page.Headers.Scripts;
                model.Styles  = page.Headers.Styles;
            }

            return(model);
        }
Пример #30
0
        public virtual PartialViewResult UpdatePageAjax(int?PageId, PageEditViewModel pageEditViewModel)
        {
            this._logActionsAsPageViews = false;
            if (!PageId.HasValue)
            {
                return(HttpBadRequestPartial("Page id parameter is null"));
            }

            if (pageEditViewModel.PageId == 0)
            {
                return(HttpBadRequestPartial("Page id in viewmodel is 0"));
            }

            if (PageId.Value != pageEditViewModel.PageId)
            {
                return(HttpBadRequestPartial("Page id mismatch. PageId Parameter " + PageId.Value + " != " + pageEditViewModel.PageId));
            }

            if (pageEditViewModel.PageTemplateId == 0)
            {
                string pageTemplateKey = (ModelState.ContainsKey("PageEditViewModel_PageTemplateId") ? "PageEditViewModel_PageTemplateId" : "PageTemplateId");
                ModelState.AddModelError(pageTemplateKey, "Page Template must be selected");
            }

            if (pageEditViewModel.ThemeId == 0)
            {
                string themeKey = (ModelState.ContainsKey("PageEditViewModel_ThemeId") ? "PageEditViewModel_ThemeId" : "ThemeId");
                ModelState.AddModelError(themeKey, "Page Theme must be selected");
            }

            if (string.IsNullOrWhiteSpace(pageEditViewModel.Url))
            {
                string urlKey = (ModelState.ContainsKey("PageEditViewModel_Url") ? "PageEditViewModel_Url" : "Url");
                ModelState.AddModelError(urlKey, "Url cannot be blank. Example: '/' or '/Contact'");
            }

            StoreFront storeFront = CurrentStoreFrontOrThrow;
            bool       urlIsValid = GStoreDb.ValidatePageUrl(this, pageEditViewModel.Url, storeFront.StoreFrontId, storeFront.ClientId, pageEditViewModel.PageId);

            if (urlIsValid && ModelState.IsValid)
            {
                try
                {
                    Page page = null;
                    page = GStoreDb.UpdatePage(pageEditViewModel, this, CurrentStoreFrontOrThrow, CurrentUserProfileOrThrow);
                    AddUserMessage("Page Changes Saved!", "Page '" + page.Name.ToHtml() + "' [" + page.PageId + "] saved successfully", AppHtmlHelpers.UserMessageType.Success);
                    pageEditViewModel = new PageEditViewModel(page, activeTab: pageEditViewModel.ActiveTab);
                    return(PartialView("_PageEditPartial", pageEditViewModel));
                }
                catch (Exception ex)
                {
                    string errorMessage = "An error occurred while saving your changes to page '" + pageEditViewModel.Name + "' Url: '" + pageEditViewModel.Url + "' [" + pageEditViewModel.PageId + "] \nError: '" + ex.GetType().FullName + "'";

                    if (CurrentUserProfileOrThrow.AspNetIdentityUserIsInRoleSystemAdmin())
                    {
                        errorMessage += "\nException.ToString(): '" + ex.ToString() + "'";
                    }
                    AddUserMessage("Error Saving Page!", errorMessage.ToHtmlLines(), AppHtmlHelpers.UserMessageType.Danger);
                    ModelState.AddModelError("Ajax", errorMessage);
                }
            }
            else
            {
                AddUserMessage("Page Edit Error", "There was an error with your entry for page " + pageEditViewModel.Name.ToHtml() + " [" + pageEditViewModel.PageId + "]. Please correct it.", AppHtmlHelpers.UserMessageType.Danger);
            }

            pageEditViewModel.FillListsIfEmpty(CurrentClientOrThrow, CurrentStoreFrontOrThrow);
            return(PartialView("_PageEditPartial", pageEditViewModel));
        }