private void ProcessPlatinumAchievement(Student student)
        {
            var achievements        = _achievementService.GetAchievementList();
            var studentAchievements = _achievementService.GetStudentAchievementList(student.Id);

            // Remove platinum achievement from comparison
            achievements.Remove(
                _achievementService.GetAchievementBySystemName(SystemStudentAchievementNames.EarntAllAchievements));

            var comparisionList = achievements.Except(studentAchievements).ToList();

            if (comparisionList.Count == 0)
            {
                student.AddAchievementHistoryEntry(_achievementService.GetAchievementBySystemName(SystemStudentAchievementNames.EarntAllAchievements));
                _studentService.UpdateStudent(student);
            }
        }
Beispiel #2
0
        public ActionResult Grade(QuizModel quiz)
        {
            var numberOfCorrectAnswers = 0;
            var rewardPoints           = 0;
            var answers = new List <QuizUserAnswer>();

            foreach (var question in quiz.Questions)
            {
                int correctAnswer = (from a in question.Answers
                                     where a.IsCorrect
                                     select a.Id).SingleOrDefault();

                if (question.SelectedAnswer == correctAnswer)
                {
                    numberOfCorrectAnswers += 1;
                    rewardPoints           += question.Points;
                }

                answers.Add(new QuizUserAnswer
                {
                    QuestionId = question.Id,
                    AnswerId   = question.SelectedAnswer
                });
            }

            var score = ((float)numberOfCorrectAnswers / (float)quiz.Questions.Count) * 100;

            quiz.StudentScore = (float)Math.Round(score, 3);

            var quizResult = new QuizResult
            {
                StudentId     = _workContext.CurrentStudent.Id,
                AnsweredOnUtc = DateTime.UtcNow,
                Score         = (float)score,
                QuizId        = quiz.Id,
                Answers       = answers
            };

            Achievement achievement = null;

            // If it is a level quiz, only store the grade if the pass mark has been met.
            if (quiz.IsLevelQuiz)
            {
                if (score >= quiz.PassMark)
                {
                    _quizService.GradeQuiz(quizResult);
                    achievement = _achievementService.GetAchievementBySystemName(quiz.AchivementSystemName);
                    quizResult.Student.AddLevelPointsHistoryEntry(rewardPoints, quiz.Id, "Passed quiz " + quiz.Id);

                    //activity log
                    _studentActivityService.InsertActivity("Quiz.Grade.Level.Passed",
                                                           "ActivityLog.Quiz.Grade.Level." + quiz.SystemName + ".Passed");
                }
                else
                {
                    _studentActivityService.InsertActivity("Quiz.Grade.Level.Failed",
                                                           "ActivityLog.Quiz.Grade.Level." + quiz.SystemName + ".Failed");
                }
            }
            else if (quiz.IsSystemQuiz)
            {
                _quizService.GradeQuiz(quizResult);
                achievement = _achievementService.GetAchievementBySystemName(quiz.AchivementSystemName);
                quizResult.Student.AddRewardPointsHistoryEntry(rewardPoints, "Completed quiz " + quiz.Id);

                //activity log
                _studentActivityService.InsertActivity("Quiz.Grade.System", "ActivityLog.Quiz.Grade.System." + quiz.SystemName);
            }
            else
            {
                _quizService.GradeQuiz(quizResult);
                achievement = _achievementService.GetAchievementBySystemName(quiz.AchivementSystemName);
                quizResult.Student.AddRewardPointsHistoryEntry(rewardPoints, "Completed quiz " + quiz.Id);

                //activity log
                _studentActivityService.InsertActivity("Quiz.Grade.Student", "ActivityLog.Quiz.Grade.Student." + quiz.SystemName);
            }

            _quizService.UpdateQuizGrade(quizResult);

            if (achievement != null)
            {
                quizResult.Student.AddAchievementHistoryEntry(achievement);
                _studentService.UpdateStudent(quizResult.Student);
            }

            //if (quiz.IsSystemQuiz || (quiz.IsLevelQuiz && score < quiz.PassMark))
            //    return RedirectToAction("Index", "Home");

            return(View(quiz));
        }
        /// <summary>
        /// Register student
        /// </summary>
        /// <param name="request">Request</param>
        /// <returns>Result</returns>
        public virtual StudentRegistrationResult RegisterStudent(StudentRegistrationRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            var result = new StudentRegistrationResult();

            if (request.Student.IsRegistered())
            {
                result.AddError("Current student is already registered");
                return(result);
            }
            if (String.IsNullOrEmpty(request.Username))
            {
                result.AddError("Username Is Not Provided");
                return(result);
            }
            if (String.IsNullOrWhiteSpace(request.Password))
            {
                result.AddError("Password Is Not Provided");
                return(result);
            }

            //validate unique user
            if (_studentService.GetStudentByUsername(request.Username) != null)
            {
                result.AddError("Username Already Exists");
                return(result);
            }

            //at this point request is valid
            request.Student.Username = request.Username;

            string saltKey = _encryptionService.CreateSaltKey(5);

            request.Student.PasswordSalt = saltKey;
            request.Student.Password     = _encryptionService.CreatePasswordHash(request.Password, saltKey);


            request.Student.Active = request.IsApproved;

            //add to 'Registered' role

            var registeredRole = _studentService.GetAvailableStudentRole();

            if (registeredRole == null)
            {
                throw new T802Exception("'Registered' role could not be loaded");
            }
            request.Student.StudentRoles.Add(registeredRole);

            // Add rewards points
            request.Student.AddRewardPointsHistoryEntry(100, "Registered as student");

            // Add achievement
            request.Student.AddAchievementHistoryEntry(_achievementService.GetAchievementBySystemName(SystemStudentAchievementNames.Registered));

            _studentService.InsertStudent(request.Student);
            return(result);
        }