diff --git a/lib/moodlelib.php b/lib/moodlelib.php index db18276dcfe..f1c4aed04cf 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -2682,6 +2682,13 @@ function require_login($courseorid = NULL, $autologinguest = true, $cm = NULL, $ } } + // If this is an AJAX request and $setwantsurltome is true then we need to override it and set it to false. + // Otherwise the AJAX request URL will be set to $SESSION->wantsurl and events such as self enrolment in the future + // risk leading the user back to the AJAX request URL. + if ($setwantsurltome && defined('AJAX_SCRIPT') && AJAX_SCRIPT) { + $setwantsurltome = false; + } + // If the user is not even logged in yet then make sure they are if (!isloggedin()) { if ($autologinguest and !empty($CFG->guestloginbutton) and !empty($CFG->autologinguests)) { diff --git a/lib/navigationlib.php b/lib/navigationlib.php index 45ef60e491a..5d2890c5e28 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -2643,7 +2643,7 @@ class global_navigation_for_ajax extends global_navigation { break; case self::TYPE_COURSE : $course = $DB->get_record('course', array('id' => $this->instanceid), '*', MUST_EXIST); - require_course_login($course); + require_course_login($course, true, null, false, true); $this->page->set_context(get_context_instance(CONTEXT_COURSE, $course->id)); $coursenode = $this->add_course($course); $this->add_course_essentials($coursenode, $course); @@ -2657,7 +2657,7 @@ class global_navigation_for_ajax extends global_navigation { LEFT JOIN {course_sections} cs ON cs.course = c.id WHERE cs.id = ?'; $course = $DB->get_record_sql($sql, array($this->instanceid), MUST_EXIST); - require_course_login($course); + require_course_login($course, true, null, false, true); $this->page->set_context(get_context_instance(CONTEXT_COURSE, $course->id)); $coursenode = $this->add_course($course); $this->add_course_essentials($coursenode, $course); @@ -2674,7 +2674,7 @@ class global_navigation_for_ajax extends global_navigation { $course = $DB->get_record_sql($sql, $params, MUST_EXIST); $modinfo = get_fast_modinfo($course); $cm = $modinfo->get_cm($this->instanceid); - require_course_login($course, true, $cm); + require_course_login($course, true, $cm, false, true); $this->page->set_context(get_context_instance(CONTEXT_MODULE, $cm->id)); $coursenode = $this->load_course($course); if ($course->id == SITEID) {