|
127 | 127 | $learnpath_item_id = isset($_REQUEST['learnpath_item_id']) ? (int) $_REQUEST['learnpath_item_id'] : 0; |
128 | 128 | $learnpath_item_view_id = isset($_REQUEST['learnpath_item_view_id']) ? (int) $_REQUEST['learnpath_item_view_id'] : 0; |
129 | 129 |
|
| 130 | +// If we are not explicitly in LP context, ignore any leaked LP params and clear persisted context. |
| 131 | +// This avoids attaching standalone exercises to the last learning path attempt. |
| 132 | +if ('learnpath' !== $origin) { |
| 133 | + Session::erase('learnpath_id'); |
| 134 | + Session::erase('lp_id'); |
| 135 | + Session::erase('learnpath_item_id'); |
| 136 | + Session::erase('lp_item_id'); |
| 137 | + Session::erase('learnpath_item_view_id'); |
| 138 | + Session::erase('lp_item_view_id'); |
| 139 | + |
| 140 | + $learnpath_id = 0; |
| 141 | + $learnpath_item_id = 0; |
| 142 | + $learnpath_item_view_id = 0; |
| 143 | +} |
| 144 | + |
| 145 | +if ('learnpath' === $origin) { |
| 146 | + // Normalize common aliases used by LP tool |
| 147 | + $learnpath_id = $learnpath_id > 0 ? $learnpath_id : (int) ($_REQUEST['lp_id'] ?? 0); |
| 148 | + |
| 149 | + // Some links use item_id instead of learnpath_item_id |
| 150 | + $learnpath_item_id = $learnpath_item_id > 0 |
| 151 | + ? $learnpath_item_id |
| 152 | + : (int) ($_REQUEST['item_id'] ?? ($_REQUEST['lp_item_id'] ?? 0)); |
| 153 | + |
| 154 | + $learnpath_item_view_id = $learnpath_item_view_id > 0 |
| 155 | + ? $learnpath_item_view_id |
| 156 | + : (int) ($_REQUEST['lp_item_view_id'] ?? 0); |
| 157 | + |
| 158 | + // Restore from session when modal/navigation loses query params |
| 159 | + if ($learnpath_id <= 0) { |
| 160 | + $learnpath_id = (int) (Session::read('learnpath_id') ?? Session::read('lp_id') ?? 0); |
| 161 | + } |
| 162 | + if ($learnpath_item_id <= 0) { |
| 163 | + $learnpath_item_id = (int) (Session::read('learnpath_item_id') ?? Session::read('lp_item_id') ?? 0); |
| 164 | + } |
| 165 | + if ($learnpath_item_view_id <= 0) { |
| 166 | + $learnpath_item_view_id = (int) (Session::read('learnpath_item_view_id') ?? Session::read('lp_item_view_id') ?? 0); |
| 167 | + } |
| 168 | + |
| 169 | + // Persist context for future requests (modal, JS navigation, session resume) |
| 170 | + if ($learnpath_id > 0) { |
| 171 | + Session::write('learnpath_id', $learnpath_id); |
| 172 | + Session::write('lp_id', $learnpath_id); |
| 173 | + } |
| 174 | + if ($learnpath_item_id > 0) { |
| 175 | + Session::write('learnpath_item_id', $learnpath_item_id); |
| 176 | + Session::write('lp_item_id', $learnpath_item_id); |
| 177 | + } |
| 178 | + if ($learnpath_item_view_id > 0) { |
| 179 | + Session::write('learnpath_item_view_id', $learnpath_item_view_id); |
| 180 | + Session::write('lp_item_view_id', $learnpath_item_view_id); |
| 181 | + } |
| 182 | +} |
| 183 | + |
130 | 184 | $reminder = isset($_REQUEST['reminder']) ? (int) $_REQUEST['reminder'] : 0; |
131 | 185 | $remind_question_id = isset($_REQUEST['remind_question_id']) ? (int) $_REQUEST['remind_question_id'] : 0; |
132 | 186 | $exerciseId = isset($_REQUEST['exerciseId']) ? (int) $_REQUEST['exerciseId'] : 0; |
|
572 | 626 | . "&page=" . ($page ?? 1) |
573 | 627 | . "&" . api_get_cidreq(); |
574 | 628 |
|
| 629 | +// Base query strings used by JS navigation (keep LP context on every click). |
| 630 | +$submitBaseQuery = "exe_id=$exe_id&exerciseId=$exerciseId" |
| 631 | + . "&learnpath_id=$learnpath_id" |
| 632 | + . "&learnpath_item_id=$learnpath_item_id" |
| 633 | + . "&learnpath_item_view_id=$learnpath_item_view_id" |
| 634 | + . "&reminder=$reminder" |
| 635 | + . "&" . api_get_cidreq(); |
| 636 | + |
| 637 | +$resultBaseQuery = "exe_id=$exe_id" |
| 638 | + . "&learnpath_id=$learnpath_id" |
| 639 | + . "&learnpath_item_id=$learnpath_item_id" |
| 640 | + . "&learnpath_item_view_id=$learnpath_item_view_id" |
| 641 | + . "&" . api_get_cidreq(); |
| 642 | + |
575 | 643 |
|
576 | 644 | if (2 === $reminder && empty($myRemindList)) { |
577 | 645 | if ($debug) { |
@@ -1533,12 +1601,14 @@ function updateDuration() { |
1533 | 1601 |
|
1534 | 1602 | var page = '.(int) $page.'; |
1535 | 1603 | var totalPages = '.(int) ($totalPages ?? 1).'; |
| 1604 | + var chSubmitBaseUrl = "'.api_get_self().'?'.$submitBaseQuery.'"; |
| 1605 | + var chResultUrl = "exercise_result.php?'.$resultBaseQuery.'"; |
1536 | 1606 | function navigateNext() { |
1537 | 1607 | var url; |
1538 | 1608 | if (page === totalPages) { |
1539 | | - url = "exercise_result.php?'.api_get_cidreq().'&exe_id='.$exe_id.'&learnpath_id='.$learnpath_id.'&learnpath_item_id='.$learnpath_item_id.'&learnpath_item_view_id='.$learnpath_item_view_id.'"; |
| 1609 | + url = chResultUrl; |
1540 | 1610 | } else { |
1541 | | - url = "'.api_get_self().'?'.api_get_cidreq().'&exerciseId='.$exerciseId.'&page=" + (page + 1) + "&reminder='.$reminder.'"; |
| 1611 | + url = chSubmitBaseUrl + "&page=" + (page + 1); |
1542 | 1612 | } |
1543 | 1613 | window.location = url; |
1544 | 1614 | } |
@@ -1682,11 +1752,8 @@ function previous_question(question_num) { |
1682 | 1752 | } |
1683 | 1753 |
|
1684 | 1754 | function previous_question_and_save(previous_question_id, question_id_to_save) { |
1685 | | - var url = \'exercise_submit.php?'.api_get_cidreq().'\' |
1686 | | - + \'&exerciseId='.$exerciseId.'\' |
1687 | | - + \'&num=\' + previous_question_id |
1688 | | - + \'&reminder='.$reminder.'\'; |
1689 | | - save_now(question_id_to_save, url); |
| 1755 | + var url = chSubmitBaseUrl + "&num=" + previous_question_id; |
| 1756 | + save_now(question_id_to_save, url); |
1690 | 1757 | } |
1691 | 1758 |
|
1692 | 1759 | function redirectExerciseToResult() |
@@ -2150,9 +2217,7 @@ function validate_all() { |
2150 | 2217 | $currentPageIds = implode(',', $questionList); |
2151 | 2218 | echo '<div class="exercise_actions exercise-pagination mb-4">'; |
2152 | 2219 | if ($page > 1) { |
2153 | | - $prevUrl = api_get_self() . '?' . api_get_cidreq() |
2154 | | - . "&exerciseId=$exerciseId&page=" . ($page - 1) |
2155 | | - . "&reminder=$reminder"; |
| 2220 | + $prevUrl = api_get_self() . '?' . $submitBaseQuery . "&page=" . ($page - 1); |
2156 | 2221 | echo '<button type="button" class="btn btn--secondary" ' |
2157 | 2222 | . "onclick=\"window.location='$prevUrl'\">" |
2158 | 2223 | . '‹ ' . get_lang('Previous') |
|
0 commit comments