diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 30ac3df70e1..74ddbf706b8 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -2369,6 +2369,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 19d18793b53..b1890040412 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -2564,7 +2564,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); @@ -2578,7 +2578,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); @@ -2595,7 +2595,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) {