예제 #1
0
        public ActionResult RetestSubmission(SubmissionPostData data)
        {
            var course = _GetCourse();

            if (course == null || course.CourseId != data.CourseId)
            {
                return(new HttpNotFoundResult());
            }

            var user = ApplicationUser.FromUserId(data.UserId);

            if (user == null)
            {
                return(new HttpNotFoundResult());
            }

            try
            {
                var studentAssignment = _db.StudentAssignments
                                        .Include(sa => sa.Submissions)
                                        .Include(sa => sa.Assignment.Pages)
                                        .Include(sa => sa.Enrollment.User)
                                        .FirstOrDefault(sa => sa.AssignmentId == data.AssignmentId && sa.Enrollment.UserName == user.UserName);

                if (studentAssignment == null)
                {
                    return(new HttpNotFoundResult());
                }

                StudentSubmission submission;
                if (data.SubmissionId > 0)
                {
                    submission = studentAssignment.Submissions.FirstOrDefault(s => s.StudentSubmissionId == data.SubmissionId);
                }
                else
                {
                    submission = studentAssignment.Submissions.LastOrDefault();
                }

                if (submission == null)
                {
                    return(null);
                }

                using (var t = new SubmissionTester(submission))
                {
                    t.TestAll();
                }

                _db.SaveChanges();

                return(new JsonNetResult(submission.FullResults));
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
예제 #2
0
        public ActionResult GetSubmissionDetails(SubmissionPostData data)
        {
            Course course = _GetCourse();

            if (course == null || course.CourseId != data.CourseId)
            {
                return(new HttpNotFoundResult());
            }

            var user = ApplicationUser.Current;

            if (user == null || user.Id != data.UserId)
            {
                return(new HttpNotFoundResult());
            }

            try
            {
                var submission = _db.StudentSubmissions
                                 .Where(ss => ss.StudentAssignment.Enrollment.CourseId == data.CourseId)
                                 .Where(ss => ss.StudentAssignment.Enrollment.UserId == user.Id)
                                 .Where(ss => ss.StudentAssignment.AssignmentId == data.AssignmentId)
                                 .Where(ss => ss.StudentSubmissionId == data.SubmissionId)
                                 .Include(ss => ss.StudentAssignment.Assignment)
                                 .Include(ss => ss.StudentAssignment.Enrollment)
                                 .FirstOrDefault();

                if (submission == null)
                {
                    return(new HttpNotFoundResult());
                }

                var repo = SubmissionRepository.Get(submission.StudentAssignment);
                repo.Checkout(submission.CommitId); // get selected
                var dir = TempDir.Get(repo);

                var folder = dir.GetFolder();

                return(new JsonNetResult(new { Folder = folder, Results = submission.PreSubmissionResults }));
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, ex.Message));
            }
        }