0d8b6a69ce
This commit: a) moves modinfo code into new library modinfolib.php b) uses classes instead of stdClass objects, allowing a huge amount of documentation (and IDE completion) c) adds hooks so that plugins other than forum can display messages like forum's 'unread', and plugins other than label can display html (apart from/as well as their view.php link) on the course view page d) removes current hacks for forum and label (mainly in print_section but also across the code), replacing with new 'content' and similar variables [this is the reason for the changes in blocks, etc] e) reduces size of modinfo in database (only when rebuilt) by excluding empty fields The change is intended to be backward compatible and does not affect the format of modinfo in database.
149 lines
6.2 KiB
PHP
149 lines
6.2 KiB
PHP
<?php
|
|
|
|
class block_site_main_menu extends block_list {
|
|
function init() {
|
|
$this->title = get_string('pluginname', 'block_site_main_menu');
|
|
}
|
|
|
|
function applicable_formats() {
|
|
return array('site' => true);
|
|
}
|
|
|
|
function get_content() {
|
|
global $USER, $CFG, $DB, $OUTPUT;
|
|
|
|
if ($this->content !== NULL) {
|
|
return $this->content;
|
|
}
|
|
|
|
$this->content = new stdClass();
|
|
$this->content->items = array();
|
|
$this->content->icons = array();
|
|
$this->content->footer = '';
|
|
|
|
if (empty($this->instance)) {
|
|
return $this->content;
|
|
}
|
|
|
|
$course = $this->page->course;
|
|
require_once($CFG->dirroot.'/course/lib.php');
|
|
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
|
$isediting = $this->page->user_is_editing() && has_capability('moodle/course:manageactivities', $context);
|
|
$modinfo = get_fast_modinfo($course);
|
|
|
|
/// extra fast view mode
|
|
if (!$isediting) {
|
|
if (!empty($modinfo->sections[0])) {
|
|
$options = array('overflowdiv'=>true);
|
|
foreach($modinfo->sections[0] as $cmid) {
|
|
$cm = $modinfo->cms[$cmid];
|
|
if (!$cm->uservisible) {
|
|
continue;
|
|
}
|
|
|
|
list($content, $instancename) =
|
|
get_print_section_cm_text($cm, $course);
|
|
|
|
if (!($url = $cm->get_url())) {
|
|
$this->content->items[] = $content;
|
|
$this->content->icons[] = '';
|
|
} else {
|
|
$linkcss = $cm->visible ? '' : ' class="dimmed" ';
|
|
//Accessibility: incidental image - should be empty Alt text
|
|
$icon = '<img src="' . $cm->get_icon_url() . '" class="icon" alt="" /> ';
|
|
$this->content->items[] = '<a title="'.$cm->modplural.'" '.$linkcss.' '.$cm->extra.
|
|
' href="' . $url . '">' . $icon . $instancename . '</a>';
|
|
}
|
|
}
|
|
}
|
|
return $this->content;
|
|
}
|
|
|
|
/// slow & hacky editing mode
|
|
$ismoving = ismoving($course->id);
|
|
$section = get_course_section(0, $course->id);
|
|
|
|
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
|
|
|
|
$groupbuttons = $course->groupmode;
|
|
$groupbuttonslink = (!$course->groupmodeforce);
|
|
|
|
if ($ismoving) {
|
|
$strmovehere = get_string('movehere');
|
|
$strmovefull = strip_tags(get_string('movefull', '', "'$USER->activitycopyname'"));
|
|
$strcancel= get_string('cancel');
|
|
$stractivityclipboard = $USER->activitycopyname;
|
|
}
|
|
/// Casting $course->modinfo to string prevents one notice when the field is null
|
|
$editbuttons = '';
|
|
|
|
if ($ismoving) {
|
|
$this->content->icons[] = '<img src="'.$OUTPUT->pix_url('t/move') . '" class="iconsmall" alt="" />';
|
|
$this->content->items[] = $USER->activitycopyname.' (<a href="'.$CFG->wwwroot.'/course/mod.php?cancelcopy=true&sesskey='.sesskey().'">'.$strcancel.'</a>)';
|
|
}
|
|
|
|
if (!empty($section->sequence)) {
|
|
$sectionmods = explode(',', $section->sequence);
|
|
$options = array('overflowdiv'=>true);
|
|
foreach ($sectionmods as $modnumber) {
|
|
if (empty($mods[$modnumber])) {
|
|
continue;
|
|
}
|
|
$mod = $mods[$modnumber];
|
|
if (!$ismoving) {
|
|
if ($groupbuttons) {
|
|
if (! $mod->groupmodelink = $groupbuttonslink) {
|
|
$mod->groupmode = $course->groupmode;
|
|
}
|
|
|
|
} else {
|
|
$mod->groupmode = false;
|
|
}
|
|
$editbuttons = '<div class="buttons">'.make_editing_buttons($mod, true, true).'</div>';
|
|
} else {
|
|
$editbuttons = '';
|
|
}
|
|
if ($mod->visible || has_capability('moodle/course:viewhiddenactivities', $context)) {
|
|
if ($ismoving) {
|
|
if ($mod->id == $USER->activitycopy) {
|
|
continue;
|
|
}
|
|
$this->content->items[] = '<a title="'.$strmovefull.'" href="'.$CFG->wwwroot.'/course/mod.php?moveto='.$mod->id.'&sesskey='.sesskey().'">'.
|
|
'<img style="height:16px; width:80px; border:0px" src="'.$OUTPUT->pix_url('movehere') . '" alt="'.$strmovehere.'" /></a>';
|
|
$this->content->icons[] = '';
|
|
}
|
|
list($content, $instancename) =
|
|
get_print_section_cm_text($modinfo->cms[$modnumber], $course);
|
|
$linkcss = $mod->visible ? '' : ' class="dimmed" ';
|
|
|
|
if (!($url = $mod->get_url())) {
|
|
$this->content->items[] = $content . $editbuttons;
|
|
$this->content->icons[] = '';
|
|
} else {
|
|
//Accessibility: incidental image - should be empty Alt text
|
|
$icon = '<img src="' . $mod->get_icon_url() . '" class="icon" alt="" /> ';
|
|
$this->content->items[] = '<a title="' . $mod->modfullname . '" ' . $linkcss . ' ' . $mod->extra .
|
|
' href="' . $url . '">' . $icon . $instancename . '</a>' . $editbuttons;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($ismoving) {
|
|
$this->content->items[] = '<a title="'.$strmovefull.'" href="'.$CFG->wwwroot.'/course/mod.php?movetosection='.$section->id.'&sesskey='.sesskey().'">'.
|
|
'<img style="height:16px; width:80px; border:0px" src="'.$OUTPUT->pix_url('movehere') . '" alt="'.$strmovehere.'" /></a>';
|
|
$this->content->icons[] = '';
|
|
}
|
|
|
|
if (!empty($modnames)) {
|
|
$this->content->footer = print_section_add_menus($course, 0, $modnames, true, true);
|
|
} else {
|
|
$this->content->footer = '';
|
|
}
|
|
|
|
return $this->content;
|
|
}
|
|
}
|
|
|
|
|