diff options
Diffstat (limited to 'Postman/Postman-Mail/Zend-1.12.10/Loader/Autoloader.php')
-rw-r--r-- | Postman/Postman-Mail/Zend-1.12.10/Loader/Autoloader.php | 589 |
1 files changed, 0 insertions, 589 deletions
diff --git a/Postman/Postman-Mail/Zend-1.12.10/Loader/Autoloader.php b/Postman/Postman-Mail/Zend-1.12.10/Loader/Autoloader.php deleted file mode 100644 index 84b8e72..0000000 --- a/Postman/Postman-Mail/Zend-1.12.10/Loader/Autoloader.php +++ /dev/null @@ -1,589 +0,0 @@ -<?php -/** - * Zend Framework - * - * LICENSE - * - * This source file is subject to the new BSD license that is bundled - * with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://framework.zend.com/license/new-bsd - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@zend.com so we can send you a copy immediately. - * - * @category Zend - * @package Postman_Zend_Loader - * @subpackage Autoloader - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @version $Id$ - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -/** Postman_Zend_Loader */ -require_once 'Zend/Loader.php'; - -/** - * Autoloader stack and namespace autoloader - * - * @uses Postman_Zend_Loader_Autoloader - * @package Postman_Zend_Loader - * @subpackage Autoloader - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -class Postman_Zend_Loader_Autoloader -{ - /** - * @var Postman_Zend_Loader_Autoloader Singleton instance - */ - protected static $_instance; - - /** - * @var array Concrete autoloader callback implementations - */ - protected $_autoloaders = array(); - - /** - * @var array Default autoloader callback - */ - protected $_defaultAutoloader = array('Postman_Zend_Loader', 'loadClass'); - - /** - * @var bool Whether or not to act as a fallback autoloader - */ - protected $_fallbackAutoloader = false; - - /** - * @var array Callback for internal autoloader implementation - */ - protected $_internalAutoloader; - - /** - * @var array Supported namespaces 'Zend' and 'ZendX' by default. - */ - protected $_namespaces = array( - 'Postman_Zend_' => true, - 'ZendX_' => true, - ); - - /** - * @var array Namespace-specific autoloaders - */ - protected $_namespaceAutoloaders = array(); - - /** - * @var bool Whether or not to suppress file not found warnings - */ - protected $_suppressNotFoundWarnings = false; - - /** - * @var null|string - */ - protected $_zfPath; - - /** - * Retrieve singleton instance - * - * @return Postman_Zend_Loader_Autoloader - */ - public static function getInstance() - { - if (null === self::$_instance) { - self::$_instance = new self(); - } - return self::$_instance; - } - - /** - * Reset the singleton instance - * - * @return void - */ - public static function resetInstance() - { - self::$_instance = null; - } - - /** - * Autoload a class - * - * @param string $class - * @return bool - */ - public static function autoload($class) - { - $self = self::getInstance(); - - foreach ($self->getClassAutoloaders($class) as $autoloader) { - if ($autoloader instanceof Postman_Zend_Loader_Autoloader_Interface) { - if ($autoloader->autoload($class)) { - return true; - } - } elseif (is_array($autoloader)) { - if (call_user_func($autoloader, $class)) { - return true; - } - } elseif (is_string($autoloader) || is_callable($autoloader)) { - if ($autoloader($class)) { - return true; - } - } - } - - return false; - } - - /** - * Set the default autoloader implementation - * - * @param string|array $callback PHP callback - * @return void - */ - public function setDefaultAutoloader($callback) - { - if (!is_callable($callback)) { - throw new Postman_Zend_Loader_Exception('Invalid callback specified for default autoloader'); - } - - $this->_defaultAutoloader = $callback; - return $this; - } - - /** - * Retrieve the default autoloader callback - * - * @return string|array PHP Callback - */ - public function getDefaultAutoloader() - { - return $this->_defaultAutoloader; - } - - /** - * Set several autoloader callbacks at once - * - * @param array $autoloaders Array of PHP callbacks (or Postman_Zend_Loader_Autoloader_Interface implementations) to act as autoloaders - * @return Postman_Zend_Loader_Autoloader - */ - public function setAutoloaders(array $autoloaders) - { - $this->_autoloaders = $autoloaders; - return $this; - } - - /** - * Get attached autoloader implementations - * - * @return array - */ - public function getAutoloaders() - { - return $this->_autoloaders; - } - - /** - * Return all autoloaders for a given namespace - * - * @param string $namespace - * @return array - */ - public function getNamespaceAutoloaders($namespace) - { - $namespace = (string) $namespace; - if (!array_key_exists($namespace, $this->_namespaceAutoloaders)) { - return array(); - } - return $this->_namespaceAutoloaders[$namespace]; - } - - /** - * Register a namespace to autoload - * - * @param string|array $namespace - * @return Postman_Zend_Loader_Autoloader - */ - public function registerNamespace($namespace) - { - if (is_string($namespace)) { - $namespace = (array) $namespace; - } elseif (!is_array($namespace)) { - throw new Postman_Zend_Loader_Exception('Invalid namespace provided'); - } - - foreach ($namespace as $ns) { - if (!isset($this->_namespaces[$ns])) { - $this->_namespaces[$ns] = true; - } - } - return $this; - } - - /** - * Unload a registered autoload namespace - * - * @param string|array $namespace - * @return Postman_Zend_Loader_Autoloader - */ - public function unregisterNamespace($namespace) - { - if (is_string($namespace)) { - $namespace = (array) $namespace; - } elseif (!is_array($namespace)) { - throw new Postman_Zend_Loader_Exception('Invalid namespace provided'); - } - - foreach ($namespace as $ns) { - if (isset($this->_namespaces[$ns])) { - unset($this->_namespaces[$ns]); - } - } - return $this; - } - - /** - * Get a list of registered autoload namespaces - * - * @return array - */ - public function getRegisteredNamespaces() - { - return array_keys($this->_namespaces); - } - - public function setZfPath($spec, $version = 'latest') - { - $path = $spec; - if (is_array($spec)) { - if (!isset($spec['path'])) { - throw new Postman_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 - * @return bool|Postman_Zend_Loader_Autoloader Returns boolean if no argument is passed, object instance otherwise - */ - public function suppressNotFoundWarnings($flag = null) - { - if (null === $flag) { - return $this->_suppressNotFoundWarnings; - } - $this->_suppressNotFoundWarnings = (bool) $flag; - return $this; - } - - /** - * Indicate whether or not this autoloader should be a fallback autoloader - * - * @param bool $flag - * @return Postman_Zend_Loader_Autoloader - */ - public function setFallbackAutoloader($flag) - { - $this->_fallbackAutoloader = (bool) $flag; - return $this; - } - - /** - * Is this instance acting as a fallback autoloader? - * - * @return bool - */ - public function isFallbackAutoloader() - { - return $this->_fallbackAutoloader; - } - - /** - * 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 - * all non-namespaced autoloaders. - * - * @param string $class - * @return array Array of autoloaders to use - */ - public function getClassAutoloaders($class) - { - $namespace = false; - $autoloaders = array(); - - // Add concrete namespaced autoloaders - foreach (array_keys($this->_namespaceAutoloaders) as $ns) { - if ('' == $ns) { - continue; - } - if (0 === strpos($class, $ns)) { - if ((false === $namespace) || (strlen($ns) > strlen($namespace))) { - $namespace = $ns; - $autoloaders = $this->getNamespaceAutoloaders($ns); - } - } - } - - // Add internal namespaced autoloader - foreach ($this->getRegisteredNamespaces() as $ns) { - if (0 === strpos($class, $ns)) { - $namespace = $ns; - $autoloaders[] = $this->_internalAutoloader; - break; - } - } - - // Add non-namespaced autoloaders - $autoloadersNonNamespace = $this->getNamespaceAutoloaders(''); - if (count($autoloadersNonNamespace)) { - foreach ($autoloadersNonNamespace as $ns) { - $autoloaders[] = $ns; - } - unset($autoloadersNonNamespace); - } - - // Add fallback autoloader - if (!$namespace && $this->isFallbackAutoloader()) { - $autoloaders[] = $this->_internalAutoloader; - } - - return $autoloaders; - } - - /** - * Add an autoloader to the beginning of the stack - * - * @param object|array|string $callback PHP callback or Postman_Zend_Loader_Autoloader_Interface implementation - * @param string|array $namespace Specific namespace(s) under which to register callback - * @return Postman_Zend_Loader_Autoloader - */ - public function unshiftAutoloader($callback, $namespace = '') - { - $autoloaders = $this->getAutoloaders(); - array_unshift($autoloaders, $callback); - $this->setAutoloaders($autoloaders); - - $namespace = (array) $namespace; - foreach ($namespace as $ns) { - $autoloaders = $this->getNamespaceAutoloaders($ns); - array_unshift($autoloaders, $callback); - $this->_setNamespaceAutoloaders($autoloaders, $ns); - } - - return $this; - } - - /** - * Append an autoloader to the autoloader stack - * - * @param object|array|string $callback PHP callback or Postman_Zend_Loader_Autoloader_Interface implementation - * @param string|array $namespace Specific namespace(s) under which to register callback - * @return Postman_Zend_Loader_Autoloader - */ - public function pushAutoloader($callback, $namespace = '') - { - $autoloaders = $this->getAutoloaders(); - array_push($autoloaders, $callback); - $this->setAutoloaders($autoloaders); - - $namespace = (array) $namespace; - foreach ($namespace as $ns) { - $autoloaders = $this->getNamespaceAutoloaders($ns); - array_push($autoloaders, $callback); - $this->_setNamespaceAutoloaders($autoloaders, $ns); - } - - return $this; - } - - /** - * Remove an autoloader from the autoloader stack - * - * @param object|array|string $callback PHP callback or Postman_Zend_Loader_Autoloader_Interface implementation - * @param null|string|array $namespace Specific namespace(s) from which to remove autoloader - * @return Postman_Zend_Loader_Autoloader - */ - public function removeAutoloader($callback, $namespace = null) - { - if (null === $namespace) { - $autoloaders = $this->getAutoloaders(); - if (false !== ($index = array_search($callback, $autoloaders, true))) { - unset($autoloaders[$index]); - $this->setAutoloaders($autoloaders); - } - - foreach ($this->_namespaceAutoloaders as $ns => $autoloaders) { - if (false !== ($index = array_search($callback, $autoloaders, true))) { - unset($autoloaders[$index]); - $this->_setNamespaceAutoloaders($autoloaders, $ns); - } - } - } else { - $namespace = (array) $namespace; - foreach ($namespace as $ns) { - $autoloaders = $this->getNamespaceAutoloaders($ns); - if (false !== ($index = array_search($callback, $autoloaders, true))) { - unset($autoloaders[$index]); - $this->_setNamespaceAutoloaders($autoloaders, $ns); - } - } - } - - return $this; - } - - /** - * Constructor - * - * Registers instance with spl_autoload stack - * - * @return void - */ - protected function __construct() - { - spl_autoload_register(array(__CLASS__, 'autoload')); - $this->_internalAutoloader = array($this, '_autoload'); - } - - /** - * Internal autoloader implementation - * - * @param string $class - * @return bool - */ - protected function _autoload($class) - { - $callback = $this->getDefaultAutoloader(); - try { - if ($this->suppressNotFoundWarnings()) { - @call_user_func($callback, $class); - } else { - call_user_func($callback, $class); - } - return $class; - } catch (Postman_Zend_Exception $e) { - return false; - } - } - - /** - * Set autoloaders for a specific namespace - * - * @param array $autoloaders - * @param string $namespace - * @return Postman_Zend_Loader_Autoloader - */ - protected function _setNamespaceAutoloaders(array $autoloaders, $namespace = '') - { - $namespace = (string) $namespace; - $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 Postman_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 Postman_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 Postman_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 Postman_Zend_Loader_Exception('Invalid ZF path provided'); - } - - $path = rtrim($path, '/'); - $path = rtrim($path, '\\'); - $versionLen = strlen($version); - $versions = array(); - $dirs = glob("$path/*", GLOB_ONLYDIR); - foreach ((array) $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; - } -} |