Use mastery_score as "min prerequisite" value if it was set before

See BT#15056

In 1.9.x c_lp_item.mastery_score was used as a min value. This value
will be checked if "c_lp_item.prerequisite_min_score" is empty only
when a exercise is a prerequisite.
pull/2731/head
Julio Montoya 7 years ago
parent 2c40d4b9aa
commit d4d41eebef
  1. 13
      main/lp/learnpath.class.php
  2. 44
      main/lp/learnpathItem.class.php

@ -10290,8 +10290,10 @@ class learnpath
public function display_item_prerequisites_form($item_id = 0) public function display_item_prerequisites_form($item_id = 0)
{ {
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
$item_id = (int) $item_id;
$tbl_lp_item = Database::get_course_table(TABLE_LP_ITEM); $tbl_lp_item = Database::get_course_table(TABLE_LP_ITEM);
$item_id = intval($item_id);
/* Current prerequisite */ /* Current prerequisite */
$sql = "SELECT * FROM $tbl_lp_item $sql = "SELECT * FROM $tbl_lp_item
WHERE iid = $item_id"; WHERE iid = $item_id";
@ -10329,10 +10331,13 @@ class learnpath
$selectedMinScore = []; $selectedMinScore = [];
$selectedMaxScore = []; $selectedMaxScore = [];
$masteryScore = [];
while ($row = Database::fetch_array($result)) { while ($row = Database::fetch_array($result)) {
if ($row['id'] == $item_id) { if ($row['id'] == $item_id) {
$selectedMinScore[$row['prerequisite']] = $row['prerequisite_min_score']; $selectedMinScore[$row['prerequisite']] = $row['prerequisite_min_score'];
$selectedMaxScore[$row['prerequisite']] = $row['prerequisite_max_score']; $selectedMaxScore[$row['prerequisite']] = $row['prerequisite_max_score'];
$masteryScore[$row['prerequisite']] = $row['mastery_score'];
} }
$arrLP[] = [ $arrLP[] = [
'id' => $row['iid'], 'id' => $row['iid'],
@ -10366,6 +10371,7 @@ class learnpath
$selectedMaxScoreValue = isset($selectedMaxScore[$item['id']]) ? $selectedMaxScore[$item['id']] : $item['max_score']; $selectedMaxScoreValue = isset($selectedMaxScore[$item['id']]) ? $selectedMaxScore[$item['id']] : $item['max_score'];
$selectedMinScoreValue = isset($selectedMinScore[$item['id']]) ? $selectedMinScore[$item['id']] : 0; $selectedMinScoreValue = isset($selectedMinScore[$item['id']]) ? $selectedMinScore[$item['id']] : 0;
$masteryScoreAsMinValue = isset($masteryScore[$item['id']]) ? $masteryScore[$item['id']] : 0;
$return .= '<tr>'; $return .= '<tr>';
$return .= '<td '.(($item['item_type'] != TOOL_QUIZ && $item['item_type'] != TOOL_HOTPOTATOES) ? ' colspan="3"' : '').'>'; $return .= '<td '.(($item['item_type'] != TOOL_QUIZ && $item['item_type'] != TOOL_HOTPOTATOES) ? ' colspan="3"' : '').'>';
@ -10398,6 +10404,11 @@ class learnpath
$lpItemObj->update(); $lpItemObj->update();
$item['max_score'] = $lpItemObj->max_score; $item['max_score'] = $lpItemObj->max_score;
if (empty($selectedMinScoreValue) && !empty($masteryScoreAsMinValue)) {
// Backwards compatibility with 1.9.x use mastery_score as min value
$selectedMinScoreValue = $masteryScoreAsMinValue;
}
$return .= '<td>'; $return .= '<td>';
$return .= '<input $return .= '<input
class="form-control" class="form-control"

@ -2451,7 +2451,7 @@ class learnpathItem
/** @var learnpathItem $itemToCheck */ /** @var learnpathItem $itemToCheck */
$itemToCheck = $items[$refs_list[$prereqs_string]]; $itemToCheck = $items[$refs_list[$prereqs_string]];
if ($itemToCheck->type == 'quiz') { if ($itemToCheck->type === 'quiz') {
// 1. Checking the status in current items. // 1. Checking the status in current items.
$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];
@ -2495,10 +2495,18 @@ class learnpathItem
LIMIT 0, 1'; LIMIT 0, 1';
$rs_quiz = Database::query($sql); $rs_quiz = Database::query($sql);
if ($quiz = Database::fetch_array($rs_quiz)) { if ($quiz = Database::fetch_array($rs_quiz)) {
$minScore = $items[$refs_list[$this->get_id( /** @var learnpathItem $myItemToCheck */
)]]->getPrerequisiteMinScore(); $myItemToCheck = $items[$refs_list[$this->get_id()]];
$maxScore = $items[$refs_list[$this->get_id( $minScore = $myItemToCheck->getPrerequisiteMinScore();
)]]->getPrerequisiteMaxScore(); $maxScore = $myItemToCheck->getPrerequisiteMaxScore();
if (empty($minScore)) {
// Try with mastery_score
$masteryScoreAsMin = $myItemToCheck->get_mastery_score();
if (!empty($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
@ -2544,19 +2552,29 @@ class learnpathItem
exe_exo_id = '.$items[$refs_list[$prereqs_string]]->path.' AND exe_exo_id = '.$items[$refs_list[$prereqs_string]]->path.' AND
exe_user_id = '.$user_id.' AND exe_user_id = '.$user_id.' AND
orig_lp_id = '.$this->lp_id.' AND orig_lp_id = '.$this->lp_id.' AND
orig_lp_item_id = '.$prereqs_string.' '; orig_lp_item_id = '.$prereqs_string;
$rs_quiz = Database::query($sql); $rs_quiz = Database::query($sql);
if (Database::num_rows($rs_quiz) > 0) { if (Database::num_rows($rs_quiz) > 0) {
while ($quiz = Database::fetch_array($rs_quiz)) { while ($quiz = Database::fetch_array($rs_quiz)) {
$minScore = $items[$refs_list[$this->get_id( /** @var learnpathItem $myItemToCheck */
)]]->getPrerequisiteMinScore(); $myItemToCheck = $items[$refs_list[$this->get_id()]];
$maxScore = $items[$refs_list[$this->get_id( $minScore = $myItemToCheck->getPrerequisiteMinScore();
)]]->getPrerequisiteMaxScore(); $maxScore = $myItemToCheck->getPrerequisiteMaxScore();
if (empty($minScore)) {
// Try with mastery_score
$masteryScoreAsMin = $myItemToCheck->get_mastery_score();
if (!empty($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 && $quiz['exe_result'] <= $maxScore) { if ($quiz['exe_result'] >= $minScore &&
$quiz['exe_result'] <= $maxScore
) {
$returnstatus = true; $returnstatus = true;
break; break;
} else { } else {
@ -2574,9 +2592,7 @@ class learnpathItem
$returnstatus = true; $returnstatus = true;
break; break;
} else { } else {
$this->prereq_alert = get_lang( $this->prereq_alert = get_lang('LearnpathPrereqNotCompleted');
'LearnpathPrereqNotCompleted'
);
$returnstatus = false; $returnstatus = false;
} }
} }

Loading…
Cancel
Save