Initial commit
This commit is contained in:
427
lib.php
Normal file
427
lib.php
Normal file
@@ -0,0 +1,427 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* lib.php
|
||||
* @package theme_qualisaude
|
||||
* @copyright 2015 onwards LMSACE Dev Team (http://www.lmsace.com)
|
||||
* @author LMSACE Dev Team
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Parses CSS before it is cached.
|
||||
*
|
||||
* This function can make alterations and replace patterns within the CSS.
|
||||
*
|
||||
* @param type|string $theme The theme config object.
|
||||
* @return string The parsed CSS The parsed CSS.
|
||||
*/
|
||||
function theme_qualisaude_get_pre_scss($theme) {
|
||||
$scss = theme_qualisaude_set_fontwww();
|
||||
return $scss;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get extra scss from settings.
|
||||
* @param type|string $theme
|
||||
* @return type|string
|
||||
*/
|
||||
function theme_qualisaude_get_extra_scss($theme) {
|
||||
return !empty($theme->settings->customcss) ? $theme->settings->customcss : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get theme main scss content.
|
||||
* @param type|string $theme
|
||||
* @return string
|
||||
*/
|
||||
function theme_qualisaude_get_main_scss_content($theme) {
|
||||
global $CFG;
|
||||
$scss = '';
|
||||
$parentconfig = theme_config::load('boost');
|
||||
$scss .= theme_boost_get_main_scss_content($parentconfig);
|
||||
$themescssfile = $CFG->dirroot.'/theme/qualisaude/scss/preset/theme.scss';
|
||||
if ( file_exists($themescssfile) ) {
|
||||
$scss .= file_get_contents($themescssfile);
|
||||
}
|
||||
return $scss;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the Jquery and migration files
|
||||
* Load the our theme js file
|
||||
* @param moodle_page $page.
|
||||
*/
|
||||
function theme_qualisaude_page_init(moodle_page $page) {
|
||||
$page->requires->jquery();
|
||||
$page->requires->js('/theme/qualisaude/javascript/theme.js');
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the CSS Styles and replace the background images.
|
||||
* If background image not available in the settings take the default images.
|
||||
*
|
||||
* @param string $css
|
||||
* @param string $theme
|
||||
* @return string
|
||||
*/
|
||||
function theme_qualisaude_process_css($css, $theme) {
|
||||
global $OUTPUT, $CFG;
|
||||
// Set the background image for the logo.
|
||||
$logo = $theme->setting_file_url('logo', 'logo');
|
||||
$css = theme_qualisaude_pre_css_set_fontwww($css);
|
||||
// Set custom CSS.
|
||||
if (!empty($theme->settings->customcss)) {
|
||||
$customcss = $theme->settings->customcss;
|
||||
} else {
|
||||
$customcss = null;
|
||||
}
|
||||
return $css;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the logo to CSS.
|
||||
*
|
||||
* @param string $css The CSS.
|
||||
* @param string $logo The URL of the logo.
|
||||
* @return string The parsed CSS
|
||||
*/
|
||||
function theme_qualisaude_set_logo($css, $logo) {
|
||||
$tag = '[[setting:logo]]';
|
||||
$replacement = $logo;
|
||||
if (is_null($replacement)) {
|
||||
$replacement = '';
|
||||
}
|
||||
$css = str_replace($tag, $replacement, $css);
|
||||
return $css;
|
||||
}
|
||||
|
||||
/**
|
||||
* Serves any files associated with the theme settings.
|
||||
*
|
||||
* @param stdClass $course
|
||||
* @param stdClass $cm
|
||||
* @param context $context
|
||||
* @param string $filearea
|
||||
* @param array $args
|
||||
* @param bool $forcedownload
|
||||
* @param array $options
|
||||
* @return bool
|
||||
*/
|
||||
function theme_qualisaude_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options = array()) {
|
||||
static $theme;
|
||||
|
||||
if (empty($theme)) {
|
||||
$theme = theme_config::load('qualisaude');
|
||||
}
|
||||
if ($context->contextlevel == CONTEXT_SYSTEM) {
|
||||
|
||||
if ($filearea === 'logo') {
|
||||
return $theme->setting_file_serve('logo', $args, $forcedownload, $options);
|
||||
} else if ($filearea === 'style') {
|
||||
theme_qualisaude_serve_css($args[1]);
|
||||
} else if ($filearea === 'pagebackground') {
|
||||
return $theme->setting_file_serve('pagebackground', $args, $forcedownload, $options);
|
||||
} else if (preg_match("/slide[1-9][0-9]*image/", $filearea) !== false) {
|
||||
return $theme->setting_file_serve($filearea, $args, $forcedownload, $options);
|
||||
} else {
|
||||
send_file_not_found();
|
||||
}
|
||||
} else {
|
||||
send_file_not_found();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Serves CSS for image file updated to styles.
|
||||
*
|
||||
* @param string $filename
|
||||
* @return string
|
||||
*/
|
||||
function theme_qualisaude_serve_css($filename) {
|
||||
global $CFG;
|
||||
if (!empty($CFG->themedir)) {
|
||||
$thestylepath = $CFG->themedir . '/qualisaude/style/';
|
||||
} else {
|
||||
$thestylepath = $CFG->dirroot . '/theme/qualisaude/style/';
|
||||
}
|
||||
$thesheet = $thestylepath . $filename;
|
||||
|
||||
/* http://css-tricks.com/snippets/php/intelligent-php-cache-control/ - rather than /lib/csslib.php as it is a static file who's
|
||||
contents should only change if it is rebuilt. But! There should be no difference with TDM on so will see for the moment if
|
||||
that decision is a factor. */
|
||||
|
||||
$etagfile = md5_file($thesheet);
|
||||
// File.
|
||||
$lastmodified = filemtime($thesheet);
|
||||
// Header.
|
||||
$ifmodifiedsince = (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
|
||||
$etagheader = (isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
|
||||
|
||||
if ((($ifmodifiedsince) && (strtotime($ifmodifiedsince) == $lastmodified)) || $etagheader == $etagfile) {
|
||||
theme_qualisaude_send_unmodified($lastmodified, $etagfile);
|
||||
}
|
||||
theme_qualisaude_send_cached_css($thestylepath, $filename, $lastmodified, $etagfile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set browser cache used in php header.
|
||||
* @param type|string $lastmodified
|
||||
* @param type|string $etag
|
||||
*/
|
||||
function theme_qualisaude_send_unmodified($lastmodified, $etag) {
|
||||
$lifetime = 60 * 60 * 24 * 60;
|
||||
header('HTTP/1.1 304 Not Modified');
|
||||
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $lifetime) . ' GMT');
|
||||
header('Cache-Control: public, max-age=' . $lifetime);
|
||||
header('Content-Type: text/css; charset=utf-8');
|
||||
header('Etag: "' . $etag . '"');
|
||||
if ($lastmodified) {
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT');
|
||||
}
|
||||
die;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cached css for theme_qualisaude
|
||||
*
|
||||
* @param type|string $path
|
||||
* @param type|string $filename
|
||||
* @param type|string $lastmodified
|
||||
* @param type|string $etag
|
||||
*/
|
||||
function theme_qualisaude_send_cached_css($path, $filename, $lastmodified, $etag) {
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot . '/lib/configonlylib.php'); // For min_enable_zlib_compression function.
|
||||
// 60 days only - the revision may get incremented quite often.
|
||||
$lifetime = 60 * 60 * 24 * 60;
|
||||
|
||||
header('Etag: "' . $etag . '"');
|
||||
header('Content-Disposition: inline; filename="'.$filename.'"');
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT');
|
||||
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $lifetime) . ' GMT');
|
||||
header('Pragma: ');
|
||||
header('Cache-Control: public, max-age=' . $lifetime);
|
||||
header('Accept-Ranges: none');
|
||||
header('Content-Type: text/css; charset=utf-8');
|
||||
if (!min_enable_zlib_compression()) {
|
||||
header('Content-Length: ' . filesize($path . $filename));
|
||||
}
|
||||
readfile($path . $filename);
|
||||
die;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds any custom CSS to the CSS before it is cached.
|
||||
*
|
||||
* @param type|string $css The original CSS.
|
||||
* @param type|string $customcss The custom CSS to add.
|
||||
* @return type|string The CSS which now contains our custom CSS.
|
||||
*/
|
||||
function theme_qualisaude_set_customcss($css, $customcss) {
|
||||
$tag = '[[setting:customcss]]';
|
||||
$replacement = $customcss;
|
||||
if (is_null($replacement)) {
|
||||
$replacement = '';
|
||||
}
|
||||
$css = str_replace($tag, $replacement, $css);
|
||||
return $css;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an object containing HTML for the areas affected by settings.
|
||||
*
|
||||
* Do not add Clean specific logic in here, child themes should be able to
|
||||
* rely on that function just by declaring settings with similar names.
|
||||
*
|
||||
* @param renderer_base $output Pass in $OUTPUT.
|
||||
* @param moodle_page $page Pass in $PAGE.
|
||||
* @return stdClass An object with the following properties:
|
||||
* - navbarclass A CSS class to use on the navbar. By default ''.
|
||||
* - heading HTML to use for the heading. A logo if one is selected or the default heading.
|
||||
* - footnote HTML to use as a footnote. By default ''.
|
||||
*/
|
||||
function theme_qualisaude_get_html_for_settings(renderer_base $output, moodle_page $page) {
|
||||
global $CFG;
|
||||
$return = new stdClass;
|
||||
|
||||
$return->navbarclass = '';
|
||||
if (!empty($page->theme->settings->invert)) {
|
||||
$return->navbarclass .= ' navbar-inverse';
|
||||
}
|
||||
|
||||
if (!empty($page->theme->settings->logo)) {
|
||||
$return->heading = html_writer::link($CFG->wwwroot, '', array('title' => get_string('home'), 'class' => 'logo'));
|
||||
} else {
|
||||
$return->heading = $output->page_heading();
|
||||
}
|
||||
|
||||
$return->footnote = '';
|
||||
if (!empty($page->theme->settings->footnote)) {
|
||||
$return->footnote = '<div class="footnote text-center">'.format_text($page->theme->settings->footnote).'</div>';
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the CSS Styles and put the font path
|
||||
*
|
||||
* @param type|string $css
|
||||
* @return type|string
|
||||
*/
|
||||
function theme_qualisaude_pre_css_set_fontwww($css) {
|
||||
global $CFG, $PAGE;
|
||||
if (empty($CFG->themewww)) {
|
||||
$themewww = $CFG->wwwroot."/theme";
|
||||
} else {
|
||||
$themewww = $CFG->themewww;
|
||||
}
|
||||
|
||||
$tag = '[[setting:fontwww]]';
|
||||
$theme = theme_config::load('qualisaude');
|
||||
$css = str_replace($tag, $themewww.'/qualisaude/fonts/', $css);
|
||||
return $css;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the font folder path into the scss.
|
||||
* @param type|string $css
|
||||
* @return type|string
|
||||
*/
|
||||
function theme_qualisaude_set_fontwww() {
|
||||
global $CFG, $PAGE;
|
||||
if (empty($CFG->themewww)) {
|
||||
$themewww = $CFG->wwwroot."/theme";
|
||||
} else {
|
||||
$themewww = $CFG->themewww;
|
||||
}
|
||||
$theme = theme_config::load('qualisaude');
|
||||
$fontwww = '$fontwww: "'.$themewww.'/qualisaude/fonts/"'.";\n";
|
||||
return $fontwww;
|
||||
}
|
||||
|
||||
|
||||
// Logo Image URL Fetch from theme settings.
|
||||
// @ return string.
|
||||
if (!function_exists('get_logo_url')) {
|
||||
/**
|
||||
* Description
|
||||
* @return type|string
|
||||
*/
|
||||
function get_logo_url() {
|
||||
global $OUTPUT;
|
||||
static $theme;
|
||||
if (empty($theme)) {
|
||||
$theme = theme_config::load('qualisaude');
|
||||
}
|
||||
$logo = $theme->setting_file_url('logo', 'logo');
|
||||
$logo = empty($logo) ? $OUTPUT->image_url('home/logo', 'theme') : $logo;
|
||||
return $logo;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renderer the slider images.
|
||||
* @param type|string $p
|
||||
* @param type|string $sliname
|
||||
* @return type|string
|
||||
*/
|
||||
function theme_qualisaude_render_slideimg($p, $sliname) {
|
||||
global $PAGE, $OUTPUT;
|
||||
$nos = theme_qualisaude_get_setting('numberofslides');
|
||||
$i = $p % 3;
|
||||
$slideimage = $OUTPUT->image_url('home/slide'.$i, 'theme');
|
||||
// Get slide image or fallback to default.
|
||||
if (theme_qualisaude_get_setting($sliname)) {
|
||||
$slideimage = $PAGE->theme->setting_file_url($sliname , $sliname);
|
||||
}
|
||||
return $slideimage;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Description
|
||||
* @param type|string $setting
|
||||
* @param type|bool $format
|
||||
* @return type|string
|
||||
*/
|
||||
function theme_qualisaude_get_setting($setting, $format = true) {
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot . '/lib/weblib.php');
|
||||
static $theme;
|
||||
if (empty($theme)) {
|
||||
$theme = theme_config::load('qualisaude');
|
||||
}
|
||||
if (empty($theme->settings->$setting)) {
|
||||
return false;
|
||||
} else if (!$format) {
|
||||
return $theme->settings->$setting;
|
||||
} else if ($format === 'format_text') {
|
||||
return format_text($theme->settings->$setting, FORMAT_PLAIN);
|
||||
} else if ($format === 'format_html') {
|
||||
return format_text($theme->settings->$setting, FORMAT_HTML, array('trusted' => true, 'noclean' => true));
|
||||
} else {
|
||||
return format_string($theme->settings->$setting);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Return the current theme url.
|
||||
// @ return string.
|
||||
if (!function_exists('theme_url')) {
|
||||
/**
|
||||
* Url for theme_qualisaude.
|
||||
* @return type|string
|
||||
*/
|
||||
function theme_url() {
|
||||
global $CFG, $PAGE;
|
||||
$themeurl = $CFG->wwwroot.'/theme/'. $PAGE->theme->name;
|
||||
return $themeurl;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Footer Info links.
|
||||
* @return type|string
|
||||
*/
|
||||
function theme_qualisaude_infolink() {
|
||||
$infolink = theme_qualisaude_get_setting('infolink');
|
||||
$content = "";
|
||||
$infosettings = explode("\n", $infolink);
|
||||
foreach ($infosettings as $key => $settingval) {
|
||||
|
||||
$expset = explode("|", $settingval);
|
||||
if (isset($expset[1])) {
|
||||
list($ltxt, $lurl) = $expset;
|
||||
}
|
||||
|
||||
if (isset($ltxt) != '' || isset($lurl) != '') {
|
||||
$ltxt = trim($ltxt);
|
||||
$lurl = trim($lurl);
|
||||
}
|
||||
if (empty($ltxt)) {
|
||||
continue;
|
||||
}
|
||||
$content .= '<li><a href="'.$lurl.'" target="_blank">'.$ltxt.'</a></li>';
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user