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); }