From 201f60d2390ad558ccba78992efd076ed4df7090 Mon Sep 17 00:00:00 2001 From: Yannick Warnier Date: Mon, 28 Feb 2022 16:50:23 +0100 Subject: [PATCH] Plugin: Positioning: Fix condition if tests selected in base course but using them in sessions - refs BT#19725 --- plugin/positioning/src/Positioning.php | 37 +++++++++++++++++++++----- plugin/positioning/start_student.php | 16 ++++++----- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/plugin/positioning/src/Positioning.php b/plugin/positioning/src/Positioning.php index b96dd814ba..857818c339 100644 --- a/plugin/positioning/src/Positioning.php +++ b/plugin/positioning/src/Positioning.php @@ -70,6 +70,7 @@ class Positioning extends Plugin public function getPositionData($exerciseId, $courseId, $sessionId) { $table = $this->table; + $exerciseId = (int) $exerciseId; $courseId = (int) $courseId; $sessionId = (int) $sessionId; @@ -83,6 +84,18 @@ class Positioning extends Plugin if (Database::num_rows($result) > 0) { return Database::fetch_array($result, 'ASSOC'); + } elseif (0 !== $sessionId) { + // if no exercise was set in the session, also look for it in the base course + $sql = "SELECT * FROM $table + WHERE + exercise_id = $exerciseId AND + c_id = $courseId AND + session_id = 0 + "; + $result = Database::query($sql); + if (Database::num_rows($result) > 0) { + return Database::fetch_array($result, 'ASSOC'); + } } return false; @@ -212,23 +225,35 @@ class Positioning extends Plugin c_id = $courseId AND session_id = $sessionId "; + $sqlEnd = ''; if ($isInitial) { - $sql .= ' AND is_initial = 1 '; + $sqlEnd .= ' AND is_initial = 1 '; } else { - $sql .= ' AND is_initial = 0 '; + $sqlEnd .= ' AND is_initial = 0 '; } if ($isFinal) { - $sql .= ' AND is_final = 1 '; + $sqlEnd .= ' AND is_final = 1 '; } else { - $sql .= ' AND is_final = 0 '; + $sqlEnd .= ' AND is_final = 0 '; } - - $result = Database::query($sql); + $result = Database::query($sql.$sqlEnd); if (Database::num_rows($result) > 0) { + return Database::fetch_array($result, 'ASSOC'); + } elseif (0 !== $sessionId) { + $sql = "SELECT * FROM $table + WHERE + c_id = $courseId AND + session_id = 0 + "; + $result = Database::query($sql.$sqlEnd); + if (Database::num_rows($result) > 0) { + + return Database::fetch_array($result, 'ASSOC'); + } } return false; diff --git a/plugin/positioning/start_student.php b/plugin/positioning/start_student.php index 4191a59c23..1aad870c9e 100644 --- a/plugin/positioning/start_student.php +++ b/plugin/positioning/start_student.php @@ -80,21 +80,23 @@ if ($finalData) { } // Set the initial results as second series to make sure it appears on top $lpUrlAndProgress = $studentAverage.'%'; +$radars = ''; + if (!empty($initialExercise)) { $exercisesToRadar[] = $initialExercise; $exercisesToRadarLabel[] = $plugin->get_lang('InitialTest'); if (!empty($initialResults)) { $lpUrlAndProgress = ''.$studentAverage.'%'; } + $radars = $initialExercise->getRadarsFromUsers( + [$currentUserId], + $exercisesToRadar, + $exercisesToRadarLabel, + $courseId, + $sessionId + ); } -$radars = $initialExercise->getRadarsFromUsers( - [$currentUserId], - $exercisesToRadar, - $exercisesToRadarLabel, - $courseId, - $sessionId -); $nameTools = $plugin->get_lang('Positioning'); $template = new Template($nameTools);