import v2.0.0.0_RC3 | 2012-07-01
https://github.com/lucanos/CommunityID -> http://www.itadmins.net/archives/357
This commit is contained in:
@ -16,7 +16,7 @@
|
||||
* @package Zend_Loader
|
||||
* @subpackage Autoloader
|
||||
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @version $Id: Autoloader.php 16541 2009-07-07 06:59:03Z bkarwin $
|
||||
* @version $Id: Autoloader.php 18951 2009-11-12 16:26:19Z alexander $
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
@ -25,7 +25,7 @@ require_once 'Zend/Loader.php';
|
||||
|
||||
/**
|
||||
* Autoloader stack and namespace autoloader
|
||||
*
|
||||
*
|
||||
* @uses Zend_Loader_Autoloader
|
||||
* @package Zend_Loader
|
||||
* @subpackage Autoloader
|
||||
@ -77,9 +77,14 @@ class Zend_Loader_Autoloader
|
||||
*/
|
||||
protected $_suppressNotFoundWarnings = false;
|
||||
|
||||
/**
|
||||
* @var null|string
|
||||
*/
|
||||
protected $_zfPath;
|
||||
|
||||
/**
|
||||
* Retrieve singleton instance
|
||||
*
|
||||
*
|
||||
* @return Zend_Loader_Autoloader
|
||||
*/
|
||||
public static function getInstance()
|
||||
@ -92,7 +97,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Reset the singleton instance
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function resetInstance()
|
||||
@ -102,8 +107,8 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Autoload a class
|
||||
*
|
||||
* @param string $class
|
||||
*
|
||||
* @param string $class
|
||||
* @return bool
|
||||
*/
|
||||
public static function autoload($class)
|
||||
@ -133,7 +138,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Set the default autoloader implementation
|
||||
*
|
||||
*
|
||||
* @param string|array $callback PHP callback
|
||||
* @return void
|
||||
*/
|
||||
@ -149,7 +154,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Retrieve the default autoloader callback
|
||||
*
|
||||
*
|
||||
* @return string|array PHP Callback
|
||||
*/
|
||||
public function getDefaultAutoloader()
|
||||
@ -159,7 +164,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Set several autoloader callbacks at once
|
||||
*
|
||||
*
|
||||
* @param array $autoloaders Array of PHP callbacks (or Zend_Loader_Autoloader_Interface implementations) to act as autoloaders
|
||||
* @return Zend_Loader_Autoloader
|
||||
*/
|
||||
@ -171,7 +176,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Get attached autoloader implementations
|
||||
*
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAutoloaders()
|
||||
@ -181,7 +186,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Return all autoloaders for a given namespace
|
||||
*
|
||||
*
|
||||
* @param string $namespace
|
||||
* @return array
|
||||
*/
|
||||
@ -196,8 +201,8 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Register a namespace to autoload
|
||||
*
|
||||
* @param string|array $namespace
|
||||
*
|
||||
* @param string|array $namespace
|
||||
* @return Zend_Loader_Autoloader
|
||||
*/
|
||||
public function registerNamespace($namespace)
|
||||
@ -218,8 +223,8 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Unload a registered autoload namespace
|
||||
*
|
||||
* @param string|array $namespace
|
||||
*
|
||||
* @param string|array $namespace
|
||||
* @return Zend_Loader_Autoloader
|
||||
*/
|
||||
public function unregisterNamespace($namespace)
|
||||
@ -240,7 +245,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Get a list of registered autoload namespaces
|
||||
*
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getRegisteredNamespaces()
|
||||
@ -248,10 +253,36 @@ class Zend_Loader_Autoloader
|
||||
return array_keys($this->_namespaces);
|
||||
}
|
||||
|
||||
public function setZfPath($spec, $version = 'latest')
|
||||
{
|
||||
$path = $spec;
|
||||
if (is_array($spec)) {
|
||||
if (!isset($spec['path'])) {
|
||||
throw new Zend_Loader_Exception('No path specified for ZF');
|
||||
}
|
||||
$path = $spec['path'];
|
||||
if (isset($spec['version'])) {
|
||||
$version = $spec['version'];
|
||||
}
|
||||
}
|
||||
|
||||
$this->_zfPath = $this->_getVersionPath($path, $version);
|
||||
set_include_path(implode(PATH_SEPARATOR, array(
|
||||
$this->_zfPath,
|
||||
get_include_path(),
|
||||
)));
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getZfPath()
|
||||
{
|
||||
return $this->_zfPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or set the value of the "suppress not found warnings" flag
|
||||
*
|
||||
* @param null|bool $flag
|
||||
*
|
||||
* @param null|bool $flag
|
||||
* @return bool|Zend_Loader_Autoloader Returns boolean if no argument is passed, object instance otherwise
|
||||
*/
|
||||
public function suppressNotFoundWarnings($flag = null)
|
||||
@ -265,8 +296,8 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Indicate whether or not this autoloader should be a fallback autoloader
|
||||
*
|
||||
* @param bool $flag
|
||||
*
|
||||
* @param bool $flag
|
||||
* @return Zend_Loader_Autoloader
|
||||
*/
|
||||
public function setFallbackAutoloader($flag)
|
||||
@ -277,7 +308,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Is this instance acting as a fallback autoloader?
|
||||
*
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isFallbackAutoloader()
|
||||
@ -288,11 +319,11 @@ class Zend_Loader_Autoloader
|
||||
/**
|
||||
* Get autoloaders to use when matching class
|
||||
*
|
||||
* Determines if the class matches a registered namespace, and, if so,
|
||||
* returns only the autoloaders for that namespace. Otherwise, it returns
|
||||
* Determines if the class matches a registered namespace, and, if so,
|
||||
* returns only the autoloaders for that namespace. Otherwise, it returns
|
||||
* all non-namespaced autoloaders.
|
||||
*
|
||||
* @param string $class
|
||||
* @param string $class
|
||||
* @return array Array of autoloaders to use
|
||||
*/
|
||||
public function getClassAutoloaders($class)
|
||||
@ -334,7 +365,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Add an autoloader to the beginning of the stack
|
||||
*
|
||||
*
|
||||
* @param object|array|string $callback PHP callback or Zend_Loader_Autoloader_Interface implementation
|
||||
* @param string|array $namespace Specific namespace(s) under which to register callback
|
||||
* @return Zend_Loader_Autoloader
|
||||
@ -357,7 +388,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Append an autoloader to the autoloader stack
|
||||
*
|
||||
*
|
||||
* @param object|array|string $callback PHP callback or Zend_Loader_Autoloader_Interface implementation
|
||||
* @param string|array $namespace Specific namespace(s) under which to register callback
|
||||
* @return Zend_Loader_Autoloader
|
||||
@ -380,7 +411,7 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Remove an autoloader from the autoloader stack
|
||||
*
|
||||
*
|
||||
* @param object|array|string $callback PHP callback or Zend_Loader_Autoloader_Interface implementation
|
||||
* @param null|string|array $namespace Specific namespace(s) from which to remove autoloader
|
||||
* @return Zend_Loader_Autoloader
|
||||
@ -418,7 +449,7 @@ class Zend_Loader_Autoloader
|
||||
* Constructor
|
||||
*
|
||||
* Registers instance with spl_autoload stack
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function __construct()
|
||||
@ -429,8 +460,8 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Internal autoloader implementation
|
||||
*
|
||||
* @param string $class
|
||||
*
|
||||
* @param string $class
|
||||
* @return bool
|
||||
*/
|
||||
protected function _autoload($class)
|
||||
@ -450,9 +481,9 @@ class Zend_Loader_Autoloader
|
||||
|
||||
/**
|
||||
* Set autoloaders for a specific namespace
|
||||
*
|
||||
* @param array $autoloaders
|
||||
* @param string $namespace
|
||||
*
|
||||
* @param array $autoloaders
|
||||
* @param string $namespace
|
||||
* @return Zend_Loader_Autoloader
|
||||
*/
|
||||
protected function _setNamespaceAutoloaders(array $autoloaders, $namespace = '')
|
||||
@ -461,4 +492,93 @@ class Zend_Loader_Autoloader
|
||||
$this->_namespaceAutoloaders[$namespace] = $autoloaders;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the filesystem path for the requested ZF version
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $version
|
||||
* @return void
|
||||
*/
|
||||
protected function _getVersionPath($path, $version)
|
||||
{
|
||||
$type = $this->_getVersionType($version);
|
||||
|
||||
if ($type == 'latest') {
|
||||
$version = 'latest';
|
||||
}
|
||||
|
||||
$availableVersions = $this->_getAvailableVersions($path, $version);
|
||||
if (empty($availableVersions)) {
|
||||
throw new Zend_Loader_Exception('No valid ZF installations discovered');
|
||||
}
|
||||
|
||||
$matchedVersion = array_pop($availableVersions);
|
||||
return $matchedVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the ZF version type
|
||||
*
|
||||
* @param string $version
|
||||
* @return string "latest", "major", "minor", or "specific"
|
||||
* @throws Zend_Loader_Exception if version string contains too many dots
|
||||
*/
|
||||
protected function _getVersionType($version)
|
||||
{
|
||||
if (strtolower($version) == 'latest') {
|
||||
return 'latest';
|
||||
}
|
||||
|
||||
$parts = explode('.', $version);
|
||||
$count = count($parts);
|
||||
if (1 == $count) {
|
||||
return 'major';
|
||||
}
|
||||
if (2 == $count) {
|
||||
return 'minor';
|
||||
}
|
||||
if (3 < $count) {
|
||||
throw new Zend_Loader_Exception('Invalid version string provided');
|
||||
}
|
||||
return 'specific';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available versions for the version type requested
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $version
|
||||
* @return array
|
||||
*/
|
||||
protected function _getAvailableVersions($path, $version)
|
||||
{
|
||||
if (!is_dir($path)) {
|
||||
throw new Zend_Loader_Exception('Invalid ZF path provided');
|
||||
}
|
||||
|
||||
$path = rtrim($path, '/');
|
||||
$path = rtrim($path, '\\');
|
||||
$versionLen = strlen($version);
|
||||
$versions = array();
|
||||
$dirs = glob("$path/*", GLOB_ONLYDIR);
|
||||
foreach ($dirs as $dir) {
|
||||
$dirName = substr($dir, strlen($path) + 1);
|
||||
if (!preg_match('/^(?:ZendFramework-)?(\d+\.\d+\.\d+((a|b|pl|pr|p|rc)\d+)?)(?:-minimal)?$/i', $dirName, $matches)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$matchedVersion = $matches[1];
|
||||
|
||||
if (('latest' == $version)
|
||||
|| ((strlen($matchedVersion) >= $versionLen)
|
||||
&& (0 === strpos($matchedVersion, $version)))
|
||||
) {
|
||||
$versions[$matchedVersion] = $dir . '/library';
|
||||
}
|
||||
}
|
||||
|
||||
uksort($versions, 'version_compare');
|
||||
return $versions;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user