Exemplo n.º 1
0
        public IActionResult Create()
        {
            var model = new CreateReplaceViewModel {
                Views = new SelectList(GetNotOverrideViews())
            };

            return(View(model));
        }
Exemplo n.º 2
0
        public IActionResult Create(CreateReplaceViewModel model)
        {
            if (!ModelState.IsValid)
            {
                model.Views = new SelectList(GetNotOverrideViews());
                return(View(model));
            }

            IEnumerable <string> temp = GetNotOverrideViews();

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

            _logger.LogDebug("Create overridable view action started");
            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 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");

            var viewOverride = new BaseViewOverride
            {
                View   = model.ChoosenView,
                Path   = $"{viewsPath}{model.ChoosenView}.cshtml",
                Enable = model.Enable
            };

            db.ViewOverrides.Add(viewOverride);
            db.SaveChanges();
            _logger.LogInformation("New overridable page created! View = {@view}", viewOverride);

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

            return(RedirectToAction("Index"));
        }