MDL-56488 boost: validate scss settings for parsable scss

* Parses the scss and fails validation if a parse error is found

* Does not detect the situation when variables are not present - this
  would involve us parsing the entire tree and would be slow. It could
  also change over time, depending on whats defined in the scss
  from themes.

* Introduces a new admin_setting_scsscode to do this
This commit is contained in:
Dan Poltawski 2016-12-14 10:47:33 +00:00
parent c4cf1c60f5
commit 0e34e46fd0
3 changed files with 41 additions and 2 deletions

View file

@ -10180,3 +10180,41 @@ class admin_setting_searchsetupinfo extends admin_setting {
}
}
/**
* Used to validate the contents of SCSS code and ensuring they are parsable.
*
* It does not attempt to detect undefined SCSS variables because it is designed
* to be used without knowledge of other config/scss included.
*
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2016 Dan Poltawski <dan@moodle.com>
*/
class admin_setting_scsscode extends admin_setting_configtextarea {
/**
* Validate the contents of the SCSS to ensure its parsable. Does not
* attempt to detect undefined scss variables.
*
* @param string $data The scss code from text field.
* @return mixed bool true for success or string:error on failure.
*/
public function validate($data) {
if (empty($data)) {
return true;
}
$scss = new core_scss();
try {
$scss->compile($data);
} catch (Leafo\ScssPhp\Exception\ParserException $e) {
return get_string('scssinvalid', 'admin', $e->getMessage());
} catch (Leafo\ScssPhp\Exception\CompilerException $e) {
// Silently ignore this - it could be a scss variable defined from somewhere
// else which we are not examining here.
return true;
}
return true;
}
}