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();
            }
        }
예제 #2
0
        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"));
        }
예제 #3
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 }));
                }
            }
        }