From bc16fa6254cde674ddd08e88f8ac0cac7d751740 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Fri, 29 Mar 2019 18:28:13 -0500 Subject: [PATCH] Fix validation with quiz_question_limit_per_day - refs BT#15234 --- main/exercise/exercise.class.php | 13 ------------- main/exercise/exercise_submit.php | 2 +- main/exercise/overview.php | 21 +++++++++++++++++++-- main/inc/lib/exercise.lib.php | 5 ++--- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/main/exercise/exercise.class.php b/main/exercise/exercise.class.php index f336342f7e..f4c2737634 100755 --- a/main/exercise/exercise.class.php +++ b/main/exercise/exercise.class.php @@ -6284,19 +6284,6 @@ class Exercise ); $isVisible = false; } - } else { - $isLimitReached = ExerciseLib::isQuestionsLimitPerDayReached( - api_get_user_id(), - $this->selectNbrQuestions(), - api_get_course_int_id(), - api_get_session_id() - ); - - if ($isLimitReached) { - $maxQuestionsAnswered = (int) api_get_course_setting('quiz_question_limit_per_day'); - $message = sprintf(get_lang('QuizQuestionsLimitPerDayXReached'), $maxQuestionsAnswered); - $isVisible = false; - } } } diff --git a/main/exercise/exercise_submit.php b/main/exercise/exercise_submit.php index 94ad621fb4..faf6e081db 100755 --- a/main/exercise/exercise_submit.php +++ b/main/exercise/exercise_submit.php @@ -247,7 +247,7 @@ if ($objExercise->selectAttempts() > 0) { if (!empty($exercise_stat_info)) { $isQuestionsLimitReached = ExerciseLib::isQuestionsLimitPerDayReached( $user_id, - $objExercise->selectNbrQuestions(), + count($objExercise->get_validated_question_list()), $courseId, $sessionId ); diff --git a/main/exercise/overview.php b/main/exercise/overview.php index 7ddd3a9511..435869bfb5 100755 --- a/main/exercise/overview.php +++ b/main/exercise/overview.php @@ -28,7 +28,7 @@ $sessionId = api_get_session_id(); $exercise_id = isset($_REQUEST['exerciseId']) ? intval($_REQUEST['exerciseId']) : 0; $objExercise = new Exercise(); -$result = $objExercise->read($exercise_id, false); +$result = $objExercise->read($exercise_id, true); if (!$result) { api_not_allowed(true); @@ -392,7 +392,14 @@ if ($disable && empty($exercise_stat_info)) { $exercise_url_button = Display::return_message(get_lang('NewExerciseAttemptDisabled')); } -if (!empty($exercise_url_button)) { +$isLimitReached = ExerciseLib::isQuestionsLimitPerDayReached( + api_get_user_id(), + count($objExercise->get_validated_question_list()), + api_get_course_int_id(), + api_get_session_id() +); + +if (!empty($exercise_url_button) && !$isLimitReached) { $html .= Display::div( Display::div( $exercise_url_button, @@ -402,6 +409,16 @@ if (!empty($exercise_url_button)) { ); } +if ($isLimitReached) { + $maxQuestionsAnswered = (int) api_get_course_setting('quiz_question_limit_per_day'); + + $html .= Display::return_message( + sprintf(get_lang('QuizQuestionsLimitPerDayXReached'), $maxQuestionsAnswered), + 'warning', + false + ); +} + $html .= Display::tag( 'div', $table_content, diff --git a/main/inc/lib/exercise.lib.php b/main/inc/lib/exercise.lib.php index 9aab000eba..f3e3176224 100644 --- a/main/inc/lib/exercise.lib.php +++ b/main/inc/lib/exercise.lib.php @@ -5299,12 +5299,11 @@ EOT; SELECT COUNT(ea) FROM ChamiloCoreBundle:TrackEAttempt ea WHERE ea.userId = :user AND ea.cId = :course AND ea.sessionId = :session AND ea.tms > :time - GROUP BY ea.questionId ') ->setParameters(['user' => $userId, 'course' => $courseId, 'session' => $sessionId, 'time' => $time]) - ->getResult(); + ->getSingleScalarResult(); - return count($result); + return $result; } /**