* @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: * * return array( * '{classname}' => '{path_to_classfile}', * '{classname2}' => '{path_to_classfile2}', * ); * * * @category Development * @package mpAutoloaderClassMap * @author Murat Purc */ 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(' _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; } }