mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 14:27:22 +01:00
165 lines
5.7 KiB
PHP
165 lines
5.7 KiB
PHP
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* Renderers to align Moodle's HTML with that expected by Bootstrap
|
|
*
|
|
* @package theme_bootstrapbase
|
|
* @copyright 2012
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
class theme_bootstrapbase_core_renderer extends core_renderer {
|
|
|
|
/*
|
|
* This renders a notification message.
|
|
* Uses bootstrap compatible html.
|
|
*/
|
|
public function notification($message, $classes = 'notifyproblem') {
|
|
$message = clean_text($message);
|
|
$type = '';
|
|
|
|
if ($classes == 'notifyproblem') {
|
|
$type = 'alert alert-error';
|
|
}
|
|
if ($classes == 'notifysuccess') {
|
|
$type = 'alert alert-success';
|
|
}
|
|
if ($classes == 'notifymessage') {
|
|
$type = 'alert alert-info';
|
|
}
|
|
if ($classes == 'redirectmessage') {
|
|
$type = 'alert alert-block alert-info';
|
|
}
|
|
return "<div class=\"$type\">$message</div>";
|
|
}
|
|
|
|
/*
|
|
* This renders the navbar.
|
|
* Uses bootstrap compatible html.
|
|
*/
|
|
public function navbar() {
|
|
$items = $this->page->navbar->get_items();
|
|
foreach ($items as $item) {
|
|
$item->hideicon = true;
|
|
$breadcrumbs[] = $this->render($item);
|
|
}
|
|
$divider = '<span class="divider">/</span>';
|
|
$list_items = '<li>'.join(" $divider</li><li>", $breadcrumbs).'</li>';
|
|
$title = '<span class="accesshide">'.get_string('pagepath').'</span>';
|
|
return $title . "<ul class=\"breadcrumb\">$list_items</ul>";
|
|
}
|
|
|
|
/*
|
|
* Overriding the custom_menu function ensures the custom menu is
|
|
* always shown, even if no menu items are configured in the global
|
|
* theme settings page.
|
|
* We use the sitename as the first menu item.
|
|
*/
|
|
public function custom_menu($custommenuitems = '') {
|
|
global $CFG;
|
|
|
|
if (!empty($CFG->custommenuitems)) {
|
|
$custommenuitems .= $CFG->custommenuitems;
|
|
}
|
|
$custommenu = new custom_menu($custommenuitems, current_language());
|
|
return $this->render_custom_menu($custommenu);
|
|
}
|
|
|
|
/*
|
|
* This renders the bootstrap top menu.
|
|
*
|
|
* This renderer is needed to enable the Bootstrap style navigation.
|
|
*/
|
|
protected function render_custom_menu(custom_menu $menu) {
|
|
// If the menu has no children return an empty string.
|
|
if (!$menu->has_children()) {
|
|
return '';
|
|
}
|
|
$addlangmenu = true;
|
|
$langs = get_string_manager()->get_list_of_translations();
|
|
if ($this->page->course != SITEID and !empty($this->page->course->lang)) {
|
|
// Do not show lang menu if language forced.
|
|
$addlangmenu = false;
|
|
}
|
|
if (count($langs) < 2) {
|
|
$addlangmenu = false;
|
|
}
|
|
|
|
if ($addlangmenu) {
|
|
$language = $menu->add(get_string('language'), new moodle_url('#'), get_string('language'), 10000);
|
|
foreach ($langs as $langtype => $langname) {
|
|
$language->add($langname,
|
|
new moodle_url($this->page->url, array('lang' => $langtype)), $langname);
|
|
}
|
|
}
|
|
|
|
$content = '<ul class="nav">';
|
|
foreach ($menu->get_children() as $item) {
|
|
$content .= $this->render_custom_menu_item($item, 1);
|
|
}
|
|
|
|
return $content.'</ul>';
|
|
}
|
|
|
|
/*
|
|
* This code renders the custom menu items for the
|
|
* bootstrap dropdown menu.
|
|
*/
|
|
protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0 ) {
|
|
static $submenucount = 0;
|
|
|
|
if ($menunode->has_children()) {
|
|
|
|
if ($level == 1) {
|
|
$dropdowntype = 'dropdown';
|
|
} else {
|
|
$dropdowntype = 'dropdown-submenu';
|
|
}
|
|
|
|
$content = html_writer::start_tag('li', array('class'=>$dropdowntype));
|
|
// If the child has menus render it as a sub menu.
|
|
$submenucount++;
|
|
if ($menunode->get_url() !== null) {
|
|
$url = $menunode->get_url();
|
|
} else {
|
|
$url = '#cm_submenu_'.$submenucount;
|
|
}
|
|
$content .= html_writer::start_tag('a', array('href'=>$url, 'class'=>'dropdown-toggle', 'data-toggle'=>'dropdown'));
|
|
$content .= $menunode->get_title();
|
|
if ($level == 1) {
|
|
$content .= '<b class="caret"></b>';
|
|
}
|
|
$content .= '</a>';
|
|
$content .= '<ul class="dropdown-menu">';
|
|
foreach ($menunode->get_children() as $menunode) {
|
|
$content .= $this->render_custom_menu_item($menunode, 0);
|
|
}
|
|
$content .= '</ul>';
|
|
} else {
|
|
$content = '<li>';
|
|
// The node doesn't have children so produce a final menuitem.
|
|
if ($menunode->get_url() !== null) {
|
|
$url = $menunode->get_url();
|
|
} else {
|
|
$url = '#';
|
|
}
|
|
$content .= html_writer::link($url, $menunode->get_text(), array('title'=>$menunode->get_title()));
|
|
}
|
|
return $content;
|
|
}
|
|
}
|