100 lines
3 KiB
PHP
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;
|
|
}
|
|
}
|