private string GetNewUrl(MoveWebpageModel model, Webpage parent, Webpage page, Webpage immediateParent,
                                 MoveWebpageChangedPageModel parentModel)
        {
            if (!model.UpdateUrls)
            {
                return(page.UrlSegment);
            }

            if (immediateParent == null)
            {
                return(_webpageUrlService.Suggest(parent, new SuggestParams
                {
                    DocumentType = page.DocumentType,
                    PageName = page.Name,
                    Template = page.PageTemplate?.Id,
                    UseHierarchy = true,
                    WebpageId = page.Id
                }));
            }

            return(_webpageUrlService.Suggest(immediateParent,
                                              new SuggestParams
            {
                DocumentType = page.DocumentType,
                PageName = $"{parentModel.NewUrl}/{page.Name}",
                Template = page.PageTemplate?.Id,
                UseHierarchy = false,
                WebpageId = page.Id
            }));
        }
        public MoveWebpageResult Confirm(MoveWebpageModel model)
        {
            var confirmationModel = GetConfirmationModel(model);

            var success = SetParent(confirmationModel.Webpage, confirmationModel.Parent);

            if (!success)
            {
                return(new MoveWebpageResult
                {
                    Success = false,
                    Message = _resourceProvider.GetValue("There was an issue setting the parent to the new value")
                });
            }

            success = _createUpdateUrlBatch.CreateBatch(confirmationModel);

            return(new MoveWebpageResult
            {
                Success = success,
                Message = _resourceProvider.GetValue(success
                    ? "The page has been moved successfully"
                    : "There was an issue creating the batch to update the page URLs")
            });
        }
        private List <MoveWebpageChangedPageModel> GetChangedPages(MoveWebpageModel model, Webpage webpage, Webpage parent)
        {
            var webpageHierarchy = GetWebpageHierarchy(webpage).ToList();

            var parentActivePages = (parent?.ActivePages.Reverse() ?? Enumerable.Empty <Webpage>()).ToList();
            List <MoveWebpageChangedPageModel> models = new List <MoveWebpageChangedPageModel>();

            foreach (var page in webpageHierarchy)
            {
                var activePages      = page.ActivePages.ToList();
                var indexOf          = activePages.IndexOf(webpage);
                var childActivePages = activePages.Take(indexOf + 1).ToList();
                activePages.Reverse();
                var immediateParent = childActivePages.ElementAtOrDefault(1);
                childActivePages.Reverse();
                var newUrl = GetNewUrl(model, parent, page, immediateParent, models.FirstOrDefault(x => x.Id == immediateParent?.Id));
                models.Add(new MoveWebpageChangedPageModel
                {
                    Id           = page.Id,
                    ParentId     = immediateParent?.Id,
                    OldUrl       = page.UrlSegment,
                    NewUrl       = newUrl,
                    OldHierarchy = GetHierarchy(activePages),
                    NewHierarchy = GetHierarchy(parentActivePages.Concat(childActivePages))
                });
            }
            return(models);
        }
Example #4
0
        public RedirectToRouteResult Index(MoveWebpageModel model)
        {
            var validationResult = _moveWebpageAdminService.Validate(model);

            if (!validationResult.Success)
            {
                TempData.ErrorMessages().Add(validationResult.Message);
                return(RedirectToAction("Index", new { id = model.Id }));
            }

            return(RedirectToAction("Confirm", model));
        }
        public MoveWebpageConfirmationModel GetConfirmationModel(MoveWebpageModel model)
        {
            var webpage = GetWebpage(model);
            var parent  = GetParent(model);


            return(new MoveWebpageConfirmationModel
            {
                Webpage = webpage,
                Parent = parent,
                ChangedPages = GetChangedPages(model, webpage, parent)
            });
        }
Example #6
0
        public RedirectToRouteResult Confirm_POST(MoveWebpageModel model)
        {
            var validationResult = _moveWebpageAdminService.Validate(model);

            if (!validationResult.Success)
            {
                TempData.ErrorMessages().Add(validationResult.Message);
                return(RedirectToAction("Index", new { model.Id }));
            }

            var confirmResult = _moveWebpageAdminService.Confirm(model);

            if (!confirmResult.Success)
            {
                TempData.ErrorMessages().Add(confirmResult.Message);
                return(RedirectToAction("Index", new { model.Id }));
            }

            TempData.SuccessMessages().Add(confirmResult.Message);
            return(RedirectToAction("Edit", "Webpage", new { model.Id }));
        }
        public MoveWebpageResult Validate(MoveWebpageModel moveWebpageModel)
        {
            var webpage = GetWebpage(moveWebpageModel);
            var parent  = GetParent(moveWebpageModel);

            if (parent == webpage.Parent.Unproxy())
            {
                return(new MoveWebpageResult
                {
                    Success = false,
                    Message = _resourceProvider.GetValue("The webpage already has this parent")
                });
            }

            var validParentWebpages = GetValidParentWebpages(webpage);
            var valid = parent == null?IsRootAllowed(webpage) : validParentWebpages.Contains(parent);

            return(new MoveWebpageResult
            {
                Success = valid,
                Message = valid ? string.Empty : _resourceProvider.GetValue("Sorry, but you can't select that as a parent for this page.")
            });
        }
 private Webpage GetWebpage(MoveWebpageModel moveWebpageModel)
 {
     return(_webpageRepository.Get(moveWebpageModel.Id));
 }
 private Webpage GetParent(MoveWebpageModel moveWebpageModel)
 {
     return(moveWebpageModel.ParentId.HasValue
         ? _webpageRepository.Get(moveWebpageModel.ParentId.Value)
         : null);
 }
Example #10
0
 public ViewResult Confirm(MoveWebpageModel model)
 {
     ViewData["confirmation-model"] = _moveWebpageAdminService.GetConfirmationModel(model);
     return(View(model));
 }