示例#1
0
        public ActionResult Index(QuizReviewViewModel model)
        {
            var quizRating = new QuizRating();

            quizRating.Rating = model.Rating * 100;
            quizRating.Level  = model.Level * 20;
            quizRating.QuizId = model.QuizId;
            _quizRatingRepo.Insert(quizRating);
            _quizRatingRepo.Save();
            return(RedirectToAction("Index", "Quizzes"));
        }
示例#2
0
        public QuizReviewViewModel ToQuizReviewViewModel(QuizResult quizResult)
        {
            var vm        = new QuizReviewViewModel();
            var quiz      = _quizService.Get(quizResult.QuizId);
            var questions = quiz.Questions.Where(x => x.QuizId == quizResult.QuizId).ToList();


            var qDetails = new List <QuizReviewItemViewModel>();

            foreach (var userAnswer in quizResult.UserAnswers)
            {
                var answer          = _answerService.GetAll().FirstOrDefault(x => x.Id == userAnswer.AnswerId);
                var isAnswerCorrect = answer != null && answer.IsCorrect;
                var question        = questions.First(x => x.Id == userAnswer.QuestionId);
                var questionText    = question.Text;
                var pointsEarned    = isAnswerCorrect ? question.Points : 0;
                qDetails.Add(new QuizReviewItemViewModel
                {
                    IsCorrectAnswer = isAnswerCorrect,
                    QuestionId      = userAnswer.QuestionId,
                    QuestionText    = questionText,
                    PointsEarned    = pointsEarned,
                });
            }

            if (quiz.AllowPoints)
            {
                var totalPoints = questions.Sum(x => x.Points);

                vm.ScoreText = quizResult.Score + " / " + totalPoints + " points";

                vm.ScorePercent = Math.Ceiling(((double)quizResult.Score * 100) / totalPoints);
            }
            else
            {
                vm.ScoreText    = quizResult.Score + " / " + questions.Sum(x => x.Points) + "points";
                vm.ScorePercent = ((double)quizResult.Score * 100) / questions.Sum(x => x.Points);
            }

            vm.Items = qDetails;


            vm.ResultId     = quizResult.Id;
            vm.Score        = quizResult.Score;
            vm.EllapsedTime = quizResult.EllapsedTime;
            vm.UserAnswers  = new List <UserAnswerViewModel>();
            vm.UserAnswers.AddRange(
                quizResult.UserAnswers.Select(x => new UserAnswerViewModel
            {
                AnswerId   = x.AnswerId,
                QuestionId = x.QuestionId
            }));


            vm.EllapsedTimePercent = (int)(quizResult.EllapsedTime / (double)questions.Sum(x => x.EstimatedTime) * 100);
            vm.QuizId = quizResult.QuizId;

            if (_quizResultService.GetAll().Count(x => x.QuizId == quiz.Id) > 1)
            {
                vm.RelativeScore = _quizResultService.GetRelativeScore(quiz.Id, quizResult.Score);
                vm.RelativeTime  = _quizResultService.GetRelativeTime(quiz.Id, quizResult.EllapsedTime);
            }
            else
            {
                vm.RelativeScore = -1;
                vm.RelativeTime  = -1;
            }

            return(vm);
        }
示例#3
0
        public static QuizReviewViewModel ToQuizReviewViewModel(this QuizResult quizResult,
                                                                IQuizService quizzes,
                                                                IAnswerService answers,
                                                                IQuizResultService quizResultService)
        {
            var vm        = new QuizReviewViewModel();
            var quiz      = quizzes.Get(quizResult.QuizId);
            var questions = quiz.Questions.Where(x => x.QuizId == quizResult.QuizId);



            var qDetails = new List <QuizReviewItemViewModel>();

            foreach (var userAnswer in quizResult.Answers)
            {
                var answer          = answers.GetAll().FirstOrDefault(x => x.Id == userAnswer.AnswerId);
                var isAnswerCorrect = answer != null && answer.IsCorrect;
                var question        = questions.First(x => x.Id == userAnswer.QuestionId);
                var questionText    = question.Text;
                var pointsEarned    = isAnswerCorrect ? question.Points : 0;
                qDetails.Add(new QuizReviewItemViewModel()
                {
                    IsCorrectAnswer = isAnswerCorrect,
                    QuestionId      = userAnswer.QuestionId,
                    QuestionText    = questionText,
                    PointsEarned    = pointsEarned,
                });
            }


            var    allowPoints = quiz.AllowPoints;
            string scoreText;

            if (allowPoints)
            {
                var totalPoints  = questions.Sum(x => x.Points);
                var scoredPoints = quizResult.Score * totalPoints / 100;
                scoreText = scoredPoints + " / " + totalPoints + " points";
            }
            else
            {
                scoreText = quizResult.Score + "%";
            }

            vm.Items = qDetails;


            vm.ResultId     = quizResult.Id;
            vm.Score        = quizResult.Score;
            vm.EllapsedTime = quizResult.EllapsedTime;
            vm.UserAnswers  = new List <UserAnswerViewModel>();
            vm.UserAnswers.AddRange(
                quizResult.Answers.Select(x => new UserAnswerViewModel()
            {
                AnswerId   = x.AnswerId,
                QuestionId = x.QuestionId,
                Value      = x.Value
            }));



            vm.ScoreText           = scoreText;
            vm.EllapsedTimePercent = (int)((double)quizResult.EllapsedTime / (double)questions.Sum(x => x.EstimatedTime) * 100);
            vm.QuizId = quizResult.QuizId;


            vm.RelativeScore = quizResultService.GetRelativeScore(quiz.Id, quizResult.Score);
            vm.RelativeTime  = quizResultService.GetRelativeTime(quiz.Id, quizResult.EllapsedTime);
            return(vm);
        }