Merge branch 'MDL-78642-402' of https://github.com/paulholden/moodle into MOODLE_402_...
[moodle.git] / theme / classic / lib.php
blob9861e6eb824a84d8dbc74875b5958a5fef3b40d0
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
17 /**
18 * Classic theme callbacks.
20 * @package theme_classic
21 * @copyright 2018 Bas Brands
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25 // This line protects the file from being accessed by a URL directly.
26 defined('MOODLE_INTERNAL') || die();
28 /**
29 * Returns the main SCSS content.
31 * @param theme_config $theme The theme config object.
32 * @return string
34 function theme_classic_get_main_scss_content($theme) {
35 global $CFG;
37 $scss = '';
38 $filename = !empty($theme->settings->preset) ? $theme->settings->preset : null;
39 $fs = get_file_storage();
41 $context = context_system::instance();
42 $scss .= file_get_contents($CFG->dirroot . '/theme/classic/scss/classic/pre.scss');
43 if ($filename && ($presetfile = $fs->get_file($context->id, 'theme_classic', 'preset', 0, '/', $filename))) {
44 $scss .= $presetfile->get_content();
45 } else {
46 // Safety fallback - maybe new installs etc.
47 $scss .= file_get_contents($CFG->dirroot . '/theme/classic/scss/preset/default.scss');
49 $scss .= file_get_contents($CFG->dirroot . '/theme/classic/scss/classic/post.scss');
51 return $scss;
54 /**
55 * Get SCSS to prepend.
57 * @param theme_config $theme The theme config object.
58 * @return array
60 function theme_classic_get_pre_scss($theme) {
61 $scss = '';
62 $configurable = [
63 // Config key => [variableName, ...].
64 'brandcolor' => ['primary'],
67 // Prepend variables first.
68 foreach ($configurable as $configkey => $targets) {
69 $value = isset($theme->settings->{$configkey}) ? $theme->settings->{$configkey} : null;
70 if (empty($value)) {
71 continue;
73 array_map(function($target) use (&$scss, $value) {
74 $scss .= '$' . $target . ': ' . $value . ";\n";
75 }, (array) $targets);
78 // Prepend pre-scss.
79 if (!empty($theme->settings->scsspre)) {
80 $scss .= $theme->settings->scsspre;
83 return $scss;
86 /**
87 * Inject additional SCSS.
89 * @param theme_config $theme The theme config object.
90 * @return string
92 function theme_classic_get_extra_scss($theme) {
93 global $CFG;
94 $content = '';
96 // Set the page background image.
97 $imageurl = $theme->setting_file_url('backgroundimage', 'backgroundimage');
98 if (!empty($imageurl)) {
99 $content .= '$imageurl: "' . $imageurl . '";';
100 $content .= file_get_contents($CFG->dirroot .
101 '/theme/classic/scss/classic/body-background.scss');
104 // Sets the login background image.
105 $loginbackgroundimageurl = $theme->setting_file_url('loginbackgroundimage', 'loginbackgroundimage');
106 if (!empty($loginbackgroundimageurl)) {
107 $content .= 'body.pagelayout-login #page { ';
108 $content .= "background-image: url('$loginbackgroundimageurl'); background-size: cover;";
109 $content .= ' }';
112 if (!empty($theme->settings->navbardark)) {
113 $content .= file_get_contents($CFG->dirroot .
114 '/theme/classic/scss/classic/navbar-dark.scss');
115 } else {
116 $content .= file_get_contents($CFG->dirroot .
117 '/theme/classic/scss/classic/navbar-light.scss');
119 if (!empty($theme->settings->scss)) {
120 $content .= $theme->settings->scss;
122 return $content;
126 * Get compiled css.
128 * @return string compiled css
130 function theme_classic_get_precompiled_css() {
131 global $CFG;
132 return file_get_contents($CFG->dirroot . '/theme/classic/style/moodle.css');
136 * Serves any files associated with the theme settings.
138 * @param stdClass $course
139 * @param stdClass $cm
140 * @param context $context
141 * @param string $filearea
142 * @param array $args
143 * @param bool $forcedownload
144 * @param array $options
145 * @return bool
147 function theme_classic_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options = array()) {
148 if ($context->contextlevel == CONTEXT_SYSTEM && ($filearea === 'backgroundimage' || $filearea === 'loginbackgroundimage')) {
149 $theme = theme_config::load('classic');
150 // By default, theme files must be cache-able by both browsers and proxies.
151 if (!array_key_exists('cacheability', $options)) {
152 $options['cacheability'] = 'public';
154 return $theme->setting_file_serve($filearea, $args, $forcedownload, $options);
155 } else {
156 send_file_not_found();