Example #1
0
        public ActionResult TasksCreate(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var contest = _db.Contests.Find(id);

            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 }));
                //ViewBag.ErrorMessage = "Вы не имеете право создавать задачи для этого контеста";
                //return View("Error");
            }
            var model = new ContestsTasksCreateViewModel
            {
                ContestId = id,
                TimeLimit = 1,
                Weight    = 1
            };

            return(View(model));
        }
Example #2
0
        public async System.Threading.Tasks.Task <ActionResult> TasksCreate(ContestsTasksCreateViewModel model, HttpPostedFileBase fileUpload, HttpPostedFileBase checkerFile, HttpPostedFileBase[] testsFiles)
        {
            if (ModelState.IsValid)
            {
                if (await _db.Tasks.AnyAsync(t => t.ContestId == model.ContestId && (t.ExecutableName == model.ExecutableName || t.Name == model.Name)))
                {
                    ModelState.AddModelError("", "Задача в данном контесте с таким именем уже существует");
                }
                else
                {
                    var task = new Task
                    {
                        Id             = Guid.NewGuid(),
                        ContestId      = model.ContestId,
                        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         = 0
                    };

                    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.Tasks.Add(task);
                    await _db.SaveChangesAsync();

                    return(RedirectToAction("Edit", new { id = model.ContestId }));
                }
            }
            return(View(model));
        }