Exemple #1
0
        public IActionResult Edit(string view)
        {
            BaseViewOverride viewOverride = db.ViewOverrides.FirstOrDefault(x => x.View == view);

            if (viewOverride == null)
            {
                HttpContext.Items["ErrorMessage"] = "Не удалось найти переписанную вами страницу.";
                return(RedirectToAction("Index"));
            }

            EditBaseViewOverride model = new EditBaseViewOverride
            {
                ChoosenView = view,
                OldView     = viewOverride.View,
                Enable      = viewOverride.Enable,
                Code        = ReadFromFile(viewOverride.Path),
                Views       = new SelectList(GetNotOverrideViews())
            };

            return(View(model));
        }
Exemple #2
0
        public async Task <IActionResult> Edit(EditBaseViewOverride model)
        {
            if (!ModelState.IsValid)
            {
                model.Views = new SelectList(GetNotOverrideViews());
                return(View(model));
            }

            //TODO: Fix read from file
            IEnumerable <string> temp = GetNotOverrideViews();

            if (!temp.Contains(model.ChoosenView))
            {
                ModelState.AddModelError("ChoosenView", "Нельяза переписать данное представление.");
                model.Views = new SelectList(temp);
                return(View(model));
            }

            _logger.LogDebug("Edit overridable view action started");

            var viewOverride = db.ViewOverrides.FirstOrDefault(x => x.View == model.OldView);

            if (viewOverride == null)
            {
                _logger.LogDebug($"Cannot find view override entity with view = {model.OldView}");
                HttpContext.Items["ErrorMessage"] = "Не удалось найти изменяемую страницу";
                return(RedirectToAction("Index"));
            }

            var viewsPath = _configuration.GetSection("Views")["NewBaseViewsPath"];

            viewsPath = viewsPath[0] == '/' ? viewsPath : viewsPath.Insert(0, "/");
            viewsPath = viewsPath.Last() == '/' ? viewsPath : viewsPath.Append('/').ToString();

            _logger.LogDebug("Check directory existance");
            if (!Directory.Exists(_environment.ContentRootPath + viewsPath))
            {
                Directory.CreateDirectory(_environment.ContentRootPath + viewsPath);
            }


            var oldFile  = new FileInfo(viewOverride.Path);
            var fileInfo = new FileInfo($"{_environment.ContentRootPath}{viewsPath}{model.ChoosenView}.cshtml");

            if (fileInfo.Exists)
            {
                HttpContext.Items["ErrorMessage"] = "Файл перезаписи для данного представления уже существует.";
                return(RedirectToAction("Index"));
            }

            if (!Directory.Exists($"{_environment.ContentRootPath + viewsPath}/{model.ChoosenView.Split('/')[0]}"))
            {
                Directory.CreateDirectory($"{_environment.ContentRootPath + viewsPath}/{model.ChoosenView.Split('/')[0]}");
            }

            _logger.LogDebug("Try to create file");
            try
            {
                StreamWriter sw = fileInfo.CreateText();
                sw.Write(model.Code);
                sw.Close();
            }
            catch (Exception)
            {
                HttpContext.Items["ErrorMessage"] = "Не удалось записать в новый файл ваш код. Проверьте ваши права в системе.";
                return(RedirectToAction("Index"));
            }
            _logger.LogDebug("File successfully created, create view entity model");

            _logger.LogDebug("Remove old file on path = " + oldFile.FullName);
            if (oldFile.Exists)
            {
                oldFile.Delete();
            }

            viewOverride.Enable = model.Enable;
            viewOverride.Path   = $"{viewsPath}{model.ChoosenView}.cshtml";
            viewOverride.View   = model.ChoosenView;

            db.ViewOverrides.Update(viewOverride);
            db.SaveChanges();
            _logger.LogInformation($"Overridable page edited! View = {viewOverride.View}");

            if (model.Enable)
            {
                HttpContext.Items["SuccessMessage"] = $"Перезапись представления \"{model.ChoosenView}\" успешно создана и активирована!";
            }
            else
            {
                HttpContext.Items["SuccessMessage"] = $"Перезапись представления \"{model.ChoosenView}\" успешно создана! Вы можете активировать её в любой момент.";
            }

            return(RedirectToAction("Index"));
        }