From 6601690202764d786a5ee4b7bbd9afb5b91dd0ec Mon Sep 17 00:00:00 2001 From: Gregory Zbitnev Date: Wed, 28 Jan 2015 17:01:24 +0400 Subject: [PATCH] MDL-18309 Course: enrol/index.php returnurl improvement This patch improves usability of enrolment page in case of course is not enrollable. 'Continue' button now returns student to referring page instead of main moodle page (as it used to be). To make this improvement, passing correct returnurl parameter to enrol/index.php page was implemented for links that may be accessible for not-enrolled students. --- ...oodle-block_navigation-navigation-debug.js | Bin 29998 -> 30037 bytes .../moodle-block_navigation-navigation-min.js | Bin 9244 -> 9268 bytes .../moodle-block_navigation-navigation.js | Bin 29481 -> 29520 bytes .../yui/src/navigation/js/navigation.js | 3 ++- course/category.ajax.php | 3 +++ course/index.php | 1 + course/renderer.php | 6 +++++- course/view.php | 4 ++++ .../moodle-course-categoryexpander-debug.js | Bin 14976 -> 15014 bytes .../moodle-course-categoryexpander-min.js | Bin 5903 -> 5927 bytes .../moodle-course-categoryexpander.js | Bin 14867 -> 14905 bytes .../categoryexpander/js/categoryexpander.js | 3 ++- enrol/index.php | 3 +++ lib/ajax/getnavbranch.php | 11 +++++++++++ lib/moodlelib.php | 6 +++++- mod/choice/view.php | 4 +++- mod/forum/post.php | 7 ++++++- 17 files changed, 45 insertions(+), 6 deletions(-) diff --git a/blocks/navigation/yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation-debug.js b/blocks/navigation/yui/build/moodle-block_navigation-navigation/moodle-block_navigation-navigation-debug.js index 2d58702765813bb0ffbceaff7490c07a5f188deb..836d12637173cdde5c214a3254beb2df6980a4f3 100644 GIT binary patch delta 40 wcmZ4Yit*|z#trttj5?DS1_}$87Ud{dDdglQCzfR9=jmk>rKWAR4}Px*07}^p!TN;EsNT4XSq_ilnv?xcxN+BmdIk6-&KTj{CC^cforcelogin) { require_login(); } $PAGE->set_context(context_system::instance()); $courserenderer = $PAGE->get_renderer('core', 'course'); +$courserenderer->returnurl = $returnurl; echo json_encode($courserenderer->coursecat_ajax()); diff --git a/course/index.php b/course/index.php index 3b16759c5d9..acf816d877f 100644 --- a/course/index.php +++ b/course/index.php @@ -44,6 +44,7 @@ if ($categoryid) { $PAGE->set_pagelayout('coursecategory'); $courserenderer = $PAGE->get_renderer('core', 'course'); +$courserenderer->returnurl = $PAGE->url; if ($CFG->forcelogin) { require_login(); diff --git a/course/renderer.php b/course/renderer.php index 574aea47c8a..f46cf4f9c41 100644 --- a/course/renderer.php +++ b/course/renderer.php @@ -49,6 +49,9 @@ class core_course_renderer extends plugin_renderer_base { */ protected $strings; + /** @var moodle_url|null stores page where to return to from the enrolment page */ + public $returnurl; + /** * Override the constructor so that we can initialise the string cache * @@ -1207,7 +1210,8 @@ class core_course_renderer extends plugin_renderer_base { // course name $coursename = $chelper->get_course_formatted_name($course); - $coursenamelink = html_writer::link(new moodle_url('/course/view.php', array('id' => $course->id)), + $coursenamelink = html_writer::link(new moodle_url('/course/view.php', + array('id' => $course->id, 'returnurl' => $this->returnurl)), $coursename, array('class' => $course->visible ? '' : 'dimmed')); $content .= html_writer::tag($nametag, $coursenamelink, array('class' => 'coursename')); // If we display course in collapsed form but the course has summary or course contacts, display the link to the info page. diff --git a/course/view.php b/course/view.php index e15a0226b89..de47a0ac0e6 100644 --- a/course/view.php +++ b/course/view.php @@ -19,6 +19,7 @@ $switchrole = optional_param('switchrole',-1, PARAM_INT); // Deprecated, use course/switchrole.php instead. $modchooser = optional_param('modchooser', -1, PARAM_BOOL); $return = optional_param('return', 0, PARAM_LOCALURL); + $returnurl = optional_param('returnurl', 0, PARAM_LOCALURL); $params = array(); if (!empty($name)) { @@ -42,6 +43,9 @@ if ($section) { $urlparams['section'] = $section; } + if ($returnurl) { + $urlparams['returnurl'] = $returnurl; + } $PAGE->set_url('/course/view.php', $urlparams); // Defined here to avoid notices on errors etc diff --git a/course/yui/build/moodle-course-categoryexpander/moodle-course-categoryexpander-debug.js b/course/yui/build/moodle-course-categoryexpander/moodle-course-categoryexpander-debug.js index 92f0c020fd75c622634aa35101b1b28a539304c5..d0fc0e84789941e29c9e5af73faf56b576339a3f 100644 GIT binary patch delta 59 zcmZoDT~@lmNm5ORO92TKrIwTy<&_rYSSjS>CnuI<=I7~U6s4w3zAG#~*_MxebAqIT FA^;du5?ufQ delta 20 bcmZ2h+EBW|NpkXCVe!ccGVGh%Bo!0^S)vDD diff --git a/course/yui/build/moodle-course-categoryexpander/moodle-course-categoryexpander-min.js b/course/yui/build/moodle-course-categoryexpander/moodle-course-categoryexpander-min.js index 49f5138141a5c007e17d0f96b091b7c53dd026a2..3036bf361978fe28a414092be82d150dffe938dc 100644 GIT binary patch delta 37 scmeCzTdudEo?AkvD7B=tD6h0A$0{d3Ik6-&KTj{CC^cyy2&7UO{ F6ahg}6V(6! delta 16 Xcmdm4GPz{KRf)+3!s45SB-IrGKlibdir/formslib.php"); $id = required_param('id', PARAM_INT); +$returnurl = optional_param('returnurl', 0, PARAM_LOCALURL); if (!isloggedin()) { // do not use require_login here because we are usually coming from it, @@ -98,6 +99,8 @@ foreach ($forms as $form) { if (!$forms) { if (isguestuser()) { notice(get_string('noguestaccess', 'enrol'), get_login_url()); + } else if ($returnurl) { + notice(get_string('notenrollable', 'enrol'), $returnurl); } else { notice(get_string('notenrollable', 'enrol'), "$CFG->wwwroot/index.php"); } diff --git a/lib/ajax/getnavbranch.php b/lib/ajax/getnavbranch.php index e2e319a68b7..67738dbf066 100644 --- a/lib/ajax/getnavbranch.php +++ b/lib/ajax/getnavbranch.php @@ -43,6 +43,8 @@ try { $branchtype = required_param('type', PARAM_INT); // This identifies the block instance requesting AJAX extension $instanceid = optional_param('instance', null, PARAM_INT); + // URL of referrer page. + $returnurl = optional_param('returnurl', null, PARAM_LOCALURL); $PAGE->set_context(context_system::instance()); @@ -102,9 +104,18 @@ try { if (!$linkcategories) { foreach ($branch->find_all_of_type(navigation_node::TYPE_CATEGORY) as $category) { $category->action = null; + foreach ($category->find_all_of_type(navigation_node::TYPE_COURSE) as $course) { + $course->action->param('returnurl', $returnurl); + } } foreach ($branch->find_all_of_type(navigation_node::TYPE_MY_CATEGORY) as $category) { $category->action = null; + foreach ($category->find_all_of_type(navigation_node::TYPE_COURSE) as $course) { + $course->action->param('returnurl', $returnurl); + } + } + foreach ($branch->find_all_of_type(navigation_node::TYPE_COURSE) as $course) { + $course->action->param('returnurl', $returnurl); } } diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 1cd4af52ebd..ef7e5a541b0 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -2796,7 +2796,11 @@ function require_login($courseorid = null, $autologinguest = true, $cm = null, $ if ($setwantsurltome) { $SESSION->wantsurl = qualified_me(); } - redirect($CFG->wwwroot .'/enrol/index.php?id='. $course->id); + $redirecturl = new moodle_url($CFG->wwwroot .'/enrol/index.php', array('id' => $course->id)); + if ($PAGE->url->get_param('returnurl')) { + $redirecturl->param('returnurl', $PAGE->url->get_param('returnurl')); + } + redirect($redirecturl); } } diff --git a/mod/choice/view.php b/mod/choice/view.php index 6f6c987ba3b..0b70447e8f9 100644 --- a/mod/choice/view.php +++ b/mod/choice/view.php @@ -186,7 +186,9 @@ if (!$choiceformshown) { echo $OUTPUT->box_start('generalbox', 'notice'); echo '

'. get_string('notenrolledchoose', 'choice') .'

'; echo $OUTPUT->container_start('continuebutton'); - echo $OUTPUT->single_button(new moodle_url('/enrol/index.php?', array('id'=>$course->id)), get_string('enrolme', 'core_enrol', $courseshortname)); + echo $OUTPUT->single_button(new moodle_url('/enrol/index.php?', + array('id' => $course->id, 'returnurl' => $PAGE->url)), + get_string('enrolme', 'core_enrol', $courseshortname)); echo $OUTPUT->container_end(); echo $OUTPUT->box_end(); diff --git a/mod/forum/post.php b/mod/forum/post.php index cbdb505ecaf..a6c48b00dd1 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -187,7 +187,12 @@ if (!empty($forum)) { // User is starting a new discussion in a forum if (!is_enrolled($coursecontext)) { // User is a guest here! $SESSION->wantsurl = qualified_me(); $SESSION->enrolcancel = $_SERVER['HTTP_REFERER']; - redirect($CFG->wwwroot.'/enrol/index.php?id='.$course->id, get_string('youneedtoenrol')); + redirect(new moodle_url('/enrol/index.php', array( + 'id' => $course->id, + 'returnurl' => new moodle_url('/mod/forum/view.php', + array('f' => $forum->id)) + )), + get_string('youneedtoenrol')); } } print_error('nopostforum', 'forum'); -- 2.43.0