public static void AddProduct(CMSDatabase db, PageModel model, int?previousPageID, HttpContext context, out bool successfullyCompleted) { if (model == null) { successfullyCompleted = false; return; } model.PageType = PageType.Product; model.PreviousPageID = previousPageID; ProductPage productPage = PagesManagementFunctions.PageModelToPage(db, model, context) as ProductPage; if (productPage == null) { successfullyCompleted = false; return; } ++productPage.PreviousPage.ProductsCount; productPage.PreviousPage.LastProductTemplate = productPage.Template; db.ProductPages.Add(productPage); db.SaveChanges(); model.ID = productPage.ID; successfullyCompleted = true; LogManagementFunctions.AddAdminPanelLog( db: db, context: context, info: $"{productPage.PageName} (ID-{productPage.ID.ToString()}): {(context.Items["LogLocalization"] as IAdminPanelLogLocalization)?.ProductAdded}" ); }
public IActionResult EditPage(int?itemID) { HttpContext.Items["pageID"] = AdminPanelPages.EditPage; if (!itemID.HasValue) { return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.Pages}")); } UsualPage page = db.UsualPages.FirstOrDefault(up => up.ID == itemID.Value); if (page == null) { return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.Pages}")); } // Получаем список ID страниц, которые зависят от текущей LinkedList <int> idList = PagesManagementFunctions.GetDependentPageIDs(db, page); // Для блокировки выбора страницы-родителя в представлении, если текущая страница - главная HttpContext.Items["isMainPage"] = page.RequestPath.Equals("/", StringComparison.Ordinal); PageModel model = PagesManagementFunctions.PageToPageModel(page); HttpContext.Items["UsualPages"] = db.UsualPages.AsNoTracking().Where(up => !idList.Contains(up.ID)).ToArray(); HttpContext.Items["Templates"] = db.Templates.AsNoTracking().ToArray(); return(View("Pages/EditPage", model)); }
public IActionResult EditProduct(int?itemID) { HttpContext.Items["pageID"] = AdminPanelPages.EditProduct; if (!itemID.HasValue) { return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.Categories}")); } ProductPage page = db.ProductPages.AsNoTracking().FirstOrDefault(pp => pp.ID == itemID); if (page == null) { return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.Categories}")); } PageModel model = PagesManagementFunctions.PageToPageModel(page); HttpContext.Items["Templates"] = db.Templates.AsNoTracking().ToArray(); return(View("CategoriesAndProducts/EditProduct", model)); }
public static void AddPage(CMSDatabase db, PageModel model, HttpContext context, out bool successfullyCompleted) { Page page = PagesManagementFunctions.PageModelToPage(db, model, context); if (page == null) { successfullyCompleted = false; return; } db.Add(page); db.SaveChanges(); model.ID = page.ID; successfullyCompleted = true; LogManagementFunctions.AddAdminPanelLog( db: db, context: context, info: $"{page.PageName} (ID-{page.ID.ToString()}): " + (page is UsualPage ? (context.Items["LogLocalization"] as IAdminPanelLogLocalization)?.PageAdded : (context.Items["LogLocalization"] as IAdminPanelLogLocalization)?.CategoryAdded) ); }
#pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { #line 3 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Layout = "CommonPage"; Context.Items["PageStyle"] = "/styles/admin_panel/pages/work_with_page.css"; Context.Items["PageName"] = localization.AddPage_PageName; User user = Context.Items["User"] as User; UsualPage[] pages = Context.Items["UsualPages"] as UsualPage[]; Template[] templates = Context.Items["Templates"] as Template[]; #line default #line hidden BeginContext(433, 251, true); WriteLiteral("<script src=\"/scripts/admin_panel/insert_tab.js\"></script>\r\n <script src=\"/scripts/admin_panel/checkbox_event_handler.js\"></script>\r\n <form id=\"add-page\" class=\"page-container\">\r\n <input type=\"hidden\" name=\"pageID\""); EndContext(); BeginWriteAttribute("value", " value=\"", 684, "\"", 723, 1); #line 14 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" WriteAttributeValue("", 692, (int)AdminPanelPages.AddPage, 692, 31, false); #line default #line hidden EndWriteAttribute(); BeginContext(724, 3, true); WriteLiteral(">\r\n"); EndContext(); BeginContext(760, 52, true); WriteLiteral(" <input id=\"add-button\" type=\"submit\""); EndContext(); BeginWriteAttribute("value", " value=\"", 812, "\"", 854, 1); #line 16 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" WriteAttributeValue("", 820, Html.Raw(localization.SaveButton), 820, 34, false); #line default #line hidden EndWriteAttribute(); BeginContext(855, 89, true); WriteLiteral(" />\r\n <div class=\"blocks\">\r\n <div class=\"left-block\">\r\n"); EndContext(); BeginContext(979, 43, true); WriteLiteral(" <label for=\"Title\">"); EndContext(); BeginContext(1023, 28, false); #line 20 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.Title)); #line default #line hidden EndContext(); BeginContext(1051, 101, true); WriteLiteral("*</label>\r\n <input type=\"text\" id=\"Title\" name=\"PageModel.Title\" required />\r\n"); EndContext(); BeginContext(1192, 46, true); WriteLiteral(" <label for=\"PageName\">"); EndContext(); BeginContext(1239, 33, false); #line 23 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.Breadcrumb)); #line default #line hidden EndContext(); BeginContext(1272, 107, true); WriteLiteral("*</label>\r\n <input type=\"text\" id=\"PageName\" name=\"PageModel.PageName\" required />\r\n"); EndContext(); BeginContext(1425, 53, true); WriteLiteral(" <label for=\"PageDescription\">"); EndContext(); BeginContext(1479, 38, false); #line 26 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.PageDescription)); #line default #line hidden EndContext(); BeginContext(1517, 125, true); WriteLiteral("</label>\r\n <input type=\"text\" id=\"PageDescription\" name=\"PageModel.PageDescription\" maxlength=\"160\">\r\n"); EndContext(); BeginContext(1685, 50, true); WriteLiteral(" <label for=\"PageKeywords\">"); EndContext(); BeginContext(1736, 35, false); #line 29 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.PageKeywords)); #line default #line hidden EndContext(); BeginContext(1771, 180, true); WriteLiteral("</label>\r\n <input type=\"text\" id=\"PageKeywords\" name=\"PageModel.PageKeywords\" />\r\n </div>\r\n <div class=\"right-block\">\r\n"); EndContext(); BeginContext(1995, 48, true); WriteLiteral(" <label for=\"TemplateId\">"); EndContext(); BeginContext(2044, 31, false); #line 34 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.Template)); #line default #line hidden EndContext(); BeginContext(2075, 133, true); WriteLiteral("</label>\r\n <select id=\"TemplateId\" name=\"PageModel.TemplateId\">\r\n <option selected>"); EndContext(); BeginContext(2209, 38, false); #line 36 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.WithoutTemplate)); #line default #line hidden EndContext(); BeginContext(2247, 11, true); WriteLiteral("</option>\r\n"); EndContext(); #line 37 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" foreach (var t in templates) { #line default #line hidden BeginContext(2348, 35, true); WriteLiteral(" <option"); EndContext(); BeginWriteAttribute("value", " value=\"", 2383, "\"", 2396, 1); #line 39 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" WriteAttributeValue("", 2391, t.ID, 2391, 5, false); #line default #line hidden EndWriteAttribute(); BeginContext(2397, 1, true); WriteLiteral(">"); EndContext(); BeginContext(2399, 16, false); #line 39 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(t.Name)); #line default #line hidden EndContext(); BeginContext(2415, 11, true); WriteLiteral("</option>\r\n"); EndContext(); #line 40 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" } #line default #line hidden BeginContext(2457, 35, true); WriteLiteral(" </select>\r\n"); EndContext(); BeginContext(2535, 50, true); WriteLiteral(" <label for=\"PreviousPage\">"); EndContext(); BeginContext(2586, 35, false); #line 43 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.PreviousPage)); #line default #line hidden EndContext(); BeginContext(2621, 139, true); WriteLiteral("</label>\r\n <select id=\"PreviousPage\" name=\"PageModel.PreviousPageID\">\r\n <option selected>"); EndContext(); BeginContext(2761, 42, false); #line 45 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.WithoutPreviousPage)); #line default #line hidden EndContext(); BeginContext(2803, 11, true); WriteLiteral("</option>\r\n"); EndContext(); #line 46 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" foreach (var p in pages) { #line default #line hidden BeginContext(2892, 35, true); WriteLiteral(" <option"); EndContext(); BeginWriteAttribute("value", " value=\"", 2927, "\"", 2940, 1); #line 48 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" WriteAttributeValue("", 2935, p.ID, 2935, 5, false); #line default #line hidden EndWriteAttribute(); BeginContext(2941, 1, true); WriteLiteral(">"); EndContext(); BeginContext(2943, 20, false); #line 48 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(p.PageName)); #line default #line hidden EndContext(); BeginContext(2963, 11, true); WriteLiteral("</option>\r\n"); EndContext(); #line 49 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" } #line default #line hidden BeginContext(3001, 35, true); WriteLiteral(" </select>\r\n"); EndContext(); BeginContext(3071, 43, true); WriteLiteral(" <label for=\"Alias\">"); EndContext(); BeginContext(3115, 28, false); #line 52 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.Alias)); #line default #line hidden EndContext(); BeginContext(3143, 91, true); WriteLiteral("</label>\r\n <input type=\"text\" id=\"Alias\" name=\"PageModel.Alias\" />\r\n"); EndContext(); #line 55 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" if (!PagesManagementFunctions.HasMainPage(db)) { #line default #line hidden BeginContext(3377, 494, true); WriteLiteral(@" <div class=""checkbox-block""> <input type=""checkbox"" id=""IsMainPage"" name=""PageModel.IsMainPage"" value=""false"" /> <script> let isMainPageCheckbox = document.getElementById('IsMainPage'); isMainPageCheckbox.addEventListener('click', checkboxEventHandler); </script> <label for=""IsMainPage"">"); EndContext(); BeginContext(3872, 33, false); #line 63 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.IsMainPage)); #line default #line hidden EndContext(); BeginContext(3905, 42, true); WriteLiteral("</label>\r\n </div>\r\n"); EndContext(); #line 65 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" } #line default #line hidden BeginContext(4014, 495, true); WriteLiteral(@" <div class=""checkbox-block""> <input type=""checkbox"" id=""Published"" name=""PageModel.Published"" value=""true"" checked /> <script> let publishedCheckbox = document.getElementById('Published'); publishedCheckbox.addEventListener('click', checkboxEventHandler); </script> <label for=""Published"">"); EndContext(); BeginContext(4510, 32, false); #line 73 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.Published)); #line default #line hidden EndContext(); BeginContext(4542, 42, true); WriteLiteral("</label>\r\n </div>\r\n"); EndContext(); BeginContext(4623, 483, true); WriteLiteral(@" <div class=""checkbox-block""> <input type=""checkbox"" id=""IsIndex"" name=""PageModel.IsIndex"" value=""true"" checked /> <script> let isIndexCheckbox = document.getElementById('IsIndex'); isIndexCheckbox.addEventListener('click', checkboxEventHandler); </script> <label for=""IsIndex"">"); EndContext(); BeginContext(5107, 30, false); #line 82 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.IsIndex)); #line default #line hidden EndContext(); BeginContext(5137, 42, true); WriteLiteral("</label>\r\n </div>\r\n"); EndContext(); BeginContext(5219, 489, true); WriteLiteral(@" <div class=""checkbox-block""> <input type=""checkbox"" id=""IsFollow"" name=""PageModel.IsFollow"" value=""true"" checked /> <script> let isFollowCheckbox = document.getElementById('IsFollow'); isFollowCheckbox.addEventListener('click', checkboxEventHandler); </script> <label for=""IsFollow"">"); EndContext(); BeginContext(5709, 31, false); #line 91 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.IsFollow)); #line default #line hidden EndContext(); BeginContext(5740, 94, true); WriteLiteral("</label>\r\n </div>\r\n </div>\r\n </div>\r\n"); EndContext(); BeginContext(5863, 37, true); WriteLiteral(" <label for=\"Content\">"); EndContext(); BeginContext(5901, 30, false); #line 96 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.Content)); #line default #line hidden EndContext(); BeginContext(5931, 633, true); WriteLiteral(@"</label> <textarea id=""Content"" name=""PageModel.Content""></textarea> </form> <script> function errorHandler(formElement) { let errorMsgElement = document.getElementById('error-msg'); if (errorMsgElement === null) { errorMsgElement = document.createElement('span'); errorMsgElement.setAttribute('id', 'error-msg'); formElement.insertBefore(errorMsgElement, formElement.firstChild); } errorMsgElement.textContent = '"); EndContext(); BeginContext(6565, 37, false); #line 107 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.IncorrectInput)); #line default #line hidden EndContext(); BeginContext(6602, 170, true); WriteLiteral("\';\r\n }\r\n function responseHandler(request, formElement) {\r\n if (request.status == 201) {\r\n alert(\'"); EndContext(); BeginContext(6773, 32, false); #line 111 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write(Html.Raw(localization.PageAdded)); #line default #line hidden EndContext(); BeginContext(6805, 5, true); WriteLiteral("\');\r\n"); EndContext(); #line 112 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" if (SecurityFunctions.HasAccessTo(AdminPanelPages.EditPage, user, Context)) { #line default #line hidden BeginContext(6939, 24, true); WriteLiteral(" "); EndContext(); BeginContext(6965, 58, true); WriteLiteral("location.replace(request.getResponseHeader(\'location\'));\r\n"); EndContext(); #line 115 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" } else { #line default #line hidden BeginContext(7107, 24, true); WriteLiteral(" "); EndContext(); BeginContext(7133, 64, true); WriteLiteral("location.replace(location.origin + location.pathname + \'?pageID="); EndContext(); BeginContext(7199, 26, false); #line 118 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" Write((int)AdminPanelPages.Pages); #line default #line hidden EndContext(); BeginContext(7226, 5, true); WriteLiteral("\');\r\n"); EndContext(); #line 119 "C:\Users\79622\Desktop\Github\StoreCMS\StoreCMS\Views\AdminPanel\Pages\AddPage.cshtml" } #line default #line hidden BeginContext(7258, 458, true); WriteLiteral(@" } else if (request.status == 422) { errorHandler(formElement); } } document.getElementById('add-button').addEventListener('click', createSendDataEventHandler('POST', 'add-page', responseHandler, errorHandler)); document.getElementById('Content').addEventListener('keydown', insertTabEventHandler); </script>"); EndContext(); }
public static void EditProduct(CMSDatabase db, PageModel model, int?productID, HttpContext context, out bool successfullyCompleted) { if (model == null || !productID.HasValue) { successfullyCompleted = false; return; } model.PageType = PageType.Product; ProductPage editableProduct = db.ProductPages.AsNoTracking().FirstOrDefault(pp => pp.ID == productID.Value); if (editableProduct == null) { successfullyCompleted = false; return; } model.ID = editableProduct.ID; model.PreviousPageID = editableProduct.PreviousPageID; ProductPage editedProduct = PagesManagementFunctions.PageModelToPage(db, model, context) as ProductPage; if (editedProduct == null) { successfullyCompleted = false; return; } editedProduct.PreviousPage.LastProductTemplate = editedProduct.Template; db.ProductPages.Update(editedProduct); db.SaveChanges(); // Изменяем имена изображений продукта, если изменился псевдоним страницы if (!editableProduct.Alias.Equals(editedProduct.Alias, StringComparison.Ordinal)) { IHostingEnvironment env = context.RequestServices.GetRequiredService <IHostingEnvironment>(); string pathToImages = $"{env.GetProductsImagesFolderFullPath()}{editedProduct.ID}/"; if (Directory.Exists(pathToImages)) { string oldName = editableProduct.Alias; string newName = editedProduct.Alias; Regex imageChecker = new Regex($"{oldName}(_\\d+)?.jpg$"); string[] oldImagesNames = Directory.GetFiles(pathToImages, $"*{oldName}*.jpg"); string[] imagePaths = (from img in oldImagesNames where imageChecker.IsMatch(img) select img).ToArray(); // Можно было бы заменить разом имена всем изображениям через перебор в цикле, но // проблема в том, что путь до папки с изображениями может содержать старое название // изображения. В итоге замена имени через File.Move(старый_путь, старый_путь.Replace(oldName, newName)) // может привести к переносу изображений в другую директорию. LinkedList <KeyValuePair <string, string> > renameErrors = new LinkedList <KeyValuePair <string, string> >(); for (int i = 0; i < imagePaths.Length; ++i) { string oldImageName = imagePaths[i].Substring(pathToImages.Length, imagePaths[i].Length - pathToImages.Length - 4); string newImageName = oldImageName.Replace(oldName, newName); try { ImagesManagementFunctions.RenameImageAndDependencies( db: db, env: env, pathToImages: pathToImages, oldImageName: oldImageName, newImageName: newImageName, imageExtension: ".jpg", saveChangesInDB: false ); } catch (IOException) { // Добавляем все ошибки переименования в список для второй попытки. Например, старое название было // "Название" и мы переименовали страницу на "Название_2", но у товара было несколько картинок, // соответственно при ренейминге будет попытка присвоить первой картинке название Название_2, что приведет // к ошибке, т.к. картинка с таким названием уже существует. Поэтому после первого прохода сделаем второй, // что поможет избежать этих ошибок переименования renameErrors.AddLast(new KeyValuePair <string, string>(oldImageName, newImageName)); } } if (renameErrors.Count > 0) { foreach (var e in renameErrors) { ImagesManagementFunctions.RenameImageAndDependencies( db: db, env: env, pathToImages: pathToImages, oldImageName: e.Key, newImageName: e.Value, imageExtension: ".jpg", saveChangesInDB: false ); } } db.SaveChanges(); } } successfullyCompleted = true; LogManagementFunctions.AddAdminPanelLog( db: db, context: context, info: $"{editableProduct.PageName} (ID-{editableProduct.ID.ToString()}): {(context.Items["LogLocalization"] as IAdminPanelLogLocalization)?.ProductEdited}" ); }
// ЭТОТ МЕТОД НЕ СОХРАНЯЕТ ИЗМЕНЕНИЯ, ТОЛЬКО ВНОСИТ ИХ // После изменения или удаления страницы-родителя, необходимо изменить все страницы, наследующиеся от // этой родительской страницы. public static void RefreshPageAndDependencies(CMSDatabase db, Page page) { switch (page) { case UsualPage up: db.Entry(up).Reference(p => p.PreviousPage).LoadAsync().Wait(); if (up.PreviousPage == null && up.Alias.Equals("index", StringComparison.Ordinal)) { up.Alias = "ind"; } if (up.PreviousPage == null || up.PreviousPage.RequestPath.Equals("/", StringComparison.Ordinal)) { up.RequestPath = $"/{up.Alias}"; } else { up.RequestPath = $"{up.PreviousPage.RequestPath}/{up.Alias}"; } up.BreadcrumbsHtml = PagesManagementFunctions.GetBreadcrumbsHTML(up); break; case CategoryPage cp: db.Entry(cp).Reference(p => p.PreviousPage).LoadAsync().Wait(); if (cp.PreviousPage == null && cp.Alias.Equals("index", StringComparison.Ordinal)) { cp.Alias = "ind"; } if (cp.PreviousPage == null || cp.PreviousPage.RequestPath.Equals("/", StringComparison.Ordinal)) { cp.RequestPath = $"/{cp.Alias}"; } else { cp.RequestPath = $"{cp.PreviousPage.RequestPath}/{cp.Alias}"; } cp.BreadcrumbsHtml = PagesManagementFunctions.GetBreadcrumbsHTML(cp); break; case ProductPage pp: db.Entry(pp).Reference(p => p.PreviousPage).LoadAsync().Wait(); pp.RequestPath = $"{pp.PreviousPage.RequestPath}/{pp.Alias}"; pp.BreadcrumbsHtml = PagesManagementFunctions.GetBreadcrumbsHTML(pp); break; } PagesManagementFunctions.SetUniqueAliasName(db, page); page.RequestPathHash = OtherFunctions.GetHashFromString(page.RequestPath); switch (page) { case UsualPage up: List <UsualPage> usualPages = db.UsualPages.Where(p => p.PreviousPageID == up.ID).ToList(); List <CategoryPage> categoryPages = db.CategoryPages.Where(p => p.PreviousPageID == up.ID).ToList(); foreach (var u_page in usualPages) { RefreshPageAndDependencies(db, u_page); } foreach (var c_page in categoryPages) { RefreshPageAndDependencies(db, c_page); } break; case CategoryPage cp: List <ProductPage> productPages = db.ProductPages.Where(p => p.PreviousPageID == cp.ID).ToList(); foreach (var p_page in productPages) { RefreshPageAndDependencies(db, p_page); } break; } }
public static void EditPage(CMSDatabase db, Model model, HttpContext context, out bool successfullyCompleted) { if (!model.itemID.HasValue || model.PageModel == null || !model.PageType.HasValue) { successfullyCompleted = false; return; } model.PageModel.PageType = model.PageType; bool isMainPage = false; model.PageModel.IsMainPage = false; Page editablePage = null; switch (model.PageModel.PageType) { case PageType.Usual: editablePage = db.UsualPages.AsNoTracking().FirstOrDefault(up => up.ID == model.itemID); if (editablePage == null) { successfullyCompleted = false; return; } model.PageModel.ID = editablePage.ID; isMainPage = editablePage.RequestPath.Equals("/", StringComparison.Ordinal); break; case PageType.Category: editablePage = db.CategoryPages.AsNoTracking().FirstOrDefault(cp => cp.ID == model.itemID); if (editablePage == null) { successfullyCompleted = false; return; } model.PageModel.ID = editablePage.ID; break; default: successfullyCompleted = false; return; } model.PageModel.PageType = model.PageModel.PageType.Value; Page editedPage = PagesManagementFunctions.PageModelToPage(db, model.PageModel, context); if (editedPage != null) { if (editedPage is UsualPage up) { if (isMainPage) { up.Alias = "index"; up.RequestPath = "/"; up.RequestPathHash = OtherFunctions.GetHashFromString(up.RequestPath); up.PreviousPage = null; } // Если родителем страницы является сама страница или зависимая страница, то возвращаем сообщение об ошибке if (up.PreviousPage != null && PagesManagementFunctions.GetDependentPageIDs(db, up).Contains(up.PreviousPage.ID)) { successfullyCompleted = false; return; } } else if (editedPage is CategoryPage cp) { cp.ProductsCount = (editablePage as CategoryPage).ProductsCount; cp.LastProductTemplateID = (editablePage as CategoryPage).LastProductTemplateID; } } else { successfullyCompleted = false; return; } db.Update(editedPage); // Обновляем все зависимые страницы, если изменилось имя страницы и/или url страницы if (!editablePage.PageName.Equals(editedPage.PageName, StringComparison.InvariantCulture) || !editablePage.RequestPath.Equals(editedPage.RequestPath, StringComparison.Ordinal)) { if (editedPage is UsualPage) { List <UsualPage> usualPages = db.UsualPages.Where(p => p.PreviousPageID == editedPage.ID).ToList(); List <CategoryPage> categoryPages = db.CategoryPages.Where(p => p.PreviousPageID == editedPage.ID).ToList(); foreach (var u_page in usualPages) { RefreshPageAndDependencies(db, u_page); } foreach (var c_page in categoryPages) { RefreshPageAndDependencies(db, c_page); } } if (editedPage is CategoryPage) { List <ProductPage> productPages = db.ProductPages.Where(p => p.PreviousPageID == editedPage.ID).ToList(); foreach (var p_page in productPages) { RefreshPageAndDependencies(db, p_page); } } } db.SaveChanges(); successfullyCompleted = true; LogManagementFunctions.AddAdminPanelLog( db: db, context: context, info: $"{editablePage.PageName} (ID-{editablePage.ID.ToString()}): " + (editablePage is UsualPage ? (context.Items["LogLocalization"] as IAdminPanelLogLocalization)?.PageEdited : (context.Items["LogLocalization"] as IAdminPanelLogLocalization)?.CategoryEdited) ); }