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)); }
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")); }