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));
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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,
            }));
        }