Esempio n. 1
0
        public IActionResult InstructorGradeByAssignment(int id)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            Assignment            assignment            = assignmentDataService.GetAssignmentById(id);

            ViewData["Title"]          = "Grades: " + assignment.Name;
            ViewData["AssignmentName"] = assignment.Name;
            ViewData["AssignmentId"]   = assignment.Id;

            ClassDataService classDataService = new ClassDataService(dbContext);
            Class            c = classDataService.GetClassById(assignment.ClassId);


            StudentClassDataService studentDataService = new StudentClassDataService(dbContext);
            var students = studentDataService.GetStudentsByClassid(c.Id);

            foreach (var student in students)
            {
                var result = assignmentDataService.GetTopSubmissionForStudent(assignment.Id, student.Id);

                if (result == null)
                {
                    ViewData[student.FirstName + student.LastName] = 0.0;
                }
                else
                {
                    ViewData[student.FirstName + student.LastName] = result.Grade;
                }
            }

            return(View(students));
        }
Esempio n. 2
0
        public IActionResult AssignmentDetails(int id)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            Assignment            assignment            = assignmentDataService.GetAssignmentById(id);

            return(View(assignment));
        }
Esempio n. 3
0
        public async Task <IActionResult> SubmitAssignment(SubmissionInputViewModel input)
        {
            StudentDataService studentDataService = new StudentDataService(dbContext);
            Student            student            = studentDataService.GetStudentById(input.UserId);

            bool hasAccess = false;

            foreach (StudentClass studentClass in student.StudentClasses)
            {
                if (studentClass.ClassId == input.ClassId)
                {
                    hasAccess = true;
                }
            }

            if (ModelState.IsValid && hasAccess)
            {
                Submission submission = new Submission();

                submission.Input.SourceCode = input.SourceCode;
                submission.Input.Language   = input.Language;
                submission.AssignmentId     = input.AssignmentId;
                submission.UserId           = input.UserId;
                submission.SubmissionTime   = DateTime.Now;

                SubmissionDataService submissionService = new SubmissionDataService(dbContext);
                submissionService.AddSubmission(submission);
                await dbContext.SaveChangesAsync(); // SubmissionId now set on local submission


                AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
                Assignment            assignment            = assignmentDataService.GetAssignmentById(submission.AssignmentId);

                assignment.Submissions.Add(submission);

                GraderMethod.GradeSubmission(submission, dbContext);
                submission.Output.Runtime = assignment.TimeLimit;

                if (submission.Compile())
                {
                    submission.RunAndCompare();
                    submission.GradeTestCases();
                    submission.MaxRunTime();
                }

                dbContext.Submissions.Update(submission);
                dbContext.Assignments.Update(assignment);

                await dbContext.SaveChangesAsync();

                submission.deleteJunkFiles();

                return(RedirectToAction("SubmissionDetails", "Assignment", new { id = submission.SubmissionId }));
            }

            return(RedirectToAction("UnAuthorized", "Home"));
        }
Esempio n. 4
0
        public async Task <ActionResult> DeleteAssignment(int assignmentId)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            Assignment            assignment            = assignmentDataService.GetAssignmentById(assignmentId);

            assignmentDataService.DeleteAssignment(assignment);
            await dbContext.SaveChangesAsync();

            return(RedirectToAction("Details", "Instructor", new { id = assignment.ClassId }));
        }
Esempio n. 5
0
        public async Task <IActionResult> EditAssignment(EditAssignmentViewModel model, int assignmentId)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            Assignment            assignment            = assignmentDataService.GetAssignmentById(assignmentId);

            assignmentDataService.UpdateAssignment(model, assignment);

            await dbContext.SaveChangesAsync();

            return(RedirectToAction("Details", "Instructor", new { id = assignment.ClassId }));
        }
Esempio n. 6
0
        public IActionResult SubmissionDetails(int id)
        {
            SubmissionDataService submissionDataService = new SubmissionDataService(dbContext);
            var submission = submissionDataService.GetSubmissionById(id);

            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);

            ViewData["AssignmentName"] = assignmentDataService.GetAssignmentById(submission.AssignmentId).Name;

            return(View(submission));
        }
Esempio n. 7
0
        public IActionResult Details(int id)
        {
            ClassDataService classDataService = new ClassDataService(dbContext);
            Class            c = classDataService.GetClassById(id);

            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            var list = assignmentDataService.GetAssignments().Where(e => e.ClassId == c.Id).Reverse();

            ViewData["Assignments"] = list;

            return(View(c));
        }
Esempio n. 8
0
        public IActionResult ViewAssignments(int classId)
        {
            AssignmentDataService    assignmentDataService = new AssignmentDataService(dbContext);
            IEnumerable <Assignment> assignments           = assignmentDataService.GetAssignmentsByClassId(classId).Reverse();

            StudentDataService studentDataService = new StudentDataService(dbContext);

            student = studentDataService.GetStudentByUsername(UserManager.GetUserName(User));

            ViewData.Add("StudentId", student.Id);

            return(View(assignments));
        }
Esempio n. 9
0
        public IActionResult AddExistingAssignment(int classId, int instructorId)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            var assignments = assignmentDataService.GetAssignmentsByInstructorId(instructorId).Reverse();

            ClassDataService classDataService = new ClassDataService(dbContext);
            var c = classDataService.GetClassById(classId);

            ViewData["ClassName"] = c.Name;
            ViewData["ClassId"]   = c.Id;

            return(View(assignments));
        }
Esempio n. 10
0
        public static void GradeSubmission(Submission submission, AutoGraderDbContext dbContext)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            Assignment            assignment            = assignmentDataService.GetAssignmentById(submission.AssignmentId);

            submission.Output.MemoryLimit = assignment.MemoryLimit;

            TestCaseDataService testCaseDataService = new TestCaseDataService(dbContext);
            IEnumerable <TestCaseSpecification> testCaseSpecifications = testCaseDataService.GetTestCaseByAssignmentId(submission.AssignmentId);

            foreach (TestCaseSpecification testCaseSpecification in testCaseSpecifications)
            {
                TestCaseReport testCaseReport = new TestCaseReport();
                testCaseReport.CodeInput      = testCaseSpecification.Input;
                testCaseReport.ExpectedOutput = testCaseSpecification.ExpectedOutput;
                testCaseReport.Feedback       = testCaseSpecification.Feedback;
                submission.Output.TestCases.Add(testCaseReport);
            }

/*             if (submission.Compile())
 *          {
 *              submission.RunAndCompare();
 *          }
 *          else
 *          {
 *              for (int i = 0; i < submission.Output.TestCases.Count(); i++)
 *              {
 *                  submission.Output.TestCases[i].Pass = false;
 *              }
 *          }
 *
 *          SubmissionService submissionService = new SubmissionService(dbContext);
 *          submissionService.AddSubmission(submission);
 */
            // Send the Submission to the compiler and get the output back
            // Object returned with contain a pass or fail bool, and compiler output


            // if it did not compile correctly, make the output the error message
            //      Print out compiler output
            //      Mark all test cases on the report as failed in submissionOutput
            // else
            //      Call the method to populate CodeInput, ExpectedOutput, Feedback -- Add in 10/30
            //      call the grading function passing the submission, ** 2d array of input output files/or assignment ID **, source code, language, runtime, and submission id
            //      get back the submission with the chekced fields updated

            // Update the database for the report ID to say which test cases were passed and save the output string for each
            // return submission / submission output to the user
        }
Esempio n. 11
0
        public IActionResult ViewAllSubmissions(int assignmentId, int studentId)
        {
            AssignmentDataService    assignmentDataService = new AssignmentDataService(dbContext);
            IEnumerable <Submission> submissions           = assignmentDataService.GetStudentSubmissionsOnAssignment(studentId, assignmentId).Reverse();
            var assignmentName = assignmentDataService.GetAssignmentById(assignmentId).Name;

            ViewData["AssignmentName"] = assignmentName;

            StudentDataService studentDataService = new StudentDataService(dbContext);
            var student = studentDataService.GetStudentById(studentId);
            var name    = student.FirstName + " " + student.LastName;

            ViewData["StudentName"] = name;

            return(View(submissions));
        }
Esempio n. 12
0
        public IActionResult SubmitAssignment(int Id, int studentId)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);

            Assignment assignment = assignmentDataService.GetAssignmentById(Id);

            SubmissionInputViewModel model = new SubmissionInputViewModel
            {
                AssignmentId = Id,
                Language     = assignment.Languages[0],
                UserId       = studentId,
                ClassId      = assignment.ClassId
            };

            return(View(model));
        }
Esempio n. 13
0
        public async Task <IActionResult> CreateAssignment(AssignmentViewModel model)
        {
            if (ModelState.IsValid)
            {
                Assignment            assignment            = new Assignment(model);
                AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
                assignmentDataService.AddAssignment(assignment);

                ClassDataService classDataService = new ClassDataService(dbContext);
                Class            c = classDataService.GetClassById(assignment.ClassId);
                c.Assignments.Add(assignment);
            }

            await dbContext.SaveChangesAsync();

            return(RedirectToAction("Index", "Home"));
        }
Esempio n. 14
0
        public async Task <IActionResult> AddSelectedAssignment(int classId, int assignmentId)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            var assignment = assignmentDataService.GetAssignmentById(assignmentId);

            var newAssignment = new Assignment
            {
                Submissions = new List <Submission>(),

                Name        = assignment.Name,
                StartDate   = assignment.StartDate,
                EndDate     = assignment.EndDate,
                Description = assignment.Description,
                MemoryLimit = assignment.MemoryLimit,
                TimeLimit   = assignment.TimeLimit,
                Languages   = assignment.Languages,
                ClassId     = classId,
            };

            assignmentDataService.AddAssignment(newAssignment);

            foreach (var test in assignment.TestCases)
            {
                var testCase = new TestCaseSpecification(test);
                testCase.AssignmentId = newAssignment.Id;

                newAssignment.TestCases.Add(testCase);
            }

            ClassDataService classDataService = new ClassDataService(dbContext);
            var c = classDataService.GetClassById(classId);

            c.Assignments.Add(newAssignment);

            await dbContext.SaveChangesAsync();

            return(RedirectToAction("Index", "Home"));
        }
Esempio n. 15
0
        public IActionResult EditAssignment(int id)
        {
            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
            Assignment            assignment            = assignmentDataService.GetAssignmentById(id);

            EditAssignmentViewModel model = new EditAssignmentViewModel()
            {
                ClassId           = assignment.ClassId,
                Description       = assignment.Description,
                EndDate           = assignment.EndDate,
                StartDate         = assignment.StartDate,
                Languages         = assignment.Languages,
                MemoryLimit       = assignment.MemoryLimit,
                TimeLimit         = assignment.TimeLimit,
                Name              = assignment.Name,
                NumberOfTestCases = assignment.TestCases.Count,
                TestCases         = assignment.TestCases
            };

            ViewData["AssignmentId"] = assignment.Id;

            return(View(model));
        }