mirror of
https://github.com/atlanticbiomedical/portal-legacy.git
synced 2025-07-02 01:47:28 -04:00
initial commit
This commit is contained in:
130
lib/symfony/config/sfAutoloadConfigHandler.class.php
Executable file
130
lib/symfony/config/sfAutoloadConfigHandler.class.php
Executable file
@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the symfony package.
|
||||
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* (c) 2004-2006 Sean Kerr.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @package symfony
|
||||
* @subpackage config
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @author Sean Kerr <skerr@mojavi.org>
|
||||
* @version SVN: $Id: sfAutoloadConfigHandler.class.php 3256 2007-01-13 08:39:10Z fabien $
|
||||
*/
|
||||
class sfAutoloadConfigHandler extends sfYamlConfigHandler
|
||||
{
|
||||
/**
|
||||
* Executes this configuration handler.
|
||||
*
|
||||
* @param array An array of absolute filesystem path to a configuration file
|
||||
*
|
||||
* @return string Data to be written to a cache file
|
||||
*
|
||||
* @throws sfConfigurationException If a requested configuration file does not exist or is not readable
|
||||
* @throws sfParseException If a requested configuration file is improperly formatted
|
||||
*/
|
||||
public function execute($configFiles)
|
||||
{
|
||||
// set our required categories list and initialize our handler
|
||||
$categories = array('required_categories' => array('autoload'));
|
||||
|
||||
$this->initialize($categories);
|
||||
|
||||
// parse the yaml
|
||||
$myConfig = $this->parseYamls($configFiles);
|
||||
|
||||
// init our data array
|
||||
$data = array();
|
||||
|
||||
// let's do our fancy work
|
||||
foreach ($myConfig['autoload'] as $name => $entry)
|
||||
{
|
||||
if (isset($entry['name']))
|
||||
{
|
||||
$data[] = sprintf("\n// %s", $entry['name']);
|
||||
}
|
||||
|
||||
// file mapping or directory mapping?
|
||||
if (isset($entry['files']))
|
||||
{
|
||||
// file mapping
|
||||
foreach ($entry['files'] as $class => $path)
|
||||
{
|
||||
$path = $this->replaceConstants($path);
|
||||
|
||||
$data[] = sprintf("'%s' => '%s',", $class, $path);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// directory mapping
|
||||
$ext = isset($entry['ext']) ? $entry['ext'] : '.php';
|
||||
$path = $entry['path'];
|
||||
|
||||
$path = $this->replaceConstants($path);
|
||||
$path = $this->replacePath($path);
|
||||
|
||||
// we automatically add our php classes
|
||||
require_once(sfConfig::get('sf_symfony_lib_dir').'/util/sfFinder.class.php');
|
||||
$finder = sfFinder::type('file')->ignore_version_control()->name('*'.$ext);
|
||||
|
||||
// recursive mapping?
|
||||
$recursive = ((isset($entry['recursive'])) ? $entry['recursive'] : false);
|
||||
if (!$recursive)
|
||||
{
|
||||
$finder->maxdepth(1);
|
||||
}
|
||||
|
||||
// exclude files or directories?
|
||||
if (isset($entry['exclude']) && is_array($entry['exclude']))
|
||||
{
|
||||
$finder->prune($entry['exclude'])->discard($entry['exclude']);
|
||||
}
|
||||
|
||||
if ($matches = glob($path))
|
||||
{
|
||||
$files = $finder->in($matches);
|
||||
}
|
||||
else
|
||||
{
|
||||
$files = array();
|
||||
}
|
||||
|
||||
$regex = '~^\s*(?:abstract\s+|final\s+)?(?:class|interface)\s+(\w+)~mi';
|
||||
foreach ($files as $file)
|
||||
{
|
||||
preg_match_all($regex, file_get_contents($file), $classes);
|
||||
foreach ($classes[1] as $class)
|
||||
{
|
||||
$prefix = '';
|
||||
if (isset($entry['prefix']))
|
||||
{
|
||||
// FIXME: does not work for plugins installed with a symlink
|
||||
preg_match('~^'.str_replace('\*', '(.+?)', preg_quote(str_replace('/', DIRECTORY_SEPARATOR, $path), '~')).'~', $file, $match);
|
||||
if (isset($match[$entry['prefix']]))
|
||||
{
|
||||
$prefix = $match[$entry['prefix']].'/';
|
||||
}
|
||||
}
|
||||
|
||||
$data[] = sprintf("'%s%s' => '%s',", $prefix, $class, $file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// compile data
|
||||
$retval = sprintf("<?php\n".
|
||||
"// auto-generated by sfAutoloadConfigHandler\n".
|
||||
"// date: %s\nreturn array(\n%s\n);\n",
|
||||
date('Y/m/d H:i:s'), implode("\n", $data));
|
||||
|
||||
return $retval;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user