You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.4 KiB
143 lines
4.4 KiB
2 years ago
|
<?php
|
||
|
|
||
|
// +---------------------------------------------------------------------------+
|
||
|
// | This file is part of the core package. |
|
||
|
// | Copyright (c) laiketui.com |
|
||
|
// | |
|
||
|
// | For the full copyright and license information, please view the LICENSE |
|
||
|
// | file that was distributed with this source code. You can also view the |
|
||
|
// | LICENSE file online at http://www.laiketui.com |
|
||
|
// +---------------------------------------------------------------------------+
|
||
|
|
||
|
/**
|
||
|
* CompileConfigHandler gathers multiple files and puts them into a single file.
|
||
|
* Upon creation of the new file, all comments and blank lines are removed.
|
||
|
*
|
||
|
* @package laiketui
|
||
|
* @subpackage config
|
||
|
*
|
||
|
* @author ketter (ketter@laiketui.com)
|
||
|
* @since 3.0.0
|
||
|
*/
|
||
|
class CompileConfigHandler extends ConfigHandler
|
||
|
{
|
||
|
|
||
|
// +-----------------------------------------------------------------------+
|
||
|
// | METHODS |
|
||
|
// +-----------------------------------------------------------------------+
|
||
|
|
||
|
/**
|
||
|
* Execute this configuration handler.
|
||
|
*
|
||
|
* @param string An absolute filesystem path to a configuration file.
|
||
|
*
|
||
|
* @return string Data to be written to a cache file.
|
||
|
*
|
||
|
* @throws <b>ConfigurationException</b> If a requested configuration file
|
||
|
* does not exist or is not readable.
|
||
|
* @throws <b>ParseException</b> If a requested configuration file is
|
||
|
* improperly formatted.
|
||
|
*
|
||
|
* @author ketter (ketter@laiketui.com)
|
||
|
* @since 3.0.0
|
||
|
*/
|
||
|
public function & execute ($config)
|
||
|
{
|
||
|
|
||
|
if (!is_readable($config))
|
||
|
{
|
||
|
|
||
|
// can't read the configuration
|
||
|
$error = 'Configuration file "%s" does not exist or is not ' .
|
||
|
'readable';
|
||
|
$error = sprintf($error, $config);
|
||
|
|
||
|
throw new ConfigurationException($error);
|
||
|
|
||
|
}
|
||
|
|
||
|
// load the entire file
|
||
|
$files = @file($config);
|
||
|
|
||
|
if ($files === false)
|
||
|
{
|
||
|
|
||
|
// configuration couldn't be parsed
|
||
|
$error = 'Configuration file "%s" could not be parsed';
|
||
|
$error = sprintf($error, $config);
|
||
|
|
||
|
throw new ParseException($error);
|
||
|
|
||
|
}
|
||
|
|
||
|
// init our data
|
||
|
$data = '';
|
||
|
|
||
|
// let's do our fancy work
|
||
|
foreach ($files as &$file)
|
||
|
{
|
||
|
|
||
|
$file = trim($file);
|
||
|
|
||
|
if (strlen($file) > 0 && substr($file, 0, 1) != ';')
|
||
|
{
|
||
|
|
||
|
// we'll assume this is a file since the line does not start
|
||
|
// with a semi-colon (used for commenting)
|
||
|
|
||
|
$file = $this->replaceConstants($file);
|
||
|
$file = $this->replacePath($file);
|
||
|
|
||
|
if (!is_readable($file))
|
||
|
{
|
||
|
|
||
|
// file doesn't exist
|
||
|
$error = 'Configuration file "%s" specifies nonexistent ' .
|
||
|
'or unreadable file "%s"';
|
||
|
$error = sprintf($error, $config, $file);
|
||
|
|
||
|
throw new ParseException($error);
|
||
|
|
||
|
}
|
||
|
|
||
|
$contents = @file_get_contents($file);
|
||
|
|
||
|
// append file data
|
||
|
$data .= "\n" . $contents;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// replace windows and mac format with unix format
|
||
|
$data = str_replace("\r\n", "\n", $data);
|
||
|
$data = str_replace("\r", "\n", $data);
|
||
|
|
||
|
// strip php tags
|
||
|
$data = preg_replace("/<\?php/", '', $data);
|
||
|
$data = preg_replace("/<\?/", '', $data);
|
||
|
$data = preg_replace("/\?>/", '', $data);
|
||
|
|
||
|
// strip comments
|
||
|
$data = preg_replace("/\/\*(.*?)\*\//s", "\n", $data);
|
||
|
$data = preg_replace("/\s*\/\/.*?\n/s", "\n", $data);
|
||
|
|
||
|
// replace multiple new lines with a single newline
|
||
|
$data = preg_replace("/\n\s+\n/s", "\n", $data);
|
||
|
$data = preg_replace("/\n+/s", "\n", $data);
|
||
|
|
||
|
$data = trim($data);
|
||
|
|
||
|
// compile data
|
||
|
$retval = "<?php\n" .
|
||
|
"// auth-generated by CompileConfigHandler\n" .
|
||
|
"// date: %s\n%s\n?>";
|
||
|
$retval = sprintf($retval, date('m/d/Y H:i:s'), $data);
|
||
|
|
||
|
return $retval;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|