Merge branch 'MDL-56826-master-fix1' of git://github.com/damyon/moodle
[moodle.git] / theme / boost / lib.php
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.
13 //
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  * Theme functions.
19  *
20  * @package    theme_boost
21  * @copyright  2016 Frédéric Massart - FMCorz.net
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * Post process the CSS tree.
29  *
30  * @param string $tree The CSS tree.
31  * @param theme_config $theme The theme config object.
32  */
33 function theme_boost_css_tree_post_processor($tree, $theme) {
34     $prefixer = new theme_boost\autoprefixer($tree);
35     $prefixer->prefix();
36 }
38 /**
39  * Inject additional SCSS.
40  *
41  * @param theme_config $theme The theme config object.
42  * @return string
43  */
44 function theme_boost_get_extra_scss($theme) {
45     return !empty($theme->settings->scss) ? $theme->settings->scss : '';
46 }
48 /**
49  * Get SCSS to prepend.
50  *
51  * @param theme_config $theme The theme config object.
52  * @return array
53  */
54 function theme_boost_get_pre_scss($theme) {
55     global $CFG;
57     $scss = '';
58     $configurable = [
59         // Config key => [variableName, ...].
60         'brandcolor' => ['brand-primary'],
61     ];
63     // Prepend variables first.
64     foreach ($configurable as $configkey => $targets) {
65         $value = $theme->settings->{$configkey};
66         if (empty($value)) {
67             continue;
68         }
69         array_map(function($target) use (&$scss, $value) {
70             $scss .= '$' . $target . ': ' . $value . ";\n";
71         }, (array) $targets);
72     }
74     // Prepend pre-scss.
75     if (!empty($theme->settings->scsspre)) {
76         $scss .= $theme->settings->scsspre;
77     }
79     // Now append the preset.
80     $filename = $theme->settings->preset;
81     $fs = get_file_storage();
83     $context = context_system::instance();
84     if ($filename == 'default.scss') {
85         $scss .= file_get_contents($CFG->dirroot . '/theme/boost/scss/preset/default.scss');
86     } else if ($filename == 'plain.scss') {
87         $scss .= file_get_contents($CFG->dirroot . '/theme/boost/scss/preset/plain.scss');
88     } else if ($filename && ($presetfile = $fs->get_file($context->id, 'theme_boost', 'preset', 0, '/', $filename))) {
89         $scss .= $presetfile->get_content();
90     } else {
91         // Safety fallback - maybe new installs etc.
92         $scss .= file_get_contents($CFG->dirroot . '/theme/boost/scss/preset/default.scss');
93     }
95     return $scss;
96 }