MDL-37085 get_module_metadata() now returns link as moodle_url instead of string
authorMarina Glancy <marina@moodle.com>
Wed, 12 Dec 2012 05:45:01 +0000 (13:45 +0800)
committerMarina Glancy <marina@moodle.com>
Mon, 14 Jan 2013 04:01:22 +0000 (15:01 +1100)
course/jumpto.php
course/lib.php

index c4d11ef..98c4e49 100644 (file)
@@ -34,7 +34,7 @@ if (!confirm_sesskey()) {
     print_error('confirmsesskeybad');
 }
 
-if (strpos($jump, '/') === 0) {
+if (strpos($jump, '/') === 0 || strpos($jump, $CFG->wwwroot) === 0) {
     redirect(new moodle_url($jump));
 } else {
     print_error('error');
index 18b0892..3b68246 100644 (file)
@@ -1679,7 +1679,11 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false,
  * @return void|string depending on $return
  */
 function print_section_add_menus($course, $section, $modnames = null, $vertical=false, $return=false, $sectionreturn=null) {
-    global $CFG, $OUTPUT;
+    global $PAGE, $CFG, $OUTPUT;
+    if ($course->id != $PAGE->course->id) {
+        debugging('print_section_add_menus() can be called only for the course set on the page', DEBUG_DEVELOPER);
+        return;
+    }
 
     if ($modnames === null) {
         $modnames = get_module_types_names();
@@ -1687,6 +1691,7 @@ function print_section_add_menus($course, $section, $modnames = null, $vertical=
 
     // check to see if user can add menus and there are modules to add
     if (!has_capability('moodle/course:manageactivities', context_course::instance($course->id))
+            || !$PAGE->user_is_editing()
             || empty($modnames)) {
         if ($return) {
             return '';
@@ -1702,16 +1707,14 @@ function print_section_add_menus($course, $section, $modnames = null, $vertical=
     $resources = array();
     $activities = array();
 
-    // We need to add the section section to the link for each module
-    $sectionlink = '&section=' . $section . '&sr=' . $sectionreturn;
-
     foreach ($modules as $module) {
         if (isset($module->types)) {
             // This module has a subtype
             // NOTE: this is legacy stuff, module subtypes are very strongly discouraged!!
             $subtypes = array();
             foreach ($module->types as $subtype) {
-                $subtypes[$subtype->link . $sectionlink] = $subtype->title;
+                $link = $subtype->link->out(true, array('section' => $section));
+                $subtypes[$link] = $subtype->title;
             }
 
             // Sort module subtypes into the list
@@ -1733,11 +1736,13 @@ function print_section_add_menus($course, $section, $modnames = null, $vertical=
         } else {
             // This module has no subtypes
             if ($module->archetype == MOD_ARCHETYPE_RESOURCE) {
-                $resources[$module->link . $sectionlink] = $module->title;
+                $link = $module->link->out(true, array('section' => $section));
+                $resources[$link] = $module->title;
             } else if ($module->archetype === MOD_ARCHETYPE_SYSTEM) {
                 // System modules cannot be added by user, do not add to dropdown
             } else {
-                $activities[$module->link . $sectionlink] = $module->title;
+                $link = $module->link->out(true, array('section' => $section));
+                $activities[$link] = $module->title;
             }
         }
     }
@@ -1826,7 +1831,10 @@ function get_module_metadata($course, $modnames, $sectionreturn = null) {
     }
 
     $return = array();
-    $urlbase = "/course/mod.php?id=$course->id&sesskey=".sesskey().'&sr='.$sectionreturn.'&add=';
+    $urlbase = new moodle_url('/course/mod.php', array('id' => $course->id, 'sesskey' => sesskey()));
+    if ($sectionreturn !== null) {
+        $urlbase->param('sr', $sectionreturn);
+    }
     foreach($modnames as $modname => $modnamestr) {
         if (!course_allowed_module($course, $modname)) {
             continue;
@@ -1873,16 +1881,16 @@ function get_module_metadata($course, $modnames, $sectionreturn = null) {
                     if (get_string_manager()->string_exists('help' . $subtype->name, $modname)) {
                         $subtype->help = get_string('help' . $subtype->name, $modname);
                     }
-                    $subtype->link = $urlbase . $subtype->type;
+                    $subtype->link = new moodle_url($urlbase, array('add' => $subtype->type));
                     $group->types[] = $subtype;
                 }
                 $modlist[$course->id][$modname] = $group;
             }
         } else {
             $module = new stdClass();
-            $module->title = get_string('modulename', $modname);
+            $module->title = $modnamestr;
             $module->name = $modname;
-            $module->link = $urlbase . $modname;
+            $module->link = new moodle_url($urlbase, array('add' => $modname));
             $module->icon = $OUTPUT->pix_icon('icon', '', $module->name, array('class' => 'icon'));
             $sm = get_string_manager();
             if ($sm->string_exists('modulename_help', $modname)) {