MDL-35276 fix redirect to course/section pages

This commit is contained in:
Marina Glancy 2012-09-13 11:00:34 +08:00
parent a3ab18c735
commit 923451c59f
6 changed files with 71 additions and 67 deletions

View File

@ -65,8 +65,9 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
*/
public function section_title($section, $course) {
$title = get_section_name($course, $section);
if ($section->section != 0 && $course->coursedisplay == COURSE_DISPLAY_MULTIPAGE) {
$title = html_writer::link(course_get_url($course, $section->section), $title);
$url = course_get_url($course, $section->section, array('navigation' => true));
if ($url) {
$title = html_writer::link($url, $title);
}
return $title;
}
@ -125,7 +126,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
* @param int $sectionreturn The section to return to after an action
* @return string HTML to output.
*/
protected function section_header($section, $course, $onsectionpage, $sectionreturn=0) {
protected function section_header($section, $course, $onsectionpage, $sectionreturn=null) {
global $PAGE;
$o = '';
@ -413,7 +414,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
* @param int $sectionno The section number in the coruse which is being dsiplayed
* @return string HTML to output.
*/
protected function course_activity_clipboard($course, $sectionno = 0) {
protected function course_activity_clipboard($course, $sectionno = null) {
global $USER;
$o = '';
@ -642,7 +643,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
echo $this->output->heading($this->page_title(), 2, 'accesshide');
// Copy activity clipboard..
echo $this->course_activity_clipboard($course);
echo $this->course_activity_clipboard($course, 0);
// Now the list of sections..
echo $this->start_section_list();
@ -651,10 +652,10 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
$thissection = $sections[0];
unset($sections[0]);
if ($thissection->summary or $thissection->sequence or $PAGE->user_is_editing()) {
echo $this->section_header($thissection, $course, false);
print_section($course, $thissection, $mods, $modnamesused, true);
echo $this->section_header($thissection, $course, false, 0);
print_section($course, $thissection, $mods, $modnamesused, true, "100%", false, 0);
if ($PAGE->user_is_editing()) {
print_section_add_menus($course, 0, $modnames);
print_section_add_menus($course, 0, $modnames, false, false, 0);
}
echo $this->section_footer();
}
@ -693,11 +694,11 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
// Display section summary only.
echo $this->section_summary($thissection, $course, $mods);
} else {
echo $this->section_header($thissection, $course, false);
echo $this->section_header($thissection, $course, false, 0);
if ($thissection->uservisible) {
print_section($course, $thissection, $mods, $modnamesused);
print_section($course, $thissection, $mods, $modnamesused, true, "100%", false, 0);
if ($PAGE->user_is_editing()) {
print_section_add_menus($course, $section, $modnames);
print_section_add_menus($course, $section, $modnames, false, false, 0);
}
}
echo $this->section_footer();
@ -714,7 +715,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
continue;
}
echo $this->stealth_section_header($section);
print_section($course, $thissection, $mods, $modnamesused);
print_section($course, $thissection, $mods, $modnamesused, true, "100%", false, $displaysection);
echo $this->stealth_section_footer();
}

View File

@ -1388,7 +1388,7 @@ function get_print_section_cm_text(cm_info $cm, $course) {
* @param int $sectionreturn The section to return to
* @return void
*/
function print_section($course, $section, $mods, $modnamesused, $absolute=false, $width="100%", $hidecompletion=false, $sectionreturn=0) {
function print_section($course, $section, $mods, $modnamesused, $absolute=false, $width="100%", $hidecompletion=false, $sectionreturn=null) {
global $CFG, $USER, $DB, $PAGE, $OUTPUT;
static $initialised;
@ -1769,14 +1769,14 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false,
* Prints the menus to add activities and resources.
*
* @param stdClass $course The course
* @param stdClass $section The section
* @param int $section relative section number (field course_sections.section)
* @param array $modnames An array containing the list of modules and their names
* @param bool $vertical Vertical orientation
* @param bool $return Return the menus or send them to output
* @param int $sectionreturn The section to link back to
* @return void|string depending on $return
*/
function print_section_add_menus($course, $section, $modnames, $vertical=false, $return=false, $sectionreturn=0) {
function print_section_add_menus($course, $section, $modnames, $vertical=false, $return=false, $sectionreturn=null) {
global $CFG, $OUTPUT;
// check to see if user can add menus
@ -1785,7 +1785,7 @@ function print_section_add_menus($course, $section, $modnames, $vertical=false,
}
// Retrieve all modules with associated metadata
$modules = get_module_metadata($course, $modnames);
$modules = get_module_metadata($course, $modnames, $sectionreturn);
// We'll sort resources and activities into two lists
$resources = array();
@ -1898,7 +1898,7 @@ function print_section_add_menus($course, $section, $modnames, $vertical=false,
* @return array A list of stdClass objects containing metadata about each
* module
*/
function get_module_metadata($course, $modnames, $sectionreturn = 0) {
function get_module_metadata($course, $modnames, $sectionreturn = null) {
global $CFG, $OUTPUT;
// get_module_metadata will be called once per section on the page and courses may show
@ -3155,7 +3155,7 @@ function moveto_module($mod, $section, $beforemod=NULL) {
* @param int $section The section to link back to
* @return string XHTML for the editing buttons
*/
function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $moveselect = true, $indent=-1, $section=-1) {
function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $moveselect = true, $indent=-1, $section=null) {
global $CFG, $OUTPUT, $COURSE;
static $str;
@ -3197,7 +3197,7 @@ function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $movesele
$baseurl = new moodle_url('/course/mod.php', array('sesskey' => sesskey()));
if ($section >= 0) {
if ($section !== null) {
$baseurl->param('sr', $section);
}
$actions = array();
@ -4603,15 +4603,39 @@ function include_course_ajax($course, $usedmodules = array(), $enabledmodules =
*
* @param stdClass $course The course to get the section name for
* @param int $sectionno The section number to return a link to
* if omitted the course view page is returned
* @param array $options options for view URL. At the moment core uses:
* 'navigation' (bool) if true and section has no separate page, the function returns null
* 'sr' (int) used by multipage formats to specify to which section to return
* @return moodle_url The url of course
*/
function course_get_url($course, $sectionno = null) {
function course_get_url($course, $sectionno = null, $options = array()) {
if ($course->id == SITEID) {
return new moodle_url('/');
}
$url = new moodle_url('/course/view.php', array('id' => $course->id));
if (!is_null($sectionno)) {
if ($course->coursedisplay == COURSE_DISPLAY_MULTIPAGE) {
$sr = null;
if (array_key_exists('sr', $options)) {
$sr = $options['sr'];
}
if ($sectionno !== null) {
if ($sr !== null) {
if ($sr) {
$usercoursedisplay = COURSE_DISPLAY_MULTIPAGE;
$sectionno = $sr;
} else {
$usercoursedisplay = COURSE_DISPLAY_SINGLEPAGE;
}
} else {
$usercoursedisplay = $course->coursedisplay;
}
if ($sectionno != 0 && $usercoursedisplay == COURSE_DISPLAY_MULTIPAGE) {
$url->param('section', $sectionno);
} else {
if (!empty($options['navigation'])) {
return null;
}
$url->set_anchor('section-'.$sectionno);
}
}

View File

@ -26,7 +26,7 @@
require("../config.php");
require_once("lib.php");
$sectionreturn = optional_param('sr', 0, PARAM_INT);
$sectionreturn = optional_param('sr', null, PARAM_INT);
$add = optional_param('add', '', PARAM_ALPHA);
$type = optional_param('type', '', PARAM_ALPHA);
$indent = optional_param('indent', 0, PARAM_INT);
@ -50,9 +50,7 @@ foreach (compact('indent','update','hide','show','copy','moveto','movetosection'
$url->param($key, $value);
}
}
if ($sectionreturn) {
$url->param('sr', $sectionreturn);
}
$url->param('sr', $sectionreturn);
if ($add !== '') {
$url->param('add', $add);
}
@ -109,7 +107,7 @@ if (!empty($add)) {
get_string('continue'),
'post'),
new single_button(
course_get_url($course, $sectionreturn),
course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)),
get_string('cancel'),
'get')
);
@ -126,7 +124,7 @@ if (!empty($add)) {
$modcontext = context_module::instance($cm->id);
require_capability('moodle/course:manageactivities', $modcontext);
$return = course_get_url($course, $sectionreturn);
$return = course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn));
if (!$confirm or !confirm_sesskey()) {
$fullmodulename = get_string('modulename', $cm->modname);
@ -234,11 +232,7 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
rebuild_course_cache($section->course);
if (SITEID == $section->course) {
redirect($CFG->wwwroot);
} else {
redirect(course_get_url($course, $sectionreturn));
}
redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn)));
} else if (!empty($indent) and confirm_sesskey()) {
$id = required_param('id', PARAM_INT);
@ -261,11 +255,7 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
rebuild_course_cache($cm->course);
if (SITEID == $cm->course) {
redirect($CFG->wwwroot);
} else {
redirect(course_get_url($course, $sectionreturn));
}
redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)));
} else if (!empty($hide) and confirm_sesskey()) {
$cm = get_coursemodule_from_id('', $hide, 0, true, MUST_EXIST);
@ -280,11 +270,7 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
rebuild_course_cache($cm->course);
if (SITEID == $cm->course) {
redirect($CFG->wwwroot);
} else {
redirect(course_get_url($course, $sectionreturn));
}
redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)));
} else if (!empty($show) and confirm_sesskey()) {
$cm = get_coursemodule_from_id('', $show, 0, true, MUST_EXIST);
@ -304,11 +290,7 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
rebuild_course_cache($cm->course);
}
if (SITEID == $cm->course) {
redirect($CFG->wwwroot);
} else {
redirect(course_get_url($course, $sectionreturn));
}
redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn)));
} else if ($groupmode > -1 and confirm_sesskey()) {
$id = required_param('id', PARAM_INT);
@ -325,11 +307,7 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
rebuild_course_cache($cm->course);
if (SITEID == $cm->course) {
redirect($CFG->wwwroot);
} else {
redirect(course_get_url($course, $sectionreturn));
}
redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)));
} else if (!empty($copy) and confirm_sesskey()) { // value = course module
$cm = get_coursemodule_from_id('', $copy, 0, true, MUST_EXIST);
@ -347,18 +325,20 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
$USER->activitycopyname = $cm->name;
$USER->activitycopysectionreturn = $sectionreturn;
redirect(course_get_url($course, $sectionreturn));
redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn)));
} else if (!empty($cancelcopy) and confirm_sesskey()) { // value = course module
$courseid = $USER->activitycopycourse;
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
$cm = get_coursemodule_from_id('', $USER->activitycopy, 0, true, IGNORE_MISSING);
$sectionreturn = $USER->activitycopysectionreturn;
unset($USER->activitycopy);
unset($USER->activitycopycourse);
unset($USER->activitycopyname);
redirect(course_get_url($course, $sectionreturn));
unset($USER->activitycopysectionreturn);
redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)));
} else {
print_error('unknowaction');
}

View File

@ -34,7 +34,7 @@ require_once($CFG->libdir . '/filelib.php');
$cmid = required_param('cmid', PARAM_INT);
$courseid = required_param('course', PARAM_INT);
$sectionreturn = optional_param('sr', 0, PARAM_INT);
$sectionreturn = optional_param('sr', null, PARAM_INT);
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
$cm = get_coursemodule_from_id('', $cmid, $course->id, true, MUST_EXIST);
@ -61,7 +61,7 @@ $a->modtype = get_string('modulename', $cm->modname);
$a->modname = format_string($cm->name);
if (!plugin_supports('mod', $cm->modname, FEATURE_BACKUP_MOODLE2)) {
$url = new moodle_url('/course/view.php#section-' . $cm->sectionnum, array('id' => $course->id));
$url = course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn));
print_error('duplicatenosupport', 'error', $url, $a);
}
@ -91,7 +91,8 @@ if (!$rc->execute_precheck()) {
echo $output->header();
echo $output->precheck_notices($precheckresults);
echo $output->continue_button(new moodle_url('/course/view.php', array('id' => $course->id)));
$url = course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn));
echo $output->continue_button($url);
echo $output->footer();
die();
}
@ -137,14 +138,14 @@ if ($newcmid) {
get_string('duplicatecontedit'),
'get'),
new single_button(
course_get_url($course, $sectionreturn),
course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)),
get_string('duplicatecontcourse'),
'get')
);
} else {
echo $output->notification(get_string('duplicatesuccess', 'core', $a), 'notifysuccess');
echo $output->continue_button(course_get_url($course, $sectionreturn));
echo $output->continue_button(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)));
}
echo $output->footer();

View File

@ -35,7 +35,7 @@ $add = optional_param('add', '', PARAM_ALPHA); // module name
$update = optional_param('update', 0, PARAM_INT);
$return = optional_param('return', 0, PARAM_BOOL); //return to course/view.php if false or mod/modname/view.php if true
$type = optional_param('type', '', PARAM_ALPHANUM); //TODO: hopefully will be removed in 2.0
$sectionreturn = optional_param('sr', 0, PARAM_INT);
$sectionreturn = optional_param('sr', null, PARAM_INT);
$url = new moodle_url('/course/modedit.php');
$url->param('sr', $sectionreturn);
@ -264,7 +264,7 @@ if ($mform->is_cancelled()) {
if ($return && !empty($cm->id)) {
redirect("$CFG->wwwroot/mod/$module->name/view.php?id=$cm->id");
} else {
redirect(course_get_url($course, $sectionreturn));
redirect(course_get_url($course, $cw->section, array('sr' => $sectionreturn)));
}
} else if ($fromform = $mform->get_data()) {
if (empty($fromform->coursemodule)) {
@ -633,7 +633,7 @@ if ($mform->is_cancelled()) {
redirect($gradingman->get_management_url($returnurl));
}
} else {
redirect(course_get_url($course, $sectionreturn));
redirect(course_get_url($course, $cw->section, array('sr' => $sectionreturn)));
}
exit;

View File

@ -2027,9 +2027,7 @@ class global_navigation extends navigation_node {
// pre 2.3 style format url
$url = $urlfunction($course->id, $section->section);
}else{
if ($course->coursedisplay == COURSE_DISPLAY_MULTIPAGE) {
$url = course_get_url($course, $section->section);
}
$url = course_get_url($course, $section->section, array('navigation' => true));
}
$sectionnode = $coursenode->add($sectionname, $url, navigation_node::TYPE_SECTION, null, $section->id);
$sectionnode->nodetype = navigation_node::NODETYPE_BRANCH;