// GET: Archieve/Modify
        public ActionResult Modify()
        {
            if (!UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session)))
            {
                return(Redirect("~/Error/AcceesDenied"));
            }
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                // 缺少题目 ID。
                return(Redirect("~/Error/ProblemNotExist"));
            }
            ;

            // 查询题目信息。
            ProblemHandle handle = ProblemArchieveManager.Default.GetProblemById(Request.QueryString["id"]);

            if (handle == null)
            {
                // 题目不存在于数据库中。
                return(Redirect("~/Error/ProblemNotExist"));
            }

            ProblemDetailModel model = ProblemDetailModel.FromProblemHandle(handle);

            return(View(model));
        }
Beispiel #2
0
        public ActionResult AddProblem(ProblemDetailModel model)
        {
            // 检查参数。
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                return(Redirect("~/Contest"));
            }

            int contestId;

            if (!int.TryParse(Request.QueryString["id"], out contestId))
            {
                return(Redirect("~/Contest"));
            }

            if (!ContestManager.Default.IsContestExist(contestId))
            {
                return(Redirect("~/Contest"));
            }

            // 验证数据模型。
            if (!TryValidateModel(model))
            {
                ViewBag.TitleErrorMessage = ModelStateHelper.GetFirstError(ModelState, "Title");
                return(View(model));
            }

            ContestHandle contestHandle = new ContestHandle(contestId);

            using (ContestDataProvider contestData = ContestDataProvider.Create(contestHandle, false))
            {
                // 验证用户操作权限。
                if (!UserSession.IsAuthorized(Session) ||
                    string.Compare(contestData.Creator, UserSession.GetUsername(Session), false) != 0)
                {
                    return(Redirect("~/Error/AccessDenied"));
                }

                // 在题目库中创建题目。
                ProblemHandle problemHandle = ProblemArchieveManager.Default.CreateProblem(
                    contestData.PeekNextProblemId());

                model.ResetNullStrings();
                model.SaveTo(problemHandle);            // 为避免死锁,该句不应放置在下面的 using 块中。

                using (ProblemDataProvider problemData = ProblemDataProvider.Create(problemHandle, false))
                {
                    problemData.ContestId          = contestId;
                    problemData.AuthorizationGroup = UserGroup.Guests;
                }

                // 将创建的题目添加至当前比赛中。
                contestData.AddProblem(problemHandle);
            }

            return(Redirect($"~/Contest/Show?id={contestId}"));
        }
        public ActionResult Add(ProblemDetailModel model)
        {
            if (!UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session)))
            {
                // 用户权限不足。
                return(Redirect("~/Error/AccessDenied"));
            }

            // 检查数据模型验证状态。
            bool hasError = false;

            TryValidateModel(model);
            if (ModelState.ContainsKey("Id") && ModelState["Id"].Errors.Count > 0)
            {
                hasError = true;
                ViewBag.ProblemIdErrorMessage = ModelState["Id"].Errors[0].ErrorMessage;
            }
            if (ModelState.ContainsKey("Title") && ModelState["Title"].Errors.Count > 0)
            {
                hasError = true;
                ViewBag.TitleErrorMessage = ModelState["Title"].Errors[0].ErrorMessage;
            }

            if (hasError)
            {
                return(View(model));
            }

            string problemId = "BIT" + model.ProblemId;

            if (ProblemArchieveManager.Default.IsProblemExist(problemId))
            {
                ViewBag.ProblemIdErrorMessage = "Problem with the same ID already exist in the archieve.";
                return(View(model));
            }

            // 在题目库中创建新题目。
            ProblemHandle handle = ProblemArchieveManager.Default.CreateProblem(problemId);

            model.SaveTo(handle);

            return(Redirect("~/Archieve"));
        }
Beispiel #4
0
 public ActionResult Problem(string id)
 {
     if (id != null)
     {
         UnitOfWork         uow   = new UnitOfWork();
         ProblemDetailModel model = new ProblemDetailModel();
         model.ProblemDetails = uow.UserRepository.GetQuestionDetailById(id);
         if (model.ProblemDetails != null)
         {
             model.ProblemId = id;
             return(View(model));
         }
         return(RedirectToAction("Index", "Home"));
     }
     else
     {
         return(RedirectToAction("Index", "Home"));
     }
 }
Beispiel #5
0
        public ActionResult Problem(ProblemDetailModel model)
        {
            UnitOfWork uow = new UnitOfWork();

            if (!ModelState.IsValid)
            {
                model.ProblemDetails = uow.UserRepository.GetQuestionDetailById(model.ProblemId);
                return(View(model));
            }
            StudentProblemBid problem = new StudentProblemBid
            {
                BidID        = Guid.NewGuid().ToString(),
                UserID       = Session["UserId"].ToString(),
                ProblemID    = model.ProblemId,
                CreationDate = DateTime.Now,
                Description  = model.Response,
                Status       = 1,
            };

            uow.StudentProblemBids.Insert(problem);
            uow.Save();
            return(RedirectToAction("problem", "student", new { problem = model.ProblemId }));
        }
Beispiel #6
0
        public ActionResult AddProblem()
        {
            // 检查查询参数。
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                return(Redirect("~/Contest"));
            }

            int contestId;

            if (!int.TryParse(Request.QueryString["id"], out contestId))
            {
                return(Redirect("~/Contest"));
            }

            if (!ContestManager.Default.IsContestExist(contestId))
            {
                return(Redirect("~/Contest"));
            }

            ContestHandle handle = new ContestHandle(contestId);

            using (ContestDataProvider data = ContestDataProvider.Create(handle, true))
            {
                // 检查用户操作权限。
                if (!UserSession.IsAuthorized(Session) ||
                    string.Compare(data.Creator, UserSession.GetUsername(Session), false) != 0)
                {
                    return(Redirect("~/Error/AccessDenied"));
                }
            }

            ProblemDetailModel model = new ProblemDetailModel();

            return(View(model));
        }
        public ActionResult Modify(ProblemDetailModel model)
        {
            if (!UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session)))
            {
                return(Redirect("~/Error/AccessDenied"));
            }

            // 验证模型。
            bool hasError = false;

            TryValidateModel(model);
            if (ModelState["Title"] != null && ModelState["Title"].Errors.Count > 0)
            {
                hasError = true;
                ViewBag.TitleErrorMessage = ModelState["Title"].Errors[0].ErrorMessage;
            }

            if (hasError)
            {
                return(View(model));
            }

            // 查询题目实体。
            ProblemHandle handle = ProblemArchieveManager.Default.GetProblemById(model.ProblemId);

            if (handle == null)
            {
                return(Redirect("~/Error/ProblemNotExist"));
            }

            // 写入修改后的数据。
            model.ResetNullStrings();
            model.SaveTo(handle);

            return(Redirect("~/Archieve"));
        }