Merge branch 'wip-MDL-36967-master' of git://github.com/marinaglancy/moodle
authorSam Hemelryk <sam@moodle.com>
Tue, 15 Jan 2013 22:01:16 +0000 (11:01 +1300)
committerSam Hemelryk <sam@moodle.com>
Tue, 15 Jan 2013 22:01:16 +0000 (11:01 +1300)
Conflicts:
lib/deprecatedlib.php

1  2 
course/lib.php
lib/deprecatedlib.php

diff --combined course/lib.php
@@@ -847,54 -847,6 +847,6 @@@ function print_log_ods($course, $user, 
      return true;
  }
  
- function print_overview($courses, array $remote_courses=array()) {
-     global $CFG, $USER, $DB, $OUTPUT;
-     $htmlarray = array();
-     if ($modules = $DB->get_records('modules')) {
-         foreach ($modules as $mod) {
-             if (file_exists(dirname(dirname(__FILE__)).'/mod/'.$mod->name.'/lib.php')) {
-                 include_once(dirname(dirname(__FILE__)).'/mod/'.$mod->name.'/lib.php');
-                 $fname = $mod->name.'_print_overview';
-                 if (function_exists($fname)) {
-                     $fname($courses,$htmlarray);
-                 }
-             }
-         }
-     }
-     foreach ($courses as $course) {
-         $fullname = format_string($course->fullname, true, array('context' => context_course::instance($course->id)));
-         echo $OUTPUT->box_start('coursebox');
-         $attributes = array('title' => s($fullname));
-         if (empty($course->visible)) {
-             $attributes['class'] = 'dimmed';
-         }
-         echo $OUTPUT->heading(html_writer::link(
-             new moodle_url('/course/view.php', array('id' => $course->id)), $fullname, $attributes), 3);
-         if (array_key_exists($course->id,$htmlarray)) {
-             foreach ($htmlarray[$course->id] as $modname => $html) {
-                 echo $html;
-             }
-         }
-         echo $OUTPUT->box_end();
-     }
-     if (!empty($remote_courses)) {
-         echo $OUTPUT->heading(get_string('remotecourses', 'mnet'));
-     }
-     foreach ($remote_courses as $course) {
-         echo $OUTPUT->box_start('coursebox');
-         $attributes = array('title' => s($course->fullname));
-         echo $OUTPUT->heading(html_writer::link(
-             new moodle_url('/auth/mnet/jump.php', array('hostid' => $course->hostid, 'wantsurl' => '/course/view.php?id='.$course->remoteid)),
-             format_string($course->shortname),
-             $attributes) . ' (' . format_string($course->hostname) . ')', 3);
-         echo $OUTPUT->box_end();
-     }
- }
  /**
   * This function trawls through the logs looking for
   * anything new since the user's last login
@@@ -1301,6 -1253,576 +1253,6 @@@ function set_section_visible($courseid
      return $resourcestotoggle;
  }
  
 -/**
 - * Obtains shared data that is used in print_section when displaying a
 - * course-module entry.
 - *
 - * Calls format_text or format_string as appropriate, and obtains the correct icon.
 - *
 - * This data is also used in other areas of the code.
 - * @param cm_info $cm Course-module data (must come from get_fast_modinfo)
 - * @param object $course Moodle course object
 - * @return array An array with the following values in this order:
 - *   $content (optional extra content for after link),
 - *   $instancename (text of link)
 - */
 -function get_print_section_cm_text(cm_info $cm, $course) {
 -    global $OUTPUT;
 -
 -    // Get content from modinfo if specified. Content displays either
 -    // in addition to the standard link (below), or replaces it if
 -    // the link is turned off by setting ->url to null.
 -    if (($content = $cm->get_content()) !== '') {
 -        // Improve filter performance by preloading filter setttings for all
 -        // activities on the course (this does nothing if called multiple
 -        // times)
 -        filter_preload_activities($cm->get_modinfo());
 -
 -        // Get module context
 -        $modulecontext = context_module::instance($cm->id);
 -        $labelformatoptions = new stdClass();
 -        $labelformatoptions->noclean = true;
 -        $labelformatoptions->overflowdiv = true;
 -        $labelformatoptions->context = $modulecontext;
 -        $content = format_text($content, FORMAT_HTML, $labelformatoptions);
 -    } else {
 -        $content = '';
 -    }
 -
 -    // Get course context
 -    $coursecontext = context_course::instance($course->id);
 -    $stringoptions = new stdClass;
 -    $stringoptions->context = $coursecontext;
 -    $instancename = format_string($cm->name, true,  $stringoptions);
 -    return array($content, $instancename);
 -}
 -
 -/**
 - * Prints a section full of activity modules
 - *
 - * @param stdClass $course The course
 - * @param stdClass|section_info $section The section object containing properties id and section
 - * @param array $mods (argument not used)
 - * @param array $modnamesused (argument not used)
 - * @param bool $absolute All links are absolute
 - * @param string $width Width of the container
 - * @param bool $hidecompletion Hide completion status
 - * @param int $sectionreturn The section to return to
 - * @return void
 - */
 -function print_section($course, $section, $mods, $modnamesused, $absolute=false, $width="100%", $hidecompletion=false, $sectionreturn=null) {
 -    global $CFG, $USER, $DB, $PAGE, $OUTPUT;
 -
 -    static $initialised;
 -
 -    static $groupbuttons;
 -    static $groupbuttonslink;
 -    static $isediting;
 -    static $ismoving;
 -    static $strmovehere;
 -    static $strmovefull;
 -    static $strunreadpostsone;
 -
 -    if (!isset($initialised)) {
 -        $groupbuttons     = ($course->groupmode or (!$course->groupmodeforce));
 -        $groupbuttonslink = (!$course->groupmodeforce);
 -        $isediting        = $PAGE->user_is_editing();
 -        $ismoving         = $isediting && ismoving($course->id);
 -        if ($ismoving) {
 -            $strmovehere  = get_string("movehere");
 -            $strmovefull  = strip_tags(get_string("movefull", "", "'$USER->activitycopyname'"));
 -        }
 -        $initialised = true;
 -    }
 -
 -    $modinfo = get_fast_modinfo($course);
 -    $completioninfo = new completion_info($course);
 -
 -    //Accessibility: replace table with list <ul>, but don't output empty list.
 -    if (!empty($modinfo->sections[$section->section])) {
 -
 -        // Fix bug #5027, don't want style=\"width:$width\".
 -        echo "<ul class=\"section img-text\">\n";
 -
 -        foreach ($modinfo->sections[$section->section] as $modnumber) {
 -            $mod = $modinfo->cms[$modnumber];
 -
 -            if ($ismoving and $mod->id == $USER->activitycopy) {
 -                // do not display moving mod
 -                continue;
 -            }
 -
 -            // We can continue (because it will not be displayed at all)
 -            // if:
 -            // 1) The activity is not visible to users
 -            // and
 -            // 2a) The 'showavailability' option is not set (if that is set,
 -            //     we need to display the activity so we can show
 -            //     availability info)
 -            // or
 -            // 2b) The 'availableinfo' is empty, i.e. the activity was
 -            //     hidden in a way that leaves no info, such as using the
 -            //     eye icon.
 -            if (!$mod->uservisible &&
 -                (empty($mod->showavailability) ||
 -                  empty($mod->availableinfo))) {
 -                // visibility shortcut
 -                continue;
 -            }
 -
 -            // In some cases the activity is visible to user, but it is
 -            // dimmed. This is done if viewhiddenactivities is true and if:
 -            // 1. the activity is not visible, or
 -            // 2. the activity has dates set which do not include current, or
 -            // 3. the activity has any other conditions set (regardless of whether
 -            //    current user meets them)
 -            $modcontext = context_module::instance($mod->id);
 -            $canviewhidden = has_capability('moodle/course:viewhiddenactivities', $modcontext);
 -            $accessiblebutdim = false;
 -            $conditionalhidden = false;
 -            if ($canviewhidden) {
 -                $accessiblebutdim = !$mod->visible;
 -                if (!empty($CFG->enableavailability)) {
 -                    $conditionalhidden = $mod->availablefrom > time() ||
 -                        ($mod->availableuntil && $mod->availableuntil < time()) ||
 -                        count($mod->conditionsgrade) > 0 ||
 -                        count($mod->conditionscompletion) > 0;
 -                }
 -                $accessiblebutdim = $conditionalhidden || $accessiblebutdim;
 -            }
 -
 -            $liclasses = array();
 -            $liclasses[] = 'activity';
 -            $liclasses[] = $mod->modname;
 -            $liclasses[] = 'modtype_'.$mod->modname;
 -            $extraclasses = $mod->get_extra_classes();
 -            if ($extraclasses) {
 -                $liclasses = array_merge($liclasses, explode(' ', $extraclasses));
 -            }
 -            echo html_writer::start_tag('li', array('class'=>join(' ', $liclasses), 'id'=>'module-'.$modnumber));
 -            if ($ismoving) {
 -                echo '<a title="'.$strmovefull.'"'.
 -                     ' href="'.$CFG->wwwroot.'/course/mod.php?moveto='.$mod->id.'&amp;sesskey='.sesskey().'">'.
 -                     '<img class="movetarget" src="'.$OUTPUT->pix_url('movehere') . '" '.
 -                     ' alt="'.$strmovehere.'" /></a><br />
 -                     ';
 -            }
 -
 -            $classes = array('mod-indent');
 -            if (!empty($mod->indent)) {
 -                $classes[] = 'mod-indent-'.$mod->indent;
 -                if ($mod->indent > 15) {
 -                    $classes[] = 'mod-indent-huge';
 -                }
 -            }
 -            echo html_writer::start_tag('div', array('class'=>join(' ', $classes)));
 -
 -            // Get data about this course-module
 -            list($content, $instancename) =
 -                    get_print_section_cm_text($modinfo->cms[$modnumber], $course);
 -
 -            //Accessibility: for files get description via icon, this is very ugly hack!
 -            $altname = '';
 -            $altname = $mod->modfullname;
 -            // Avoid unnecessary duplication: if e.g. a forum name already
 -            // includes the word forum (or Forum, etc) then it is unhelpful
 -            // to include that in the accessible description that is added.
 -            if (false !== strpos(textlib::strtolower($instancename),
 -                    textlib::strtolower($altname))) {
 -                $altname = '';
 -            }
 -            // File type after name, for alphabetic lists (screen reader).
 -            if ($altname) {
 -                $altname = get_accesshide(' '.$altname);
 -            }
 -
 -            // Start the div for the activity title, excluding the edit icons.
 -            echo html_writer::start_tag('div', array('class' => 'activityinstance'));
 -
 -            // We may be displaying this just in order to show information
 -            // about visibility, without the actual link
 -            $contentpart = '';
 -            if ($mod->uservisible) {
 -                // Nope - in this case the link is fully working for user
 -                $linkclasses = '';
 -                $textclasses = '';
 -                if ($accessiblebutdim) {
 -                    $linkclasses .= ' dimmed';
 -                    $textclasses .= ' dimmed_text';
 -                    if ($conditionalhidden) {
 -                        $linkclasses .= ' conditionalhidden';
 -                        $textclasses .= ' conditionalhidden';
 -                    }
 -                    $accesstext = get_accesshide(get_string('hiddenfromstudents').': ');
 -                } else {
 -                    $accesstext = '';
 -                }
 -                if ($linkclasses) {
 -                    $linkcss = trim($linkclasses) . ' ';
 -                } else {
 -                    $linkcss = '';
 -                }
 -                if ($textclasses) {
 -                    $textcss = trim($textclasses) . ' ';
 -                } else {
 -                    $textcss = '';
 -                }
 -
 -                // Get on-click attribute value if specified and decode the onclick - it
 -                // has already been encoded for display (puke).
 -                $onclick = htmlspecialchars_decode($mod->get_on_click(), ENT_QUOTES);
 -
 -                $groupinglabel = '';
 -                if (!empty($mod->groupingid) && has_capability('moodle/course:managegroups', context_course::instance($course->id))) {
 -                    $groupings = groups_get_all_groupings($course->id);
 -                    $groupinglabel = html_writer::tag('span', '('.format_string($groupings[$mod->groupingid]->name).')',
 -                            array('class' => 'groupinglabel'));
 -                }
 -
 -                if ($url = $mod->get_url()) {
 -                    // Display link itself.
 -                    $activitylink = html_writer::empty_tag('img', array('src' => $mod->get_icon_url(),
 -                            'class' => 'iconlarge activityicon', 'alt' => $mod->modfullname)) . $accesstext .
 -                            html_writer::tag('span', $instancename . $altname, array('class' => 'instancename'));
 -                    echo html_writer::link($url, $activitylink, array('class' => $linkcss, 'onclick' => $onclick)) .
 -                            $groupinglabel;
 -
 -                    // If specified, display extra content after link.
 -                    if ($content) {
 -                        $contentpart = html_writer::tag('div', $content, array('class' =>
 -                                trim('contentafterlink ' . $textclasses)));
 -                    }
 -                } else {
 -                    // No link, so display only content.
 -                    $contentpart = html_writer::tag('div', $accesstext . $content, array('class' => $textcss));
 -                }
 -
 -            } else {
 -                $textclasses = $extraclasses;
 -                $textclasses .= ' dimmed_text';
 -                if ($textclasses) {
 -                    $textcss = 'class="' . trim($textclasses) . '" ';
 -                } else {
 -                    $textcss = '';
 -                }
 -                $accesstext = '<span class="accesshide">' .
 -                        get_string('notavailableyet', 'condition') .
 -                        ': </span>';
 -
 -                if ($url = $mod->get_url()) {
 -                    // Display greyed-out text of link
 -                    echo '<div ' . $textcss . $mod->extra .
 -                            ' >' . '<img src="' . $mod->get_icon_url() .
 -                            '" class="activityicon" alt="" /> <span>'. $instancename . $altname .
 -                            '</span></div>';
 -
 -                    // Do not display content after link when it is greyed out like this.
 -                } else {
 -                    // No link, so display only content (also greyed)
 -                    $contentpart = '<div ' . $textcss . $mod->extra . '>' .
 -                            $accesstext . $content . '</div>';
 -                }
 -            }
 -
 -            // Module can put text after the link (e.g. forum unread)
 -            echo $mod->get_after_link();
 -
 -            // Closing the tag which contains everything but edit icons. $contentpart should not be part of this.
 -            echo html_writer::end_tag('div');
 -
 -            // If there is content but NO link (eg label), then display the
 -            // content here (BEFORE any icons). In this case cons must be
 -            // displayed after the content so that it makes more sense visually
 -            // and for accessibility reasons, e.g. if you have a one-line label
 -            // it should work similarly (at least in terms of ordering) to an
 -            // activity.
 -            if (empty($url)) {
 -                echo $contentpart;
 -            }
 -
 -            if ($isediting) {
 -                if ($groupbuttons and plugin_supports('mod', $mod->modname, FEATURE_GROUPS, 0)) {
 -                    if (! $mod->groupmodelink = $groupbuttonslink) {
 -                        $mod->groupmode = $course->groupmode;
 -                    }
 -
 -                } else {
 -                    $mod->groupmode = false;
 -                }
 -                echo make_editing_buttons($mod, $absolute, true, $mod->indent, $sectionreturn);
 -                echo $mod->get_after_edit_icons();
 -            }
 -
 -            // Completion
 -            $completion = $hidecompletion
 -                ? COMPLETION_TRACKING_NONE
 -                : $completioninfo->is_enabled($mod);
 -            if ($completion!=COMPLETION_TRACKING_NONE && isloggedin() &&
 -                !isguestuser() && $mod->uservisible) {
 -                $completiondata = $completioninfo->get_data($mod,true);
 -                $completionicon = '';
 -                if ($isediting) {
 -                    switch ($completion) {
 -                        case COMPLETION_TRACKING_MANUAL :
 -                            $completionicon = 'manual-enabled'; break;
 -                        case COMPLETION_TRACKING_AUTOMATIC :
 -                            $completionicon = 'auto-enabled'; break;
 -                        default: // wtf
 -                    }
 -                } else if ($completion==COMPLETION_TRACKING_MANUAL) {
 -                    switch($completiondata->completionstate) {
 -                        case COMPLETION_INCOMPLETE:
 -                            $completionicon = 'manual-n'; break;
 -                        case COMPLETION_COMPLETE:
 -                            $completionicon = 'manual-y'; break;
 -                    }
 -                } else { // Automatic
 -                    switch($completiondata->completionstate) {
 -                        case COMPLETION_INCOMPLETE:
 -                            $completionicon = 'auto-n'; break;
 -                        case COMPLETION_COMPLETE:
 -                            $completionicon = 'auto-y'; break;
 -                        case COMPLETION_COMPLETE_PASS:
 -                            $completionicon = 'auto-pass'; break;
 -                        case COMPLETION_COMPLETE_FAIL:
 -                            $completionicon = 'auto-fail'; break;
 -                    }
 -                }
 -                if ($completionicon) {
 -                    $imgsrc = $OUTPUT->pix_url('i/completion-'.$completionicon);
 -                    $formattedname = format_string($mod->name, true, array('context' => $modcontext));
 -                    $imgalt = get_string('completion-alt-' . $completionicon, 'completion', $formattedname);
 -                    if ($completion == COMPLETION_TRACKING_MANUAL && !$isediting) {
 -                        $imgtitle = get_string('completion-title-' . $completionicon, 'completion', $formattedname);
 -                        $newstate =
 -                            $completiondata->completionstate==COMPLETION_COMPLETE
 -                            ? COMPLETION_INCOMPLETE
 -                            : COMPLETION_COMPLETE;
 -                        // In manual mode the icon is a toggle form...
 -
 -                        // If this completion state is used by the
 -                        // conditional activities system, we need to turn
 -                        // off the JS.
 -                        if (!empty($CFG->enableavailability) &&
 -                            condition_info::completion_value_used_as_condition($course, $mod)) {
 -                            $extraclass = ' preventjs';
 -                        } else {
 -                            $extraclass = '';
 -                        }
 -                        echo html_writer::start_tag('form', array(
 -                                'class' => 'togglecompletion' . $extraclass,
 -                                'method' => 'post',
 -                                'action' => $CFG->wwwroot . '/course/togglecompletion.php'));
 -                        echo html_writer::start_tag('div');
 -                        echo html_writer::empty_tag('input', array(
 -                                'type' => 'hidden', 'name' => 'id', 'value' => $mod->id));
 -                        echo html_writer::empty_tag('input', array(
 -                                'type' => 'hidden', 'name' => 'modulename',
 -                                'value' => $mod->name));
 -                        echo html_writer::empty_tag('input', array(
 -                                'type' => 'hidden', 'name' => 'sesskey', 'value' => sesskey()));
 -                        echo html_writer::empty_tag('input', array(
 -                                'type' => 'hidden', 'name' => 'completionstate',
 -                                'value' => $newstate));
 -                        echo html_writer::empty_tag('input', array(
 -                                'type' => 'image', 'src' => $imgsrc, 'alt' => $imgalt, 'title' => $imgtitle));
 -                        echo html_writer::end_tag('div');
 -                        echo html_writer::end_tag('form');
 -                    } else {
 -                        // In auto mode, or when editing, the icon is just an image
 -                        echo "<span class='autocompletion'>";
 -                        echo "<img src='$imgsrc' alt='$imgalt' title='$imgalt' /></span>";
 -                    }
 -                }
 -            }
 -
 -            // If there is content AND a link, then display the content here
 -            // (AFTER any icons). Otherwise it was displayed before
 -            if (!empty($url)) {
 -                echo $contentpart;
 -            }
 -
 -            // Show availability information (for someone who isn't allowed to
 -            // see the activity itself, or for staff)
 -            if (!$mod->uservisible) {
 -                echo '<div class="availabilityinfo">'.$mod->availableinfo.'</div>';
 -            } else if ($canviewhidden && !empty($CFG->enableavailability)) {
 -                // Don't add availability information if user is not editing and activity is hidden.
 -                if ($mod->visible || $PAGE->user_is_editing()) {
 -                    $hidinfoclass = '';
 -                    if (!$mod->visible) {
 -                        $hidinfoclass = 'hide';
 -                    }
 -                    $ci = new condition_info($mod);
 -                    $fullinfo = $ci->get_full_information();
 -                    if($fullinfo) {
 -                        echo '<div class="availabilityinfo '.$hidinfoclass.'">'.get_string($mod->showavailability
 -                            ? 'userrestriction_visible'
 -                            : 'userrestriction_hidden','condition',
 -                            $fullinfo).'</div>';
 -                    }
 -                }
 -            }
 -
 -            echo html_writer::end_tag('div');
 -            echo html_writer::end_tag('li')."\n";
 -        }
 -
 -    } elseif ($ismoving) {
 -        echo "<ul class=\"section\">\n";
 -    }
 -
 -    if ($ismoving) {
 -        echo '<li><a title="'.$strmovefull.'"'.
 -             ' href="'.$CFG->wwwroot.'/course/mod.php?movetosection='.$section->id.'&amp;sesskey='.sesskey().'">'.
 -             '<img class="movetarget" src="'.$OUTPUT->pix_url('movehere') . '" '.
 -             ' alt="'.$strmovehere.'" /></a></li>
 -             ';
 -    }
 -    if (!empty($modinfo->sections[$section->section]) || $ismoving) {
 -        echo "</ul><!--class='section'-->\n\n";
 -    }
 -}
 -
 -/**
 - * Prints the menus to add activities and resources.
 - *
 - * @param stdClass $course The course
 - * @param int $section relative section number (field course_sections.section)
 - * @param null|array $modnames An array containing the list of modules and their names
 - *     if omitted will be taken from get_module_types_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 = null, $vertical=false, $return=false, $sectionreturn=null) {
 -    global $CFG, $OUTPUT;
 -
 -    if ($modnames === null) {
 -        $modnames = get_module_types_names();
 -    }
 -
 -    // 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))
 -            || empty($modnames)) {
 -        if ($return) {
 -            return '';
 -        } else {
 -            return false;
 -        }
 -    }
 -
 -    // Retrieve all modules with associated metadata
 -    $modules = get_module_metadata($course, $modnames, $sectionreturn);
 -
 -    // We'll sort resources and activities into two lists
 -    $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;
 -            }
 -
 -            // Sort module subtypes into the list
 -            if (!empty($module->title)) {
 -                // This grouping has a name
 -                if ($module->archetype == MOD_CLASS_RESOURCE) {
 -                    $resources[] = array($module->title=>$subtypes);
 -                } else {
 -                    $activities[] = array($module->title=>$subtypes);
 -                }
 -            } else {
 -                // This grouping does not have a name
 -                if ($module->archetype == MOD_CLASS_RESOURCE) {
 -                    $resources = array_merge($resources, $subtypes);
 -                } else {
 -                    $activities = array_merge($activities, $subtypes);
 -                }
 -            }
 -        } else {
 -            // This module has no subtypes
 -            if ($module->archetype == MOD_ARCHETYPE_RESOURCE) {
 -                $resources[$module->link . $sectionlink] = $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;
 -            }
 -        }
 -    }
 -
 -    $straddactivity = get_string('addactivity');
 -    $straddresource = get_string('addresource');
 -    $sectionname = get_section_name($course, $section);
 -    $strresourcelabel = get_string('addresourcetosection', null, $sectionname);
 -    $stractivitylabel = get_string('addactivitytosection', null, $sectionname);
 -
 -    $output = html_writer::start_tag('div', array('class' => 'section_add_menus', 'id' => 'add_menus-section-' . $section));
 -
 -    if (!$vertical) {
 -        $output .= html_writer::start_tag('div', array('class' => 'horizontal'));
 -    }
 -
 -    if (!empty($resources)) {
 -        $select = new url_select($resources, '', array(''=>$straddresource), "ressection$section");
 -        $select->set_help_icon('resources');
 -        $select->set_label($strresourcelabel, array('class' => 'accesshide'));
 -        $output .= $OUTPUT->render($select);
 -    }
 -
 -    if (!empty($activities)) {
 -        $select = new url_select($activities, '', array(''=>$straddactivity), "section$section");
 -        $select->set_help_icon('activities');
 -        $select->set_label($stractivitylabel, array('class' => 'accesshide'));
 -        $output .= $OUTPUT->render($select);
 -    }
 -
 -    if (!$vertical) {
 -        $output .= html_writer::end_tag('div');
 -    }
 -
 -    $output .= html_writer::end_tag('div');
 -
 -    if (course_ajax_enabled($course)) {
 -        $straddeither = get_string('addresourceoractivity');
 -        // The module chooser link
 -        $modchooser = html_writer::start_tag('div', array('class' => 'mdl-right'));
 -        $modchooser.= html_writer::start_tag('div', array('class' => 'section-modchooser'));
 -        $icon = $OUTPUT->pix_icon('t/add', '');
 -        $span = html_writer::tag('span', $straddeither, array('class' => 'section-modchooser-text'));
 -        $modchooser .= html_writer::tag('span', $icon . $span, array('class' => 'section-modchooser-link'));
 -        $modchooser.= html_writer::end_tag('div');
 -        $modchooser.= html_writer::end_tag('div');
 -
 -        // Wrap the normal output in a noscript div
 -        $usemodchooser = get_user_preferences('usemodchooser', $CFG->modchooserdefault);
 -        if ($usemodchooser) {
 -            $output = html_writer::tag('div', $output, array('class' => 'hiddenifjs addresourcedropdown'));
 -            $modchooser = html_writer::tag('div', $modchooser, array('class' => 'visibleifjs addresourcemodchooser'));
 -        } else {
 -            // If the module chooser is disabled, we need to ensure that the dropdowns are shown even if javascript is disabled
 -            $output = html_writer::tag('div', $output, array('class' => 'show addresourcedropdown'));
 -            $modchooser = html_writer::tag('div', $modchooser, array('class' => 'hide addresourcemodchooser'));
 -        }
 -        $output = $modchooser . $output;
 -    }
 -
 -    if ($return) {
 -        return $output;
 -    } else {
 -        echo $output;
 -    }
 -}
 -
  /**
   * Retrieve all metadata for the requested modules
   *
@@@ -1322,10 -1844,7 +1274,10 @@@ function get_module_metadata($course, $
      }
  
      $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;
                      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)) {
@@@ -1612,7 -2131,7 +1564,7 @@@ function get_course_category_tree($id 
   * Recursive function to print out all the categories in a nice format
   * with or without courses included
   */
 -function print_whole_category_list($category=NULL, $displaylist=NULL, $parentslist=NULL, $depth=-1, $showcourses = true) {
 +function print_whole_category_list($category=NULL, $displaylist=NULL, $parentslist=NULL, $depth=-1, $showcourses = true, $categorycourses=NULL) {
      global $CFG;
  
      // maxcategorydepth == 0 meant no limit
          make_categories_list($displaylist, $parentslist);
      }
  
 +    if (!$categorycourses) {
 +        if ($category) {
 +            $categorycourses = get_category_courses($category->id);
 +        } else {
 +            $categorycourses = get_category_courses();
 +        }
 +    }
 +
      if ($category) {
          if ($category->visible or has_capability('moodle/category:viewhiddencategories', context_system::instance())) {
 -            print_category_info($category, $depth, $showcourses);
 +            print_category_info($category, $depth, $showcourses, $categorycourses[$category->id]);
          } else {
              return;  // Don't bother printing children of invisible categories
          }
              $down = $last ? false : true;
              $first = false;
  
 -            print_whole_category_list($cat, $displaylist, $parentslist, $depth + 1, $showcourses);
 +            print_whole_category_list($cat, $displaylist, $parentslist, $depth + 1, $showcourses, $categorycourses);
          }
      }
  }
  
 +/**
 + * Gets an array whose keys are category ids and whose values are arrays of courses in the corresponding category.
 + *
 + * @param int $categoryid
 + * @return array
 + */
 +function get_category_courses_array($categoryid = 0) {
 +    $tree = get_course_category_tree($categoryid);
 +    $flattened = array();
 +    foreach ($tree as $category) {
 +        get_category_courses_array_recursively($flattened, $category);
 +    }
 +    return $flattened;
 +}
 +
 +/**
 + * Recursive function to help flatten the course category tree.
 + *
 + * Do not call this function directly, instead calll its parent function {@link get_category_courses_array}
 + *
 + * @param array &$flattened An array passed by reference in which to store courses for each category.
 + * @param stdClass $category The category to get courses for.
 + */
 +function get_category_courses_array_recursively(array &$flattened, $category) {
 +    $flattened[$category->id] = $category->courses;
 +    foreach ($category->categories as $childcategory) {
 +        get_category_courses_array_recursively($flattened, $childcategory);
 +    }
 +}
 +
  /**
   * This function will return $options array for html_writer::select(), with whitespace to denote nesting.
   */
@@@ -1711,16 -2192,10 +1663,16 @@@ function make_categories_options() 
  }
  
  /**
 - * Prints the category info in indented fashion
 + * Prints the category information.
 + *
   * This function is only used by print_whole_category_list() above
 + *
 + * @param stdClass $category
 + * @param int $depth The depth of the category.
 + * @param bool $showcourses If set to true course information will also be printed.
 + * @param array|null $courses An array of courses belonging to the category, or null if you don't have it yet.
   */
 -function print_category_info($category, $depth=0, $showcourses = false) {
 +function print_category_info($category, $depth = 0, $showcourses = false, array $courses = null) {
      global $CFG, $DB, $OUTPUT;
  
      $strsummary = get_string('summary');
          $catimage = "&nbsp;";
      }
  
 -    $courses = get_courses($category->id, 'c.sortorder ASC', 'c.id,c.sortorder,c.visible,c.fullname,c.shortname,c.summary');
 +    if (is_null($courses)) {
 +        $courses = get_courses($category->id, 'c.sortorder ASC', 'c.id,c.sortorder,c.visible,c.fullname,c.shortname,c.summary');
 +    }
      $context = context_coursecat::instance($category->id);
      $fullname = format_string($category->name, true, array('context' => $context));
  
@@@ -1898,9 -2371,7 +1850,9 @@@ function update_category_button($catego
  }
  
  /**
 - * Category is 0 (for all courses) or an object
 + * Print courses in category. If category is 0 then all courses are printed.
 + * @param int|stdClass $category category object or id.
 + * @return bool true if courses found and printed, else false.
   */
  function print_courses($category) {
      global $CFG, $OUTPUT;
              echo html_writer::start_tag('div', array('class'=>'addcoursebutton'));
              echo $OUTPUT->single_button(new moodle_url('/course/edit.php', $options), get_string("addnewcourse"));
              echo html_writer::end_tag('div');
 +            return false;
          }
      }
 +    return true;
  }
  
  /**
@@@ -2638,15 -3107,19 +2590,15 @@@ function moveto_module($mod, $section, 
  }
  
  /**
 - * Produces the editing buttons for a module
 + * Returns the list of all editing actions that current user can perform on the module
   *
 - * @global core_renderer $OUTPUT
 - * @staticvar type $str
 - * @param stdClass $mod The module to produce editing buttons for
 - * @param bool $absolute_ignored ignored - all links are absolute
 - * @param bool $moveselect If true a move seleciton process is used (default true)
 - * @param int $indent The current indenting
 - * @param int $section The section to link back to
 - * @return string XHTML for the editing buttons
 + * @param cm_info $mod The module to produce editing buttons for
 + * @param int $indent The current indenting (default -1 means no move left-right actions)
 + * @param int $sr The section to link back to (used for creating the links)
 + * @return array array of action_link or pix_icon objects
   */
 -function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $moveselect = true, $indent=-1, $section=null) {
 -    global $CFG, $OUTPUT, $COURSE;
 +function course_get_cm_edit_actions(cm_info $mod, $indent = -1, $sr = null) {
 +    global $COURSE, $SITE;
  
      static $str;
  
  
      // no permission to edit anything
      if (!has_any_capability($editcaps, $modcontext) and !has_all_capabilities($dupecaps, $coursecontext)) {
 -        return false;
 +        return array();
      }
  
      $hasmanageactivities = has_capability('moodle/course:manageactivities', $modcontext);
  
      if (!isset($str)) {
 -        $str = new stdClass;
 -        $str->assign         = get_string("assignroles", 'role');
 -        $str->delete         = get_string("delete");
 -        $str->move           = get_string("move");
 -        $str->moveup         = get_string("moveup");
 -        $str->movedown       = get_string("movedown");
 -        $str->moveright      = get_string("moveright");
 -        $str->moveleft       = get_string("moveleft");
 -        $str->update         = get_string("update");
 -        $str->duplicate      = get_string("duplicate");
 -        $str->hide           = get_string("hide");
 -        $str->show           = get_string("show");
 +        $str = get_strings(array('delete', 'move', 'moveright', 'moveleft',
 +            'update', 'duplicate', 'hide', 'show', 'edittitle'), 'moodle');
 +        $str->assign         = get_string('assignroles', 'role');
          $str->groupsnone     = get_string('clicktochangeinbrackets', 'moodle', get_string("groupsnone"));
          $str->groupsseparate = get_string('clicktochangeinbrackets', 'moodle', get_string("groupsseparate"));
          $str->groupsvisible  = get_string('clicktochangeinbrackets', 'moodle', get_string("groupsvisible"));
          $str->forcedgroupsnone     = get_string('forcedmodeinbrackets', 'moodle', get_string("groupsnone"));
          $str->forcedgroupsseparate = get_string('forcedmodeinbrackets', 'moodle', get_string("groupsseparate"));
          $str->forcedgroupsvisible  = get_string('forcedmodeinbrackets', 'moodle', get_string("groupsvisible"));
 -        $str->edittitle = get_string('edittitle', 'moodle');
      }
  
      $baseurl = new moodle_url('/course/mod.php', array('sesskey' => sesskey()));
  
 -    if ($section !== null) {
 -        $baseurl->param('sr', $section);
 +    if ($sr !== null) {
 +        $baseurl->param('sr', $sr);
      }
      $actions = array();
  
      // AJAX edit title
 -    if ($mod->modname !== 'label' && $hasmanageactivities && course_ajax_enabled($COURSE)) {
 -        $actions[] = new action_link(
 +    if ($mod->modname !== 'label' && $hasmanageactivities &&
 +                (($mod->course == $COURSE->id && course_ajax_enabled($COURSE)) ||
 +                 ($mod->course == SITEID && course_ajax_enabled($SITE)))) {
 +        // we will not display link if we are on some other-course page (where we should not see this module anyway)
 +        $actions['title'] = new action_link(
              new moodle_url($baseurl, array('update' => $mod->id)),
              new pix_icon('t/editstring', $str->edittitle, 'moodle', array('class' => 'iconsmall visibleifjs', 'title' => '')),
              null,
          }
  
          if ($indent > 0) {
 -            $actions[] = new action_link(
 +            $actions['moveleft'] = new action_link(
                  new moodle_url($baseurl, array('id' => $mod->id, 'indent' => '-1')),
                  new pix_icon($leftarrow, $str->moveleft, 'moodle', array('class' => 'iconsmall', 'title' => '')),
                  null,
              );
          }
          if ($indent >= 0) {
 -            $actions[] = new action_link(
 +            $actions['moveright'] = new action_link(
                  new moodle_url($baseurl, array('id' => $mod->id, 'indent' => '1')),
                  new pix_icon($rightarrow, $str->moveright, 'moodle', array('class' => 'iconsmall', 'title' => '')),
                  null,
  
      // move
      if ($hasmanageactivities) {
 -        if ($moveselect) {
 -            $actions[] = new action_link(
 -                new moodle_url($baseurl, array('copy' => $mod->id)),
 -                new pix_icon('t/move', $str->move, 'moodle', array('class' => 'iconsmall', 'title' => '')),
 -                null,
 -                array('class' => 'editing_move', 'title' => $str->move)
 -            );
 -        } else {
 -            $actions[] = new action_link(
 -                new moodle_url($baseurl, array('id' => $mod->id, 'move' => '-1')),
 -                new pix_icon('t/up', $str->moveup, 'moodle', array('class' => 'iconsmall', 'title' => '')),
 -                null,
 -                array('class' => 'editing_moveup', 'title' => $str->moveup)
 -            );
 -            $actions[] = new action_link(
 -                new moodle_url($baseurl, array('id' => $mod->id, 'move' => '1')),
 -                new pix_icon('t/down', $str->movedown, 'moodle', array('class' => 'iconsmall', 'title' => '')),
 -                null,
 -                array('class' => 'editing_movedown', 'title' => $str->movedown)
 -            );
 -        }
 +        $actions['move'] = new action_link(
 +            new moodle_url($baseurl, array('copy' => $mod->id)),
 +            new pix_icon('t/move', $str->move, 'moodle', array('class' => 'iconsmall', 'title' => '')),
 +            null,
 +            array('class' => 'editing_move', 'title' => $str->move)
 +        );
      }
  
      // Update
      if ($hasmanageactivities) {
 -        $actions[] = new action_link(
 +        $actions['update'] = new action_link(
              new moodle_url($baseurl, array('update' => $mod->id)),
              new pix_icon('t/edit', $str->update, 'moodle', array('class' => 'iconsmall', 'title' => '')),
              null,
      }
  
      // Duplicate (require both target import caps to be able to duplicate and backup2 support, see modduplicate.php)
 -    if (has_all_capabilities($dupecaps, $coursecontext) && plugin_supports('mod', $mod->modname, FEATURE_BACKUP_MOODLE2)) {
 -        $actions[] = new action_link(
 +    // note that restoring on front page is never allowed
 +    if ($mod->course != SITEID && has_all_capabilities($dupecaps, $coursecontext) &&
 +            plugin_supports('mod', $mod->modname, FEATURE_BACKUP_MOODLE2)) {
 +        $actions['duplicate'] = new action_link(
              new moodle_url($baseurl, array('duplicate' => $mod->id)),
              new pix_icon('t/copy', $str->duplicate, 'moodle', array('class' => 'iconsmall', 'title' => '')),
              null,
  
      // Delete
      if ($hasmanageactivities) {
 -        $actions[] = new action_link(
 +        $actions['delete'] = new action_link(
              new moodle_url($baseurl, array('delete' => $mod->id)),
              new pix_icon('t/delete', $str->delete, 'moodle', array('class' => 'iconsmall', 'title' => '')),
              null,
      // hideshow
      if (has_capability('moodle/course:activityvisibility', $modcontext)) {
          if ($mod->visible) {
 -            $actions[] = new action_link(
 +            $actions['hide'] = new action_link(
                  new moodle_url($baseurl, array('hide' => $mod->id)),
                  new pix_icon('t/hide', $str->hide, 'moodle', array('class' => 'iconsmall', 'title' => '')),
                  null,
                  array('class' => 'editing_hide', 'title' => $str->hide)
              );
          } else {
 -            $actions[] = new action_link(
 +            $actions['show'] = new action_link(
                  new moodle_url($baseurl, array('show' => $mod->id)),
                  new pix_icon('t/show', $str->show, 'moodle', array('class' => 'iconsmall', 'title' => '')),
                  null,
      }
  
      // groupmode
 -    if ($hasmanageactivities and $mod->groupmode !== false) {
 -        if ($mod->groupmode == SEPARATEGROUPS) {
 -            $groupmode = 0;
 +    if ($hasmanageactivities and plugin_supports('mod', $mod->modname, FEATURE_GROUPS, 0)) {
 +        if ($mod->coursegroupmodeforce) {
 +            $modgroupmode = $mod->coursegroupmode;
 +        } else {
 +            $modgroupmode = $mod->groupmode;
 +        }
 +        if ($modgroupmode == SEPARATEGROUPS) {
 +            $groupmode = NOGROUPS;
              $grouptitle = $str->groupsseparate;
              $forcedgrouptitle = $str->forcedgroupsseparate;
 -            $groupclass = 'editing_groupsseparate';
 +            $actionname = 'groupsseparate';
              $groupimage = 't/groups';
 -        } else if ($mod->groupmode == VISIBLEGROUPS) {
 -            $groupmode = 1;
 +        } else if ($modgroupmode == VISIBLEGROUPS) {
 +            $groupmode = SEPARATEGROUPS;
              $grouptitle = $str->groupsvisible;
              $forcedgrouptitle = $str->forcedgroupsvisible;
 -            $groupclass = 'editing_groupsvisible';
 +            $actionname = 'groupsvisible';
              $groupimage = 't/groupv';
          } else {
 -            $groupmode = 2;
 +            $groupmode = VISIBLEGROUPS;
              $grouptitle = $str->groupsnone;
              $forcedgrouptitle = $str->forcedgroupsnone;
 -            $groupclass = 'editing_groupsnone';
 +            $actionname = 'groupsnone';
              $groupimage = 't/groupn';
          }
 -        if ($mod->groupmodelink) {
 -            $actions[] = new action_link(
 +        if (!$mod->coursegroupmodeforce) {
 +            $actions[$actionname] = new action_link(
                  new moodle_url($baseurl, array('id' => $mod->id, 'groupmode' => $groupmode)),
                  new pix_icon($groupimage, $grouptitle, 'moodle', array('class' => 'iconsmall', 'title' => '')),
                  null,
 -                array('class' => $groupclass, 'title' => $grouptitle)
 +                array('class' => 'editing_'. $actionname, 'title' => $grouptitle)
              );
          } else {
 -            $actions[] = new pix_icon($groupimage, $forcedgrouptitle, 'moodle', array('title' => $forcedgrouptitle, 'class' => 'iconsmall'));
 +            $actions[$actionname] = new pix_icon($groupimage, $forcedgrouptitle, 'moodle', array('title' => $forcedgrouptitle, 'class' => 'iconsmall'));
          }
      }
  
      // Assign
      if (has_capability('moodle/role:assign', $modcontext)){
 -        $actions[] = new action_link(
 -            new moodle_url('/'.$CFG->admin.'/roles/assign.php', array('contextid' => $modcontext->id)),
 +        $actions['assign'] = new action_link(
 +            new moodle_url('/admin/roles/assign.php', array('contextid' => $modcontext->id)),
              new pix_icon('t/assignroles', $str->assign, 'moodle', array('class' => 'iconsmall', 'title' => '')),
              null,
              array('class' => 'editing_assign', 'title' => $str->assign)
          );
      }
  
 -    // The space added before the <span> is a ugly hack but required to set the CSS property white-space: nowrap
 -    // and having it to work without attaching the preceding text along with it. Hopefully the refactoring of
 -    // the course page HTML will allow this to be removed.
 -    $output = ' ' . html_writer::start_tag('span', array('class' => 'commands'));
 -    foreach ($actions as $action) {
 -        if ($action instanceof renderable) {
 -            $output .= $OUTPUT->render($action);
 -        } else {
 -            $output .= $action;
 -        }
 -    }
 -    $output .= html_writer::end_tag('span');
 -    return $output;
 +    return $actions;
  }
  
  /**
@@@ -4000,6 -4500,17 +3952,6 @@@ function include_course_ajax($course, $
      // Load drag and drop upload AJAX.
      dndupload_add_to_course($course, $enabledmodules);
  
 -    // Add the module chooser
 -    $PAGE->requires->yui_module('moodle-course-modchooser',
 -        'M.course.init_chooser',
 -        array(array('courseid' => $course->id, 'closeButtonTitle' => get_string('close', 'editor')))
 -    );
 -    $PAGE->requires->strings_for_js(array(
 -            'addresourceoractivity',
 -            'modchooserenable',
 -            'modchooserdisable',
 -    ), 'moodle');
 -
      return true;
  }
  
diff --combined lib/deprecatedlib.php
@@@ -3085,133 -3085,59 +3085,190 @@@ function format_weeks_get_section_dates
      return null;
  }
  
 +/**
 + * Obtains shared data that is used in print_section when displaying a
 + * course-module entry.
 + *
 + * Deprecated. Instead of:
 + * list($content, $name) = get_print_section_cm_text($cm, $course);
 + * use:
 + * $content = $cm->get_formatted_content(array('overflowdiv' => true, 'noclean' => true));
 + * $name = $cm->get_formatted_name();
 + *
 + * @deprecated since 2.5
 + * @see cm_info::get_formatted_content()
 + * @see cm_info::get_formatted_name()
 + *
 + * This data is also used in other areas of the code.
 + * @param cm_info $cm Course-module data (must come from get_fast_modinfo)
 + * @param object $course (argument not used)
 + * @return array An array with the following values in this order:
 + *   $content (optional extra content for after link),
 + *   $instancename (text of link)
 + */
 +function get_print_section_cm_text(cm_info $cm, $course) {
 +    debugging('Function get_print_section_cm_text() is deprecated. Please use '.
 +            'cm_info::get_formatted_content() and cm_info::get_formatted_name()',
 +            DEBUG_DEVELOPER);
 +    return array($cm->get_formatted_content(array('overflowdiv' => true, 'noclean' => true)),
 +        $cm->get_formatted_name());
 +}
 +
 +/**
 + * Prints the menus to add activities and resources.
 + *
 + * Deprecated. Please use:
 + * $courserenderer = $PAGE->get_renderer('core', 'course');
 + * $output = $courserenderer->course_section_add_cm_control($course, $section, $sectionreturn,
 + *    array('inblock' => $vertical));
 + * echo $output; // if $return argument in print_section_add_menus() set to false
 + *
 + * @deprecated since 2.5
 + * @see core_course_renderer::course_section_add_cm_control()
 + *
 + * @param stdClass $course course object, must be the same as set on the page
 + * @param int $section relative section number (field course_sections.section)
 + * @param null|array $modnames (argument ignored) get_module_types_names() is used instead of argument
 + * @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 = null, $vertical=false, $return=false, $sectionreturn=null) {
 +    global $PAGE;
 +    debugging('Function print_section_add_menus() is deprecated. Please use course renderer '.
 +            'function course_section_add_cm_control()', DEBUG_DEVELOPER);
 +    $output = '';
 +    $courserenderer = $PAGE->get_renderer('core', 'course');
 +    $output = $courserenderer->course_section_add_cm_control($course, $section, $sectionreturn,
 +            array('inblock' => $vertical));
 +    if ($return) {
 +        return $output;
 +    } else {
 +        echo $output;
 +        return !empty($output);
 +    }
 +}
 +
 +/**
 + * Produces the editing buttons for a module
 + *
 + * Deprecated. Please use:
 + * $courserenderer = $PAGE->get_renderer('core', 'course');
 + * $actions = course_get_cm_edit_actions($mod, $indent, $section);
 + * return ' ' . $courserenderer->course_section_cm_edit_actions($actions);
 + *
 + * @deprecated since 2.5
 + * @see course_get_cm_edit_actions()
 + * @see core_course_renderer->course_section_cm_edit_actions()
 + *
 + * @param stdClass $mod The module to produce editing buttons for
 + * @param bool $absolute_ignored (argument ignored) - all links are absolute
 + * @param bool $moveselect (argument ignored)
 + * @param int $indent The current indenting
 + * @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=null) {
 +    global $PAGE;
 +    debugging('Function make_editing_buttons() is deprecated, please see PHPdocs in '.
 +            'lib/deprecatedlib.php on how to replace it', DEBUG_DEVELOPER);
 +    if (!($mod instanceof cm_info)) {
 +        $modinfo = get_fast_modinfo($mod->course);
 +        $mod = $modinfo->get_cm($mod->id);
 +    }
 +    $actions = course_get_cm_edit_actions($mod, $indent, $section);
 +
 +    $courserenderer = $PAGE->get_renderer('core', 'course');
 +    // The space added before the <span> is a ugly hack but required to set the CSS property white-space: nowrap
 +    // and having it to work without attaching the preceding text along with it. Hopefully the refactoring of
 +    // the course page HTML will allow this to be removed.
 +    return ' ' . $courserenderer->course_section_cm_edit_actions($actions);
 +}
 +
 +/**
 + * Prints a section full of activity modules
 + *
 + * Deprecated. Please use:
 + * $courserenderer = $PAGE->get_renderer('core', 'course');
 + * echo $courserenderer->course_section_cm_list($course, $section, $sectionreturn,
 + *     array('hidecompletion' => $hidecompletion));
 + *
 + * @deprecated since 2.5
 + * @see core_course_renderer::course_section_cm_list()
 + *
 + * @param stdClass $course The course
 + * @param stdClass|section_info $section The section object containing properties id and section
 + * @param array $mods (argument not used)
 + * @param array $modnamesused (argument not used)
 + * @param bool $absolute (argument not used)
 + * @param string $width (argument not used)
 + * @param bool $hidecompletion Hide completion status
 + * @param int $sectionreturn The section to return to
 + * @return void
 + */
 +function print_section($course, $section, $mods, $modnamesused, $absolute=false, $width="100%", $hidecompletion=false, $sectionreturn=null) {
 +    global $PAGE;
 +    debugging('Function print_section() is deprecated. Please use course renderer function '.
 +            'course_section_cm_list() instead.', DEBUG_DEVELOPER);
 +    $displayoptions = array('hidecompletion' => $hidecompletion);
 +    $courserenderer = $PAGE->get_renderer('core', 'course');
 +    echo $courserenderer->course_section_cm_list($course, $section, $sectionreturn, $displayoptions);
 +}
++
+ /**
+  * Displays the list of courses with user notes
+  *
+  * This function is not used in core. It was replaced by block course_overview
+  *
+  * @deprecated since 2.5
+  *
+  * @param array $courses
+  * @param array $remote_courses
+  */
+ function print_overview($courses, array $remote_courses=array()) {
+     global $CFG, $USER, $DB, $OUTPUT;
+     debugging('Function print_overview() is deprecated. Use block course_overview to display this information', DEBUG_DEVELOPER);
+     $htmlarray = array();
+     if ($modules = $DB->get_records('modules')) {
+         foreach ($modules as $mod) {
+             if (file_exists(dirname(dirname(__FILE__)).'/mod/'.$mod->name.'/lib.php')) {
+                 include_once(dirname(dirname(__FILE__)).'/mod/'.$mod->name.'/lib.php');
+                 $fname = $mod->name.'_print_overview';
+                 if (function_exists($fname)) {
+                     $fname($courses,$htmlarray);
+                 }
+             }
+         }
+     }
+     foreach ($courses as $course) {
+         $fullname = format_string($course->fullname, true, array('context' => context_course::instance($course->id)));
+         echo $OUTPUT->box_start('coursebox');
+         $attributes = array('title' => s($fullname));
+         if (empty($course->visible)) {
+             $attributes['class'] = 'dimmed';
+         }
+         echo $OUTPUT->heading(html_writer::link(
+             new moodle_url('/course/view.php', array('id' => $course->id)), $fullname, $attributes), 3);
+         if (array_key_exists($course->id,$htmlarray)) {
+             foreach ($htmlarray[$course->id] as $modname => $html) {
+                 echo $html;
+             }
+         }
+         echo $OUTPUT->box_end();
+     }
+     if (!empty($remote_courses)) {
+         echo $OUTPUT->heading(get_string('remotecourses', 'mnet'));
+     }
+     foreach ($remote_courses as $course) {
+         echo $OUTPUT->box_start('coursebox');
+         $attributes = array('title' => s($course->fullname));
+         echo $OUTPUT->heading(html_writer::link(
+             new moodle_url('/auth/mnet/jump.php', array('hostid' => $course->hostid, 'wantsurl' => '/course/view.php?id='.$course->remoteid)),
+             format_string($course->shortname),
+             $attributes) . ' (' . format_string($course->hostname) . ')', 3);
+         echo $OUTPUT->box_end();
+     }
+ }