Esempio n. 1
0
        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}"
                );
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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)
                );
        }
Esempio n. 5
0
        #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();
        }
Esempio n. 6
0
        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;
            }
        }
Esempio n. 8
0
        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)
                );
        }