AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of the universe theme for Moodle
//
// 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/>.
/**
* Theme universe renderer file.
*
* @package theme_universe
* @copyright 2016 onwards Onlinecampus Virtuelle PH
* @author Bas Brands
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace theme_universe\output;
use custom_menu;
use html_writer;
use moodle_url;
use stdClass;
use theme_config;
class html_renderer extends \plugin_renderer_base {
protected static $instance;
private $theme;
public static function get_instance() {
if (!is_object(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
public function page_header() {
$o = '';
if (empty($this->theme)) {
$this->theme = theme_config::load('universe');
}
if (!empty($this->theme->settings->navbarposition)) {
if ($this->theme->settings->navbarposition == 'fixed') {
$fixednavbar = true;
} else {
$fixednavbar = false;
}
} else {
$fixednavbar = false;
}
$o .= $this->image_header($fixednavbar);
$o .= $this->navigation_menu($fixednavbar);
return $o;
}
/**
* Render the top image menu.
*/
protected function image_header($fixednavbar = false) {
global $CFG;
if (empty($this->theme)) {
$this->theme = theme_config::load('universe');
}
$settings = $this->theme->settings;
$template = new \stdClass();
$template->homeurl = new moodle_url('/');
if (isset($settings->logoposition) && $settings->logoposition == 'right') {
$template->logocontainerclass = 'col-sm-3 col-md-3 push-sm-9 push-md-9 logo right';
$template->headerbgcontainerclass = 'col-sm-9 col-md-9 pull-sm-3 pull-md-3 right background';
if (isset($settings->headerlayout) && ($settings->headerlayout == 1)) {
$template->logocontainerclass = 'col-sm-3 col-md-3 push-sm-9 push-md-9 logo right logo fixed';
$template->headerbgcontainerclass = 'col-sm-12 background';
}
} else {
$template->logocontainerclass = 'col-sm-3 col-md-3 col-lg-2 logo left p-0';
$template->headerbgcontainerclass = 'col-sm-9 col-md-9 col-lg-10 grid background p-0';
if (isset($settings->headerlayout) && ($settings->headerlayout == 1)) {
$template->logocontainerclass = 'col-sm-3 col-md-3 col-lg-2 logo left fixed';
$template->headerbgcontainerclass = 'col-sm-12 background';
}
}
$images = array('logo', 'logosmall', 'headerbg', 'headerbgsmall');
foreach ($images as $image) {
if (!empty($settings->$image)) {
$template->$image = $this->theme->setting_file_url($image, $image);
} else {
if ($CFG->branch >= 33) {
$template->$image = $this->image_url($image, 'theme_universe');
} else {
$template->$image = $this->pix_url($image, 'theme_universe');
}
}
}
if ($fixednavbar) {
$template->fixednavbar = true;
}
return $this->render_from_template('theme_universe/imageheading', $template);
}
/**
* Full top Navbar. Returns Mustache rendered menu.
*/
protected function navigation_menu($fixednavbar = false) {
$template = new \stdClass();
$template->output = $this->output;
$template->navpositionfixed = $fixednavbar;
return $this->render_from_template('theme_universe/navigation', $template);
}
/**
* Render the social icons shown in the page footer.
*/
public function universe_socialicons() {
global $CFG;
$content = '';
if (empty($this->theme)) {
$this->theme = theme_config::load('universe');
}
$template = new stdClass();
$template->icons = array();
$socialicons = array('instagramlink', 'twitterlink', 'facebooklink', 'youtubelink');
if ($CFG->branch >= 33) {
$imageurlfunc = 'image_url';
} else {
$imageurlfunc = 'pix_url';
}
foreach ($socialicons as $si) {
if (!empty($this->theme->settings->$si)) {
$icon = new stdClass();
$icon->url = $this->theme->settings->$si;
$icon->name = str_replace('link', '', $si);
$icon->image = $this->output->$imageurlfunc($icon->name, 'theme');
$template->icons[] = $icon;
}
}
return $this->render_from_template('theme_universe/socialicons', $template);
}
/**
* Render the language menu.
*/
public function languagemenu() {
if (empty($this->theme)) {
$this->theme = theme_config::load('universe');
}
$haslangmenu = $this->output->lang_menu() != '';
$langmenu = new stdClass();
if ($haslangmenu) {
$langs = get_string_manager()->get_list_of_translations();
$strlang = get_string('language');
$currentlang = current_language();
if (isset($langs[$currentlang])) {
$langmenu->currentlang = $langs[$currentlang];
} else {
$langmenu->currentlang = $strlang;
}
$langmenu->languages = array();
foreach ($langs as $type => $name) {
$thislang = new stdClass();
$thislang->langname = $name;
$thislang->langurl = new moodle_url($this->page->url, array('lang' => $type));
$langmenu->languages[] = $thislang;
}
return $this->render_from_template('theme_universe/language', $langmenu);
}
}
/**
* Render the text shown in the page footer.
*/
public function footer() {
if (empty($this->theme)) {
$this->theme = theme_config::load('universe');
}
$template = new stdClass();
$template->coursefooter = $this->output->course_footer();
$template->list = array();
if (isset($this->theme->settings->footertext)) {
$footertext = $this->theme->settings->footertext;
$menu = new custom_menu($footertext, current_language());
foreach ($menu->get_children() as $item) {
$listitem = new stdClass();
$listitem->text = $item->get_text();
$listitem->url = $item->get_url();
$template->list[] = $listitem;
}
}
$template->socialicons = $this->universe_socialicons();
if (!empty($this->theme->settings->footnote)) {
$template->footnote = $this->theme->settings->footnote;
}
$template->logininfo = $this->output->login_info();
$template->standardfooterhtml = $this->standard_footer_html();
return $this->render_from_template('theme_universe/footer', $template);
}
/**
* Find the toplevel category for use in the bodyclasses
*/
public function toplevel_category() {
if (empty($this->theme)) {
$this->theme = theme_config::load('universe');
}
foreach ($this->page->categories as $cat) {
if ($cat->depth == 1) {
return 'category-' . $cat->id;
}
}
}
}