/// <summary> /// Displays the submission status. /// </summary> /// <param name="id">Assignment Identifier</param> /// <returns>The submission page view.</returns> public ActionResult Submit(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(); Course_Assignments ca = GetCourseAssignments().Where(c => c.Course_AssignmentsID == id).First(); StudentCourseRegistration str = GetSCR().Where(s => s.CourseInstanceID == ca.CourseInstanceID && s.STUDENTID == user.UserId).First(); MVM.assignment = GetAssignmentById(ca.AssignmentID); MVM.Questions = GetQuestionsByAssignmentId(MVM.assignment.AssignmentID); MVM.Submissions = GetSubmissions().Where(s => s.StudentCourseRegistrationID == str.StudentCourseRegistrationID); return(View(MVM)); }
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 })); } } }