Пример #1
0
        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));
        }
Пример #2
0
        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));
        }