public IActionResult UpdateSitemapNode([FromBody] SitemapNodeSubmit node, [FromQuery] Guid?appId = null, [FromQuery] Guid?areaId = null) { var response = new ResponseModel(); response.Message = "Success"; response.Success = true; if (node == null) { response.Message = "Wrong object model submitted. Could not restore!"; response.Success = false; return(Json(response)); } if (appId == null) { response.Message = "Application Id needs to be submitted as 'appId' query string"; response.Success = false; return(Json(response)); } if (areaId == null) { response.Message = "Area Id needs to be submitted as 'areaId' query string"; response.Success = false; return(Json(response)); } if (node.Id == null || node.Id == Guid.Empty) { response.Message = "Node Id needs to be submitted"; response.Success = false; return(Json(response)); } var appSrv = new AppService(); var pageSrv = new PageService(); try { appSrv.UpdateAreaNode(node.Id, areaId ?? Guid.Empty, node.Name, node.Label, node.LabelTranslations, node.IconClass, node.Url, (int)node.Type, node.EntityId, node.Weight, node.Access, node.EntityListPages, node.EntityCreatePages, node.EntityDetailsPages, node.EntityManagePages); var allAppPages = pageSrv.GetAppControlledPages(appId ?? Guid.Empty); var currentAttachedNodePages = allAppPages.FindAll(x => x.NodeId == node.Id).Select(x => x.Id).ToList(); var currentAttachedPagesHashSet = new HashSet <Guid>(); foreach (var pageId in currentAttachedNodePages) { currentAttachedPagesHashSet.Add(pageId); } //Process submitted page Ids if (node.Pages == null) { node.Pages = new List <Guid>(); } foreach (var pageId in node.Pages) { var page = pageSrv.GetPage(pageId); if (page == null) { throw new Exception("Page not found"); } if (page.NodeId == null) { pageSrv.UpdatePage(page.Id, page.Name, page.Label, page.LabelTranslations, page.IconClass, page.System, page.Weight, page.Type, page.AppId, page.EntityId, node.Id, areaId, page.IsRazorBody, page.RazorBody, page.Layout); } else if (page.NodeId == node.Id) { currentAttachedPagesHashSet.Remove(page.Id); } } //Detach pages that were not submitted foreach (var pageId in currentAttachedPagesHashSet) { var page = pageSrv.GetPage(pageId); if (page == null) { throw new Exception("Page not found"); } pageSrv.UpdatePage(page.Id, page.Name, page.Label, page.LabelTranslations, page.IconClass, page.System, page.Weight, page.Type, page.AppId, page.EntityId, null, null, page.IsRazorBody, page.RazorBody, page.Layout); } } catch (Exception ex) { response.Message = ex.Message; response.Success = false; return(Json(response)); } var newSitemap = appSrv.GetApplication(appId ?? Guid.Empty).Sitemap; var initData = new EntityRecord(); initData["sitemap"] = appSrv.OrderSitemap(newSitemap); initData["node_page_dict"] = PageUtils.GetNodePageDictionary(appId); response.Object = initData; return(Json(response)); }
public IActionResult CreateSitemapNode([FromBody] SitemapNodeSubmit node, [FromQuery] Guid?appId = null, [FromQuery] Guid?areaId = null) { var response = new ResponseModel(); response.Message = "Success"; response.Success = true; if (node == null) { response.Message = "Wrong object model submitted. Could not restore!"; response.Success = false; return(Json(response)); } if (appId == null) { response.Message = "Application Id needs to be submitted as 'appId' query string"; response.Success = false; return(Json(response)); } if (areaId == null) { response.Message = "Area Id needs to be submitted as 'areaId' query string"; response.Success = false; return(Json(response)); } if (node.Id == Guid.Empty) { node.Id = Guid.NewGuid(); } var appSrv = new AppService(); var pageSrv = new PageService(); try { appSrv.CreateAreaNode(node.Id, areaId ?? Guid.Empty, node.Name, node.Label, node.LabelTranslations, node.IconClass, node.Url, (int)node.Type, node.EntityId, node.Weight, node.Access, node.EntityListPages, node.EntityCreatePages, node.EntityDetailsPages, node.EntityManagePages); if (node.Pages == null) { node.Pages = new List <Guid>(); } foreach (var pageId in node.Pages) { var page = pageSrv.GetPage(pageId); if (page == null) { throw new Exception("Page not found"); } pageSrv.UpdatePage(page.Id, page.Name, page.Label, page.LabelTranslations, page.IconClass, page.System, page.Weight, page.Type, page.AppId, page.EntityId, node.Id, areaId, page.IsRazorBody, page.RazorBody, page.Layout); } } catch (Exception ex) { response.Message = ex.Message; response.Success = false; return(Json(response)); } var newSitemap = appSrv.GetApplication(appId ?? Guid.Empty).Sitemap; var initData = new EntityRecord(); initData["sitemap"] = appSrv.OrderSitemap(newSitemap); initData["node_page_dict"] = PageUtils.GetNodePageDictionary(appId); response.Object = initData; return(Json(response)); }