private void SaveProblemOpen(viewModels.NewProblemViewModel Model, int ProblemID, DateTime LastModifiedTime) { // Write model data to App_Data ParseImagesPath(Model.Description); string dirName = ProblemID.ToString(); if (!Directory.Exists(LocalPath.AbsoluteProblemsDirectory + dirName)) { Directory.CreateDirectory(LocalPath.AbsoluteProblemsDirectory + dirName); } // Write problem legend ProblemLegend.Write(LocalPath.AbsoluteProblemsDirectory + dirName, Model.Name, Model.TimeLimit, Model.MemoryLimit, LastModifiedTime, ProblemTypes.Open, Model.Description, Model.InputFormat, Model.OutputFormat); SaveChecker(Model.CheckerListID, Model.Checker, dirName); SaveOpenProblemResult(Model.OpenProblemResult, dirName); // Create zip for tester ZipFile.CreateFromDirectory( LocalPath.AbsoluteProblemsDirectory + dirName, LocalPath.AbsoluteProblemsDirectory + dirName + ".zip"); // Save attachment List <string> attach = new List <string>(); attach.AddRange(ParseImagesPath(Model.Description)); attach.AddRange(ParseImagesPath(Model.OutputFormat)); SaveImages(attach, LocalPath.AbsoluteProblemsDirectory + dirName); // Delete description, inputFormat and outputFormat from archive using (ZipArchive archive = ZipFile.Open( LocalPath.AbsoluteProblemsDirectory + dirName + ".zip", ZipArchiveMode.Update)) { List <ZipArchiveEntry> forDelete = new List <ZipArchiveEntry>(); foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.Name == "Description" || entry.Name == "InputFormat" || entry.Name == "OutputFormat") { forDelete.Add(entry); } } forDelete.Each(e => archive.Entries.First(en => en == e).Delete()); } // Move tester zip if (System.IO.File.Exists(LocalPath.AbsoluteProblemsDirectory + dirName + ".zip")) { System.IO.File.Move(LocalPath.AbsoluteProblemsDirectory + dirName + ".zip", LocalPath.AbsoluteProblemsDirectory + dirName + "/" + dirName + ".zip"); } }
//TODO: Tests format - *.in *.out public ActionResult Create() { logger.Debug("User " + WebSecurity.GetUserId(User.Identity.Name) + " \"" + User.Identity.Name + "\" visited ProblemsManagement/Problem/Create"); var model = new viewModels.NewProblemViewModel(); return(View(model)); }
private void SaveProblem(viewModels.NewProblemViewModel Model, int ProblemID, DateTime LastModifiedTime) { switch ((ProblemTypes)Model.ProblemTypesListID) { case ProblemTypes.Standart: SaveProblemStandart(Model, ProblemID, LastModifiedTime); break; case ProblemTypes.Open: SaveProblemOpen(Model, ProblemID, LastModifiedTime); break; } }
public ActionResult Create(viewModels.NewProblemViewModel Model) { if (ModelState.IsValid) { int problemID = -1; // Attempt to create new problem try { Problem problem = new Problem { Name = Model.Name, TimeLimit = Model.TimeLimit, MemoryLimit = Model.MemoryLimit, LastModifiedTime = DateTime.Now.Truncate(TimeSpan.FromSeconds(1)), // Truncate need for comparing dates Type = (ProblemTypes)Model.ProblemTypesListID, Tags = new List <ProblemTag>() }; foreach (var tagId in Model.ProblemTagsListIDs) { var tag = repository.ProblemTags.FirstOrDefault(t => t.ProblemTagID == tagId); if (tag != null) { problem.Tags.Add(tag); } } int userID = WebSecurity.CurrentUserId; if (userID != 1) { UserProfile user = repository.Users.FirstOrDefault(u => u.UserId == userID); problem.UsersCanModify = new List <UserProfile>(); problem.UsersCanModify.Add(user); } problemID = repository.AddProblem(problem); SaveProblem(Model, problemID, problem.LastModifiedTime); problem.Path = LocalPath.RelativeProblemsDirectory + problemID.ToString(); // Update problem in repository repository.AddProblem(problem); TestersSingleton.Instance.SendProblem(problem.ProblemID); logger.Info("User " + WebSecurity.GetUserId(User.Identity.Name) + " \"" + User.Identity.Name + "\" create problem " + problemID + " \"" + Model.Name + "\""); return(RedirectToAction("BindTournamentsToProblem", new { problemID = problem.ProblemID })); } catch (Exception ex) { logger.Error("Error occurred on user " + WebSecurity.GetUserId(User.Identity.Name) + " \"" + User.Identity.Name + "\" creating problem " + problemID + " \"" + Model.Name + "\": ", ex); ModelState.AddModelError("", "Произошла ошибка при создании задачи"); repository.DeleteProblem(problemID); if (Directory.Exists(LocalPath.AbsoluteProblemsDirectory + problemID.ToString())) { Directory.Delete(LocalPath.AbsoluteProblemsDirectory + problemID.ToString(), true); } } } return(View(Model)); }
//TODO: Tests format - *.in *.out public ActionResult Create() { logger.Debug("User " + WebSecurity.GetUserId(User.Identity.Name) + " \"" + User.Identity.Name + "\" visited ProblemsManagement/Problem/Create"); var model = new viewModels.NewProblemViewModel(); return View(model); }