示例#1
0
        /// <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));
        }
示例#2
0
        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 }));
                }
            }
        }