示例#1
0
        public async Task <IActionResult> Move(PageMoveModel model)
        {
            if (model == null)
            {
                log.LogInformation("model was null");
                return(BadRequest());
            }

            var project = await projectService.GetCurrentProjectSettings();

            if (project == null)
            {
                log.LogInformation("project not found");
                return(BadRequest());
            }

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

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


            var result = await pageService.Move(model);

            return(Json(result));
        }
        public async Task <PageActionResult> Move(PageMoveModel model)
        {
            PageActionResult result;

            if (string.IsNullOrEmpty(model.MovedNode) || string.IsNullOrEmpty(model.TargetNode) || (model.MovedNode == "-1") || (model.TargetNode == "-1") || (string.IsNullOrEmpty(model.Position)))
            {
                result = new PageActionResult(false, "bad request, failed to move page");
                return(result);
            }

            var movedNode = await GetPage(model.MovedNode);

            var targetNode = await GetPage(model.TargetNode);

            if ((movedNode == null) || (targetNode == null))
            {
                result = new PageActionResult(false, "bad request, page or target page not found");
                return(result);
            }

            if (movedNode.Slug == _settings.DefaultPageSlug)
            {
                result = new PageActionResult(false, _sr["Moving the default/home page is not allowed"]);
                return(result);
            }

            switch (model.Position)
            {
            case "inside":
                // this case is when moving to a new parent node that doesn't have any children yet
                // target is the new parent
                // or when momving to the first position of the current parent
                movedNode.ParentId   = targetNode.Id;
                movedNode.ParentSlug = targetNode.Slug;
                movedNode.PageOrder  = 0;
                await _pageCommands.Update(movedNode.ProjectId, movedNode);
                await SortChildPages(targetNode.Id);

                break;

            case "before":
                // put this page before the target page beneath the same parent as the target
                if (targetNode.ParentId != movedNode.ParentId)
                {
                    movedNode.ParentId   = targetNode.ParentId;
                    movedNode.ParentSlug = targetNode.ParentSlug;
                    movedNode.PageOrder  = targetNode.PageOrder - 1;
                    await _pageCommands.Update(movedNode.ProjectId, movedNode);
                    await SortChildPages(targetNode.ParentId);
                }
                else
                {
                    //parent did not change just sort
                    // set sort and re-sort
                    movedNode.PageOrder = targetNode.PageOrder - 1;
                    await _pageCommands.Update(movedNode.ProjectId, movedNode);
                    await SortChildPages(targetNode.ParentId);
                }

                break;

            case "after":
            default:
                // put this page after the target page beneath the same parent as the target
                if (targetNode.ParentId != movedNode.ParentId)
                {
                    movedNode.ParentId   = targetNode.ParentId;
                    movedNode.ParentSlug = targetNode.ParentSlug;
                    movedNode.PageOrder  = targetNode.PageOrder + 1;
                    await _pageCommands.Update(movedNode.ProjectId, movedNode);
                    await SortChildPages(targetNode.ParentId);
                }
                else
                {
                    //parent did not change just sort
                    movedNode.PageOrder = targetNode.PageOrder + 1;
                    await _pageCommands.Update(movedNode.ProjectId, movedNode);
                    await SortChildPages(targetNode.ParentId);
                }

                break;
            }

            //ClearNavigationCache();

            result = new PageActionResult(true, "operation succeeded");

            return(result);
        }