public void DeleteAssignment(int id) { using (var model = new graderEntities()) { var assignmentExist = (from Course_Assignments in model.Course_Assignments where Course_Assignments.Course_AssignmentsID == id select Course_Assignments).First(); if (assignmentExist == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } foreach (Question q in model.Questions.Where(q => q.AssignmentID == assignmentExist.AssignmentID)) { foreach (StudentCourseRegistration scr in model.StudentCourseRegistrations.Where(s => s.CourseInstanceID == assignmentExist.CourseInstanceID)) { SUBMISSION sub = model.SUBMISSIONs.Where(s => s.StudentCourseRegistrationID == scr.StudentCourseRegistrationID && s.QuestionID == q.QuestionID).First(); model.SUBMISSIONs.Remove(sub); } } model.Course_Assignments.Remove(assignmentExist); model.SaveChanges(); } }
public ActionResult Register(User user) { string email = user.Email; bool check = false; foreach (User u in new graderEntities().Users) { if (email.ToLower().Equals(u.Email.ToLower())) { check = true; break; } } if (check == false) { using (var db = new graderEntities()) { user.UserRoleID = 2; int max = db.Users.Select(u => u.UserId).DefaultIfEmpty().Max() + 1; user.UserId = max; try { db.Users.Add(user); } catch (System.Data.SqlClient.SqlException e) { Response.Write("<script>alert('Email already exists!')</script>"); return(RedirectToAction("Register", "Account")); } foreach (Course c in db.Courses.Where(c => c.Deadline >= DateTime.Now)) { foreach (CourseInstance ci in db.CourseInstances.Where(i => i.CourseID == c.CourseID)) { DirectoryInfo dir = new DirectoryInfo(@"D:\home\site\wwwroot\Files\SCR\" + ci.CourseInstanceID); if (dir.Exists) { StreamReader read = new StreamReader(dir.GetFiles().First().FullName); List <string> left = new List <string>(); var mail = read.ReadLine(); bool change = false; while (mail != null) { if (mail.ToLower().Equals(user.Email.ToLower())) { change = true; StudentCourseRegistration scr = new StudentCourseRegistration { CourseInstanceID = ci.CourseInstanceID, STUDENTID = user.UserId }; db.StudentCourseRegistrations.Add(scr); foreach (var casgm in db.Course_Assignments.Where(ca => ca.CourseInstanceID == scr.CourseInstanceID)) { foreach (var q in db.Questions.Where(q => q.AssignmentID == casgm.AssignmentID)) { SUBMISSION sub = new SUBMISSION(); sub.StudentCourseRegistrationID = scr.StudentCourseRegistrationID; sub.GRADE = 0; sub.QuestionID = q.QuestionID; sub.TRIES = 0; sub.FILE = null; sub.SubmittedDate = null; sub.Result = null; db.SUBMISSIONs.Add(sub); } } } else { left.Add(mail); } mail = read.ReadLine(); } read.Close(); if (change) { StreamWriter write = new StreamWriter(dir.GetFiles().First().FullName); foreach (var name in left) { write.WriteLine(name); } ; write.Close(); } } } } db.SaveChanges(); } } else { ViewBag.message = "<p style='color: #d9230f'>Email already exists.</p>"; return(View(user)); } return(RedirectToAction("LogIn", "Account")); }
public ActionResult Submit(HttpPostedFileBase file, int id) { User user; try { user = getCurrentUser(); } catch (Exception e) { return(RedirectToAction("Login", "Account")); } if (user.UserRoleID != 2) { return(RedirectToAction("AccessDenied", "Home")); } MultiViewModel MVM = new MultiViewModel(); using (var model = new graderEntities()) { Course_Assignments cas = (from Course_Assignments in model.Course_Assignments where Course_Assignments.Course_AssignmentsID == id select Course_Assignments).First(); int aid = cas.AssignmentID; Assignment assignment = (from Assignment in model.Assignments where Assignment.AssignmentID == aid select Assignment).First(); IEnumerable <Question> questions = (from Question in model.Questions where Question.AssignmentID == aid select Question).ToList(); IEnumerable <SUBMISSION> subs = (from SUBMISSION in model.SUBMISSIONs select SUBMISSION).ToList(); int qid = int.Parse(Request["questionID"]); int subid = int.Parse(Request["subID"]); SUBMISSION sub = (from SUBMISSION in model.SUBMISSIONs where SUBMISSION.SubmissionID == subid select SUBMISSION).First(); if (file == null) { return(RedirectToAction("Submit")); } if (file.ContentLength >= 0) { //-->should add a message "Already solved" if (sub.Result != null) { if (sub.Result.Equals("Solved!")) { return(RedirectToAction("Index")); } } Question question = (from Question in model.Questions where Question.QuestionID == qid select Question).First(); //-->should add a message "No more tries left" if (question.MaximumTries == sub.TRIES) { return(RedirectToAction("Index")); } ; //-->should add a message "Deadline passed" if (assignment.DEADLINE < DateTime.Now) { return(RedirectToAction("Index")); } sub.SubmittedDate = DateTime.Now; string extension = Path.GetExtension(file.FileName); // the reading happens through a text file, i think we can also read the static java file //if needed if (extension == ".zip") { var fileName = Path.GetFileName(file.FileName); string path = Server.MapPath(@"~\Files") + "\\" + System.Web.HttpContext.Current.User.Identity.Name.Substring(0, System.Web.HttpContext.Current.User.Identity.Name.IndexOf("@")) + "\\" + assignment.AssignmentID + "\\" + question.QuestionID; GC.Collect(); GC.WaitForPendingFinalizers(); if (Directory.Exists(path)) { DirectoryInfo di = new DirectoryInfo(path); foreach (FileInfo fil in di.GetFiles()) { fil.Delete(); } } Directory.CreateDirectory(Server.MapPath(@"~\Files") + "\\" + System.Web.HttpContext.Current.User.Identity.Name.Substring(0, System.Web.HttpContext.Current.User.Identity.Name.IndexOf("@")) + "\\" + assignment.AssignmentID + "\\" + question.QuestionID); path = Path.Combine(path, fileName); file.SaveAs(path); ViewBag.HtmlStr = Request["submit"].Substring(17); int line = Program.run(subid, path); string output = ""; //right format if (line > -10003) { sub.TRIES++; if (line == 0) { output = "Solved!"; sub.GRADE = question.MaximumGrade - question.MaximumGrade * (sub.TRIES - 1) / question.MaximumTries; } else if (line == -10001) { output = "No output provided."; } else if (line == -10002) { output = "Compilation Error."; } else if (line > 0) { output = "Wrong value(s) starting line " + line; } else { output = "Excess of lines in output starting line " + (-line); } } else if (line == -10006) { output = "No Files Found."; } else if (line == -10005) { output = "Directory Not Found. Please Resubmit."; } else if (line == -10004) { output = "No Java File Found."; } else if (line == -10003) { output = "Excess of Files. Non Java Files Found."; } sub.Result = output; sub.FILE = Path.GetDirectoryName(path); model.SaveChanges(); MVM.assignment = assignment; MVM.Questions = questions; MVM.Submissions = subs; Thread.Sleep(3000); return(RedirectToAction("Submit", "Students", new { id = cas.Course_AssignmentsID })); } else { sub.Result = "File submitted is not of correct format."; model.SaveChanges(); return(RedirectToAction("Submit", "Students", new { id = cas.Course_AssignmentsID })); } } else { return(RedirectToAction("Submit", "Students", new { id = cas.Course_AssignmentsID })); } } }