public async System.Threading.Tasks.Task <ActionResult> TasksEdit(Guid?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var task = await _db.Tasks.FindAsync(id); if (task == null) { return(HttpNotFound()); } var contest = _db.Contests.Find(task.ContestId); if (contest == null) { return(HttpNotFound()); } if (contest.TeacherId != User.Identity.GetUserId() && !User.IsInRole("administrator") && !_db.ContestTeachers.Any(ct => ct.ContestId == contest.Id)) { TempData["Message"] = "Вы не имеете право редактировать задачи для этого контеста"; return(RedirectToAction("Edit", new { id = task.ContestId })); //ViewBag.ErrorMessage = "Вы не имеете право редактировать задачи для этого контеста"; //return View("Error"); } var model = new ContestsTasksEditViewModel { TaskId = id, ContestId = task.ContestId, Name = task.Name, ExecutableName = task.ExecutableName, CheckerName = task.CheckerName, TestsFolder = task.TestsFolder, TimeLimit = task.TimeLimit, Weight = task.Weight, MaxSourceSize = task.MaxSourceSize, MaxMemorySize = task.MaxMemorySize, Rating = task.Rating }; return(View(model)); }
public async System.Threading.Tasks.Task <ActionResult> TasksEdit(ContestsTasksEditViewModel model, HttpPostedFileBase fileUpload, HttpPostedFileBase checkerFile, HttpPostedFileBase[] testsFiles) { if (ModelState.IsValid) { var task = new Task { ContestId = model.ContestId, Id = (Guid)model.TaskId, Name = model.Name, ExecutableName = model.ExecutableName, CheckerName = model.CheckerName, TestsFolder = model.TestsFolder, TimeLimit = model.TimeLimit, Weight = model.Weight, MaxSourceSize = model.MaxSourceSize, MaxMemorySize = model.MaxMemorySize, Rating = model.Rating }; if (string.IsNullOrEmpty(fileUpload?.FileName)) { ModelState.AddModelError("", "Не выбран загружаемый файл с описанием задачи"); return(View(model)); } if (string.IsNullOrEmpty(checkerFile?.FileName)) { ModelState.AddModelError("", "Не выбран загружаемый файл с чекером задачи"); return(View(model)); } if (testsFiles == null || testsFiles.Any(tf => string.IsNullOrEmpty(tf?.FileName))) { ModelState.AddModelError("", "Не выбраны файлы тестов для задачи"); return(View(model)); } var ext = Path.GetExtension(fileUpload.FileName); if (_allowedExtForTasksDescriptionFiles.Any(e => e == ext)) { fileUpload.SaveAs(HostingEnvironment.ApplicationPhysicalPath + "Documents/TasksDescriptions/" + task.Id + ext); } else { ModelState.AddModelError("", "Недопустимое расширения файла с описанием задачи"); return(View(model)); } var checkerFolder = ConfigurationManager.AppSettings["SiteConfigFolder"]; if (!Directory.Exists(checkerFolder + "\\Checkers\\")) { Directory.CreateDirectory(checkerFolder + "\\Checkers\\"); } checkerFile.SaveAs(checkerFolder + "\\Checkers\\" + task.CheckerName); if (!Directory.Exists(checkerFolder + "\\Tests\\" + task.ExecutableName)) { Directory.CreateDirectory(checkerFolder + "\\Tests\\" + task.ExecutableName); } foreach (var testFile in testsFiles) { testFile.SaveAs(checkerFolder + "\\Tests\\" + task.ExecutableName + "\\" + testFile.FileName); } _db.Entry(task).State = EntityState.Modified; await _db.SaveChangesAsync(); return(RedirectToAction("Edit", new { id = model.ContestId })); } return(View(model)); }