protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("file.create", false)) return; string fileName = Resources.Moo.File_UploadPath + Path.GetRandomFileName() + "." + fileUpload.FileName.Split('.').Last(); fileUpload.SaveAs(fileName); int fileID; using (MooDB db = new MooDB()) { User currentUser = ((SiteUser)User.Identity).GetDBUser(db); UploadedFile file = new UploadedFile() { Name = txtName.Text, Description = txtDescription.Text, Path = fileName, CreatedBy=currentUser }; db.UploadedFiles.AddObject(file); db.SaveChanges(); fileID = file.ID; Logger.Info(db, "创建文件#" + fileID); } PageUtil.Redirect("创建成功", "~/File/?id=" + fileID); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("user.create", true)) return; using (MooDB db = new MooDB()) { User user = new User() { Name = txtUserName.Text, Password = Converter.ToSHA256Hash(txtPassword.Text), Role = SiteRoles.ByType[RoleType.NormalUser].GetDBRole(db), BriefDescription = "我很懒,什么都没留下~", Description = "我懒到头了,*真的*啥都没写", Email = "", Score = 0, PreferredLanguage = "c++" }; db.Users.AddObject(user); db.SaveChanges(); Logger.Info(db, "创建用户#" + user.ID); } PageUtil.Redirect("注册成功,请登录", "~/Special/Login.aspx"); }
protected void grid_RowDeleting(object sender, GridViewDeleteEventArgs e) { e.Cancel = true; int testCaseID = (int)e.Keys[0]; using (MooDB db = new MooDB()) { TestCase testCase = (from t in db.TestCases where t.ID == testCaseID select t).Single<TestCase>(); bool allowed = Permission.Check("testcase.delete", false, false) || User.Identity.IsAuthenticated && ((SiteUser)User.Identity).ID == testCase.CreatedBy.ID; if (!allowed) { Permission.Check("i'm superman.", false); return; } db.TestCases.DeleteObject(testCase); db.SaveChanges(); Logger.Warning(db, "删除测试数据#" + testCase.ID); } grid.Rows[e.RowIndex].Visible = false; }
protected void Page_Load(object sender, EventArgs e) { if (!Permission.Check("mail.read", false)) return; if (!Page.IsPostBack) { using (MooDB db = new MooDB()) { if (Request["id"] != null) { CollectEntityByID(db, int.Parse(Request["id"])); } if (mail == null) { PageUtil.Redirect(Resources.Moo.FoundNothing, "~/"); return; } int myUserID = ((SiteUser)User.Identity).ID; if (myUserID != mail.From.ID && myUserID != mail.To.ID) { Permission.Check("i'm superman", false); return; } if (mail.To.ID == myUserID) { mail.IsRead = true; Logger.Info(db, "阅读邮件#" + mail.ID); } db.SaveChanges(); Page.DataBind(); } } }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; int receiverID=(int)ViewState["receiverID"]; using (MooDB db = new MooDB()) { Mail mail=new Mail() { From = ((SiteUser)User.Identity).GetDBUser(db), To = (from u in db.Users where u.ID == receiverID select u).Single<User>(), Title = txtTitle.Text, Content = txtContent.Text, IsRead = false, }; db.Mails.AddObject(mail); db.SaveChanges(); Logger.Info(db,string.Format("向用户#{0}发送邮件#{1}",receiverID,mail.ID)); } PageUtil.Redirect("创建成功", "~/Mail/List.aspx"); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; int problemID = (int)ViewState["problemID"]; using (MooDB db = new MooDB()) { Problem problem = (from p in db.Problems where p.ID == problemID select p).Single<Problem>(); if (problem.Lock) { if (!Permission.Check("problem.locked.update", false)) return; } else { if (!Permission.Check("problem.update", false)) return; } User user = ((SiteUser)User.Identity).GetDBUser(db); ProblemRevision revision = new ProblemRevision() { Content = txtContent.Text, Problem = problem, Reason = txtReason.Text, CreatedBy = user }; db.ProblemRevisions.AddObject(revision); problem.LatestRevision = revision; db.SaveChanges(); Logger.Info(db, string.Format("更新题目#{0},新版本为#{1}", problem.ID, revision.ID)); } PageUtil.Redirect("更新成功", "~/Problem/?id=" + problemID); }
protected void btnAttend_Click(object sender, EventArgs e) { if (!Permission.Check("contest.attend", false)) return; int contestID = (int)ViewState["contestID"]; using (MooDB db = new MooDB()) { contest = (from c in db.Contests where c.ID == contestID select c).Single<Contest>(); if (DateTimeOffset.Now > contest.EndTime) { return; } User currentUser = ((SiteUser)User.Identity).GetDBUser(db); if (contest.User.Contains(currentUser)) { return; } contest.User.Add(currentUser); db.SaveChanges(); Logger.Info(db, "报名比赛#" + contest.ID); } Response.Redirect("~/Contest/?id=" + contestID, true); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("problem.modify", false)) return; int problemID = (int)ViewState["problemID"]; using (MooDB db = new MooDB()) { problem = (from p in db.Problems where p.ID == problemID select p).Single<Problem>(); problem.Name = txtName.Text; problem.Type = ddlType.SelectedValue; problem.Hidden = chkHidden.Checked; problem.TestCaseHidden = chkTestCaseHidden.Checked; problem.AllowTesting = chkAllowTesting.Checked; problem.Lock = chkLock.Checked; problem.LockPost = chkLockPost.Checked; problem.LockRecord = chkLockRecord.Checked; problem.LockSolution = chkLockSolution.Checked; problem.LockTestCase = chkLockTestCase.Checked; db.SaveChanges(); Logger.Info(db, "修改题目#" + problem.ID); } PageUtil.Redirect("修改成功", "~/Problem/?id=" + problemID); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!User.Identity.IsAuthenticated) { Permission.Check("i'm super man.", false); return; } int userID = (int)ViewState["userID"]; using (MooDB db = new MooDB()) { user = (from u in db.Users where u.ID == userID select u).Single<User>(); SiteUser siteUser = (SiteUser)User.Identity; canModify = siteUser.ID == user.ID || Permission.Check("user.modify", false, false) && siteUser.Role.Type < SiteRoles.ByID[user.Role.ID].Type; if (!canModify) { Permission.Check("i'm super man.", false); return; } if (Permission.Check("user.name.modify", false, false)) { user.Name = txtName.Text; } if (txtPassword.Text.Length > 0) { user.Password = Converter.ToSHA256Hash(txtPassword.Text); } user.Role = SiteRoles.ByID[int.Parse(ddlRole.SelectedValue)].GetDBRole(db); user.Email = txtEmail.Text; user.BriefDescription = txtBriefDescription.Text; user.Description = txtDescription.Text; db.SaveChanges(); //Refresh SiteUser if (SiteUsers.ByID.ContainsKey(user.ID)) { siteUser = SiteUsers.ByID[user.ID]; siteUser.Role = SiteRoles.ByID[user.Role.ID]; siteUser.Name = user.Name; } Logger.Info(db, "修改用户#" + user.ID); } PageUtil.Redirect("修改成功", "~/User/?id=" + userID); }
static int MainLoop() { using (MooDB db = new MooDB()) { db.ExecuteStoreCommand("DELETE FROM [dbo].[Logs] WHERE [CreateTime] < @minTime", new SqlParameter("minTime", DateTimeOffset.Now.AddMonths(-1))); db.SaveChanges(); } return 5 * 60 * 1000; }
public static void Fatal(MooDB db, string info) { db.Logs.AddObject(new Log() { CreateTime = DateTimeOffset.Now, Level = (byte)LogLevel.Fatal, User = GetCurrentUser(db), Info = info, RemoteAddress = GetRemoteAddress() }); db.SaveChanges(); }
static int MainLoop() { using (MooDB db = new MooDB()) { Contest contest = (from c in db.Contests where c.Status == "Before" && c.StartTime <= DateTimeOffset.Now select c).FirstOrDefault<Contest>(); if (contest != null) { contest.Status = "During"; foreach (Problem problem in contest.Problem) { problem.AllowTesting = contest.AllowTestingOnStart; problem.TestCaseHidden = contest.HideTestCaseOnStart; problem.LockPost = contest.LockPostOnStart; problem.LockTestCase = contest.LockTestCaseOnStart; problem.LockSolution = contest.LockSolutionOnStart; problem.Lock = contest.LockProblemOnStart; problem.Hidden = contest.HideProblemOnStart; problem.LockRecord = contest.LockRecordOnStart; } db.SaveChanges(); Logger.Info(db, "开始比赛#" + contest.ID); return 0; } contest = (from c in db.Contests where c.Status == "During" && c.EndTime <= DateTimeOffset.Now select c).FirstOrDefault<Contest>(); if (contest != null) { contest.Status = "After"; foreach (Problem problem in contest.Problem) { problem.AllowTesting = contest.AllowTestingOnEnd; problem.TestCaseHidden = contest.HideTestCaseOnEnd; problem.LockPost = contest.LockPostOnEnd; problem.LockTestCase = contest.LockTestCaseOnEnd; problem.LockSolution = contest.LockSolutionOnEnd; problem.Lock = contest.LockProblemOnEnd; problem.Hidden = contest.HideProblemOnEnd; problem.LockRecord = contest.LockRecordOnEnd; } db.SaveChanges(); Logger.Info(db, "结束比赛#" + contest.ID); return 0; } return 60 * 1000; } }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; int postID = (int)ViewState["postID"]; using (MooDB db = new MooDB()) { Post post = (from p in db.Posts where p.ID == postID select p).Single<Post>(); if (post.Lock || post.Problem != null && post.Problem.LockPost) { if (!Permission.Check("post.locked.reply", false)) return; } else { if (!Permission.Check("post.reply", false)) return; } User currentUser = ((SiteUser)User.Identity).GetDBUser(db); //Send Mails SortedSet<User> userBeAt; string parsed = WikiParser.ParseAt(db, txtContent.Text, out userBeAt); foreach (User user in userBeAt) { db.Mails.AddObject(new Mail() { Title = "我@了您哦~", Content = "我在帖子[url:" + post.Name + "|../Post/?id=" + post.ID + "]中*@*了您哦~快去看看!\r\n\r\n*原文如下*:\r\n" + parsed, From = currentUser, To = user, IsRead = false }); } PostItem postItem = new PostItem() { Post = post, Content = txtContent.Text, CreatedBy = currentUser }; db.PostItems.AddObject(postItem); db.SaveChanges(); Logger.Info(db, string.Format("创建帖子#{0}的新项#{1}", post.ID, postItem.ID)); } PageUtil.Redirect("回复成功", "~/Post/?id=" + postID); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("problem.create", false)) return; int problemID; using (MooDB db = new MooDB()) { User currentUser = ((SiteUser)User.Identity).GetDBUser(db); Problem problem = new Problem() { Name = txtName.Text, Type = ddlType.SelectedValue, AllowTesting = true, Lock = false, LockPost = false, LockRecord = false, LockSolution = false, LockTestCase = false, Hidden = false, TestCaseHidden = false, }; ProblemRevision revision = new ProblemRevision() { Problem = problem, Content = txtContent.Text, Reason = "创建题目", CreatedBy = currentUser }; SolutionRevision solution = new SolutionRevision() { Problem = problem, Content = "暂无题解", Reason = "创建题解", CreatedBy = currentUser }; problem.LatestRevision = revision; problem.LatestSolution = solution; db.ProblemRevisions.AddObject(revision); db.SaveChanges(); problemID = revision.Problem.ID; Logger.Info(db, "创建题目#" + problemID); } PageUtil.Redirect("创建成功", "~/Problem/?id=" + problemID); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("contest.create", false)) return; int contestID; using (MooDB db = new MooDB()) { Contest contest = new Contest() { Title = txtTitle.Text, Description = txtDescription.Text, Status = "Before", StartTime = timeStart.Value, EndTime = timeEnd.Value, AllowTestingOnStart = chkAllowTestingOnStart.Checked, HideTestCaseOnStart = chkHideTestCaseOnStart.Checked, LockProblemOnStart = chkLockProblemOnStart.Checked, LockTestCaseOnStart = chkLockTestCaseOnStart.Checked, LockSolutionOnStart = chkLockSolutionOnStart.Checked, LockPostOnStart = chkLockPostOnStart.Checked, LockRecordOnStart=chkLockRecordOnStart.Checked, HideProblemOnStart=chkHideProblemOnStart.Checked, AllowTestingOnEnd=chkAllowTestingOnEnd.Checked, HideTestCaseOnEnd=chkHideTestCaseOnEnd.Checked, LockProblemOnEnd=chkLockProblemOnEnd.Checked, LockTestCaseOnEnd=chkLockTestCaseOnEnd.Checked, LockSolutionOnEnd=chkLockSolutionOnEnd.Checked, LockPostOnEnd=chkLockPostOnEnd.Checked, LockRecordOnEnd=chkLockRecordOnEnd.Checked , HideProblemOnEnd=chkHideProblemOnEnd.Checked }; db.Contests.AddObject(contest); db.SaveChanges(); contestID = contest.ID; Logger.Info(db, "创建比赛#" + contestID); } PageUtil.Redirect("创建成功", "~/Contest/?id=" + contestID); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("contest.modify", false)) return; int contestID = (int)ViewState["contestID"]; using (MooDB db = new MooDB()) { Contest contest = (from c in db.Contests where c.ID == contestID select c).Single<Contest>(); contest.Title = txtTitle.Text; contest.Description = txtDescription.Text; contest.StartTime = timeStart.Value; contest.EndTime = timeEnd.Value; contest.AllowTestingOnStart = chkAllowTestingOnStart.Checked; contest.HideTestCaseOnStart = chkHideTestCaseOnStart.Checked; contest.LockProblemOnStart = chkLockProblemOnStart.Checked; contest.LockTestCaseOnStart = chkLockTestCaseOnStart.Checked; contest.LockSolutionOnStart = chkLockSolutionOnStart.Checked; contest.LockPostOnStart = chkLockPostOnStart.Checked; contest.LockRecordOnStart = chkLockRecordOnStart.Checked; contest.HideProblemOnStart = chkHideProblemOnStart.Checked; contest.AllowTestingOnEnd = chkAllowTestingOnEnd.Checked; contest.HideTestCaseOnEnd = chkHideTestCaseOnEnd.Checked; contest.LockProblemOnEnd = chkLockProblemOnEnd.Checked; contest.LockTestCaseOnEnd = chkLockTestCaseOnEnd.Checked; contest.LockSolutionOnEnd = chkLockSolutionOnEnd.Checked; contest.LockPostOnEnd = chkLockPostOnEnd.Checked; contest.LockRecordOnEnd = chkLockRecordOnEnd.Checked; contest.HideProblemOnEnd = chkHideProblemOnEnd.Checked; db.SaveChanges(); Logger.Info(db, "修改比赛#" + contest.ID); } PageUtil.Redirect("修改成功", "~/Contest/?id=" + contestID); }
protected void grid_RowDeleting(object sender, GridViewDeleteEventArgs e) { e.Cancel = true; int fileID = (int)e.Keys[0]; using (MooDB db = new MooDB()) { UploadedFile file = (from f in db.UploadedFiles where f.ID == fileID select f).Single<UploadedFile>(); bool allowed = User.Identity.IsAuthenticated && ((SiteUser)User.Identity).ID == file.CreatedBy.ID || Permission.Check("file.delete", false,false); if (!allowed) { Permission.Check("i'm super man.", false); return; } var spjTestCases = from t in db.TestCases.OfType<SpecialJudgedTestCase>() where t.Judger.ID == file.ID select t; var interactiveTestCases = from t in db.TestCases.OfType<InteractiveTestCase>() where t.Invoker.ID == file.ID select t; var answerOnlyTestCases = from t in db.TestCases.OfType<AnswerOnlyTestCase>() where t.Judger.ID == file.ID select t; if (spjTestCases.Any() || interactiveTestCases.Any() || answerOnlyTestCases.Any()) { PageUtil.Redirect("尚有测试点使用此文件,无法删除。", "~/File/List.aspx"); return; } File.Delete(file.Path); db.UploadedFiles.DeleteObject(file); db.SaveChanges(); Logger.Warning(db, "删除文件#" + file.ID); } grid.Rows[e.RowIndex].Visible = false; }
protected void grid_RowDeleting(object sender, GridViewDeleteEventArgs e) { e.Cancel = true; if (!Permission.Check("contest.delete", false)) return; int contestID = (int)e.Keys[0]; using (MooDB db = new MooDB()) { Contest contest = (from c in db.Contests where c.ID == contestID select c).Single<Contest>(); contest.Problem.Clear(); contest.User.Clear(); db.Contests.DeleteObject(contest); db.SaveChanges(); Logger.Warning(db, "删除比赛#" + contest.ID); } grid.Rows[e.RowIndex].Visible = false; }
protected void grid_RowDeleting(object sender, GridViewDeleteEventArgs e) { if (!Permission.Check("problem.delete", false)) e.Cancel = true; int problemID = (int)e.Keys[0]; using (MooDB db = new MooDB()) { Problem problem = (from p in db.Problems where p.ID == problemID select p).Single<Problem>(); if (problem.Contest.Any()) { PageUtil.Redirect("请先删除相关比赛。", "~/Problem/List.aspx"); return; } db.Problems.DeleteObject(problem); db.SaveChanges(); Logger.Warning(db, "删除题目#" + problem.ID); } grid.Rows[e.RowIndex].Visible = false; }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("post.modify", false)) return; int postID = (int)ViewState["postID"]; using (MooDB db = new MooDB()) { post = (from p in db.Posts where p.ID == postID select p).SingleOrDefault<Post>(); post.Name = txtName.Text; post.Lock = chkLock.Checked; post.OnTop = chkOnTop.Checked; db.SaveChanges(); Logger.Info(db, "修改帖子#" + post.ID); } PageUtil.Redirect("修改成功", "~/Post/?id=" + postID); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; int recordID = (int)ViewState["recordID"]; using (MooDB db = new MooDB()) { record = (from r in db.Records where r.ID == recordID select r).Single<Record>(); canModify = Permission.Check("record.modify", false, false) || User.Identity.IsAuthenticated && record.User.ID == ((SiteUser)User.Identity).ID; if (!canModify) { Permission.Check("i'm super man.", false); return; } record.PublicCode = chkPublicCode.Checked; db.SaveChanges(); } PageUtil.Redirect("修改成功", "~/Record/?id=" + recordID); }
protected void btnAdd_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("contest.modify", false)) return; int contestID = (int)ViewState["contestID"]; int problemID = int.Parse(txtProblemID.Text); using (MooDB db = new MooDB()) { Problem problem = (from p in db.Problems where p.ID == problemID select p).Single<Problem>(); contest = (from c in db.Contests where c.ID == contestID select c).Single<Contest>(); contest.Problem.Add(problem); db.SaveChanges(); Logger.Info(db, string.Format("向比赛#{0}加入题目#{1}", contest.ID, problem.ID)); } Response.Redirect("~/Contest/?id=" + contestID); }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; if (!Permission.Check("homepage.update", false)) return; using (MooDB db = new MooDB()) { User currentUser = ((SiteUser)User.Identity).GetDBUser(db); HomepageRevision revision=new HomepageRevision() { Title = txtTitle.Text, Content = txtContent.Text, Reason = txtReason.Text, CreatedBy = currentUser }; db.HomepageRevisions.AddObject(revision); db.SaveChanges(); Logger.Info(db, "更新主页,新版本为#" + revision.ID); } PageUtil.Redirect("更新成功", "~/"); }
protected void grid_RowDeleting(object sender, GridViewDeleteEventArgs e) { if (!Permission.Check("contest.modify", false)) return; int problemID = (int)e.Keys[0]; int contestID = (int)ViewState["contestID"]; using (MooDB db = new MooDB()) { contest = (from c in db.Contests where c.ID == contestID select c).Single<Contest>(); Problem problem = (from p in db.Problems where p.ID == problemID select p).Single<Problem>(); contest.Problem.Remove(problem); db.SaveChanges(); Logger.Warning(db, string.Format("删除比赛#{0}的题目#{1}", contest.ID, problem.ID)); } Response.Redirect("~/Contest/?id=" + contestID); }
public int CreateTranditionalTestCase(string sToken, int problemID, byte[] input, byte[] answer, int timeLimit, int memoryLimit, int score) { Authenticate(sToken); using (MooDB db = new MooDB()) { Problem problem = (from p in db.Problems where p.ID == problemID select p).SingleOrDefault<Problem>(); if (problem == null) throw new ArgumentException("无此题目"); if (problem.Type != "Tranditional") throw new ArgumentException("不是传统题"); if (problem.LockTestCase) { Authorize("testcase.locked.create"); } else { Authorize("testcase.create"); } User currentUser = CurrentUser.GetDBUser(db); TestCase testCase = new TranditionalTestCase() { Answer = answer, CreatedBy = currentUser, Input = input, MemoryLimit = memoryLimit, TimeLimit = timeLimit, Problem = problem, Score = score }; db.TestCases.AddObject(testCase); db.SaveChanges(); return testCase.ID; } }
public int CreateProblem(string sToken, string name, string type, string content) { Authenticate(sToken); Authorize("problem.create"); using (MooDB db = new MooDB()) { User currentUser = CurrentUser.GetDBUser(db); Problem problem = new Problem() { Name = name, Type = type, AllowTesting = true, Hidden = false, Lock = false, LockPost = false, LockRecord = false, LockSolution = false, LockTestCase = false, MaximumScore = null, ScoreSum = 0, SubmissionCount = 0, SubmissionUser = 0, TestCaseHidden = false }; ProblemRevision revision = new ProblemRevision() { Content = content, CreatedBy = currentUser, Reason = "创建题目", Problem = problem }; SolutionRevision solution = new SolutionRevision() { Content = "暂无题解", CreatedBy = currentUser, Reason = "创建题解", Problem = problem }; problem.LatestRevision = revision; problem.LatestSolution = solution; db.SaveChanges(); return problem.ID; } }
public static void AddTestData(MooDB db) { //Users User MrPhone = new User() { Name = "onetwogoo", Password = Converter.ToSHA256Hash("123456"), Role = SiteRoles.ByType[RoleType.Organizer].GetDBRole(db), BriefDescription = "我觉得我写这么多应该够两行了", Description = "我是--屌丝--我骄傲,我为国家省钞票!", Email = "*****@*****.**", Score = 256, PreferredLanguage="c++" }; db.Users.AddObject(MrPhone); User ShaBi = new User() { Name = "ShaBi", Password = Converter.ToSHA256Hash("ShaBi"), Role = SiteRoles.ByType[RoleType.Worker].GetDBRole(db), BriefDescription = "我觉得我写这么多应该够两行了", Description = "Moo*真*他妈的好!", Email = "*****@*****.**", Score = 128, PreferredLanguage="c++" }; db.Users.AddObject(ShaBi); User Baby = new User() { Name = "Baby", Password = Converter.ToSHA256Hash("Baby"), Role = SiteRoles.ByType[RoleType.NormalUser].GetDBRole(db), BriefDescription = "我啥都不懂", Description = "真不懂", Email = "*****@*****.**", Score = 1000, PreferredLanguage="pascal" }; db.Users.AddObject(Baby); db.Users.AddObject(new User() { Name = "BeiJu", Password = Converter.ToSHA256Hash("BeiJu"), Role = SiteRoles.ByType[RoleType.Malefactor].GetDBRole(db), BriefDescription = "冤枉啊!啥都没干就被封了!", Description = "太他妈冤枉了!", Email = "", Score = 0, PreferredLanguage="c" }); //Homepage db.HomepageRevisions.AddObject(new HomepageRevision() { Title = "欢迎测试", Content = "测试用户:\n" + "onetwogoo/123456 组织者\n" + "ShaBi/ShaBi 工作者\n" + "Baby/Baby 普通用户\n" + "BeiJu/BeiJu 作恶者", Reason = "测试用原因", CreatedBy = ShaBi }); //Problems Problem APlusB = new Problem() { Name = "A+B问题", Type = "Tranditional", Lock = false, Hidden = false, TestCaseHidden = false, AllowTesting = true, LockPost = false, LockRecord = false, LockSolution = false, LockTestCase = false, SubmissionCount = 10, ScoreSum = 100, SubmissionUser = 1, MaximumScore = 30 }; Problem CPlusD = new Problem() { Name = "C+D问题", Type = "Tranditional", Lock = true, Hidden = false, TestCaseHidden = false, LockPost = true, LockTestCase = true, LockSolution = true, LockRecord = true, AllowTesting = true, SubmissionCount = 20, ScoreSum = 5, SubmissionUser = 2, MaximumScore = 120 }; db.Problems.AddObject(CPlusD); Problem EPlusF = new Problem() { Name = "E+F问题", Type = "Tranditional", Lock = false, LockPost = false, LockRecord = false, LockSolution = false, LockTestCase = false, AllowTesting = true, Hidden = true, TestCaseHidden = true, SubmissionCount = 40, ScoreSum = 300, SubmissionUser = 4, MaximumScore = 110 }; db.Problems.AddObject(EPlusF); Problem Cat = new Problem() { Name = "Cat", Type = "SpecialJudged", Lock = false, LockPost = false, LockRecord = false, LockSolution = false, LockTestCase = false, AllowTesting = true, Hidden = false, TestCaseHidden = false }; db.Problems.AddObject(Cat); Problem EasyAPlusB = new Problem() { Name = "Easy A+B", Type = "Interactive", Lock = false, LockPost = false, LockRecord = false, LockSolution = false, LockTestCase = false, AllowTesting = true, Hidden = false, TestCaseHidden = false }; db.Problems.AddObject(EasyAPlusB); Problem AnswerAPlusB = new Problem() { Name = "Answer A+B", Type = "AnswerOnly", Lock = false, LockPost = false, LockRecord = false, LockSolution = false, LockTestCase = false, AllowTesting = true, Hidden = false, TestCaseHidden = false }; //File UploadedFile file = new UploadedFile() { Name = "SPJ for Cat", Description = "给Cat的SPJ", Path = "D:\\Cat.exe", CreatedBy=MrPhone }; db.UploadedFiles.AddObject(file); //Test Cases db.TestCases.AddObject(new TranditionalTestCase() { Problem = CPlusD, Input = Encoding.ASCII.GetBytes("qwertyuioplkjhgfdsazxcvbnm"), Answer = Encoding.ASCII.GetBytes("mnbvcxzasdfghjklpoiuytrewq"), TimeLimit = 1000, MemoryLimit = 1024 * 1024 * 6, Score = 12, CreatedBy=MrPhone }); db.SaveChanges(); db.TestCases.AddObject(new TranditionalTestCase() { Problem = APlusB, Input = Encoding.ASCII.GetBytes("1 2"), Answer = Encoding.ASCII.GetBytes("3"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Score = 50, CreatedBy = MrPhone }); db.TestCases.AddObject(new TranditionalTestCase() { Problem = APlusB, Input = Encoding.ASCII.GetBytes("100 345"), Answer = Encoding.ASCII.GetBytes("445"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Score = 50, CreatedBy = MrPhone }); db.TestCases.AddObject(new SpecialJudgedTestCase() { Problem = Cat, Input = Encoding.ASCII.GetBytes("1 2"), Answer = Encoding.ASCII.GetBytes("Miao~"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Judger = file, CreatedBy = MrPhone }); file = new UploadedFile() { Name = "Invoker for EasyA+B", Description = "EasyA+B的调用程序", Path = "D:\\EasyA+B.o", CreatedBy = MrPhone }; db.TestCases.AddObject(new InteractiveTestCase() { Problem = EasyAPlusB, TestData = Encoding.ASCII.GetBytes("1123 3212"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Invoker = file, CreatedBy = MrPhone }); db.TestCases.AddObject(new InteractiveTestCase() { Problem = EasyAPlusB, TestData = Encoding.ASCII.GetBytes("1 3"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Invoker = file, CreatedBy = MrPhone }); file = new UploadedFile() { Name = "Judger Of Answer A+B", Description="*测评程序*啊", Path = "D:\\AnswerA+B.exe", CreatedBy = MrPhone }; AnswerOnlyTestCase answerOnlyTestCase1 = new AnswerOnlyTestCase() { Problem = AnswerAPlusB, TestData = Encoding.ASCII.GetBytes("23 345"), Judger = file, CreatedBy = MrPhone }; db.TestCases.AddObject(answerOnlyTestCase1); AnswerOnlyTestCase answerOnlyTestCase2 = new AnswerOnlyTestCase() { Problem = AnswerAPlusB, TestData = Encoding.ASCII.GetBytes("453 123"), Judger = file, CreatedBy = MrPhone }; db.TestCases.AddObject(answerOnlyTestCase2); //Problem Revision db.ProblemRevisions.AddObject(new ProblemRevision() { Problem = APlusB, Content = "输入A,B。输出A+B。啊!输错了!", Reason = "蛋疼", CreatedBy = ShaBi }); db.ProblemRevisions.AddObject(new ProblemRevision() { Problem = APlusB, Content = "输入A,B。输出它们的和。", Reason = "蛋疼", CreatedBy = MrPhone }); db.ProblemRevisions.AddObject(new ProblemRevision() { Problem = APlusB, Content = "输入俩蛋,输出它们的和。", Reason = "蛋疼", CreatedBy = ShaBi }); APlusB.LatestRevision = new ProblemRevision() { Problem = APlusB, Content = "输入两个Int32,输出它们的和。", Reason = "蛋疼", CreatedBy = MrPhone }; CPlusD.LatestRevision = new ProblemRevision() { Problem = CPlusD, Content = "输入C,D。*注意是Int64*输出它们的和。", Reason = "蛋疼", CreatedBy = ShaBi }; EPlusF.LatestRevision = new ProblemRevision() { Problem = EPlusF, Content = "输入E,F。输出它们的和。", Reason = "蛋疼", CreatedBy = ShaBi }; Cat.LatestRevision = new ProblemRevision() { Problem = Cat, Content = "模拟Cat", Reason = "擦!", CreatedBy = MrPhone }; EasyAPlusB.LatestRevision = new ProblemRevision() { Problem = EasyAPlusB, Content = "仅需编写一个int APlusB(int,int);即可。", Reason = "This is Interactive", CreatedBy = ShaBi }; AnswerAPlusB.LatestRevision = new ProblemRevision() { Problem = AnswerAPlusB, Content = "提交答案吧!", Reason = "None", CreatedBy = MrPhone }; //Solution db.SolutionRevisions.AddObject(new SolutionRevision() { Problem = APlusB, Content = "很简单。水题不解释。", Reason = "太水了", CreatedBy = ShaBi }); APlusB.LatestSolution = new SolutionRevision() { Problem = APlusB, Content = "var a,b:*int64*; begin read(a,b); write(a+b); end.", Reason = "上代码", CreatedBy = MrPhone }; CPlusD.LatestSolution = new SolutionRevision() { Problem = CPlusD, Content = "这个好像跟A+B一样吧", Reason = "神犇题解", CreatedBy = ShaBi }; EPlusF.LatestSolution = new SolutionRevision() { Problem = EPlusF, Content = "太难了,不会啊", Reason = "垃圾题解", CreatedBy = ShaBi }; Cat.LatestSolution = new SolutionRevision() { Problem = Cat, Content = "抄!", Reason = "", CreatedBy = ShaBi }; EasyAPlusB.LatestSolution = new SolutionRevision() { Problem = EasyAPlusB, Content = "就……就A了。", Reason = "", CreatedBy = MrPhone }; AnswerAPlusB.LatestSolution = new SolutionRevision() { Problem = AnswerAPlusB, Content = "弱爆了", Reason = "xxx", CreatedBy = ShaBi }; //Post Post post = new Post() { Name = "讨论一下出题人心理", Problem = APlusB, Lock = false, OnTop = true, }; db.Posts.AddObject(post); db.PostItems.AddObject(new PostItem() { Post = post, Content = "出--这么水--的题,找死啊", CreatedBy = ShaBi, }); db.SaveChanges(); db.PostItems.AddObject(new PostItem() { Post = post, Content = "靠!作为出题人我压力很大啊!", CreatedBy = MrPhone }); post = new Post() { Name = "认真研究一下此题变形", Problem = APlusB, Lock = false, OnTop = false }; db.Posts.AddObject(post); db.PostItems.AddObject(new PostItem() { Post = post, Content = "A+B能有什么变形呢?", CreatedBy = MrPhone }); db.SaveChanges(); db.PostItems.AddObject(new PostItem() { Post = post, Content = "靠!没人回答,我寂寞了~", CreatedBy = MrPhone }); post = new Post() { Name = "讨论一下Moo好不好", Lock = true, OnTop = false }; db.Posts.AddObject(post); db.PostItems.AddObject(new PostItem() { Post = post, Content = "Moo很好啊。*注意此贴没有对应题目且被锁*", CreatedBy = MrPhone }); //Mail db.Mails.AddObject(new Mail() { Title = "咱把Moo黑了如何?", Content = "嘿!onetwogoo!把Moo--黑--了吧!", IsRead = true, From = ShaBi, To = MrPhone }); db.SaveChanges(); db.Mails.AddObject(new Mail() { Title = "找死啊!", Content = "我会去黑自己网站吗?", IsRead = true, From = MrPhone, To = ShaBi }); db.SaveChanges(); db.Mails.AddObject(new Mail() { Title = "没准嘞!", Content = "敢说你没这想法", IsRead = true, From = ShaBi, To = MrPhone }); db.SaveChanges(); db.Mails.AddObject(new Mail() { Title = "傻逼", Content = "不解释!", IsRead = false, From = MrPhone, To = ShaBi }); db.SaveChanges(); db.Mails.AddObject(new Mail() { Title = "把我弄成组织者如何啊", Content = "???", IsRead = false, From = Baby, To = MrPhone }); db.SaveChanges(); db.Mails.AddObject(new Mail() { Title = "美死你", Content = "怎么可能", IsRead = true, From = MrPhone, To = Baby }); db.SaveChanges(); //Contest Contest contest = new Contest() { StartTime = DateTimeOffset.Now.AddMinutes(1), EndTime = DateTimeOffset.Now.AddMinutes(2), Status = "Before", Title = "Moo水题大赛", Description = "全是--水--题啊!", LockProblemOnStart = true, LockPostOnStart = true, LockSolutionOnStart = true, LockTestCaseOnStart = true, AllowTestingOnStart = false, HideTestCaseOnStart = true, LockRecordOnStart = false, HideProblemOnStart = false, AllowTestingOnEnd = true, LockPostOnEnd = false, LockProblemOnEnd = false, LockRecordOnEnd = false, LockSolutionOnEnd = false, LockTestCaseOnEnd = false, HideProblemOnEnd = false, HideTestCaseOnEnd = false, }; //contest.Problem.Add(APlusB); contest.Problem.Add(CPlusD); contest.User.Add(ShaBi); //Record JudgeInfo info = new JudgeInfo() { Info = "Test", Score = 10 }; Record record = new Record() { Code = "", Language = "cxx", CreateTime = DateTimeOffset.Now.AddMinutes(1.5), User = ShaBi, Problem = APlusB, PublicCode = true }; record.JudgeInfo = info; info.Record = record; db.Records.AddObject(record); info = new JudgeInfo() { Info = "test", Score = 30 }; record = new Record() { Code = "", Language = "c++", CreateTime = DateTimeOffset.Now.AddMinutes(1.5), User = ShaBi, Problem = APlusB, PublicCode = true }; record.JudgeInfo = info; info.Record = record; db.Records.AddObject(record); info = new JudgeInfo() { Info = "test", Score = 60 }; record = new Record() { Code = "", Language = "c++", CreateTime = DateTimeOffset.Now.AddMinutes(1.5), User = ShaBi, Problem = CPlusD, PublicCode = true }; record.JudgeInfo = info; info.Record = record; db.Records.AddObject(record); db.Records.AddObject(new Record() { Code = "int APlusB(int x,int y){return 4;}", CreateTime = DateTimeOffset.Now, Language = "c++", Problem = EasyAPlusB, User = MrPhone, PublicCode = true }); db.Records.AddObject(new Record() { Code = "<Moo:Answer testCase='" + answerOnlyTestCase1.ID + "'>368</Moo:Answer>\n" + "<Moo:Answer testCase='" + answerOnlyTestCase2.ID + "'>496</Moo:Answer>", CreateTime = DateTimeOffset.Now, Language = "plaintext", Problem = AnswerAPlusB, User = MrPhone, PublicCode = true }); db.SaveChanges(); }
protected void btnRejudge_Click(object sender, EventArgs e) { if (!Permission.Check("record.judgeinfo.delete.limited", false)) return; if (!Permission.Check("record.judgeinfo.delete", false, false)) { if (!allowRejudge) { PageUtil.Redirect("请喝杯茶", Request.RawUrl); return; } allowRejudge = false; rejudgeTimer.Start(); } LinkButton theButton = (LinkButton)sender; GridViewRow row = (GridViewRow)theButton.Parent.Parent; int recordID = (int)grid.DataKeys[row.RowIndex][0]; using (MooDB db = new MooDB()) { Record record = (from r in db.Records where r.ID == recordID select r).Single<Record>(); JudgeInfo info = record.JudgeInfo; if (info == null) { PageUtil.Redirect("已经提交重测,请耐心等候。", Request.RawUrl); return; } User currentUser = ((SiteUser)User.Identity).GetDBUser(db); //Refresh Score DeleteJudgeInfoAndRefresh(db, record, info); //Send A Mail db.Mails.AddObject(new Mail() { Title = "您提交的记录 #" + record.ID + " 被我提请重新测评", From = currentUser, To = record.User, Content = "您为 [url:" + record.Problem.Name + "|../Problem/?id=" + record.Problem.ID + "] 提交的记录已被我提请重新测评,请[url:点击这里|../Record/?id=" + record.ID + "]了解最新情况。\n\n" + "*注意*:原始测评结果为*" + info.Score + "*分。详细测评信息为:\n" + info.Info, IsRead = false }); record.JudgeInfo = null; db.JudgeInfos.DeleteObject(info); db.SaveChanges(); Logger.Warning(db, string.Format("删除记录#{0}的测评信息#{1}", record.ID, info.ID)); } PageUtil.Redirect("提交重测成功", Request.RawUrl); }
protected void grid_RowDeleting(object sender, GridViewDeleteEventArgs e) { if (!Permission.Check("record.delete", false)) return; int recordID = (int)e.Keys[0]; using (MooDB db = new MooDB()) { Record record = (from r in db.Records where r.ID == recordID select r).Single<Record>(); if (record.JudgeInfo != null) { DeleteJudgeInfoAndRefresh(db, record, record.JudgeInfo); db.JudgeInfos.DeleteObject(record.JudgeInfo); db.SaveChanges(); } DeleteRecordAndRefresh(db, record); db.Records.DeleteObject(record); db.SaveChanges(); Logger.Warning(db, "删除记录#" + record.ID); } grid.Rows[e.RowIndex].Visible = false; }
protected void btnSubmit_Click(object sender, EventArgs e) { if (!Page.IsValid) return; int problemID = (int)ViewState["problemID"]; using (MooDB db = new MooDB()) { problem = (from p in db.Problems where p.ID == problemID select p).Single<Problem>(); if (problem.LockRecord) { if (!Permission.Check("record.locked.create", false)) return; } else { if (!Permission.Check("record.create", false)) return; } User currentUser = ((SiteUser)User.Identity).GetDBUser(db); Record record; if (problem.Type == "AnswerOnly") { record = new Record() { Problem = problem, User = currentUser, Code = MergeAnswers(db), Language = "plaintext", PublicCode = chkPublicCode.Checked, CreateTime = DateTimeOffset.Now }; } else { record = new Record() { Problem = problem, User = currentUser, Code = txtCode.Text, Language = ddlLanguage.SelectedValue, PublicCode = chkPublicCode.Checked, CreateTime = DateTimeOffset.Now }; currentUser.PreferredLanguage = ddlLanguage.SelectedValue; } db.Records.AddObject(record); problem.SubmissionCount++; if (!(from r in db.Records where r.ID != record.ID && r.User.ID == currentUser.ID && r.Problem.ID == problem.ID select r).Any()) { problem.SubmissionUser++; } db.SaveChanges(); Logger.Info(db, "创建记录#" + record.ID); } PageUtil.Redirect("创建成功", "~/Record/List.aspx?userID=" + ((SiteUser)User.Identity).ID); }