all-in-one-event-calendar/lib/command/compile-core-css.php
2017-11-09 17:36:04 +01:00

100 lines
3 KiB
PHP

<?php
/**
* The concrete command that compiles CSS.
*
* @author Time.ly Network Inc.
* @since 2.1
*
* @package AI1EC
* @subpackage AI1EC.Command
*/
class Ai1ec_Command_Compile_Core_Css extends Ai1ec_Command {
/*
* (non-PHPdoc) @see Ai1ec_Command::is_this_to_execute()
*/
public function is_this_to_execute() {
if ( isset( $_GET['ai1ec_compile_css'] ) &&
AI1EC_DEBUG
) {
return true;
}
return false;
}
/* (non-PHPdoc)
* @see Ai1ec_Command::set_render_strategy()
*/
public function set_render_strategy( Ai1ec_Request_Parser $request ) {
$this->_render_strategy = $this->_registry->get(
'http.response.render.strategy.void'
);
}
/* (non-PHPdoc)
* @see Ai1ec_Command::do_execute()
*/
public function do_execute() {
$message = $this->_process_files();
echo $message;
return Ai1ec_Http_Response_Helper::stop( 0 );
}
/**
* Returns calendar theme structure.
*
* @param string $stylesheet Calendar stylesheet. Expects one of
* ['vortex','plana','umbra','gamma'].
* @return array Calendar themes.
*
* @throws Ai1ec_Invalid_Argument_Exception
*/
protected function _get_theme( $stylesheet ) {
return $this->_registry->get(
'filesystem.misc'
)->build_theme_structure( $stylesheet );
}
/**
* Returns PHP code with hashmap array.
*
* @param $hashmap Array with compilation hashes.
*
* @return string PHP code.
*/
protected function _get_hashmap_array( $hashmap ) {
return '<?php return ' . var_export( $hashmap, true ) . ';';
}
protected function _process_files() {
$less = $frontend = $this->_registry->get( 'less.lessphp' );
$option = $this->_registry->get( 'model.option' );
$theme = $this->_get_theme( $_GET['theme'] );
if ( isset( $_GET['switch'] ) ) {
$option->delete( 'ai1ec_less_variables' );
$option->set( 'ai1ec_current_theme', $theme );
return 'Theme switched to "' . $theme['stylesheet'] . '".';
}
$css = $less->parse_less_files( null, true );
$hashmap = $less->get_less_hashmap();
$hashmap = $this->_get_hashmap_array( $hashmap );
$filename = $theme['theme_dir'] . DIRECTORY_SEPARATOR .
'css' . DIRECTORY_SEPARATOR . 'ai1ec_parsed_css.css';
$hashmap_file = $theme['theme_dir'] . DIRECTORY_SEPARATOR .
'less.sha1.map.php';
$css_written = file_put_contents( $filename, $css );
$hashmap_written = file_put_contents( $hashmap_file, $hashmap );
if (
false === $css_written ||
false === $hashmap_written
) {
return 'There has been an error writing theme CSS';
}
return 'Theme CSS compiled succesfully and written in ' .
$filename . ' and classmap stored in ' . $hashmap_file;
}
}