See Release Notes
Long Term Support Release
Differences Between: [Versions 310 and 401] [Versions 311 and 401] [Versions 39 and 401]
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/>. 16 17 /** 18 * Classic theme callbacks. 19 * 20 * @package theme_classic 21 * @copyright 2018 Bas Brands 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 // This line protects the file from being accessed by a URL directly. 26 defined('MOODLE_INTERNAL') || die(); 27 28 /** 29 * Returns the main SCSS content. 30 * 31 * @param theme_config $theme The theme config object. 32 * @return string 33 */ 34 function theme_classic_get_main_scss_content($theme) { 35 global $CFG; 36 37 $scss = ''; 38 $filename = !empty($theme->settings->preset) ? $theme->settings->preset : null; 39 $fs = get_file_storage(); 40 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'); 48 } 49 $scss .= file_get_contents($CFG->dirroot . '/theme/classic/scss/classic/post.scss'); 50 51 return $scss; 52 } 53 54 /** 55 * Get SCSS to prepend. 56 * 57 * @param theme_config $theme The theme config object. 58 * @return array 59 */ 60 function theme_classic_get_pre_scss($theme) { 61 $scss = ''; 62 $configurable = [ 63 // Config key => [variableName, ...]. 64 'brandcolor' => ['primary'], 65 ]; 66 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; 72 } 73 array_map(function($target) use (&$scss, $value) { 74 $scss .= '$' . $target . ': ' . $value . ";\n"; 75 }, (array) $targets); 76 } 77 78 // Prepend pre-scss. 79 if (!empty($theme->settings->scsspre)) { 80 $scss .= $theme->settings->scsspre; 81 } 82 83 return $scss; 84 } 85 86 /** 87 * Inject additional SCSS. 88 * 89 * @param theme_config $theme The theme config object. 90 * @return string 91 */ 92 function theme_classic_get_extra_scss($theme) { 93 global $CFG; 94 $content = ''; 95 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'); 102 } 103 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 .= ' }'; 110 } 111 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'); 118 } 119 if (!empty($theme->settings->scss)) { 120 $content .= $theme->settings->scss; 121 } 122 return $content; 123 } 124 125 /** 126 * Get compiled css. 127 * 128 * @return string compiled css 129 */ 130 function theme_classic_get_precompiled_css() { 131 global $CFG; 132 return file_get_contents($CFG->dirroot . '/theme/classic/style/moodle.css'); 133 } 134 135 /** 136 * Serves any files associated with the theme settings. 137 * 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 146 */ 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'; 153 } 154 return $theme->setting_file_serve($filearea, $args, $forcedownload, $options); 155 } else { 156 send_file_not_found(); 157 } 158 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body