Merge pull request #4149 from christianbeeznest/MJTecnoid-19599

Learnpath - Allow lp prerequisite on quiz to unblock if max attempt is reached - refs BT#19599
pull/4193/head
Nicolas Ducoulombier 4 years ago committed by GitHub
commit 31b2e691c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      main/install/configuration.dist.php
  2. 44
      main/lp/learnpathItem.class.php

@ -2109,6 +2109,10 @@ INSERT INTO `extra_field` (`extra_field_type`, `field_type`, `variable`, `displa
'INVITEE' => false 'INVITEE' => false
];*/ ];*/
// Allow learnpath prerequisite on quiz to unblock if maximum attempt is reached
//$_configuration['lp_prerequisit_on_quiz_unblock_if_max_attempt_reached'] = false;
// Enables to hide user status when option is true visible only for admins from $_configuration['user_status_option_show_only_for_admin'] // Enables to hide user status when option is true visible only for admins from $_configuration['user_status_option_show_only_for_admin']
//$_configuration['user_status_option_only_for_admin_enabled'] = false; //$_configuration['user_status_option_only_for_admin_enabled'] = false;
// The user status is hidden when is false, it requires $_configuration['user_status_option_only_for_admin_enabled'] = true // The user status is hidden when is false, it requires $_configuration['user_status_option_only_for_admin_enabled'] = true

@ -2342,6 +2342,13 @@ class learnpathItem
$status = $itemToCheck->get_status(true); $status = $itemToCheck->get_status(true);
$returnstatus = $status == $this->possible_status[2] || $status == $this->possible_status[3]; $returnstatus = $status == $this->possible_status[2] || $status == $this->possible_status[3];
// Allow learnpath prerequisite on quiz to unblock if maximum attempt is reached
if (true === api_get_configuration_value('lp_prerequisit_on_quiz_unblock_if_max_attempt_reached')) {
$isQuizMaxAttemptReached = $this->isQuizMaxAttemptReached($items[$refs_list[$prereqs_string]]->path, $user_id, $courseId, $this->lp_id, $prereqs_string);
if ($isQuizMaxAttemptReached) {
$returnstatus = true;
}
}
if (!$returnstatus) { if (!$returnstatus) {
$explanation = sprintf( $explanation = sprintf(
get_lang('ItemXBlocksThisElement'), get_lang('ItemXBlocksThisElement'),
@ -2435,7 +2442,6 @@ class learnpathItem
$minScore = $masteryScoreAsMin; $minScore = $masteryScoreAsMin;
} }
} }
if (isset($minScore) && isset($minScore)) { if (isset($minScore) && isset($minScore)) {
// Taking min/max prerequisites values see BT#5776 // Taking min/max prerequisites values see BT#5776
if ($quiz['exe_result'] >= $minScore && if ($quiz['exe_result'] >= $minScore &&
@ -2479,6 +2485,13 @@ class learnpathItem
$refs_list $refs_list
); );
} }
// Allow learnpath prerequisite on quiz to unblock if maximum attempt is reached
if (true === api_get_configuration_value('lp_prerequisit_on_quiz_unblock_if_max_attempt_reached')) {
$isQuizMaxAttemptReached = $this->isQuizMaxAttemptReached($items[$refs_list[$prereqs_string]]->path, $user_id, $courseId, $this->lp_id, $prereqs_string);
if ($isQuizMaxAttemptReached) {
$returnstatus = true;
}
}
} }
return $returnstatus; return $returnstatus;
@ -2636,6 +2649,35 @@ class learnpathItem
return false; return false;
} }
/**
* Check if max quiz attempt is reached.
*
* @param $exerciseId
* @param $userId
* @param $courseId
* @param $lpId
* @param $lpItemId
*
* @return bool
*/
public function isQuizMaxAttemptReached($exerciseId, $userId, $courseId, $lpId, $lpItemId)
{
$objExercise = new Exercise();
$objExercise->read($exerciseId);
$nbAttempts = $objExercise->selectAttempts();
$countAttempts = Tracking::count_student_exercise_attempts(
$userId,
$courseId,
$exerciseId,
$lpId,
$lpItemId,
api_get_session_id()
);
$isMaxAttemptReached = ($nbAttempts > 0 && $countAttempts >= $nbAttempts);
return $isMaxAttemptReached;
}
/** /**
* Reinits all local values as the learnpath is restarted. * Reinits all local values as the learnpath is restarted.
* *

Loading…
Cancel
Save