public async Task <IActionResult> Users(string id) { if (string.IsNullOrWhiteSpace(id) || !StaticDetails.AllAndRegions.Contains(id)) { id = StaticDetails.AllRegions; } UserResultsViewModel viewModel = new UserResultsViewModel() { Region = id, UserResults = await UserResults(id) }; return(View(viewModel)); }
public ActionResult MyTests(int?userId) { var userRepo = new UsersRepository(); DataAccessLayer.Models.UserModel user = null; if (!userId.HasValue) { if (User.IsInRole("Admin")) { return(HttpNotFound()); } else { user = userRepo.GetUserInfo(User.Identity.Name); } } else { user = userRepo .GetAllUsers() .Where(x => x.UserID == userId) .FirstOrDefault(); var checkingUser = userRepo.GetUserInfo(User.Identity.Name); if (!User.IsInRole("Admin") && user.UserID != checkingUser.UserID) { return(HttpNotFound()); } } if (user == null) { return(HttpNotFound()); } var testRepo = new TestRepository(); var tests = testRepo.GetAllTests(); var viewTests = new List <UserTestViewModel>(); foreach (var test in tests) { var questionsCount = testRepo.GetTestQuestions(test.TestID).Count; var sessions = testRepo.GetUserTestSessions(new DataAccessLayer.Models.UserTestModel { TestID = test.TestID, UserID = user.UserID }); var lastSession = sessions.LastOrDefault(x => x.Time != null); var testView = new UserTestViewModel { UserID = user.UserID, TestID = test.TestID, TestName = test.TestName, RemainingAttempts = test.AttemptsCount - sessions.Count, LastScore = lastSession == null ? 0 : lastSession.RightAnswers, QuestionsCount = questionsCount }; viewTests.Add(testView); } var userResults = new UserResultsViewModel { UserName = string.Format("{0} {1} ({2})", user.LastName, user.FirstName, user.Login), Tests = viewTests }; return(View(userResults)); }
public IActionResult Results(int id, int?assignmentId, int?categoryId) { //an admin can only do "CUD" functionalities if he/she is the creator of the course if (!IsOwner(id)) { return(RedirectToRoute(new { controller = "Account", action = "AccessDenied" })); } //used by the results view ViewBag.isMCResult = false; ViewBag.isCodeSnipResult = false; ViewBag.isCodeSnipNoAnswerResult = false; List <UserResultsViewModel> userResults = new List <UserResultsViewModel>(); int correctCount = 0; int incorrectCount = 0; //used by MC UserAnswersViewModel userAnswers = new UserAnswersViewModel(); //grab all the submissions from the specific category table //grab from MCSubmissions table if (categoryId == 1) { ViewBag.isMCResult = true; //get current question using primary key of table var assignment = _context.MultipleChoices.Where(mc => mc.MultipleChoiceId == assignmentId).First(); //for chart ViewBag.Question = assignment.Description; ViewBag.ChoiceA = assignment.A; ViewBag.ChoiceB = assignment.B; ViewBag.ChoiceC = assignment.C; ViewBag.ChoiceD = assignment.D; //get all submissions from table IEnumerable <MultipleChoiceSubmission> mcSubmissions = _context.MultipleChoiceSubmissions.Where(m => m.AssignmentId == assignmentId); foreach (MultipleChoiceSubmission mc in mcSubmissions) { UserResultsViewModel currentResult = new UserResultsViewModel(); //get current user to get Fname and Lname ApplicationUser user = getUserByEmail(mc.UserEmail); currentResult.FName = user.FirstName; currentResult.LName = user.LastName; currentResult.Answer = mc.Answer; //get counts of all results switch (currentResult.Answer) { case "A": userAnswers.ACount++; break; case "B": userAnswers.BCount++; break; case "C": userAnswers.CCount++; break; case "D": userAnswers.DCount++; break; default: break; } currentResult.IsCorrect = mc.IsCorrect; if (currentResult.IsCorrect == true) { correctCount++; } else { incorrectCount++; } userResults.Add(currentResult); } } //for the code snippet results, we want to show who it belongs to, their code character count, and to check if it is correct else if (categoryId == 2) { ViewBag.isCodeSnipResult = true; //get all submissions from the CodeSnipetSub table for the specific assignment IEnumerable <CodeSnippetSubmission> submissions = _context.CodeSnippetSubmissions.Where(cs => cs.AssignmentId == assignmentId); foreach (CodeSnippetSubmission sub in submissions) { UserResultsViewModel currentResult = new UserResultsViewModel(); //get current user to get Fname and Lname ApplicationUser user = getUserByEmail(sub.UserEmail); currentResult.FName = user.FirstName; currentResult.LName = user.LastName; currentResult.UserCodeLength = sub.UserCode.Length; currentResult.UserCode = sub.UserCode; currentResult.IsCorrect = sub.IsCorrect; if (currentResult.IsCorrect == true) { correctCount++; } else { incorrectCount++; } userResults.Add(currentResult); } } else if (categoryId == 3) { ViewBag.isCodeSnipNoAnswerResult = true; //get all submissions from the CodeSnipetSub table for the specific assignment IEnumerable <CodeSnippetNoAnswerSubmission> submissions = _context.CodeSnippetNoAnswerSubmissions.Where(cs => cs.AssignmentId == assignmentId); foreach (CodeSnippetNoAnswerSubmission sub in submissions) { UserResultsViewModel currentResult = new UserResultsViewModel(); //get current user to get Fname and Lname ApplicationUser user = getUserByEmail(sub.UserEmail); currentResult.FName = user.FirstName; currentResult.LName = user.LastName; currentResult.Answer = sub.UserAnswer; //get assignment var assignment = _context.CodeSnippetNoAnswers.Where(cs => cs.CodeSnippetNoAnswerId == assignmentId).First(); currentResult.IsCorrect = (assignment.Answer == sub.UserAnswer); if (currentResult.IsCorrect == true) { correctCount++; } else { incorrectCount++; } userResults.Add(currentResult); } } return(View(new ResultsViewModel { UserResults = userResults, CorrectCount = correctCount, IncorrentCount = incorrectCount, UserAnswers = userAnswers, })); }