ConLite/conlite/tools/mpAutoloaderClassMap/mpClassMapFileCreator.php

136 Zeilen
3.6 KiB
PHP

<?php
/**
* Contains class to create a class map file.
*
* @category Development
* @package mpAutoloaderClassMap
* @author Murat Purc <murat@purc.de>
* @copyright Copyright (c) 2009-2010 Murat Purc (http://www.purc.de)
* @license http://www.gnu.org/licenses/gpl-2.0.html - GNU General Public License, version 2
* @version $Id$
*/
/**
* Class to create a PHP file which contains a assoziative PHP array.
*
* Generated file will contain a PHP array as following:
* <code>
* return array(
* '{classname}' => '{path_to_classfile}',
* '{classname2}' => '{path_to_classfile2}',
* );
* </code>
*
* @category Development
* @package mpAutoloaderClassMap
* @author Murat Purc <murat@purc.de>
*/
class mpClassMapFileCreator
{
/**
* Class map file template
* @var string
*/
protected $_template = '';
/**
* Template replacements
* @var stdClass
*/
protected $_data = '';
/**
* Sets template and template replacements
*
* @return void
*/
public function __construct()
{
$this->_template = trim('
<?php
/**
{DESCRIPTION}
*
* @package {PACKAGE}
* @subpackage {SUBPACKAGE}
* @version {VERSION}
* @author {AUTHOR}
* @copyright {COPYRIGHT}
* @license {LICENSE}
*/
{CONTENT}
');
$this->_data = new stdClass();
$this->_data->content = '';
$this->_data->description = trim('
* Autoloader classmap file. Contains all available classes/interfaces and
* related class files.
*
* NOTES:
* - Don\'t edit this file manually!
* - It was generated by ' . __CLASS__ . '
* - Use ' . __CLASS__ . ' again, if you want to regenerate this file
*');
$this->_data->package = __CLASS__;
$this->_data->subpackage = 'Classmap';
$this->_data->version = '0.1';
$this->_data->author = 'System';
$this->_data->copyright = 'Copyright (c) 2009-2010 Murat Purc (http://www.purc.de)';
$this->_data->license = 'http://www.gnu.org/licenses/gpl-2.0.html - GNU General Public License, version 2';
}
/**
* Creates classmap file with passed data list
*
* @param array $data Assoziative list which contains class type tokens and
* the related path to the class file.
* @param string $file Destination class map file
* @return void
*/
public function create(array $data, $file)
{
$this->_createClassMap($data);
return (bool) file_put_contents($file, $this->_renderTemplate());
}
/**
* Fills template replacement variable with generated assoziative PHP array
*
* @var array $data Assoziative list with class type tokens and files
* @return void
*/
protected function _createClassMap(array $data)
{
$classMapTpl = "\nreturn array(\n%s\n);\n";
$classMapContent = '';
foreach ($data as $classToken => $path) {
$classMapContent .= sprintf(" '%s' => '%s',\n", addslashes($classToken), addslashes($path));
}
$classMapContent = substr($classMapContent, 0, -2);
$this->_data->content .= sprintf($classMapTpl, $classMapContent);
}
/**
* Replaces all wildcards in template with related template variables.
*
* @return string Replaced template
*/
protected function _renderTemplate()
{
$template = $this->_template;
foreach ($this->_data as $name => $value) {
$template = str_replace('{' . strtoupper($name) . '}', $value, $template);
}
return $template;
}
}