diff --git a/ajax.php b/ajax.php index 92b6fb2ac..0da426248 100644 --- a/ajax.php +++ b/ajax.php @@ -255,7 +255,7 @@ class ajax_common } } - $response_js = Zend\Json\Json::encode($this->response); + $response_js = json_encode($this->response); if (GZIP_OUTPUT_ALLOWED && !defined('NO_GZIP')) { if (UA_GZIP_SUPPORTED && strlen($response_js) > 2000) { diff --git a/common.php b/common.php index 462007360..6fd87d508 100644 --- a/common.php +++ b/common.php @@ -56,16 +56,6 @@ header('X-Frame-Options: SAMEORIGIN'); // Get initial config require(BB_ROOT . 'library/config.php'); -// Load Zend Framework -use Zend\Loader\StandardAutoloader; - -require(BB_ROOT . 'library/Zend/Loader/StandardAutoloader.php'); -$loader = new StandardAutoloader(array('autoregister_zf' => true)); -$loader->register(); - -// ZF use -use Zend\Json; - $server_protocol = ($bb_cfg['cookie_secure']) ? 'https://' : 'http://'; $server_port = (in_array($bb_cfg['server_port'], array(80, 443))) ? '' : ':' . $bb_cfg['server_port']; define('FORUM_PATH', $bb_cfg['script_path']); diff --git a/library/Zend/Authentication/Adapter/AbstractAdapter.php b/library/Zend/Authentication/Adapter/AbstractAdapter.php deleted file mode 100755 index 2f394f9e9..000000000 --- a/library/Zend/Authentication/Adapter/AbstractAdapter.php +++ /dev/null @@ -1,71 +0,0 @@ -credential; - } - - /** - * Sets the credential for binding - * - * @param mixed $credential - * @return AbstractAdapter - */ - public function setCredential($credential) - { - $this->credential = $credential; - - return $this; - } - - /** - * Returns the identity of the account being authenticated, or - * NULL if none is set. - * - * @return mixed - */ - public function getIdentity() - { - return $this->identity; - } - - /** - * Sets the identity for binding - * - * @param mixed $identity - * @return AbstractAdapter - */ - public function setIdentity($identity) - { - $this->identity = $identity; - - return $this; - } -} diff --git a/library/Zend/Authentication/Adapter/AdapterInterface.php b/library/Zend/Authentication/Adapter/AdapterInterface.php deleted file mode 100755 index d23d07936..000000000 --- a/library/Zend/Authentication/Adapter/AdapterInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -zendDb = $zendDb; - - if (null !== $tableName) { - $this->setTableName($tableName); - } - - if (null !== $identityColumn) { - $this->setIdentityColumn($identityColumn); - } - - if (null !== $credentialColumn) { - $this->setCredentialColumn($credentialColumn); - } - } - - /** - * setTableName() - set the table name to be used in the select query - * - * @param string $tableName - * @return self Provides a fluent interface - */ - public function setTableName($tableName) - { - $this->tableName = $tableName; - return $this; - } - - /** - * setIdentityColumn() - set the column name to be used as the identity column - * - * @param string $identityColumn - * @return self Provides a fluent interface - */ - public function setIdentityColumn($identityColumn) - { - $this->identityColumn = $identityColumn; - return $this; - } - - /** - * setCredentialColumn() - set the column name to be used as the credential column - * - * @param string $credentialColumn - * @return self Provides a fluent interface - */ - public function setCredentialColumn($credentialColumn) - { - $this->credentialColumn = $credentialColumn; - return $this; - } - - /** - * setAmbiguityIdentity() - sets a flag for usage of identical identities - * with unique credentials. It accepts integers (0, 1) or boolean (true, - * false) parameters. Default is false. - * - * @param int|bool $flag - * @return self Provides a fluent interface - */ - public function setAmbiguityIdentity($flag) - { - if (is_int($flag)) { - $this->ambiguityIdentity = (1 === $flag ? true : false); - } elseif (is_bool($flag)) { - $this->ambiguityIdentity = $flag; - } - return $this; - } - - /** - * getAmbiguityIdentity() - returns TRUE for usage of multiple identical - * identities with different credentials, FALSE if not used. - * - * @return bool - */ - public function getAmbiguityIdentity() - { - return $this->ambiguityIdentity; - } - - /** - * getDbSelect() - Return the preauthentication Db Select object for userland select query modification - * - * @return Sql\Select - */ - public function getDbSelect() - { - if ($this->dbSelect == null) { - $this->dbSelect = new Sql\Select(); - } - return $this->dbSelect; - } - - /** - * getResultRowObject() - Returns the result row as a stdClass object - * - * @param string|array $returnColumns - * @param string|array $omitColumns - * @return stdClass|bool - */ - public function getResultRowObject($returnColumns = null, $omitColumns = null) - { - if (!$this->resultRow) { - return false; - } - - $returnObject = new stdClass(); - - if (null !== $returnColumns) { - $availableColumns = array_keys($this->resultRow); - foreach ((array) $returnColumns as $returnColumn) { - if (in_array($returnColumn, $availableColumns)) { - $returnObject->{$returnColumn} = $this->resultRow[$returnColumn]; - } - } - return $returnObject; - } elseif (null !== $omitColumns) { - $omitColumns = (array) $omitColumns; - foreach ($this->resultRow as $resultColumn => $resultValue) { - if (!in_array($resultColumn, $omitColumns)) { - $returnObject->{$resultColumn} = $resultValue; - } - } - return $returnObject; - } - - foreach ($this->resultRow as $resultColumn => $resultValue) { - $returnObject->{$resultColumn} = $resultValue; - } - return $returnObject; - } - - /** - * This method is called to attempt an authentication. Previous to this - * call, this adapter would have already been configured with all - * necessary information to successfully connect to a database table and - * attempt to find a record matching the provided identity. - * - * @throws Exception\RuntimeException if answering the authentication query is impossible - * @return AuthenticationResult - */ - public function authenticate() - { - $this->authenticateSetup(); - $dbSelect = $this->authenticateCreateSelect(); - $resultIdentities = $this->authenticateQuerySelect($dbSelect); - - if (($authResult = $this->authenticateValidateResultSet($resultIdentities)) instanceof AuthenticationResult) { - return $authResult; - } - - // At this point, ambiguity is already done. Loop, check and break on success. - foreach ($resultIdentities as $identity) { - $authResult = $this->authenticateValidateResult($identity); - if ($authResult->isValid()) { - break; - } - } - - return $authResult; - } - - /** - * _authenticateValidateResult() - This method attempts to validate that - * the record in the resultset is indeed a record that matched the - * identity provided to this adapter. - * - * @param array $resultIdentity - * @return AuthenticationResult - */ - abstract protected function authenticateValidateResult($resultIdentity); - - /** - * _authenticateCreateSelect() - This method creates a Zend\Db\Sql\Select object that - * is completely configured to be queried against the database. - * - * @return Sql\Select - */ - abstract protected function authenticateCreateSelect(); - - /** - * _authenticateSetup() - This method abstracts the steps involved with - * making sure that this adapter was indeed setup properly with all - * required pieces of information. - * - * @throws Exception\RuntimeException in the event that setup was not done properly - * @return bool - */ - protected function authenticateSetup() - { - $exception = null; - - if ($this->tableName == '') { - $exception = 'A table must be supplied for the DbTable authentication adapter.'; - } elseif ($this->identityColumn == '') { - $exception = 'An identity column must be supplied for the DbTable authentication adapter.'; - } elseif ($this->credentialColumn == '') { - $exception = 'A credential column must be supplied for the DbTable authentication adapter.'; - } elseif ($this->identity == '') { - $exception = 'A value for the identity was not provided prior to authentication with DbTable.'; - } elseif ($this->credential === null) { - $exception = 'A credential value was not provided prior to authentication with DbTable.'; - } - - if (null !== $exception) { - throw new Exception\RuntimeException($exception); - } - - $this->authenticateResultInfo = array( - 'code' => AuthenticationResult::FAILURE, - 'identity' => $this->identity, - 'messages' => array() - ); - - return true; - } - - /** - * _authenticateQuerySelect() - This method accepts a Zend\Db\Sql\Select object and - * performs a query against the database with that object. - * - * @param Sql\Select $dbSelect - * @throws Exception\RuntimeException when an invalid select object is encountered - * @return array - */ - protected function authenticateQuerySelect(Sql\Select $dbSelect) - { - $sql = new Sql\Sql($this->zendDb); - $statement = $sql->prepareStatementForSqlObject($dbSelect); - try { - $result = $statement->execute(); - $resultIdentities = array(); - // iterate result, most cross platform way - foreach ($result as $row) { - // ZF-6428 - account for db engines that by default return uppercase column names - if (isset($row['ZEND_AUTH_CREDENTIAL_MATCH'])) { - $row['zend_auth_credential_match'] = $row['ZEND_AUTH_CREDENTIAL_MATCH']; - unset($row['ZEND_AUTH_CREDENTIAL_MATCH']); - } - $resultIdentities[] = $row; - } - } catch (\Exception $e) { - throw new Exception\RuntimeException( - 'The supplied parameters to DbTable failed to ' - . 'produce a valid sql statement, please check table and column names ' - . 'for validity.', - 0, - $e - ); - } - return $resultIdentities; - } - - /** - * _authenticateValidateResultSet() - This method attempts to make - * certain that only one record was returned in the resultset - * - * @param array $resultIdentities - * @return bool|\Zend\Authentication\Result - */ - protected function authenticateValidateResultSet(array $resultIdentities) - { - if (count($resultIdentities) < 1) { - $this->authenticateResultInfo['code'] = AuthenticationResult::FAILURE_IDENTITY_NOT_FOUND; - $this->authenticateResultInfo['messages'][] = 'A record with the supplied identity could not be found.'; - return $this->authenticateCreateAuthResult(); - } elseif (count($resultIdentities) > 1 && false === $this->getAmbiguityIdentity()) { - $this->authenticateResultInfo['code'] = AuthenticationResult::FAILURE_IDENTITY_AMBIGUOUS; - $this->authenticateResultInfo['messages'][] = 'More than one record matches the supplied identity.'; - return $this->authenticateCreateAuthResult(); - } - - return true; - } - - /** - * Creates a Zend\Authentication\Result object from the information that - * has been collected during the authenticate() attempt. - * - * @return AuthenticationResult - */ - protected function authenticateCreateAuthResult() - { - return new AuthenticationResult( - $this->authenticateResultInfo['code'], - $this->authenticateResultInfo['identity'], - $this->authenticateResultInfo['messages'] - ); - } -} diff --git a/library/Zend/Authentication/Adapter/DbTable/CallbackCheckAdapter.php b/library/Zend/Authentication/Adapter/DbTable/CallbackCheckAdapter.php deleted file mode 100755 index d585e353e..000000000 --- a/library/Zend/Authentication/Adapter/DbTable/CallbackCheckAdapter.php +++ /dev/null @@ -1,117 +0,0 @@ -setCredentialValidationCallback($credentialValidationCallback); - } else { - $this->setCredentialValidationCallback(function ($a, $b) { - return $a === $b; - }); - } - } - - /** - * setCredentialValidationCallback() - allows the developer to use a callback as a way of checking the - * credential. - * - * @param callable $validationCallback - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setCredentialValidationCallback($validationCallback) - { - if (!is_callable($validationCallback)) { - throw new Exception\InvalidArgumentException('Invalid callback provided'); - } - $this->credentialValidationCallback = $validationCallback; - return $this; - } - - /** - * _authenticateCreateSelect() - This method creates a Zend\Db\Sql\Select object that - * is completely configured to be queried against the database. - * - * @return Sql\Select - */ - protected function authenticateCreateSelect() - { - // get select - $dbSelect = clone $this->getDbSelect(); - $dbSelect->from($this->tableName) - ->columns(array(Sql\Select::SQL_STAR)) - ->where(new SqlOp($this->identityColumn, '=', $this->identity)); - - return $dbSelect; - } - - /** - * _authenticateValidateResult() - This method attempts to validate that - * the record in the resultset is indeed a record that matched the - * identity provided to this adapter. - * - * @param array $resultIdentity - * @return AuthenticationResult - */ - protected function authenticateValidateResult($resultIdentity) - { - try { - $callbackResult = call_user_func($this->credentialValidationCallback, $resultIdentity[$this->credentialColumn], $this->credential); - } catch (\Exception $e) { - $this->authenticateResultInfo['code'] = AuthenticationResult::FAILURE_UNCATEGORIZED; - $this->authenticateResultInfo['messages'][] = $e->getMessage(); - return $this->authenticateCreateAuthResult(); - } - if ($callbackResult !== true) { - $this->authenticateResultInfo['code'] = AuthenticationResult::FAILURE_CREDENTIAL_INVALID; - $this->authenticateResultInfo['messages'][] = 'Supplied credential is invalid.'; - return $this->authenticateCreateAuthResult(); - } - - $this->resultRow = $resultIdentity; - - $this->authenticateResultInfo['code'] = AuthenticationResult::SUCCESS; - $this->authenticateResultInfo['messages'][] = 'Authentication successful.'; - return $this->authenticateCreateAuthResult(); - } -} diff --git a/library/Zend/Authentication/Adapter/DbTable/CredentialTreatmentAdapter.php b/library/Zend/Authentication/Adapter/DbTable/CredentialTreatmentAdapter.php deleted file mode 100755 index b31cc5f74..000000000 --- a/library/Zend/Authentication/Adapter/DbTable/CredentialTreatmentAdapter.php +++ /dev/null @@ -1,124 +0,0 @@ -setCredentialTreatment($credentialTreatment); - } - } - - /** - * setCredentialTreatment() - allows the developer to pass a parametrized string that is - * used to transform or treat the input credential data. - * - * In many cases, passwords and other sensitive data are encrypted, hashed, encoded, - * obscured, or otherwise treated through some function or algorithm. By specifying a - * parametrized treatment string with this method, a developer may apply arbitrary SQL - * upon input credential data. - * - * Examples: - * - * 'PASSWORD(?)' - * 'MD5(?)' - * - * @param string $treatment - * @return self Provides a fluent interface - */ - public function setCredentialTreatment($treatment) - { - $this->credentialTreatment = $treatment; - return $this; - } - - /** - * _authenticateCreateSelect() - This method creates a Zend\Db\Sql\Select object that - * is completely configured to be queried against the database. - * - * @return Sql\Select - */ - protected function authenticateCreateSelect() - { - // build credential expression - if (empty($this->credentialTreatment) || (strpos($this->credentialTreatment, '?') === false)) { - $this->credentialTreatment = '?'; - } - - $credentialExpression = new SqlExpr( - '(CASE WHEN ?' . ' = ' . $this->credentialTreatment . ' THEN 1 ELSE 0 END) AS ?', - array($this->credentialColumn, $this->credential, 'zend_auth_credential_match'), - array(SqlExpr::TYPE_IDENTIFIER, SqlExpr::TYPE_VALUE, SqlExpr::TYPE_IDENTIFIER) - ); - - // get select - $dbSelect = clone $this->getDbSelect(); - $dbSelect->from($this->tableName) - ->columns(array('*', $credentialExpression)) - ->where(new SqlOp($this->identityColumn, '=', $this->identity)); - - return $dbSelect; - } - - /** - * _authenticateValidateResult() - This method attempts to validate that - * the record in the resultset is indeed a record that matched the - * identity provided to this adapter. - * - * @param array $resultIdentity - * @return AuthenticationResult - */ - protected function authenticateValidateResult($resultIdentity) - { - if ($resultIdentity['zend_auth_credential_match'] != '1') { - $this->authenticateResultInfo['code'] = AuthenticationResult::FAILURE_CREDENTIAL_INVALID; - $this->authenticateResultInfo['messages'][] = 'Supplied credential is invalid.'; - return $this->authenticateCreateAuthResult(); - } - - unset($resultIdentity['zend_auth_credential_match']); - $this->resultRow = $resultIdentity; - - $this->authenticateResultInfo['code'] = AuthenticationResult::SUCCESS; - $this->authenticateResultInfo['messages'][] = 'Authentication successful.'; - return $this->authenticateCreateAuthResult(); - } -} diff --git a/library/Zend/Authentication/Adapter/DbTable/Exception/ExceptionInterface.php b/library/Zend/Authentication/Adapter/DbTable/Exception/ExceptionInterface.php deleted file mode 100755 index 5365808fc..000000000 --- a/library/Zend/Authentication/Adapter/DbTable/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -setFilename($filename); - } - if ($realm !== null) { - $this->setRealm($realm); - } - if ($identity !== null) { - $this->setIdentity($identity); - } - if ($credential !== null) { - $this->setCredential($credential); - } - } - - /** - * Returns the filename option value or null if it has not yet been set - * - * @return string|null - */ - public function getFilename() - { - return $this->filename; - } - - /** - * Sets the filename option value - * - * @param mixed $filename - * @return Digest Provides a fluent interface - */ - public function setFilename($filename) - { - $this->filename = (string) $filename; - return $this; - } - - /** - * Returns the realm option value or null if it has not yet been set - * - * @return string|null - */ - public function getRealm() - { - return $this->realm; - } - - /** - * Sets the realm option value - * - * @param mixed $realm - * @return Digest Provides a fluent interface - */ - public function setRealm($realm) - { - $this->realm = (string) $realm; - return $this; - } - - /** - * Returns the username option value or null if it has not yet been set - * - * @return string|null - */ - public function getUsername() - { - return $this->getIdentity(); - } - - /** - * Sets the username option value - * - * @param mixed $username - * @return Digest Provides a fluent interface - */ - public function setUsername($username) - { - return $this->setIdentity($username); - } - - /** - * Returns the password option value or null if it has not yet been set - * - * @return string|null - */ - public function getPassword() - { - return $this->getCredential(); - } - - /** - * Sets the password option value - * - * @param mixed $password - * @return Digest Provides a fluent interface - */ - public function setPassword($password) - { - return $this->setCredential($password); - } - - /** - * Defined by Zend\Authentication\Adapter\AdapterInterface - * - * @throws Exception\ExceptionInterface - * @return AuthenticationResult - */ - public function authenticate() - { - $optionsRequired = array('filename', 'realm', 'identity', 'credential'); - foreach ($optionsRequired as $optionRequired) { - if (null === $this->$optionRequired) { - throw new Exception\RuntimeException("Option '$optionRequired' must be set before authentication"); - } - } - - ErrorHandler::start(E_WARNING); - $fileHandle = fopen($this->filename, 'r'); - $error = ErrorHandler::stop(); - if (false === $fileHandle) { - throw new Exception\UnexpectedValueException("Cannot open '$this->filename' for reading", 0, $error); - } - - $id = "$this->identity:$this->realm"; - $idLength = strlen($id); - - $result = array( - 'code' => AuthenticationResult::FAILURE, - 'identity' => array( - 'realm' => $this->realm, - 'username' => $this->identity, - ), - 'messages' => array() - ); - - while (($line = fgets($fileHandle)) !== false) { - $line = trim($line); - if (empty($line)) { - break; - } - if (substr($line, 0, $idLength) === $id) { - if (CryptUtils::compareStrings(substr($line, -32), md5("$this->identity:$this->realm:$this->credential"))) { - return new AuthenticationResult(AuthenticationResult::SUCCESS, $result['identity'], $result['messages']); - } - $result['messages'][] = 'Password incorrect'; - return new AuthenticationResult(AuthenticationResult::FAILURE_CREDENTIAL_INVALID, $result['identity'], $result['messages']); - } - } - - $result['messages'][] = "Username '$this->identity' and realm '$this->realm' combination not found"; - return new AuthenticationResult(AuthenticationResult::FAILURE_IDENTITY_NOT_FOUND, $result['identity'], $result['messages']); - } -} diff --git a/library/Zend/Authentication/Adapter/Exception/ExceptionInterface.php b/library/Zend/Authentication/Adapter/Exception/ExceptionInterface.php deleted file mode 100755 index 4c9b9d4be..000000000 --- a/library/Zend/Authentication/Adapter/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ - 'basic'|'digest'|'basic digest' - * 'realm' => - * 'digest_domains' => Space-delimited list of URIs - * 'nonce_timeout' => - * 'use_opaque' => Whether to send the opaque value in the header - * 'algorithm' => See $supportedAlgos. Default: MD5 - * 'proxy_auth' => Whether to do authentication as a Proxy - * @throws Exception\InvalidArgumentException - */ - public function __construct(array $config) - { - $this->request = null; - $this->response = null; - $this->ieNoOpaque = false; - - if (empty($config['accept_schemes'])) { - throw new Exception\InvalidArgumentException('Config key "accept_schemes" is required'); - } - - $schemes = explode(' ', $config['accept_schemes']); - $this->acceptSchemes = array_intersect($schemes, $this->supportedSchemes); - if (empty($this->acceptSchemes)) { - throw new Exception\InvalidArgumentException(sprintf( - 'No supported schemes given in "accept_schemes". Valid values: %s', - implode(', ', $this->supportedSchemes) - )); - } - - // Double-quotes are used to delimit the realm string in the HTTP header, - // and colons are field delimiters in the password file. - if (empty($config['realm']) || - !ctype_print($config['realm']) || - strpos($config['realm'], ':') !== false || - strpos($config['realm'], '"') !== false) { - throw new Exception\InvalidArgumentException( - 'Config key \'realm\' is required, and must contain only printable characters,' - . 'excluding quotation marks and colons' - ); - } else { - $this->realm = $config['realm']; - } - - if (in_array('digest', $this->acceptSchemes)) { - if (empty($config['digest_domains']) || - !ctype_print($config['digest_domains']) || - strpos($config['digest_domains'], '"') !== false) { - throw new Exception\InvalidArgumentException( - 'Config key \'digest_domains\' is required, and must contain ' - . 'only printable characters, excluding quotation marks' - ); - } else { - $this->domains = $config['digest_domains']; - } - - if (empty($config['nonce_timeout']) || - !is_numeric($config['nonce_timeout'])) { - throw new Exception\InvalidArgumentException( - 'Config key \'nonce_timeout\' is required, and must be an integer' - ); - } else { - $this->nonceTimeout = (int) $config['nonce_timeout']; - } - - // We use the opaque value unless explicitly told not to - if (isset($config['use_opaque']) && false == (bool) $config['use_opaque']) { - $this->useOpaque = false; - } else { - $this->useOpaque = true; - } - - if (isset($config['algorithm']) && in_array($config['algorithm'], $this->supportedAlgos)) { - $this->algo = $config['algorithm']; - } else { - $this->algo = 'MD5'; - } - } - - // Don't be a proxy unless explicitly told to do so - if (isset($config['proxy_auth']) && true == (bool) $config['proxy_auth']) { - $this->imaProxy = true; // I'm a Proxy - } else { - $this->imaProxy = false; - } - } - - /** - * Setter for the basicResolver property - * - * @param Http\ResolverInterface $resolver - * @return Http Provides a fluent interface - */ - public function setBasicResolver(Http\ResolverInterface $resolver) - { - $this->basicResolver = $resolver; - - return $this; - } - - /** - * Getter for the basicResolver property - * - * @return Http\ResolverInterface - */ - public function getBasicResolver() - { - return $this->basicResolver; - } - - /** - * Setter for the digestResolver property - * - * @param Http\ResolverInterface $resolver - * @return Http Provides a fluent interface - */ - public function setDigestResolver(Http\ResolverInterface $resolver) - { - $this->digestResolver = $resolver; - - return $this; - } - - /** - * Getter for the digestResolver property - * - * @return Http\ResolverInterface - */ - public function getDigestResolver() - { - return $this->digestResolver; - } - - /** - * Setter for the Request object - * - * @param HTTPRequest $request - * @return Http Provides a fluent interface - */ - public function setRequest(HTTPRequest $request) - { - $this->request = $request; - - return $this; - } - - /** - * Getter for the Request object - * - * @return HTTPRequest - */ - public function getRequest() - { - return $this->request; - } - - /** - * Setter for the Response object - * - * @param HTTPResponse $response - * @return Http Provides a fluent interface - */ - public function setResponse(HTTPResponse $response) - { - $this->response = $response; - - return $this; - } - - /** - * Getter for the Response object - * - * @return HTTPResponse - */ - public function getResponse() - { - return $this->response; - } - - /** - * Authenticate - * - * @throws Exception\RuntimeException - * @return Authentication\Result - */ - public function authenticate() - { - if (empty($this->request) || empty($this->response)) { - throw new Exception\RuntimeException( - 'Request and Response objects must be set before calling authenticate()' - ); - } - - if ($this->imaProxy) { - $getHeader = 'Proxy-Authorization'; - } else { - $getHeader = 'Authorization'; - } - - $headers = $this->request->getHeaders(); - if (!$headers->has($getHeader)) { - return $this->challengeClient(); - } - $authHeader = $headers->get($getHeader)->getFieldValue(); - if (!$authHeader) { - return $this->challengeClient(); - } - - list($clientScheme) = explode(' ', $authHeader); - $clientScheme = strtolower($clientScheme); - - // The server can issue multiple challenges, but the client should - // answer with only the selected auth scheme. - if (!in_array($clientScheme, $this->supportedSchemes)) { - $this->response->setStatusCode(400); - return new Authentication\Result( - Authentication\Result::FAILURE_UNCATEGORIZED, - array(), - array('Client requested an incorrect or unsupported authentication scheme') - ); - } - - // client sent a scheme that is not the one required - if (!in_array($clientScheme, $this->acceptSchemes)) { - // challenge again the client - return $this->challengeClient(); - } - - switch ($clientScheme) { - case 'basic': - $result = $this->_basicAuth($authHeader); - break; - case 'digest': - $result = $this->_digestAuth($authHeader); - break; - default: - throw new Exception\RuntimeException('Unsupported authentication scheme: ' . $clientScheme); - } - - return $result; - } - - /** - * @deprecated - * @see Http::challengeClient() - * @return Authentication\Result Always returns a non-identity Auth result - */ - protected function _challengeClient() - { - trigger_error(sprintf( - 'The method "%s" is deprecated and will be removed in the future; ' - . 'please use the public method "%s::challengeClient()" instead', - __METHOD__, - __CLASS__ - ), E_USER_DEPRECATED); - - return $this->challengeClient(); - } - - /** - * Challenge Client - * - * Sets a 401 or 407 Unauthorized response code, and creates the - * appropriate Authenticate header(s) to prompt for credentials. - * - * @return Authentication\Result Always returns a non-identity Auth result - */ - public function challengeClient() - { - if ($this->imaProxy) { - $statusCode = 407; - $headerName = 'Proxy-Authenticate'; - } else { - $statusCode = 401; - $headerName = 'WWW-Authenticate'; - } - - $this->response->setStatusCode($statusCode); - - // Send a challenge in each acceptable authentication scheme - $headers = $this->response->getHeaders(); - if (in_array('basic', $this->acceptSchemes)) { - $headers->addHeaderLine($headerName, $this->_basicHeader()); - } - if (in_array('digest', $this->acceptSchemes)) { - $headers->addHeaderLine($headerName, $this->_digestHeader()); - } - return new Authentication\Result( - Authentication\Result::FAILURE_CREDENTIAL_INVALID, - array(), - array('Invalid or absent credentials; challenging client') - ); - } - - /** - * Basic Header - * - * Generates a Proxy- or WWW-Authenticate header value in the Basic - * authentication scheme. - * - * @return string Authenticate header value - */ - protected function _basicHeader() - { - return 'Basic realm="' . $this->realm . '"'; - } - - /** - * Digest Header - * - * Generates a Proxy- or WWW-Authenticate header value in the Digest - * authentication scheme. - * - * @return string Authenticate header value - */ - protected function _digestHeader() - { - $wwwauth = 'Digest realm="' . $this->realm . '", ' - . 'domain="' . $this->domains . '", ' - . 'nonce="' . $this->_calcNonce() . '", ' - . ($this->useOpaque ? 'opaque="' . $this->_calcOpaque() . '", ' : '') - . 'algorithm="' . $this->algo . '", ' - . 'qop="' . implode(',', $this->supportedQops) . '"'; - - return $wwwauth; - } - - /** - * Basic Authentication - * - * @param string $header Client's Authorization header - * @throws Exception\ExceptionInterface - * @return Authentication\Result - */ - protected function _basicAuth($header) - { - if (empty($header)) { - throw new Exception\RuntimeException('The value of the client Authorization header is required'); - } - if (empty($this->basicResolver)) { - throw new Exception\RuntimeException( - 'A basicResolver object must be set before doing Basic authentication' - ); - } - - // Decode the Authorization header - $auth = substr($header, strlen('Basic ')); - $auth = base64_decode($auth); - if (!$auth) { - throw new Exception\RuntimeException('Unable to base64_decode Authorization header value'); - } - - // See ZF-1253. Validate the credentials the same way the digest - // implementation does. If invalid credentials are detected, - // re-challenge the client. - if (!ctype_print($auth)) { - return $this->challengeClient(); - } - // Fix for ZF-1515: Now re-challenges on empty username or password - $creds = array_filter(explode(':', $auth)); - if (count($creds) != 2) { - return $this->challengeClient(); - } - - $result = $this->basicResolver->resolve($creds[0], $this->realm, $creds[1]); - - if ($result instanceof Authentication\Result && $result->isValid()) { - return $result; - } - - if (!$result instanceof Authentication\Result - && !is_array($result) - && CryptUtils::compareStrings($result, $creds[1]) - ) { - $identity = array('username' => $creds[0], 'realm' => $this->realm); - return new Authentication\Result(Authentication\Result::SUCCESS, $identity); - } elseif (is_array($result)) { - return new Authentication\Result(Authentication\Result::SUCCESS, $result); - } - - return $this->challengeClient(); - } - - /** - * Digest Authentication - * - * @param string $header Client's Authorization header - * @throws Exception\ExceptionInterface - * @return Authentication\Result Valid auth result only on successful auth - */ - protected function _digestAuth($header) - { - if (empty($header)) { - throw new Exception\RuntimeException('The value of the client Authorization header is required'); - } - if (empty($this->digestResolver)) { - throw new Exception\RuntimeException('A digestResolver object must be set before doing Digest authentication'); - } - - $data = $this->_parseDigestAuth($header); - if ($data === false) { - $this->response->setStatusCode(400); - return new Authentication\Result( - Authentication\Result::FAILURE_UNCATEGORIZED, - array(), - array('Invalid Authorization header format') - ); - } - - // See ZF-1052. This code was a bit too unforgiving of invalid - // usernames. Now, if the username is bad, we re-challenge the client. - if ('::invalid::' == $data['username']) { - return $this->challengeClient(); - } - - // Verify that the client sent back the same nonce - if ($this->_calcNonce() != $data['nonce']) { - return $this->challengeClient(); - } - // The opaque value is also required to match, but of course IE doesn't - // play ball. - if (!$this->ieNoOpaque && $this->_calcOpaque() != $data['opaque']) { - return $this->challengeClient(); - } - - // Look up the user's password hash. If not found, deny access. - // This makes no assumptions about how the password hash was - // constructed beyond that it must have been built in such a way as - // to be recreatable with the current settings of this object. - $ha1 = $this->digestResolver->resolve($data['username'], $data['realm']); - if ($ha1 === false) { - return $this->challengeClient(); - } - - // If MD5-sess is used, a1 value is made of the user's password - // hash with the server and client nonce appended, separated by - // colons. - if ($this->algo == 'MD5-sess') { - $ha1 = hash('md5', $ha1 . ':' . $data['nonce'] . ':' . $data['cnonce']); - } - - // Calculate h(a2). The value of this hash depends on the qop - // option selected by the client and the supported hash functions - switch ($data['qop']) { - case 'auth': - $a2 = $this->request->getMethod() . ':' . $data['uri']; - break; - case 'auth-int': - // Should be REQUEST_METHOD . ':' . uri . ':' . hash(entity-body), - // but this isn't supported yet, so fall through to default case - default: - throw new Exception\RuntimeException('Client requested an unsupported qop option'); - } - // Using hash() should make parameterizing the hash algorithm - // easier - $ha2 = hash('md5', $a2); - - // Calculate the server's version of the request-digest. This must - // match $data['response']. See RFC 2617, section 3.2.2.1 - $message = $data['nonce'] . ':' . $data['nc'] . ':' . $data['cnonce'] . ':' . $data['qop'] . ':' . $ha2; - $digest = hash('md5', $ha1 . ':' . $message); - - // If our digest matches the client's let them in, otherwise return - // a 401 code and exit to prevent access to the protected resource. - if (CryptUtils::compareStrings($digest, $data['response'])) { - $identity = array('username' => $data['username'], 'realm' => $data['realm']); - return new Authentication\Result(Authentication\Result::SUCCESS, $identity); - } - - return $this->challengeClient(); - } - - /** - * Calculate Nonce - * - * @return string The nonce value - */ - protected function _calcNonce() - { - // Once subtle consequence of this timeout calculation is that it - // actually divides all of time into nonceTimeout-sized sections, such - // that the value of timeout is the point in time of the next - // approaching "boundary" of a section. This allows the server to - // consistently generate the same timeout (and hence the same nonce - // value) across requests, but only as long as one of those - // "boundaries" is not crossed between requests. If that happens, the - // nonce will change on its own, and effectively log the user out. This - // would be surprising if the user just logged in. - $timeout = ceil(time() / $this->nonceTimeout) * $this->nonceTimeout; - - $userAgentHeader = $this->request->getHeaders()->get('User-Agent'); - if ($userAgentHeader) { - $userAgent = $userAgentHeader->getFieldValue(); - } elseif (isset($_SERVER['HTTP_USER_AGENT'])) { - $userAgent = $_SERVER['HTTP_USER_AGENT']; - } else { - $userAgent = 'Zend_Authenticaion'; - } - $nonce = hash('md5', $timeout . ':' . $userAgent . ':' . __CLASS__); - return $nonce; - } - - /** - * Calculate Opaque - * - * The opaque string can be anything; the client must return it exactly as - * it was sent. It may be useful to store data in this string in some - * applications. Ideally, a new value for this would be generated each time - * a WWW-Authenticate header is sent (in order to reduce predictability), - * but we would have to be able to create the same exact value across at - * least two separate requests from the same client. - * - * @return string The opaque value - */ - protected function _calcOpaque() - { - return hash('md5', 'Opaque Data:' . __CLASS__); - } - - /** - * Parse Digest Authorization header - * - * @param string $header Client's Authorization: HTTP header - * @return array|bool Data elements from header, or false if any part of - * the header is invalid - */ - protected function _parseDigestAuth($header) - { - $temp = null; - $data = array(); - - // See ZF-1052. Detect invalid usernames instead of just returning a - // 400 code. - $ret = preg_match('/username="([^"]+)"/', $header, $temp); - if (!$ret || empty($temp[1]) - || !ctype_print($temp[1]) - || strpos($temp[1], ':') !== false) { - $data['username'] = '::invalid::'; - } else { - $data['username'] = $temp[1]; - } - $temp = null; - - $ret = preg_match('/realm="([^"]+)"/', $header, $temp); - if (!$ret || empty($temp[1])) { - return false; - } - if (!ctype_print($temp[1]) || strpos($temp[1], ':') !== false) { - return false; - } else { - $data['realm'] = $temp[1]; - } - $temp = null; - - $ret = preg_match('/nonce="([^"]+)"/', $header, $temp); - if (!$ret || empty($temp[1])) { - return false; - } - if (!ctype_xdigit($temp[1])) { - return false; - } - - $data['nonce'] = $temp[1]; - $temp = null; - - $ret = preg_match('/uri="([^"]+)"/', $header, $temp); - if (!$ret || empty($temp[1])) { - return false; - } - // Section 3.2.2.5 in RFC 2617 says the authenticating server must - // verify that the URI field in the Authorization header is for the - // same resource requested in the Request Line. - $rUri = $this->request->getUri(); - $cUri = UriFactory::factory($temp[1]); - - // Make sure the path portion of both URIs is the same - if ($rUri->getPath() != $cUri->getPath()) { - return false; - } - - // Section 3.2.2.5 seems to suggest that the value of the URI - // Authorization field should be made into an absolute URI if the - // Request URI is absolute, but it's vague, and that's a bunch of - // code I don't want to write right now. - $data['uri'] = $temp[1]; - $temp = null; - - $ret = preg_match('/response="([^"]+)"/', $header, $temp); - if (!$ret || empty($temp[1])) { - return false; - } - if (32 != strlen($temp[1]) || !ctype_xdigit($temp[1])) { - return false; - } - - $data['response'] = $temp[1]; - $temp = null; - - // The spec says this should default to MD5 if omitted. OK, so how does - // that square with the algo we send out in the WWW-Authenticate header, - // if it can easily be overridden by the client? - $ret = preg_match('/algorithm="?(' . $this->algo . ')"?/', $header, $temp); - if ($ret && !empty($temp[1]) - && in_array($temp[1], $this->supportedAlgos)) { - $data['algorithm'] = $temp[1]; - } else { - $data['algorithm'] = 'MD5'; // = $this->algo; ? - } - $temp = null; - - // Not optional in this implementation - $ret = preg_match('/cnonce="([^"]+)"/', $header, $temp); - if (!$ret || empty($temp[1])) { - return false; - } - if (!ctype_print($temp[1])) { - return false; - } - - $data['cnonce'] = $temp[1]; - $temp = null; - - // If the server sent an opaque value, the client must send it back - if ($this->useOpaque) { - $ret = preg_match('/opaque="([^"]+)"/', $header, $temp); - if (!$ret || empty($temp[1])) { - // Big surprise: IE isn't RFC 2617-compliant. - $headers = $this->request->getHeaders(); - if (!$headers->has('User-Agent')) { - return false; - } - $userAgent = $headers->get('User-Agent')->getFieldValue(); - if (false === strpos($userAgent, 'MSIE')) { - return false; - } - - $temp[1] = ''; - $this->ieNoOpaque = true; - } - - // This implementation only sends MD5 hex strings in the opaque value - if (!$this->ieNoOpaque && - (32 != strlen($temp[1]) || !ctype_xdigit($temp[1]))) { - return false; - } - - $data['opaque'] = $temp[1]; - $temp = null; - } - - // Not optional in this implementation, but must be one of the supported - // qop types - $ret = preg_match('/qop="?(' . implode('|', $this->supportedQops) . ')"?/', $header, $temp); - if (!$ret || empty($temp[1])) { - return false; - } - if (!in_array($temp[1], $this->supportedQops)) { - return false; - } - - $data['qop'] = $temp[1]; - $temp = null; - - // Not optional in this implementation. The spec says this value - // shouldn't be a quoted string, but apparently some implementations - // quote it anyway. See ZF-1544. - $ret = preg_match('/nc="?([0-9A-Fa-f]{8})"?/', $header, $temp); - if (!$ret || empty($temp[1])) { - return false; - } - if (8 != strlen($temp[1]) || !ctype_xdigit($temp[1])) { - return false; - } - - $data['nc'] = $temp[1]; - $temp = null; - - return $data; - } -} diff --git a/library/Zend/Authentication/Adapter/Http/ApacheResolver.php b/library/Zend/Authentication/Adapter/Http/ApacheResolver.php deleted file mode 100755 index a7b8b3d6d..000000000 --- a/library/Zend/Authentication/Adapter/Http/ApacheResolver.php +++ /dev/null @@ -1,171 +0,0 @@ -setFile($path); - } - } - - /** - * Set the path to the credentials file - * - * @param string $path - * @return self Provides a fluent interface - * @throws Exception\InvalidArgumentException if path is not readable - */ - public function setFile($path) - { - if (empty($path) || !is_readable($path)) { - throw new Exception\InvalidArgumentException('Path not readable: ' . $path); - } - $this->file = $path; - - return $this; - } - - /** - * Returns the path to the credentials file - * - * @return string - */ - public function getFile() - { - return $this->file; - } - - /** - * Returns the Apache Password object - * - * @return ApachePassword - */ - protected function getApachePassword() - { - if (empty($this->apachePassword)) { - $this->apachePassword = new ApachePassword(); - } - return $this->apachePassword; - } - - /** - * Resolve credentials - * - * - * - * @param string $username Username - * @param string $realm Authentication Realm - * @param string $password The password to authenticate - * @return AuthResult - * @throws Exception\ExceptionInterface - */ - public function resolve($username, $realm, $password = null) - { - if (empty($username)) { - throw new Exception\InvalidArgumentException('Username is required'); - } - - if (!ctype_print($username) || strpos($username, ':') !== false) { - throw new Exception\InvalidArgumentException( - 'Username must consist only of printable characters, excluding the colon' - ); - } - - if (!empty($realm) && (!ctype_print($realm) || strpos($realm, ':') !== false)) { - throw new Exception\InvalidArgumentException( - 'Realm must consist only of printable characters, excluding the colon' - ); - } - - if (empty($password)) { - throw new Exception\InvalidArgumentException('Password is required'); - } - - // Open file, read through looking for matching credentials - ErrorHandler::start(E_WARNING); - $fp = fopen($this->file, 'r'); - $error = ErrorHandler::stop(); - if (!$fp) { - throw new Exception\RuntimeException('Unable to open password file: ' . $this->file, 0, $error); - } - - // No real validation is done on the contents of the password file. The - // assumption is that we trust the administrators to keep it secure. - while (($line = fgetcsv($fp, 512, ':')) !== false) { - if ($line[0] != $username) { - continue; - } - - if (isset($line[2])) { - if ($line[1] == $realm) { - $matchedHash = $line[2]; - break; - } - continue; - } - - $matchedHash = $line[1]; - break; - } - fclose($fp); - - if (!isset($matchedHash)) { - return new AuthResult(AuthResult::FAILURE_IDENTITY_NOT_FOUND, null, array('Username not found in provided htpasswd file')); - } - - // Plaintext password - if ($matchedHash === $password) { - return new AuthResult(AuthResult::SUCCESS, $username); - } - - $apache = $this->getApachePassword(); - $apache->setUserName($username); - if (!empty($realm)) { - $apache->setAuthName($realm); - } - - if ($apache->verify($password, $matchedHash)) { - return new AuthResult(AuthResult::SUCCESS, $username); - } - - return new AuthResult(AuthResult::FAILURE_CREDENTIAL_INVALID, null, array('Passwords did not match.')); - } -} diff --git a/library/Zend/Authentication/Adapter/Http/Exception/ExceptionInterface.php b/library/Zend/Authentication/Adapter/Http/Exception/ExceptionInterface.php deleted file mode 100755 index 4ec6a3f7c..000000000 --- a/library/Zend/Authentication/Adapter/Http/Exception/ExceptionInterface.php +++ /dev/null @@ -1,19 +0,0 @@ -setFile($path); - } - } - - /** - * Set the path to the credentials file - * - * @param string $path - * @return FileResolver Provides a fluent interface - * @throws Exception\InvalidArgumentException if path is not readable - */ - public function setFile($path) - { - if (empty($path) || !is_readable($path)) { - throw new Exception\InvalidArgumentException('Path not readable: ' . $path); - } - $this->file = $path; - - return $this; - } - - /** - * Returns the path to the credentials file - * - * @return string - */ - public function getFile() - { - return $this->file; - } - - /** - * Resolve credentials - * - * Only the first matching username/realm combination in the file is - * returned. If the file contains credentials for Digest authentication, - * the returned string is the password hash, or h(a1) from RFC 2617. The - * returned string is the plain-text password for Basic authentication. - * - * The expected format of the file is: - * username:realm:sharedSecret - * - * That is, each line consists of the user's username, the applicable - * authentication realm, and the password or hash, each delimited by - * colons. - * - * @param string $username Username - * @param string $realm Authentication Realm - * @return string|false User's shared secret, if the user is found in the - * realm, false otherwise. - * @throws Exception\ExceptionInterface - */ - public function resolve($username, $realm, $password = null) - { - if (empty($username)) { - throw new Exception\InvalidArgumentException('Username is required'); - } elseif (!ctype_print($username) || strpos($username, ':') !== false) { - throw new Exception\InvalidArgumentException( - 'Username must consist only of printable characters, excluding the colon' - ); - } - if (empty($realm)) { - throw new Exception\InvalidArgumentException('Realm is required'); - } elseif (!ctype_print($realm) || strpos($realm, ':') !== false) { - throw new Exception\InvalidArgumentException( - 'Realm must consist only of printable characters, excluding the colon.' - ); - } - - // Open file, read through looking for matching credentials - ErrorHandler::start(E_WARNING); - $fp = fopen($this->file, 'r'); - $error = ErrorHandler::stop(); - if (!$fp) { - throw new Exception\RuntimeException('Unable to open password file: ' . $this->file, 0, $error); - } - - // No real validation is done on the contents of the password file. The - // assumption is that we trust the administrators to keep it secure. - while (($line = fgetcsv($fp, 512, ':')) !== false) { - if ($line[0] == $username && $line[1] == $realm) { - $password = $line[2]; - fclose($fp); - return $password; - } - } - - fclose($fp); - return false; - } -} diff --git a/library/Zend/Authentication/Adapter/Http/ResolverInterface.php b/library/Zend/Authentication/Adapter/Http/ResolverInterface.php deleted file mode 100755 index b236f8458..000000000 --- a/library/Zend/Authentication/Adapter/Http/ResolverInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -setOptions($options); - if ($identity !== null) { - $this->setIdentity($identity); - } - if ($credential !== null) { - $this->setCredential($credential); - } - } - - /** - * Returns the array of arrays of Zend\Ldap\Ldap options of this adapter. - * - * @return array|null - */ - public function getOptions() - { - return $this->options; - } - - /** - * Sets the array of arrays of Zend\Ldap\Ldap options to be used by - * this adapter. - * - * @param array $options The array of arrays of Zend\Ldap\Ldap options - * @return Ldap Provides a fluent interface - */ - public function setOptions($options) - { - $this->options = is_array($options) ? $options : array(); - if (array_key_exists('identity', $this->options)) { - $this->options['username'] = $this->options['identity']; - } - if (array_key_exists('credential', $this->options)) { - $this->options['password'] = $this->options['credential']; - } - return $this; - } - - /** - * Returns the username of the account being authenticated, or - * NULL if none is set. - * - * @return string|null - */ - public function getUsername() - { - return $this->getIdentity(); - } - - /** - * Sets the username for binding - * - * @param string $username The username for binding - * @return Ldap Provides a fluent interface - */ - public function setUsername($username) - { - return $this->setIdentity($username); - } - - /** - * Returns the password of the account being authenticated, or - * NULL if none is set. - * - * @return string|null - */ - public function getPassword() - { - return $this->getCredential(); - } - - /** - * Sets the password for the account - * - * @param string $password The password of the account being authenticated - * @return Ldap Provides a fluent interface - */ - public function setPassword($password) - { - return $this->setCredential($password); - } - - /** - * Returns the LDAP Object - * - * @return ZendLdap\Ldap The Zend\Ldap\Ldap object used to authenticate the credentials - */ - public function getLdap() - { - if ($this->ldap === null) { - $this->ldap = new ZendLdap\Ldap(); - } - - return $this->ldap; - } - - /** - * Set an Ldap connection - * - * @param ZendLdap\Ldap $ldap An existing Ldap object - * @return Ldap Provides a fluent interface - */ - public function setLdap(ZendLdap\Ldap $ldap) - { - $this->ldap = $ldap; - - $this->setOptions(array($ldap->getOptions())); - - return $this; - } - - /** - * Returns a domain name for the current LDAP options. This is used - * for skipping redundant operations (e.g. authentications). - * - * @return string - */ - protected function getAuthorityName() - { - $options = $this->getLdap()->getOptions(); - $name = $options['accountDomainName']; - if (!$name) { - $name = $options['accountDomainNameShort']; - } - - return $name ? $name : ''; - } - - /** - * Authenticate the user - * - * @return AuthenticationResult - * @throws Exception\ExceptionInterface - */ - public function authenticate() - { - $messages = array(); - $messages[0] = ''; // reserved - $messages[1] = ''; // reserved - - $username = $this->identity; - $password = $this->credential; - - if (!$username) { - $code = AuthenticationResult::FAILURE_IDENTITY_NOT_FOUND; - $messages[0] = 'A username is required'; - return new AuthenticationResult($code, '', $messages); - } - if (!$password) { - /* A password is required because some servers will - * treat an empty password as an anonymous bind. - */ - $code = AuthenticationResult::FAILURE_CREDENTIAL_INVALID; - $messages[0] = 'A password is required'; - return new AuthenticationResult($code, '', $messages); - } - - $ldap = $this->getLdap(); - - $code = AuthenticationResult::FAILURE; - $messages[0] = "Authority not found: $username"; - $failedAuthorities = array(); - - /* Iterate through each server and try to authenticate the supplied - * credentials against it. - */ - foreach ($this->options as $options) { - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Adapter options array not an array'); - } - $adapterOptions = $this->prepareOptions($ldap, $options); - $dname = ''; - - try { - if ($messages[1]) { - $messages[] = $messages[1]; - } - - $messages[1] = ''; - $messages[] = $this->optionsToString($options); - - $dname = $this->getAuthorityName(); - if (isset($failedAuthorities[$dname])) { - /* If multiple sets of server options for the same domain - * are supplied, we want to skip redundant authentications - * where the identity or credentials where found to be - * invalid with another server for the same domain. The - * $failedAuthorities array tracks this condition (and also - * serves to supply the original error message). - * This fixes issue ZF-4093. - */ - $messages[1] = $failedAuthorities[$dname]; - $messages[] = "Skipping previously failed authority: $dname"; - continue; - } - - $canonicalName = $ldap->getCanonicalAccountName($username); - $ldap->bind($canonicalName, $password); - /* - * Fixes problem when authenticated user is not allowed to retrieve - * group-membership information or own account. - * This requires that the user specified with "username" and optionally - * "password" in the Zend\Ldap\Ldap options is able to retrieve the required - * information. - */ - $requireRebind = false; - if (isset($options['username'])) { - $ldap->bind(); - $requireRebind = true; - } - $dn = $ldap->getCanonicalAccountName($canonicalName, ZendLdap\Ldap::ACCTNAME_FORM_DN); - - $groupResult = $this->checkGroupMembership($ldap, $canonicalName, $dn, $adapterOptions); - if ($groupResult === true) { - $this->authenticatedDn = $dn; - $messages[0] = ''; - $messages[1] = ''; - $messages[] = "$canonicalName authentication successful"; - if ($requireRebind === true) { - // rebinding with authenticated user - $ldap->bind($dn, $password); - } - return new AuthenticationResult(AuthenticationResult::SUCCESS, $canonicalName, $messages); - } else { - $messages[0] = 'Account is not a member of the specified group'; - $messages[1] = $groupResult; - $failedAuthorities[$dname] = $groupResult; - } - } catch (LdapException $zle) { - /* LDAP based authentication is notoriously difficult to diagnose. Therefore - * we bend over backwards to capture and record every possible bit of - * information when something goes wrong. - */ - - $err = $zle->getCode(); - - if ($err == LdapException::LDAP_X_DOMAIN_MISMATCH) { - /* This error indicates that the domain supplied in the - * username did not match the domains in the server options - * and therefore we should just skip to the next set of - * server options. - */ - continue; - } elseif ($err == LdapException::LDAP_NO_SUCH_OBJECT) { - $code = AuthenticationResult::FAILURE_IDENTITY_NOT_FOUND; - $messages[0] = "Account not found: $username"; - $failedAuthorities[$dname] = $zle->getMessage(); - } elseif ($err == LdapException::LDAP_INVALID_CREDENTIALS) { - $code = AuthenticationResult::FAILURE_CREDENTIAL_INVALID; - $messages[0] = 'Invalid credentials'; - $failedAuthorities[$dname] = $zle->getMessage(); - } else { - $line = $zle->getLine(); - $messages[] = $zle->getFile() . "($line): " . $zle->getMessage(); - $messages[] = preg_replace( - '/\b'.preg_quote(substr($password, 0, 15), '/').'\b/', - '*****', - $zle->getTraceAsString() - ); - $messages[0] = 'An unexpected failure occurred'; - } - $messages[1] = $zle->getMessage(); - } - } - - $msg = isset($messages[1]) ? $messages[1] : $messages[0]; - $messages[] = "$username authentication failed: $msg"; - - return new AuthenticationResult($code, $username, $messages); - } - - /** - * Sets the LDAP specific options on the Zend\Ldap\Ldap instance - * - * @param ZendLdap\Ldap $ldap - * @param array $options - * @return array of auth-adapter specific options - */ - protected function prepareOptions(ZendLdap\Ldap $ldap, array $options) - { - $adapterOptions = array( - 'group' => null, - 'groupDn' => $ldap->getBaseDn(), - 'groupScope' => ZendLdap\Ldap::SEARCH_SCOPE_SUB, - 'groupAttr' => 'cn', - 'groupFilter' => 'objectClass=groupOfUniqueNames', - 'memberAttr' => 'uniqueMember', - 'memberIsDn' => true - ); - foreach ($adapterOptions as $key => $value) { - if (array_key_exists($key, $options)) { - $value = $options[$key]; - unset($options[$key]); - switch ($key) { - case 'groupScope': - $value = (int) $value; - if (in_array( - $value, - array( - ZendLdap\Ldap::SEARCH_SCOPE_BASE, - ZendLdap\Ldap::SEARCH_SCOPE_ONE, - ZendLdap\Ldap::SEARCH_SCOPE_SUB, - ), - true - )) { - $adapterOptions[$key] = $value; - } - break; - case 'memberIsDn': - $adapterOptions[$key] = ($value === true || - $value === '1' || strcasecmp($value, 'true') == 0); - break; - default: - $adapterOptions[$key] = trim($value); - break; - } - } - } - $ldap->setOptions($options); - return $adapterOptions; - } - - /** - * Checks the group membership of the bound user - * - * @param ZendLdap\Ldap $ldap - * @param string $canonicalName - * @param string $dn - * @param array $adapterOptions - * @return string|true - */ - protected function checkGroupMembership(ZendLdap\Ldap $ldap, $canonicalName, $dn, array $adapterOptions) - { - if ($adapterOptions['group'] === null) { - return true; - } - - if ($adapterOptions['memberIsDn'] === false) { - $user = $canonicalName; - } else { - $user = $dn; - } - - $groupName = ZendLdap\Filter::equals($adapterOptions['groupAttr'], $adapterOptions['group']); - $membership = ZendLdap\Filter::equals($adapterOptions['memberAttr'], $user); - $group = ZendLdap\Filter::andFilter($groupName, $membership); - $groupFilter = $adapterOptions['groupFilter']; - if (!empty($groupFilter)) { - $group = $group->addAnd($groupFilter); - } - - $result = $ldap->count($group, $adapterOptions['groupDn'], $adapterOptions['groupScope']); - - if ($result === 1) { - return true; - } - - return 'Failed to verify group membership with ' . $group->toString(); - } - - /** - * getAccountObject() - Returns the result entry as a stdClass object - * - * This resembles the feature {@see Zend\Authentication\Adapter\DbTable::getResultRowObject()}. - * Closes ZF-6813 - * - * @param array $returnAttribs - * @param array $omitAttribs - * @return stdClass|bool - */ - public function getAccountObject(array $returnAttribs = array(), array $omitAttribs = array()) - { - if (!$this->authenticatedDn) { - return false; - } - - $returnObject = new stdClass(); - - $returnAttribs = array_map('strtolower', $returnAttribs); - $omitAttribs = array_map('strtolower', $omitAttribs); - $returnAttribs = array_diff($returnAttribs, $omitAttribs); - - $entry = $this->getLdap()->getEntry($this->authenticatedDn, $returnAttribs, true); - foreach ($entry as $attr => $value) { - if (in_array($attr, $omitAttribs)) { - // skip attributes marked to be omitted - continue; - } - if (is_array($value)) { - $returnObject->$attr = (count($value) > 1) ? $value : $value[0]; - } else { - $returnObject->$attr = $value; - } - } - return $returnObject; - } - - /** - * Converts options to string - * - * @param array $options - * @return string - */ - private function optionsToString(array $options) - { - $str = ''; - foreach ($options as $key => $val) { - if ($key === 'password' || $key === 'credential') { - $val = '*****'; - } - if ($str) { - $str .= ','; - } - $str .= $key . '=' . $val; - } - return $str; - } -} diff --git a/library/Zend/Authentication/Adapter/ValidatableAdapterInterface.php b/library/Zend/Authentication/Adapter/ValidatableAdapterInterface.php deleted file mode 100755 index 3c4f01b2c..000000000 --- a/library/Zend/Authentication/Adapter/ValidatableAdapterInterface.php +++ /dev/null @@ -1,45 +0,0 @@ -setStorage($storage); - } - if (null !== $adapter) { - $this->setAdapter($adapter); - } - } - - /** - * Returns the authentication adapter - * - * The adapter does not have a default if the storage adapter has not been set. - * - * @return Adapter\AdapterInterface|null - */ - public function getAdapter() - { - return $this->adapter; - } - - /** - * Sets the authentication adapter - * - * @param Adapter\AdapterInterface $adapter - * @return AuthenticationService Provides a fluent interface - */ - public function setAdapter(Adapter\AdapterInterface $adapter) - { - $this->adapter = $adapter; - return $this; - } - - /** - * Returns the persistent storage handler - * - * Session storage is used by default unless a different storage adapter has been set. - * - * @return Storage\StorageInterface - */ - public function getStorage() - { - if (null === $this->storage) { - $this->setStorage(new Storage\Session()); - } - - return $this->storage; - } - - /** - * Sets the persistent storage handler - * - * @param Storage\StorageInterface $storage - * @return AuthenticationService Provides a fluent interface - */ - public function setStorage(Storage\StorageInterface $storage) - { - $this->storage = $storage; - return $this; - } - - /** - * Authenticates against the supplied adapter - * - * @param Adapter\AdapterInterface $adapter - * @return Result - * @throws Exception\RuntimeException - */ - public function authenticate(Adapter\AdapterInterface $adapter = null) - { - if (!$adapter) { - if (!$adapter = $this->getAdapter()) { - throw new Exception\RuntimeException('An adapter must be set or passed prior to calling authenticate()'); - } - } - $result = $adapter->authenticate(); - - /** - * ZF-7546 - prevent multiple successive calls from storing inconsistent results - * Ensure storage has clean state - */ - if ($this->hasIdentity()) { - $this->clearIdentity(); - } - - if ($result->isValid()) { - $this->getStorage()->write($result->getIdentity()); - } - - return $result; - } - - /** - * Returns true if and only if an identity is available from storage - * - * @return bool - */ - public function hasIdentity() - { - return !$this->getStorage()->isEmpty(); - } - - /** - * Returns the identity from storage or null if no identity is available - * - * @return mixed|null - */ - public function getIdentity() - { - $storage = $this->getStorage(); - - if ($storage->isEmpty()) { - return null; - } - - return $storage->read(); - } - - /** - * Clears the identity from persistent storage - * - * @return void - */ - public function clearIdentity() - { - $this->getStorage()->clear(); - } -} diff --git a/library/Zend/Authentication/AuthenticationServiceInterface.php b/library/Zend/Authentication/AuthenticationServiceInterface.php deleted file mode 100755 index fcf74ea17..000000000 --- a/library/Zend/Authentication/AuthenticationServiceInterface.php +++ /dev/null @@ -1,44 +0,0 @@ -code = (int) $code; - $this->identity = $identity; - $this->messages = $messages; - } - - /** - * Returns whether the result represents a successful authentication attempt - * - * @return bool - */ - public function isValid() - { - return ($this->code > 0) ? true : false; - } - - /** - * getCode() - Get the result code for this authentication attempt - * - * @return int - */ - public function getCode() - { - return $this->code; - } - - /** - * Returns the identity used in the authentication attempt - * - * @return mixed - */ - public function getIdentity() - { - return $this->identity; - } - - /** - * Returns an array of string reasons why the authentication attempt was unsuccessful - * - * If authentication was successful, this method returns an empty array. - * - * @return array - */ - public function getMessages() - { - return $this->messages; - } -} diff --git a/library/Zend/Authentication/Storage/Chain.php b/library/Zend/Authentication/Storage/Chain.php deleted file mode 100755 index 8d995a2c0..000000000 --- a/library/Zend/Authentication/Storage/Chain.php +++ /dev/null @@ -1,109 +0,0 @@ -storageChain = new PriorityQueue(); - } - - /** - * @param StorageInterface $storage - * @param int $priority - */ - public function add(StorageInterface $storage, $priority = 1) - { - $this->storageChain->insert($storage, $priority); - } - - /** - * Loop over the queue of storage until a storage is found that is non-empty. If such - * storage is not found, then this chain storage itself is empty. - * - * In case a non-empty storage is found then this chain storage is also non-empty. Report - * that, but also make sure that all storage with higher priorty that are empty - * are filled. - * - * @see StorageInterface::isEmpty() - */ - public function isEmpty() - { - $storageWithHigherPriority = array(); - - // Loop invariant: $storageWithHigherPriority contains all storage with higher priorty - // than the current one. - foreach ($this->storageChain as $storage) { - if ($storage->isEmpty()) { - $storageWithHigherPriority[] = $storage; - continue; - } - - $storageValue = $storage->read(); - foreach ($storageWithHigherPriority as $higherPriorityStorage) { - $higherPriorityStorage->write($storageValue); - } - - return false; - } - - return true; - } - - /** - * If the chain is non-empty then the storage with the top priority is guaranteed to be - * filled. Return its value. - * - * @see StorageInterface::read() - */ - public function read() - { - return $this->storageChain->top()->read(); - } - - /** - * Write the new $contents to all storage in the chain. - * - * @see StorageInterface::write() - */ - public function write($contents) - { - foreach ($this->storageChain as $storage) { - $storage->write($contents); - } - } - - /** - * Clear all storage in the chain. - * - * @see StorageInterface::clear() - */ - public function clear() - { - foreach ($this->storageChain as $storage) { - $storage->clear(); - } - } -} diff --git a/library/Zend/Authentication/Storage/NonPersistent.php b/library/Zend/Authentication/Storage/NonPersistent.php deleted file mode 100755 index 8d1204939..000000000 --- a/library/Zend/Authentication/Storage/NonPersistent.php +++ /dev/null @@ -1,67 +0,0 @@ -data); - } - - /** - * Returns the contents of storage - * Behavior is undefined when storage is empty. - * - * @return mixed - */ - public function read() - { - return $this->data; - } - - /** - * Writes $contents to storage - * - * @param mixed $contents - * @return void - */ - public function write($contents) - { - $this->data = $contents; - } - - /** - * Clears contents from storage - * - * @return void - */ - public function clear() - { - $this->data = null; - } -} diff --git a/library/Zend/Authentication/Storage/Session.php b/library/Zend/Authentication/Storage/Session.php deleted file mode 100755 index 6c66bec8f..000000000 --- a/library/Zend/Authentication/Storage/Session.php +++ /dev/null @@ -1,126 +0,0 @@ -namespace = $namespace; - } - if ($member !== null) { - $this->member = $member; - } - $this->session = new SessionContainer($this->namespace, $manager); - } - - /** - * Returns the session namespace - * - * @return string - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * Returns the name of the session object member - * - * @return string - */ - public function getMember() - { - return $this->member; - } - - /** - * Defined by Zend\Authentication\Storage\StorageInterface - * - * @return bool - */ - public function isEmpty() - { - return !isset($this->session->{$this->member}); - } - - /** - * Defined by Zend\Authentication\Storage\StorageInterface - * - * @return mixed - */ - public function read() - { - return $this->session->{$this->member}; - } - - /** - * Defined by Zend\Authentication\Storage\StorageInterface - * - * @param mixed $contents - * @return void - */ - public function write($contents) - { - $this->session->{$this->member} = $contents; - } - - /** - * Defined by Zend\Authentication\Storage\StorageInterface - * - * @return void - */ - public function clear() - { - unset($this->session->{$this->member}); - } -} diff --git a/library/Zend/Authentication/Storage/StorageInterface.php b/library/Zend/Authentication/Storage/StorageInterface.php deleted file mode 100755 index 4a9d41b9e..000000000 --- a/library/Zend/Authentication/Storage/StorageInterface.php +++ /dev/null @@ -1,48 +0,0 @@ - 'Invalid identity', - self::IDENTITY_AMBIGUOUS => 'Identity is ambiguous', - self::CREDENTIAL_INVALID => 'Invalid password', - self::UNCATEGORIZED => 'Authentication failed', - self::GENERAL => 'Authentication failed', - ); - - /** - * Authentication Adapter - * @var ValidatableAdapterInterface - */ - protected $adapter; - - /** - * Identity (or field) - * @var string - */ - protected $identity; - - /** - * Credential (or field) - * @var string - */ - protected $credential; - - /** - * Authentication Service - * @var AuthenticationService - */ - protected $service; - - /** - * Sets validator options - * - * @param mixed $options - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (is_array($options)) { - if (array_key_exists('adapter', $options)) { - $this->setAdapter($options['adapter']); - } - if (array_key_exists('identity', $options)) { - $this->setIdentity($options['identity']); - } - if (array_key_exists('credential', $options)) { - $this->setCredential($options['credential']); - } - if (array_key_exists('service', $options)) { - $this->setService($options['service']); - } - } - parent::__construct($options); - } - - /** - * Get Adapter - * - * @return ValidatableAdapterInterface - */ - public function getAdapter() - { - return $this->adapter; - } - - /** - * Set Adapter - * - * @param ValidatableAdapterInterface $adapter - * @return Authentication - */ - public function setAdapter(ValidatableAdapterInterface $adapter) - { - $this->adapter = $adapter; - - return $this; - } - - /** - * Get Identity - * - * @return mixed - */ - public function getIdentity() - { - return $this->identity; - } - - /** - * Set Identity - * - * @param mixed $identity - * @return Authentication - */ - public function setIdentity($identity) - { - $this->identity = $identity; - - return $this; - } - - /** - * Get Credential - * - * @return mixed - */ - public function getCredential() - { - return $this->credential; - } - - /** - * Set Credential - * - * @param mixed $credential - * @return Authentication - */ - public function setCredential($credential) - { - $this->credential = $credential; - - return $this; - } - - /** - * Get Service - * - * @return AuthenticationService - */ - public function getService() - { - return $this->service; - } - - /** - * Set Service - * - * @param AuthenticationService $service - * @return Authentication - */ - public function setService(AuthenticationService $service) - { - $this->service = $service; - - return $this; - } - - /** - * Is Valid - * - * @param mixed $value - * @param array $context - * @return bool - */ - public function isValid($value = null, $context = null) - { - if ($value !== null) { - $this->setCredential($value); - } - - if (($context !== null) && array_key_exists($this->identity, $context)) { - $identity = $context[$this->identity]; - } else { - $identity = $this->identity; - } - if (!$this->identity) { - throw new Exception\RuntimeException('Identity must be set prior to validation'); - } - - if (($context !== null) && array_key_exists($this->credential, $context)) { - $credential = $context[$this->credential]; - } else { - $credential = $this->credential; - } - - if (!$this->adapter) { - throw new Exception\RuntimeException('Adapter must be set prior to validation'); - } - $this->adapter->setIdentity($identity); - $this->adapter->setCredential($credential); - - if (!$this->service) { - throw new Exception\RuntimeException('AuthenticationService must be set prior to validation'); - } - $result = $this->service->authenticate($this->adapter); - - if ($result->getCode() != Result::SUCCESS) { - switch ($result->getCode()) { - case Result::FAILURE_IDENTITY_NOT_FOUND: - $this->error(self::IDENTITY_NOT_FOUND); - break; - case Result::FAILURE_CREDENTIAL_INVALID: - $this->error(self::CREDENTIAL_INVALID); - break; - case Result::FAILURE_IDENTITY_AMBIGUOUS: - $this->error(self::IDENTITY_AMBIGUOUS); - break; - case Result::FAILURE_UNCATEGORIZED: - $this->error(self::UNCATEGORIZED); - break; - default: - $this->error(self::GENERAL); - } - - return false; - } - - return true; - } -} diff --git a/library/Zend/Authentication/composer.json b/library/Zend/Authentication/composer.json deleted file mode 100755 index fd6d242b9..000000000 --- a/library/Zend/Authentication/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "zendframework/zend-authentication", - "description": "provides an API for authentication and includes concrete authentication adapters for common use case scenarios", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "authentication" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Authentication\\": "" - } - }, - "target-dir": "Zend/Authentication", - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-db": "self.version", - "zendframework/zend-crypt": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-ldap": "self.version", - "zendframework/zend-session": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-crypt": "Zend\\Crypt component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-ldap": "Zend\\Ldap component", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component", - "zendframework/zend-validator": "Zend\\Validator component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Barcode/Barcode.php b/library/Zend/Barcode/Barcode.php deleted file mode 100755 index b2176b478..000000000 --- a/library/Zend/Barcode/Barcode.php +++ /dev/null @@ -1,304 +0,0 @@ - $e->getMessage())); - $renderer = static::makeRenderer($renderer, array()); - } else { - throw $e; - } - } - - $renderer->setAutomaticRenderError($automaticRenderError); - return $renderer->setBarcode($barcode); - } - - /** - * Barcode Constructor - * - * @param mixed $barcode String name of barcode class, or Traversable object, or barcode object. - * @param mixed $barcodeConfig OPTIONAL; an array or Traversable object with barcode parameters. - * @throws Exception\InvalidArgumentException - * @return Object - */ - public static function makeBarcode($barcode, $barcodeConfig = array()) - { - if ($barcode instanceof Object\ObjectInterface) { - return $barcode; - } - - /* - * Convert Traversable argument to plain string - * barcode name and separate configuration. - */ - if ($barcode instanceof Traversable) { - $barcode = ArrayUtils::iteratorToArray($barcode); - if (isset($barcode['barcodeParams']) && is_array($barcode['barcodeParams'])) { - $barcodeConfig = $barcode['barcodeParams']; - } - if (isset($barcode['barcode'])) { - $barcode = (string) $barcode['barcode']; - } else { - $barcode = null; - } - } - if ($barcodeConfig instanceof Traversable) { - $barcodeConfig = ArrayUtils::iteratorToArray($barcodeConfig); - } - - /* - * Verify that barcode parameters are in an array. - */ - if (!is_array($barcodeConfig)) { - throw new Exception\InvalidArgumentException( - 'Barcode parameters must be in an array or a Traversable object' - ); - } - - /* - * Verify that a barcode name has been specified. - */ - if (!is_string($barcode) || empty($barcode)) { - throw new Exception\InvalidArgumentException( - 'Barcode name must be specified in a string' - ); - } - - return static::getObjectPluginManager()->get($barcode, $barcodeConfig); - } - - /** - * Renderer Constructor - * - * @param mixed $renderer String name of renderer class, or Traversable object. - * @param mixed $rendererConfig OPTIONAL; an array or Traversable object with renderer parameters. - * @throws Exception\RendererCreationException - * @return Renderer\RendererInterface - */ - public static function makeRenderer($renderer = 'image', $rendererConfig = array()) - { - if ($renderer instanceof Renderer\RendererInterface) { - return $renderer; - } - - /* - * Convert Traversable argument to plain string - * barcode name and separate config object. - */ - if ($renderer instanceof Traversable) { - $renderer = ArrayUtils::iteratorToArray($renderer); - if (isset($renderer['rendererParams'])) { - $rendererConfig = $renderer['rendererParams']; - } - if (isset($renderer['renderer'])) { - $renderer = (string) $renderer['renderer']; - } - } - if ($rendererConfig instanceof Traversable) { - $rendererConfig = ArrayUtils::iteratorToArray($rendererConfig); - } - - /* - * Verify that barcode parameters are in an array. - */ - if (!is_array($rendererConfig)) { - throw new Exception\RendererCreationException( - 'Barcode parameters must be in an array or a Traversable object' - ); - } - - /* - * Verify that a barcode name has been specified. - */ - if (!is_string($renderer) || empty($renderer)) { - throw new Exception\RendererCreationException( - 'Renderer name must be specified in a string' - ); - } - - return static::getRendererPluginManager()->get($renderer, $rendererConfig); - } - - /** - * Proxy to renderer render() method - * - * @param string | Object\ObjectInterface | array | Traversable $barcode - * @param string | Renderer\RendererInterface $renderer - * @param array | Traversable $barcodeConfig - * @param array | Traversable $rendererConfig - */ - public static function render( - $barcode, - $renderer, - $barcodeConfig = array(), - $rendererConfig = array() - ) { - static::factory($barcode, $renderer, $barcodeConfig, $rendererConfig)->render(); - } - - /** - * Proxy to renderer draw() method - * - * @param string | Object\ObjectInterface | array | Traversable $barcode - * @param string | Renderer\RendererInterface $renderer - * @param array | Traversable $barcodeConfig - * @param array | Traversable $rendererConfig - * @return mixed - */ - public static function draw( - $barcode, - $renderer, - $barcodeConfig = array(), - $rendererConfig = array() - ) { - return static::factory($barcode, $renderer, $barcodeConfig, $rendererConfig)->draw(); - } - - /** - * Set the default font for new instances of barcode - * - * @param string $font - * @return void - */ - public static function setBarcodeFont($font) - { - static::$staticFont = $font; - } - - /** - * Get current default font - * - * @return string - */ - public static function getBarcodeFont() - { - return static::$staticFont; - } -} diff --git a/library/Zend/Barcode/CONTRIBUTING.md b/library/Zend/Barcode/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Barcode/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Barcode/Exception/ExceptionInterface.php b/library/Zend/Barcode/Exception/ExceptionInterface.php deleted file mode 100755 index f421ceb94..000000000 --- a/library/Zend/Barcode/Exception/ExceptionInterface.php +++ /dev/null @@ -1,17 +0,0 @@ -getDefaultOptions(); - $this->font = Barcode\Barcode::getBarcodeFont(); - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - if (is_array($options)) { - $this->setOptions($options); - } - $this->type = strtolower(substr(get_class($this), strlen($this->barcodeNamespace) + 1)); - if ($this->mandatoryChecksum) { - $this->withChecksum = true; - $this->withChecksumInText = true; - } - } - - /** - * Set default options for particular object - * @return void - */ - protected function getDefaultOptions() - { - } - - /** - * Set barcode state from options array - * @param array $options - * @return \Zend\Barcode\Object\ObjectInterface - */ - public function setOptions($options) - { - foreach ($options as $key => $value) { - $method = 'set' . $key; - if (method_exists($this, $method)) { - $this->$method($value); - } - } - return $this; - } - - /** - * Set barcode namespace for autoloading - * - * @param string $namespace - * @return \Zend\Barcode\Object\ObjectInterface - */ - public function setBarcodeNamespace($namespace) - { - $this->barcodeNamespace = $namespace; - return $this; - } - - /** - * Retrieve barcode namespace - * - * @return string - */ - public function getBarcodeNamespace() - { - return $this->barcodeNamespace; - } - - /** - * Retrieve type of barcode - * @return string - */ - public function getType() - { - return $this->type; - } - - /** - * Set height of the barcode bar - * @param int $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setBarHeight($value) - { - if (intval($value) <= 0) { - throw new Exception\OutOfRangeException( - 'Bar height must be greater than 0' - ); - } - $this->barHeight = intval($value); - return $this; - } - - /** - * Get height of the barcode bar - * @return int - */ - public function getBarHeight() - { - return $this->barHeight; - } - - /** - * Set thickness of thin bar - * @param int $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setBarThinWidth($value) - { - if (intval($value) <= 0) { - throw new Exception\OutOfRangeException( - 'Bar width must be greater than 0' - ); - } - $this->barThinWidth = intval($value); - return $this; - } - - /** - * Get thickness of thin bar - * @return int - */ - public function getBarThinWidth() - { - return $this->barThinWidth; - } - - /** - * Set thickness of thick bar - * @param int $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setBarThickWidth($value) - { - if (intval($value) <= 0) { - throw new Exception\OutOfRangeException( - 'Bar width must be greater than 0' - ); - } - $this->barThickWidth = intval($value); - return $this; - } - - /** - * Get thickness of thick bar - * @return int - */ - public function getBarThickWidth() - { - return $this->barThickWidth; - } - - /** - * Set factor applying to - * thinBarWidth - thickBarWidth - barHeight - fontSize - * @param float $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setFactor($value) - { - if (floatval($value) <= 0) { - throw new Exception\OutOfRangeException( - 'Factor must be greater than 0' - ); - } - $this->factor = floatval($value); - return $this; - } - - /** - * Get factor applying to - * thinBarWidth - thickBarWidth - barHeight - fontSize - * @return int - */ - public function getFactor() - { - return $this->factor; - } - - /** - * Set color of the barcode and text - * @param string $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setForeColor($value) - { - if (preg_match('`\#[0-9A-F]{6}`', $value)) { - $this->foreColor = hexdec($value); - } elseif (is_numeric($value) && $value >= 0 && $value <= 16777125) { - $this->foreColor = intval($value); - } else { - throw new Exception\InvalidArgumentException( - 'Text color must be set as #[0-9A-F]{6}' - ); - } - return $this; - } - - /** - * Retrieve color of the barcode and text - * @return int - */ - public function getForeColor() - { - return $this->foreColor; - } - - /** - * Set the color of the background - * @param int $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setBackgroundColor($value) - { - if (preg_match('`\#[0-9A-F]{6}`', $value)) { - $this->backgroundColor = hexdec($value); - } elseif (is_numeric($value) && $value >= 0 && $value <= 16777125) { - $this->backgroundColor = intval($value); - } else { - throw new Exception\InvalidArgumentException( - 'Background color must be set as #[0-9A-F]{6}' - ); - } - return $this; - } - - /** - * Retrieve background color of the image - * @return int - */ - public function getBackgroundColor() - { - return $this->backgroundColor; - } - - /** - * Activate/deactivate drawing of the bar - * @param bool $value - * @return \Zend\Barcode\Object\ObjectInterface - */ - public function setWithBorder($value) - { - $this->withBorder = (bool) $value; - return $this; - } - - /** - * Retrieve if border are draw or not - * @return bool - */ - public function getWithBorder() - { - return $this->withBorder; - } - - /** - * Activate/deactivate drawing of the quiet zones - * @param bool $value - * @return AbstractObject - */ - public function setWithQuietZones($value) - { - $this->withQuietZones = (bool) $value; - return $this; - } - - /** - * Retrieve if quiet zones are draw or not - * @return bool - */ - public function getWithQuietZones() - { - return $this->withQuietZones; - } - - /** - * Allow fast inversion of font/bars color and background color - * @return \Zend\Barcode\Object\ObjectInterface - */ - public function setReverseColor() - { - $tmp = $this->foreColor; - $this->foreColor = $this->backgroundColor; - $this->backgroundColor = $tmp; - return $this; - } - - /** - * Set orientation of barcode and text - * @param float $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setOrientation($value) - { - $this->orientation = floatval($value) - floor(floatval($value) / 360) * 360; - return $this; - } - - /** - * Retrieve orientation of barcode and text - * @return float - */ - public function getOrientation() - { - return $this->orientation; - } - - /** - * Set text to encode - * @param string $value - * @return \Zend\Barcode\Object\ObjectInterface - */ - public function setText($value) - { - $this->text = trim($value); - return $this; - } - - /** - * Retrieve text to encode - * @return string - */ - public function getText() - { - $text = $this->text; - if ($this->withChecksum) { - $text .= $this->getChecksum($this->text); - } - return $this->addLeadingZeros($text); - } - - /** - * Automatically add leading zeros if barcode length is fixed - * @param string $text - * @param bool $withoutChecksum - * @return string - */ - protected function addLeadingZeros($text, $withoutChecksum = false) - { - if ($this->barcodeLength && $this->addLeadingZeros) { - $omitChecksum = (int) ($this->withChecksum && $withoutChecksum); - if (is_int($this->barcodeLength)) { - $length = $this->barcodeLength - $omitChecksum; - if (strlen($text) < $length) { - $text = str_repeat('0', $length - strlen($text)) . $text; - } - } else { - if ($this->barcodeLength == 'even') { - $text = ((strlen($text) - $omitChecksum) % 2 ? '0' . $text : $text); - } - } - } - return $text; - } - - /** - * Retrieve text to encode - * @return string - */ - public function getRawText() - { - return $this->text; - } - - /** - * Retrieve text to display - * @return string - */ - public function getTextToDisplay() - { - if ($this->withChecksumInText) { - return $this->getText(); - } - - return $this->addLeadingZeros($this->text, true); - } - - /** - * Activate/deactivate drawing of text to encode - * @param bool $value - * @return \Zend\Barcode\Object\ObjectInterface - */ - public function setDrawText($value) - { - $this->drawText = (bool) $value; - return $this; - } - - /** - * Retrieve if drawing of text to encode is enabled - * @return bool - */ - public function getDrawText() - { - return $this->drawText; - } - - /** - * Activate/deactivate the adjustment of the position - * of the characters to the position of the bars - * @param bool $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setStretchText($value) - { - $this->stretchText = (bool) $value; - return $this; - } - - /** - * Retrieve if the adjustment of the position of the characters - * to the position of the bars is enabled - * @return bool - */ - public function getStretchText() - { - return $this->stretchText; - } - - /** - * Activate/deactivate the automatic generation - * of the checksum character - * added to the barcode text - * @param bool $value - * @return \Zend\Barcode\Object\ObjectInterface - */ - public function setWithChecksum($value) - { - if (!$this->mandatoryChecksum) { - $this->withChecksum = (bool) $value; - } - return $this; - } - - /** - * Retrieve if the checksum character is automatically - * added to the barcode text - * @return bool - */ - public function getWithChecksum() - { - return $this->withChecksum; - } - - /** - * Activate/deactivate the automatic generation - * of the checksum character - * added to the barcode text - * @param bool $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setWithChecksumInText($value) - { - if (!$this->mandatoryChecksum) { - $this->withChecksumInText = (bool) $value; - } - return $this; - } - - /** - * Retrieve if the checksum character is automatically - * added to the barcode text - * @return bool - */ - public function getWithChecksumInText() - { - return $this->withChecksumInText; - } - - /** - * Set the font: - * - if integer between 1 and 5, use gd built-in fonts - * - if string, $value is assumed to be the path to a TTF font - * @param int|string $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setFont($value) - { - if (is_int($value) && $value >= 1 && $value <= 5) { - if (!extension_loaded('gd')) { - throw new Exception\ExtensionNotLoadedException( - 'GD extension is required to use numeric font' - ); - } - - // Case of numeric font with GD - $this->font = $value; - - // In this case font size is given by: - $this->fontSize = imagefontheight($value); - } elseif (is_string($value)) { - $this->font = $value; - } else { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid font "%s" provided to setFont()', - $value - )); - } - return $this; - } - - /** - * Retrieve the font - * @return int|string - */ - public function getFont() - { - return $this->font; - } - - /** - * Set the size of the font in case of TTF - * @param float $value - * @return \Zend\Barcode\Object\ObjectInterface - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - public function setFontSize($value) - { - if (is_numeric($this->font)) { - // Case of numeric font with GD - return $this; - } - - if (!is_numeric($value)) { - throw new Exception\InvalidArgumentException( - 'Font size must be a numeric value' - ); - } - - $this->fontSize = $value; - return $this; - } - - /** - * Retrieve the size of the font in case of TTF - * @return float - */ - public function getFontSize() - { - return $this->fontSize; - } - - /** - * Quiet zone before first bar - * and after the last bar - * @return int - */ - public function getQuietZone() - { - if ($this->withQuietZones || $this->mandatoryQuietZones) { - return 10 * $this->barThinWidth * $this->factor; - } - - return 0; - } - - /** - * Add an instruction in the array of instructions - * @param array $instruction - */ - protected function addInstruction(array $instruction) - { - $this->instructions[] = $instruction; - } - - /** - * Retrieve the set of drawing instructions - * @return array - */ - public function getInstructions() - { - return $this->instructions; - } - - /** - * Add a polygon drawing instruction in the set of instructions - * @param array $points - * @param int $color - * @param bool $filled - */ - protected function addPolygon(array $points, $color = null, $filled = true) - { - if ($color === null) { - $color = $this->foreColor; - } - $this->addInstruction(array( - 'type' => 'polygon', - 'points' => $points, - 'color' => $color, - 'filled' => $filled, - )); - } - - /** - * Add a text drawing instruction in the set of instructions - * @param string $text - * @param float $size - * @param int[] $position - * @param string $font - * @param int $color - * @param string $alignment - * @param float $orientation - */ - protected function addText( - $text, - $size, - $position, - $font, - $color, - $alignment = 'center', - $orientation = 0 - ) { - if ($color === null) { - $color = $this->foreColor; - } - $this->addInstruction(array( - 'type' => 'text', - 'text' => $text, - 'size' => $size, - 'position' => $position, - 'font' => $font, - 'color' => $color, - 'alignment' => $alignment, - 'orientation' => $orientation, - )); - } - - /** - * Checking of parameters after all settings - * @return bool - */ - public function checkParams() - { - $this->checkText(); - $this->checkFontAndOrientation(); - $this->checkSpecificParams(); - return true; - } - - /** - * Check if a text is really provided to barcode - * @param string|null $value - * @return void - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - protected function checkText($value = null) - { - if ($value === null) { - $value = $this->text; - } - if (!strlen($value)) { - throw new Exception\RuntimeException( - 'A text must be provide to Barcode before drawing' - ); - } - $this->validateText($value); - } - - /** - * Check the ratio between the thick and the thin bar - * @param int $min - * @param int $max - * @return void - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - protected function checkRatio($min = 2, $max = 3) - { - $ratio = $this->barThickWidth / $this->barThinWidth; - if (!($ratio >= $min && $ratio <= $max)) { - throw new Exception\OutOfRangeException(sprintf( - 'Ratio thick/thin bar must be between %0.1f and %0.1f (actual %0.3f)', - $min, - $max, - $ratio - )); - } - } - - /** - * Drawing with an angle is just allow TTF font - * @return void - * @throws \Zend\Barcode\Object\Exception\ExceptionInterface - */ - protected function checkFontAndOrientation() - { - if (is_numeric($this->font) && $this->orientation != 0) { - throw new Exception\RuntimeException( - 'Only drawing with TTF font allow orientation of the barcode.' - ); - } - } - - /** - * Width of the result image - * (before any rotation) - * @return int - */ - protected function calculateWidth() - { - return (int) $this->withBorder - + $this->calculateBarcodeWidth() - + (int) $this->withBorder; - } - - /** - * Calculate the width of the barcode - * @return int - */ - abstract protected function calculateBarcodeWidth(); - - /** - * Height of the result object - * @return int - */ - protected function calculateHeight() - { - return (int) $this->withBorder * 2 - + $this->calculateBarcodeHeight() - + (int) $this->withBorder * 2; - } - - /** - * Height of the barcode - * @return int - */ - protected function calculateBarcodeHeight() - { - $textHeight = 0; - $extraHeight = 0; - if ($this->drawText) { - $textHeight += $this->fontSize; - $extraHeight = 2; - } - return ($this->barHeight + $textHeight) * $this->factor + $extraHeight; - } - - /** - * Get height of the result object - * @param bool $recalculate - * @return int - */ - public function getHeight($recalculate = false) - { - if ($this->height === null || $recalculate) { - $this->height = - abs($this->calculateHeight() * cos($this->orientation / 180 * pi())) - + abs($this->calculateWidth() * sin($this->orientation / 180 * pi())); - } - return $this->height; - } - - /** - * Get width of the result object - * @param bool $recalculate - * @return int - */ - public function getWidth($recalculate = false) - { - if ($this->width === null || $recalculate) { - $this->width = - abs($this->calculateWidth() * cos($this->orientation / 180 * pi())) - + abs($this->calculateHeight() * sin($this->orientation / 180 * pi())); - } - return $this->width; - } - - /** - * Calculate the offset from the left of the object - * if an orientation is activated - * @param bool $recalculate - * @return float - */ - public function getOffsetLeft($recalculate = false) - { - if ($this->offsetLeft === null || $recalculate) { - $this->offsetLeft = - min( - array( - 0 * cos($this->orientation / 180 * pi()) - 0 * sin($this->orientation / 180 * pi()), - 0 * cos($this->orientation / 180 * pi()) - $this->calculateBarcodeHeight() * sin($this->orientation / 180 * pi()), - $this->calculateBarcodeWidth() * cos($this->orientation / 180 * pi()) - $this->calculateBarcodeHeight() * sin($this->orientation / 180 * pi()), - $this->calculateBarcodeWidth() * cos($this->orientation / 180 * pi()) - 0 * sin($this->orientation / 180 * pi()), - ) - ); - } - return $this->offsetLeft; - } - - /** - * Calculate the offset from the top of the object - * if an orientation is activated - * @param bool $recalculate - * @return float - */ - public function getOffsetTop($recalculate = false) - { - if ($this->offsetTop === null || $recalculate) { - $this->offsetTop = - min( - array( - 0 * cos($this->orientation / 180 * pi()) + 0 * sin($this->orientation / 180 * pi()), - $this->calculateBarcodeHeight() * cos($this->orientation / 180 * pi()) + 0 * sin($this->orientation / 180 * pi()), - $this->calculateBarcodeHeight() * cos($this->orientation / 180 * pi()) + $this->calculateBarcodeWidth() * sin($this->orientation / 180 * pi()), - 0 * cos($this->orientation / 180 * pi()) + $this->calculateBarcodeWidth() * sin($this->orientation / 180 * pi()), - ) - ); - } - return $this->offsetTop; - } - - /** - * Apply rotation on a point in X/Y dimensions - * @param float $x1 x-position before rotation - * @param float $y1 y-position before rotation - * @return int[] Array of two elements corresponding to the new XY point - */ - protected function rotate($x1, $y1) - { - $x2 = $x1 * cos($this->orientation / 180 * pi()) - - $y1 * sin($this->orientation / 180 * pi()) - + $this->getOffsetLeft(); - $y2 = $y1 * cos($this->orientation / 180 * pi()) - + $x1 * sin($this->orientation / 180 * pi()) - + $this->getOffsetTop(); - return array(intval($x2), intval($y2)); - } - - /** - * Complete drawing of the barcode - * @return array Table of instructions - */ - public function draw() - { - $this->checkParams(); - $this->drawBarcode(); - $this->drawBorder(); - $this->drawText(); - return $this->getInstructions(); - } - - /** - * Draw the barcode - * @return void - */ - protected function drawBarcode() - { - $barcodeTable = $this->prepareBarcode(); - - $this->preDrawBarcode(); - - $xpos = (int) $this->withBorder; - $ypos = (int) $this->withBorder; - - $point1 = $this->rotate(0, 0); - $point2 = $this->rotate(0, $this->calculateHeight() - 1); - $point3 = $this->rotate( - $this->calculateWidth() - 1, - $this->calculateHeight() - 1 - ); - $point4 = $this->rotate($this->calculateWidth() - 1, 0); - - $this->addPolygon(array( - $point1, - $point2, - $point3, - $point4 - ), $this->backgroundColor); - - $xpos += $this->getQuietZone(); - $barLength = $this->barHeight * $this->factor; - - foreach ($barcodeTable as $bar) { - $width = $bar[1] * $this->factor; - if ($bar[0]) { - $point1 = $this->rotate($xpos, $ypos + $bar[2] * $barLength); - $point2 = $this->rotate($xpos, $ypos + $bar[3] * $barLength); - $point3 = $this->rotate( - $xpos + $width - 1, - $ypos + $bar[3] * $barLength - ); - $point4 = $this->rotate( - $xpos + $width - 1, - $ypos + $bar[2] * $barLength - ); - $this->addPolygon(array( - $point1, - $point2, - $point3, - $point4, - )); - } - $xpos += $width; - } - - $this->postDrawBarcode(); - } - - /** - * Partial function to draw border - * @return void - */ - protected function drawBorder() - { - if ($this->withBorder) { - $point1 = $this->rotate(0, 0); - $point2 = $this->rotate($this->calculateWidth() - 1, 0); - $point3 = $this->rotate( - $this->calculateWidth() - 1, - $this->calculateHeight() - 1 - ); - $point4 = $this->rotate(0, $this->calculateHeight() - 1); - $this->addPolygon(array( - $point1, - $point2, - $point3, - $point4, - $point1, - ), $this->foreColor, false); - } - } - - /** - * Partial function to draw text - * @return void - */ - protected function drawText() - { - if ($this->drawText) { - $text = $this->getTextToDisplay(); - if ($this->stretchText) { - $textLength = strlen($text); - $space = ($this->calculateWidth() - 2 * $this->getQuietZone()) / $textLength; - for ($i = 0; $i < $textLength; $i ++) { - $leftPosition = $this->getQuietZone() + $space * ($i + 0.5); - $this->addText( - $text{$i}, - $this->fontSize * $this->factor, - $this->rotate( - $leftPosition, - (int) $this->withBorder * 2 + $this->factor * ($this->barHeight + $this->fontSize) + 1 - ), - $this->font, - $this->foreColor, - 'center', - - $this->orientation - ); - } - } else { - $this->addText( - $text, - $this->fontSize * $this->factor, - $this->rotate( - $this->calculateWidth() / 2, - (int) $this->withBorder * 2 + $this->factor * ($this->barHeight + $this->fontSize) + 1 - ), - $this->font, - $this->foreColor, - 'center', - - $this->orientation - ); - } - } - } - - /** - * Check for invalid characters - * @param string $value Text to be checked - * @return void - */ - public function validateText($value) - { - $this->validateSpecificText($value); - } - - /** - * Standard validation for most of barcode objects - * @param string $value - * @param array $options - */ - protected function validateSpecificText($value, $options = array()) - { - $validatorName = (isset($options['validator'])) ? $options['validator'] : $this->getType(); - - $validator = new BarcodeValidator(array( - 'adapter' => $validatorName, - 'usechecksum' => false, - )); - - $checksumCharacter = ''; - $withChecksum = false; - if ($this->mandatoryChecksum) { - $checksumCharacter = $this->substituteChecksumCharacter; - $withChecksum = true; - } - - $value = $this->addLeadingZeros($value, $withChecksum) . $checksumCharacter; - - if (!$validator->isValid($value)) { - $message = implode("\n", $validator->getMessages()); - throw new Exception\BarcodeValidationException($message); - } - } - - /** - * Each child must prepare the barcode and return - * a table like array( - * 0 => array( - * 0 => int (visible(black) or not(white)) - * 1 => int (width of the bar) - * 2 => float (0->1 position from the top of the beginning of the bar in %) - * 3 => float (0->1 position from the top of the end of the bar in %) - * ), - * 1 => ... - * ) - * - * @return array - */ - abstract protected function prepareBarcode(); - - /** - * Checking of parameters after all settings - * - * @return void - */ - abstract protected function checkSpecificParams(); - - /** - * Allow each child to draw something else - * - * @return void - */ - protected function preDrawBarcode() - { - } - - /** - * Allow each child to draw something else - * (ex: bearer bars in interleaved 2 of 5 code) - * - * @return void - */ - protected function postDrawBarcode() - { - } -} diff --git a/library/Zend/Barcode/Object/Codabar.php b/library/Zend/Barcode/Object/Codabar.php deleted file mode 100755 index 71120c601..000000000 --- a/library/Zend/Barcode/Object/Codabar.php +++ /dev/null @@ -1,77 +0,0 @@ - "101010011", '1' => "101011001", '2' => "101001011", - '3' => "110010101", '4' => "101101001", '5' => "110101001", - '6' => "100101011", '7' => "100101101", '8' => "100110101", - '9' => "110100101", '-' => "101001101", '$' => "101100101", - ':' => "1101011011", '/' => "1101101011", '.' => "1101101101", - '+' => "1011011011", 'A' => "1011001001", 'B' => "1010010011", - 'C' => "1001001011", 'D' => "1010011001" - ); - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $encodedData = 0; - $barcodeChar = str_split($this->getText()); - if (count($barcodeChar) > 1) { - foreach ($barcodeChar as $c) { - $encodedData += ((strlen($this->codingMap[$c]) + 1) * $this->barThinWidth) * $this->factor; - } - } - $encodedData -= (1 * $this->barThinWidth * $this->factor); - return $quietZone + $encodedData + $quietZone; - } - - /** - * Partial check of Codabar barcode - * @return void - */ - protected function checkSpecificParams() - { - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $text = str_split($this->getText()); - $barcodeTable = array(); - foreach ($text as $char) { - $barcodeChar = str_split($this->codingMap[$char]); - foreach ($barcodeChar as $c) { - // visible, width, top, length - $barcodeTable[] = array($c, $this->barThinWidth, 0, 1); - } - $barcodeTable[] = array(0, $this->barThinWidth); - } - return $barcodeTable; - } -} diff --git a/library/Zend/Barcode/Object/Code128.php b/library/Zend/Barcode/Object/Code128.php deleted file mode 100755 index 3bb0cc0c7..000000000 --- a/library/Zend/Barcode/Object/Code128.php +++ /dev/null @@ -1,311 +0,0 @@ - "11011001100", 1 => "11001101100", 2 => "11001100110", - 3 => "10010011000", 4 => "10010001100", 5 => "10001001100", - 6 => "10011001000", 7 => "10011000100", 8 => "10001100100", - 9 => "11001001000", 10 => "11001000100", 11 => "11000100100", - 12 => "10110011100", 13 => "10011011100", 14 => "10011001110", - 15 => "10111001100", 16 => "10011101100", 17 => "10011100110", - 18 => "11001110010", 19 => "11001011100", 20 => "11001001110", - 21 => "11011100100", 22 => "11001110100", 23 => "11101101110", - 24 => "11101001100", 25 => "11100101100", 26 => "11100100110", - 27 => "11101100100", 28 => "11100110100", 29 => "11100110010", - 30 => "11011011000", 31 => "11011000110", 32 => "11000110110", - 33 => "10100011000", 34 => "10001011000", 35 => "10001000110", - 36 => "10110001000", 37 => "10001101000", 38 => "10001100010", - 39 => "11010001000", 40 => "11000101000", 41 => "11000100010", - 42 => "10110111000", 43 => "10110001110", 44 => "10001101110", - 45 => "10111011000", 46 => "10111000110", 47 => "10001110110", - 48 => "11101110110", 49 => "11010001110", 50 => "11000101110", - 51 => "11011101000", 52 => "11011100010", 53 => "11011101110", - 54 => "11101011000", 55 => "11101000110", 56 => "11100010110", - 57 => "11101101000", 58 => "11101100010", 59 => "11100011010", - 60 => "11101111010", 61 => "11001000010", 62 => "11110001010", - 63 => "10100110000", 64 => "10100001100", 65 => "10010110000", - 66 => "10010000110", 67 => "10000101100", 68 => "10000100110", - 69 => "10110010000", 70 => "10110000100", 71 => "10011010000", - 72 => "10011000010", 73 => "10000110100", 74 => "10000110010", - 75 => "11000010010", 76 => "11001010000", 77 => "11110111010", - 78 => "11000010100", 79 => "10001111010", 80 => "10100111100", - 81 => "10010111100", 82 => "10010011110", 83 => "10111100100", - 84 => "10011110100", 85 => "10011110010", 86 => "11110100100", - 87 => "11110010100", 88 => "11110010010", 89 => "11011011110", - 90 => "11011110110", 91 => "11110110110", 92 => "10101111000", - 93 => "10100011110", 94 => "10001011110", 95 => "10111101000", - 96 => "10111100010", 97 => "11110101000", 98 => "11110100010", - 99 => "10111011110", 100 => "10111101110", 101 => "11101011110", - 102 => "11110101110", - 103 => "11010000100", 104 => "11010010000", 105 => "11010011100", - 106 => "1100011101011"); - - /** - * Character sets ABC - * @var array - */ - protected $charSets = array( - 'A' => array( - ' ', '!', '"', '#', '$', '%', '&', "'", - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 'FNC3', 'FNC2', 'SHIFT', 'Code C', 'Code B', 'FNC4', 'FNC1', - 'START A', 'START B', 'START C', 'STOP'), - 'B' => array( - ' ', '!', '"', '#', '$', '%', '&', "'", - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', 0x7F, - 'FNC3', 'FNC2', 'SHIFT', 'Code C', 'FNC4', 'Code A', 'FNC1', - 'START A', 'START B', 'START C', 'STOP',), - 'C' => array( - '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', - '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', - '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', - '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', - '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', - '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', - '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', - '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', - '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', - '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', - 'Code B', 'Code A', 'FNC1', 'START A', 'START B', 'START C', 'STOP')); - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - // Each characters contain 11 bars... - $characterLength = 11 * $this->barThinWidth * $this->factor; - $convertedChars = count($this->convertToBarcodeChars($this->getText())); - if ($this->withChecksum) { - $convertedChars++; - } - $encodedData = $convertedChars * $characterLength; - // ...except the STOP character (13) - $encodedData += $characterLength + 2 * $this->barThinWidth * $this->factor; - $width = $quietZone + $encodedData + $quietZone; - return $width; - } - - /** - * Partial check of code128 barcode - * @return void - */ - protected function checkSpecificParams() - { - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - - $convertedChars = $this->convertToBarcodeChars($this->getText()); - - if ($this->withChecksum) { - $convertedChars[] = $this->getChecksum($this->getText()); - } - - // STOP CHARACTER - $convertedChars[] = 106; - - foreach ($convertedChars as $barcodeChar) { - $barcodePattern = $this->codingMap[$barcodeChar]; - foreach (str_split($barcodePattern) as $c) { - $barcodeTable[] = array($c, $this->barThinWidth, 0, 1); - } - } - return $barcodeTable; - } - - /** - * Checks if the next $length chars of $string starting at $pos are numeric. - * Returns false if the end of the string is reached. - * @param string $string String to search - * @param int $pos Starting position - * @param int $length Length to search - * @return bool - */ - protected static function _isDigit($string, $pos, $length = 2) - { - if ($pos + $length > strlen($string)) { - return false; - } - - for ($i = $pos; $i < $pos + $length; $i++) { - if (!is_numeric($string[$i])) { - return false; - } - } - return true; - } - - /** - * Convert string to barcode string - * @param string $string - * @return array - */ - protected function convertToBarcodeChars($string) - { - $string = (string) $string; - if (!strlen($string)) { - return array(); - } - - if (isset($this->convertedText[md5($string)])) { - return $this->convertedText[md5($string)]; - } - - $currentCharset = null; - $result = array(); - - $strlen = strlen($string); - for ($pos = 0; $pos < $strlen; $pos++) { - $char = $string[$pos]; - - if (static::_isDigit($string, $pos, 4) && $currentCharset != 'C' - || static::_isDigit($string, $pos, 2) && $currentCharset == 'C') { - /** - * Switch to C if the next 4 chars are numeric or stay C if the next 2 - * chars are numeric - */ - if ($currentCharset != 'C') { - if ($pos == 0) { - $code = array_search("START C", $this->charSets['C']); - } else { - $code = array_search("Code C", $this->charSets[$currentCharset]); - } - $result[] = $code; - $currentCharset = 'C'; - } - } elseif (in_array($char, $this->charSets['B']) && $currentCharset != 'B' - && !(in_array($char, $this->charSets['A']) && $currentCharset == 'A')) { - /** - * Switch to B as B contains the char and B is not the current charset. - */ - if ($pos == 0) { - $code = array_search("START B", $this->charSets['B']); - } else { - $code = array_search("Code B", $this->charSets[$currentCharset]); - } - $result[] = $code; - $currentCharset = 'B'; - } elseif (array_key_exists($char, $this->charSets['A']) && $currentCharset != 'A' - && !(array_key_exists($char, $this->charSets['B']) && $currentCharset == 'B')) { - /** - * Switch to C as C contains the char and C is not the current charset. - */ - if ($pos == 0) { - $code = array_search("START A", $this->charSets['A']); - } else { - $code = array_search("Code A", $this->charSets[$currentCharset]); - } - $result[] = $code; - $currentCharset = 'A'; - } - - if ($currentCharset == 'C') { - $code = array_search(substr($string, $pos, 2), $this->charSets['C']); - $pos++; //Two chars from input - } else { - $code = array_search($string[$pos], $this->charSets[$currentCharset]); - } - $result[] = $code; - } - - $this->convertedText[md5($string)] = $result; - return $result; - } - - /** - * Set text to encode - * @param string $value - * @return Code128 - */ - public function setText($value) - { - $this->text = $value; - return $this; - } - - /** - * Retrieve text to encode - * @return string - */ - public function getText() - { - return $this->text; - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $tableOfChars = $this->convertToBarcodeChars($text); - - $sum = $tableOfChars[0]; - unset($tableOfChars[0]); - - $k = 1; - foreach ($tableOfChars as $char) { - $sum += ($k++) * $char; - } - - $checksum = $sum % 103; - - return $checksum; - } -} diff --git a/library/Zend/Barcode/Object/Code25.php b/library/Zend/Barcode/Object/Code25.php deleted file mode 100755 index 2f32ca7af..000000000 --- a/library/Zend/Barcode/Object/Code25.php +++ /dev/null @@ -1,117 +0,0 @@ - '00110', - '1' => '10001', - '2' => '01001', - '3' => '11000', - '4' => '00101', - '5' => '10100', - '6' => '01100', - '7' => '00011', - '8' => '10010', - '9' => '01010', - ); - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (2 * $this->barThickWidth + 4 * $this->barThinWidth) * $this->factor; - $characterLength = (3 * $this->barThinWidth + 2 * $this->barThickWidth + 5 * $this->barThinWidth) - * $this->factor; - $encodedData = strlen($this->getText()) * $characterLength; - $stopCharacter = (2 * $this->barThickWidth + 4 * $this->barThinWidth) * $this->factor; - return $quietZone + $startCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Partial check of interleaved 2 of 5 barcode - * @return void - */ - protected function checkSpecificParams() - { - $this->checkRatio(); - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - - // Start character (30301) - $barcodeTable[] = array(1, $this->barThickWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThickWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth); - - $text = str_split($this->getText()); - foreach ($text as $char) { - $barcodeChar = str_split($this->codingMap[$char]); - foreach ($barcodeChar as $c) { - /* visible, width, top, length */ - $width = $c ? $this->barThickWidth : $this->barThinWidth; - $barcodeTable[] = array(1, $width, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth); - } - } - - // Stop character (30103) - $barcodeTable[] = array(1, $this->barThickWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThickWidth, 0, 1); - return $barcodeTable; - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $this->checkText($text); - $factor = 3; - $checksum = 0; - - for ($i = strlen($text); $i > 0; $i --) { - $checksum += intval($text{$i - 1}) * $factor; - $factor = 4 - $factor; - } - - $checksum = (10 - ($checksum % 10)) % 10; - - return $checksum; - } -} diff --git a/library/Zend/Barcode/Object/Code25interleaved.php b/library/Zend/Barcode/Object/Code25interleaved.php deleted file mode 100755 index 0fb3ec33a..000000000 --- a/library/Zend/Barcode/Object/Code25interleaved.php +++ /dev/null @@ -1,159 +0,0 @@ -barcodeLength = 'even'; - } - - /** - * Activate/deactivate drawing of bearer bars - * @param bool $value - * @return Code25 - */ - public function setWithBearerBars($value) - { - $this->withBearerBars = (bool) $value; - return $this; - } - - /** - * Retrieve if bearer bars are enabled - * @return bool - */ - public function getWithBearerBars() - { - return $this->withBearerBars; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (4 * $this->barThinWidth) * $this->factor; - $characterLength = (3 * $this->barThinWidth + 2 * $this->barThickWidth) * $this->factor; - $encodedData = strlen($this->getText()) * $characterLength; - $stopCharacter = ($this->barThickWidth + 2 * $this->barThinWidth) * $this->factor; - return $quietZone + $startCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - if ($this->withBearerBars) { - $this->withBorder = false; - } - - $barcodeTable = array(); - - // Start character (0000) - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - - // Encoded $text - $text = $this->getText(); - for ($i = 0, $len = strlen($text); $i < $len; $i += 2) { // Draw 2 chars at a time - $char1 = substr($text, $i, 1); - $char2 = substr($text, $i + 1, 1); - - // Interleave - for ($ibar = 0; $ibar < 5; $ibar ++) { - // Draws char1 bar (fore color) - $barWidth = (substr($this->codingMap[$char1], $ibar, 1)) - ? $this->barThickWidth - : $this->barThinWidth; - - $barcodeTable[] = array(1, $barWidth, 0, 1); - - // Left space corresponding to char2 (background color) - $barWidth = (substr($this->codingMap[$char2], $ibar, 1)) - ? $this->barThickWidth - : $this->barThinWidth; - $barcodeTable[] = array(0, $barWidth, 0, 1); - } - } - - // Stop character (100) - $barcodeTable[] = array(1, $this->barThickWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - return $barcodeTable; - } - - /** - * Drawing of bearer bars (if enabled) - * - * @return void - */ - protected function postDrawBarcode() - { - if (!$this->withBearerBars) { - return; - } - - $width = $this->barThickWidth * $this->factor; - $point1 = $this->rotate(-1, -1); - $point2 = $this->rotate($this->calculateWidth() - 1, -1); - $point3 = $this->rotate($this->calculateWidth() - 1, $width - 1); - $point4 = $this->rotate(-1, $width - 1); - $this->addPolygon(array( - $point1, - $point2, - $point3, - $point4, - )); - $point1 = $this->rotate( - 0, - 0 + $this->barHeight * $this->factor - 1 - ); - $point2 = $this->rotate( - $this->calculateWidth() - 1, - 0 + $this->barHeight * $this->factor - 1 - ); - $point3 = $this->rotate( - $this->calculateWidth() - 1, - 0 + $this->barHeight * $this->factor - $width - ); - $point4 = $this->rotate( - 0, - 0 + $this->barHeight * $this->factor - $width - ); - $this->addPolygon(array( - $point1, - $point2, - $point3, - $point4, - )); - } -} diff --git a/library/Zend/Barcode/Object/Code39.php b/library/Zend/Barcode/Object/Code39.php deleted file mode 100755 index c70e289eb..000000000 --- a/library/Zend/Barcode/Object/Code39.php +++ /dev/null @@ -1,162 +0,0 @@ - '000110100', - '1' => '100100001', - '2' => '001100001', - '3' => '101100000', - '4' => '000110001', - '5' => '100110000', - '6' => '001110000', - '7' => '000100101', - '8' => '100100100', - '9' => '001100100', - 'A' => '100001001', - 'B' => '001001001', - 'C' => '101001000', - 'D' => '000011001', - 'E' => '100011000', - 'F' => '001011000', - 'G' => '000001101', - 'H' => '100001100', - 'I' => '001001100', - 'J' => '000011100', - 'K' => '100000011', - 'L' => '001000011', - 'M' => '101000010', - 'N' => '000010011', - 'O' => '100010010', - 'P' => '001010010', - 'Q' => '000000111', - 'R' => '100000110', - 'S' => '001000110', - 'T' => '000010110', - 'U' => '110000001', - 'V' => '011000001', - 'W' => '111000000', - 'X' => '010010001', - 'Y' => '110010000', - 'Z' => '011010000', - '-' => '010000101', - '.' => '110000100', - ' ' => '011000100', - '$' => '010101000', - '/' => '010100010', - '+' => '010001010', - '%' => '000101010', - '*' => '010010100', - ); - - /** - * Partial check of Code39 barcode - * @return void - */ - protected function checkSpecificParams() - { - $this->checkRatio(); - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $characterLength = (6 * $this->barThinWidth + 3 * $this->barThickWidth + 1) * $this->factor; - $encodedData = strlen($this->getText()) * $characterLength - $this->factor; - return $quietZone + $encodedData + $quietZone; - } - - /** - * Set text to encode - * @param string $value - * @return Code39 - */ - public function setText($value) - { - $this->text = $value; - return $this; - } - - /** - * Retrieve text to display - * @return string - */ - public function getText() - { - return '*' . parent::getText() . '*'; - } - - /** - * Retrieve text to display - * @return string - */ - public function getTextToDisplay() - { - $text = parent::getTextToDisplay(); - if (substr($text, 0, 1) != '*' && substr($text, -1) != '*') { - return '*' . $text . '*'; - } - - return $text; - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $text = str_split($this->getText()); - $barcodeTable = array(); - foreach ($text as $char) { - $barcodeChar = str_split($this->codingMap[$char]); - $visible = true; - foreach ($barcodeChar as $c) { - /* visible, width, top, length */ - $width = $c ? $this->barThickWidth : $this->barThinWidth; - $barcodeTable[] = array((int) $visible, $width, 0, 1); - $visible = ! $visible; - } - $barcodeTable[] = array(0, $this->barThinWidth); - } - return $barcodeTable; - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $this->checkText($text); - $text = str_split($text); - $charset = array_flip(array_keys($this->codingMap)); - $checksum = 0; - foreach ($text as $character) { - $checksum += $charset[$character]; - } - return array_search(($checksum % 43), $charset); - } -} diff --git a/library/Zend/Barcode/Object/Ean13.php b/library/Zend/Barcode/Object/Ean13.php deleted file mode 100755 index 602668d97..000000000 --- a/library/Zend/Barcode/Object/Ean13.php +++ /dev/null @@ -1,198 +0,0 @@ - array( - 0 => "0001101", 1 => "0011001", 2 => "0010011", 3 => "0111101", 4 => "0100011", - 5 => "0110001", 6 => "0101111", 7 => "0111011", 8 => "0110111", 9 => "0001011" - ), - 'B' => array( - 0 => "0100111", 1 => "0110011", 2 => "0011011", 3 => "0100001", 4 => "0011101", - 5 => "0111001", 6 => "0000101", 7 => "0010001", 8 => "0001001", 9 => "0010111" - ), - 'C' => array( - 0 => "1110010", 1 => "1100110", 2 => "1101100", 3 => "1000010", 4 => "1011100", - 5 => "1001110", 6 => "1010000", 7 => "1000100", 8 => "1001000", 9 => "1110100" - )); - - protected $parities = array( - 0 => array('A','A','A','A','A','A'), - 1 => array('A','A','B','A','B','B'), - 2 => array('A','A','B','B','A','B'), - 3 => array('A','A','B','B','B','A'), - 4 => array('A','B','A','A','B','B'), - 5 => array('A','B','B','A','A','B'), - 6 => array('A','B','B','B','A','A'), - 7 => array('A','B','A','B','A','B'), - 8 => array('A','B','A','B','B','A'), - 9 => array('A','B','B','A','B','A') - ); - - /** - * Default options for Postnet barcode - * @return void - */ - protected function getDefaultOptions() - { - $this->barcodeLength = 13; - $this->mandatoryChecksum = true; - $this->mandatoryQuietZones = true; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (3 * $this->barThinWidth) * $this->factor; - $middleCharacter = (5 * $this->barThinWidth) * $this->factor; - $stopCharacter = (3 * $this->barThinWidth) * $this->factor; - $encodedData = (7 * $this->barThinWidth) * $this->factor * 12; - return $quietZone + $startCharacter + $middleCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Partial check of interleaved EAN/UPC barcode - * @return void - */ - protected function checkSpecificParams() - { - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - $height = ($this->drawText) ? 1.1 : 1; - - // Start character (101) - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - - $textTable = str_split($this->getText()); - $parity = $this->parities[$textTable[0]]; - - // First part - for ($i = 1; $i < 7; $i++) { - $bars = str_split($this->codingMap[$parity[$i - 1]][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - // Middle character (01010) - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - - // Second part - for ($i = 7; $i < 13; $i++) { - $bars = str_split($this->codingMap['C'][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - // Stop character (101) - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - return $barcodeTable; - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $this->checkText($text); - $factor = 3; - $checksum = 0; - - for ($i = strlen($text); $i > 0; $i --) { - $checksum += intval($text{$i - 1}) * $factor; - $factor = 4 - $factor; - } - - $checksum = (10 - ($checksum % 10)) % 10; - - return $checksum; - } - - /** - * Partial function to draw text - * @return void - */ - protected function drawText() - { - if (get_class($this) == 'Zend\Barcode\Object\Ean13') { - $this->drawEan13Text(); - } else { - parent::drawText(); - } - } - - protected function drawEan13Text() - { - if ($this->drawText) { - $text = $this->getTextToDisplay(); - $characterWidth = (7 * $this->barThinWidth) * $this->factor; - $leftPosition = $this->getQuietZone() - $characterWidth; - for ($i = 0; $i < $this->barcodeLength; $i ++) { - $this->addText( - $text{$i}, - $this->fontSize * $this->factor, - $this->rotate( - $leftPosition, - (int) $this->withBorder * 2 + $this->factor * ($this->barHeight + $this->fontSize) + 1 - ), - $this->font, - $this->foreColor, - 'left', - - $this->orientation - ); - switch ($i) { - case 0: - $factor = 3; - break; - case 6: - $factor = 4; - break; - default: - $factor = 0; - } - $leftPosition = $leftPosition + $characterWidth + ($factor * $this->barThinWidth * $this->factor); - } - } - } -} diff --git a/library/Zend/Barcode/Object/Ean2.php b/library/Zend/Barcode/Object/Ean2.php deleted file mode 100755 index b260a62d6..000000000 --- a/library/Zend/Barcode/Object/Ean2.php +++ /dev/null @@ -1,38 +0,0 @@ - array('A','A'), - 1 => array('A','B'), - 2 => array('B','A'), - 3 => array('B','B') - ); - - /** - * Default options for Ean2 barcode - * @return void - */ - protected function getDefaultOptions() - { - $this->barcodeLength = 2; - } - - protected function getParity($i) - { - $modulo = $this->getText() % 4; - return $this->parities[$modulo][$i]; - } -} diff --git a/library/Zend/Barcode/Object/Ean5.php b/library/Zend/Barcode/Object/Ean5.php deleted file mode 100755 index c04708bdc..000000000 --- a/library/Zend/Barcode/Object/Ean5.php +++ /dev/null @@ -1,124 +0,0 @@ - array('B','B','A','A','A'), - 1 => array('B','A','B','A','A'), - 2 => array('B','A','A','B','A'), - 3 => array('B','A','A','A','B'), - 4 => array('A','B','B','A','A'), - 5 => array('A','A','B','B','A'), - 6 => array('A','A','A','B','B'), - 7 => array('A','B','A','B','A'), - 8 => array('A','B','A','A','B'), - 9 => array('A','A','B','A','B') - ); - - /** - * Default options for Ean5 barcode - * @return void - */ - protected function getDefaultOptions() - { - $this->barcodeLength = 5; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (5 * $this->barThinWidth) * $this->factor; - $middleCharacter = (2 * $this->barThinWidth) * $this->factor; - $encodedData = (7 * $this->barThinWidth) * $this->factor; - return $quietZone + $startCharacter + ($this->barcodeLength - 1) * $middleCharacter + $this->barcodeLength * $encodedData + $quietZone; - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - - // Start character (01011) - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - - $firstCharacter = true; - $textTable = str_split($this->getText()); - - // Characters - for ($i = 0; $i < $this->barcodeLength; $i++) { - if ($firstCharacter) { - $firstCharacter = false; - } else { - // Intermediate character (01) - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - } - $bars = str_split($this->codingMap[$this->getParity($i)][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - return $barcodeTable; - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $this->checkText($text); - $checksum = 0; - - for ($i = 0; $i < $this->barcodeLength; $i ++) { - $checksum += intval($text{$i}) * ($i % 2 ? 9 : 3); - } - - return ($checksum % 10); - } - - /** - * @param int $i - * @return string - */ - protected function getParity($i) - { - $checksum = $this->getChecksum($this->getText()); - return $this->parities[$checksum][$i]; - } - - /** - * Retrieve text to encode - * @return string - */ - public function getText() - { - return $this->addLeadingZeros($this->text); - } -} diff --git a/library/Zend/Barcode/Object/Ean8.php b/library/Zend/Barcode/Object/Ean8.php deleted file mode 100755 index b36ec3e4c..000000000 --- a/library/Zend/Barcode/Object/Ean8.php +++ /dev/null @@ -1,146 +0,0 @@ -barcodeLength = 8; - $this->mandatoryChecksum = true; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (3 * $this->barThinWidth) * $this->factor; - $middleCharacter = (5 * $this->barThinWidth) * $this->factor; - $stopCharacter = (3 * $this->barThinWidth) * $this->factor; - $encodedData = (7 * $this->barThinWidth) * $this->factor * 8; - return $quietZone + $startCharacter + $middleCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - $height = ($this->drawText) ? 1.1 : 1; - - // Start character (101) - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - - $textTable = str_split($this->getText()); - - // First part - for ($i = 0; $i < 4; $i++) { - $bars = str_split($this->codingMap['A'][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - // Middle character (01010) - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - - // Second part - for ($i = 4; $i < 8; $i++) { - $bars = str_split($this->codingMap['C'][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - // Stop character (101) - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - return $barcodeTable; - } - - /** - * Partial function to draw text - * @return void - */ - protected function drawText() - { - if ($this->drawText) { - $text = $this->getTextToDisplay(); - $characterWidth = (7 * $this->barThinWidth) * $this->factor; - $leftPosition = $this->getQuietZone() + (3 * $this->barThinWidth) * $this->factor; - for ($i = 0; $i < $this->barcodeLength; $i ++) { - $this->addText( - $text{$i}, - $this->fontSize * $this->factor, - $this->rotate( - $leftPosition, - (int) $this->withBorder * 2 + $this->factor * ($this->barHeight + $this->fontSize) + 1 - ), - $this->font, - $this->foreColor, - 'left', - - $this->orientation - ); - switch ($i) { - case 3: - $factor = 4; - break; - default: - $factor = 0; - } - $leftPosition = $leftPosition + $characterWidth + ($factor * $this->barThinWidth * $this->factor); - } - } - } - - /** - * Particular validation for Ean8 barcode objects - * (to suppress checksum character substitution) - * - * @param string $value - * @param array $options - * @throws Exception\BarcodeValidationException - */ - protected function validateSpecificText($value, $options = array()) - { - $validator = new BarcodeValidator(array( - 'adapter' => 'ean8', - 'checksum' => false, - )); - - $value = $this->addLeadingZeros($value, true); - - if (!$validator->isValid($value)) { - $message = implode("\n", $validator->getMessages()); - throw new Exception\BarcodeValidationException($message); - } - } -} diff --git a/library/Zend/Barcode/Object/Error.php b/library/Zend/Barcode/Object/Error.php deleted file mode 100755 index 15c36bcab..000000000 --- a/library/Zend/Barcode/Object/Error.php +++ /dev/null @@ -1,83 +0,0 @@ -instructions = array(); - $this->addText('ERROR:', 10, array(5, 18), $this->font, 0, 'left'); - $this->addText($this->text, 10, array(5, 32), $this->font, 0, 'left'); - return $this->instructions; - } - - /** - * For compatibility reason - * @return void - */ - protected function prepareBarcode() - { - } - - /** - * For compatibility reason - * @return void - */ - protected function checkSpecificParams() - { - } - - /** - * For compatibility reason - * @return void - */ - protected function calculateBarcodeWidth() - { - } -} diff --git a/library/Zend/Barcode/Object/Exception/BarcodeValidationException.php b/library/Zend/Barcode/Object/Exception/BarcodeValidationException.php deleted file mode 100755 index 64f3ea56e..000000000 --- a/library/Zend/Barcode/Object/Exception/BarcodeValidationException.php +++ /dev/null @@ -1,17 +0,0 @@ -barcodeLength = 12; - $this->mandatoryChecksum = true; - } - - /** - * Retrieve text to display - * @return string - */ - public function getTextToDisplay() - { - return preg_replace('/([0-9]{2})([0-9]{3})([0-9]{3})([0-9]{3})([0-9])/', '$1.$2 $3.$4 $5', $this->getText()); - } - - /** - * Check allowed characters - * @param string $value - * @return string - * @throws Exception\BarcodeValidationException - */ - public function validateText($value) - { - $this->validateSpecificText($value, array('validator' => $this->getType())); - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $this->checkText($text); - $checksum = 0; - - for ($i = strlen($text); $i > 0; $i --) { - $checksum += intval($text{$i - 1}) * (($i % 2) ? 4 : 9); - } - - $checksum = (10 - ($checksum % 10)) % 10; - - return $checksum; - } -} diff --git a/library/Zend/Barcode/Object/Itf14.php b/library/Zend/Barcode/Object/Itf14.php deleted file mode 100755 index 361f9bd56..000000000 --- a/library/Zend/Barcode/Object/Itf14.php +++ /dev/null @@ -1,26 +0,0 @@ -barcodeLength = 14; - $this->mandatoryChecksum = true; - } -} diff --git a/library/Zend/Barcode/Object/Leitcode.php b/library/Zend/Barcode/Object/Leitcode.php deleted file mode 100755 index f82f3a5c0..000000000 --- a/library/Zend/Barcode/Object/Leitcode.php +++ /dev/null @@ -1,35 +0,0 @@ -barcodeLength = 14; - $this->mandatoryChecksum = true; - } - - /** - * Retrieve text to display - * @return string - */ - public function getTextToDisplay() - { - return preg_replace('/([0-9]{5})([0-9]{3})([0-9]{3})([0-9]{2})([0-9])/', '$1.$2.$3.$4 $5', $this->getText()); - } -} diff --git a/library/Zend/Barcode/Object/ObjectInterface.php b/library/Zend/Barcode/Object/ObjectInterface.php deleted file mode 100755 index 836e0138e..000000000 --- a/library/Zend/Barcode/Object/ObjectInterface.php +++ /dev/null @@ -1,337 +0,0 @@ - "00111", - 1 => "11100", - 2 => "11010", - 3 => "11001", - 4 => "10110", - 5 => "10101", - 6 => "10011", - 7 => "01110", - 8 => "01101", - 9 => "01011" - ); -} diff --git a/library/Zend/Barcode/Object/Postnet.php b/library/Zend/Barcode/Object/Postnet.php deleted file mode 100755 index 07b1d3c2d..000000000 --- a/library/Zend/Barcode/Object/Postnet.php +++ /dev/null @@ -1,110 +0,0 @@ - "11000", - 1 => "00011", - 2 => "00101", - 3 => "00110", - 4 => "01001", - 5 => "01010", - 6 => "01100", - 7 => "10001", - 8 => "10010", - 9 => "10100" - ); - - /** - * Default options for Postnet barcode - * @return void - */ - protected function getDefaultOptions() - { - $this->barThinWidth = 2; - $this->barHeight = 20; - $this->drawText = false; - $this->stretchText = true; - $this->mandatoryChecksum = true; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (2 * $this->barThinWidth) * $this->factor; - $stopCharacter = (1 * $this->barThinWidth) * $this->factor; - $encodedData = (10 * $this->barThinWidth) * $this->factor * strlen($this->getText()); - return $quietZone + $startCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Partial check of interleaved Postnet barcode - * @return void - */ - protected function checkSpecificParams() - { - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - - // Start character (1) - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - - // Text to encode - $textTable = str_split($this->getText()); - foreach ($textTable as $char) { - $bars = str_split($this->codingMap[$char]); - foreach ($bars as $b) { - $barcodeTable[] = array(1, $this->barThinWidth, 0.5 - $b * 0.5, 1); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - } - } - - // Stop character (1) - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - return $barcodeTable; - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $this->checkText($text); - $sum = array_sum(str_split($text)); - $checksum = (10 - ($sum % 10)) % 10; - return $checksum; - } -} diff --git a/library/Zend/Barcode/Object/Royalmail.php b/library/Zend/Barcode/Object/Royalmail.php deleted file mode 100755 index 23d8a709a..000000000 --- a/library/Zend/Barcode/Object/Royalmail.php +++ /dev/null @@ -1,137 +0,0 @@ - '3300', '1' => '3210', '2' => '3201', '3' => '2310', '4' => '2301', '5' => '2211', - '6' => '3120', '7' => '3030', '8' => '3021', '9' => '2130', 'A' => '2121', 'B' => '2031', - 'C' => '3102', 'D' => '3012', 'E' => '3003', 'F' => '2112', 'G' => '2103', 'H' => '2013', - 'I' => '1320', 'J' => '1230', 'K' => '1221', 'L' => '0330', 'M' => '0321', 'N' => '0231', - 'O' => '1302', 'P' => '1212', 'Q' => '1203', 'R' => '0312', 'S' => '0303', 'T' => '0213', - 'U' => '1122', 'V' => '1032', 'W' => '1023', 'X' => '0132', 'Y' => '0123', 'Z' => '0033' - ); - - protected $rows = array( - '0' => 1, '1' => 1, '2' => 1, '3' => 1, '4' => 1, '5' => 1, - '6' => 2, '7' => 2, '8' => 2, '9' => 2, 'A' => 2, 'B' => 2, - 'C' => 3, 'D' => 3, 'E' => 3, 'F' => 3, 'G' => 3, 'H' => 3, - 'I' => 4, 'J' => 4, 'K' => 4, 'L' => 4, 'M' => 4, 'N' => 4, - 'O' => 5, 'P' => 5, 'Q' => 5, 'R' => 5, 'S' => 5, 'T' => 5, - 'U' => 0, 'V' => 0, 'W' => 0, 'X' => 0, 'Y' => 0, 'Z' => 0, - ); - - protected $columns = array( - '0' => 1, '1' => 2, '2' => 3, '3' => 4, '4' => 5, '5' => 0, - '6' => 1, '7' => 2, '8' => 3, '9' => 4, 'A' => 5, 'B' => 0, - 'C' => 1, 'D' => 2, 'E' => 3, 'F' => 4, 'G' => 5, 'H' => 0, - 'I' => 1, 'J' => 2, 'K' => 3, 'L' => 4, 'M' => 5, 'N' => 0, - 'O' => 1, 'P' => 2, 'Q' => 3, 'R' => 4, 'S' => 5, 'T' => 0, - 'U' => 1, 'V' => 2, 'W' => 3, 'X' => 4, 'Y' => 5, 'Z' => 0, - ); - - /** - * Default options for Postnet barcode - * @return void - */ - protected function getDefaultOptions() - { - $this->barThinWidth = 2; - $this->barHeight = 20; - $this->drawText = false; - $this->stretchText = true; - $this->mandatoryChecksum = true; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (2 * $this->barThinWidth) * $this->factor; - $stopCharacter = (1 * $this->barThinWidth) * $this->factor; - $encodedData = (8 * $this->barThinWidth) * $this->factor * strlen($this->getText()); - return $quietZone + $startCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Partial check of interleaved Postnet barcode - * @return void - */ - protected function checkSpecificParams() - { - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - - // Start character (1) - $barcodeTable[] = array(1, $this->barThinWidth, 0, 5/8); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - - // Text to encode - $textTable = str_split($this->getText()); - foreach ($textTable as $char) { - $bars = str_split($this->codingMap[$char]); - foreach ($bars as $b) { - $barcodeTable[] = array(1, $this->barThinWidth, ($b > 1 ? 3/8 : 0), ($b % 2 ? 5/8 : 1)); - $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); - } - } - - // Stop character (1) - $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); - return $barcodeTable; - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $this->checkText($text); - $values = str_split($text); - $rowvalue = 0; - $colvalue = 0; - foreach ($values as $row) { - $rowvalue += $this->rows[$row]; - $colvalue += $this->columns[$row]; - } - - $rowvalue %= 6; - $colvalue %= 6; - - $rowchkvalue = array_keys($this->rows, $rowvalue); - $colchkvalue = array_keys($this->columns, $colvalue); - return current(array_intersect($rowchkvalue, $colchkvalue)); - } -} diff --git a/library/Zend/Barcode/Object/Upca.php b/library/Zend/Barcode/Object/Upca.php deleted file mode 100755 index 1add66c78..000000000 --- a/library/Zend/Barcode/Object/Upca.php +++ /dev/null @@ -1,144 +0,0 @@ -barcodeLength = 12; - $this->mandatoryChecksum = true; - $this->mandatoryQuietZones = true; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (3 * $this->barThinWidth) * $this->factor; - $middleCharacter = (5 * $this->barThinWidth) * $this->factor; - $stopCharacter = (3 * $this->barThinWidth) * $this->factor; - $encodedData = (7 * $this->barThinWidth) * $this->factor * 12; - return $quietZone + $startCharacter + $middleCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - $height = ($this->drawText) ? 1.1 : 1; - - // Start character (101) - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - - $textTable = str_split($this->getText()); - - // First character - $bars = str_split($this->codingMap['A'][$textTable[0]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, $height); - } - - // First part - for ($i = 1; $i < 6; $i++) { - $bars = str_split($this->codingMap['A'][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - // Middle character (01010) - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - - // Second part - for ($i = 6; $i < 11; $i++) { - $bars = str_split($this->codingMap['C'][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - // Last character - $bars = str_split($this->codingMap['C'][$textTable[11]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, $height); - } - - // Stop character (101) - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - return $barcodeTable; - } - - /** - * Partial function to draw text - * @return void - */ - protected function drawText() - { - if ($this->drawText) { - $text = $this->getTextToDisplay(); - $characterWidth = (7 * $this->barThinWidth) * $this->factor; - $leftPosition = $this->getQuietZone() - $characterWidth; - for ($i = 0; $i < $this->barcodeLength; $i ++) { - $fontSize = $this->fontSize; - if ($i == 0 || $i == 11) { - $fontSize *= 0.8; - } - $this->addText( - $text{$i}, - $fontSize * $this->factor, - $this->rotate( - $leftPosition, - (int) $this->withBorder * 2 + $this->factor * ($this->barHeight + $fontSize) + 1 - ), - $this->font, - $this->foreColor, - 'left', - - $this->orientation - ); - switch ($i) { - case 0: - $factor = 10; - break; - case 5: - $factor = 4; - break; - case 10: - $factor = 11; - break; - default: - $factor = 0; - } - $leftPosition = $leftPosition + $characterWidth + ($factor * $this->barThinWidth * $this->factor); - } - } - } -} diff --git a/library/Zend/Barcode/Object/Upce.php b/library/Zend/Barcode/Object/Upce.php deleted file mode 100755 index 2114b11e3..000000000 --- a/library/Zend/Barcode/Object/Upce.php +++ /dev/null @@ -1,199 +0,0 @@ - array( - 0 => array('B','B','B','A','A','A'), - 1 => array('B','B','A','B','A','A'), - 2 => array('B','B','A','A','B','A'), - 3 => array('B','B','A','A','A','B'), - 4 => array('B','A','B','B','A','A'), - 5 => array('B','A','A','B','B','A'), - 6 => array('B','A','A','A','B','B'), - 7 => array('B','A','B','A','B','A'), - 8 => array('B','A','B','A','A','B'), - 9 => array('B','A','A','B','A','B')), - 1 => array( - 0 => array('A','A','A','B','B','B'), - 1 => array('A','A','B','A','B','B'), - 2 => array('A','A','B','B','A','B'), - 3 => array('A','A','B','B','B','A'), - 4 => array('A','B','A','A','B','B'), - 5 => array('A','B','B','A','A','B'), - 6 => array('A','B','B','B','A','A'), - 7 => array('A','B','A','B','A','B'), - 8 => array('A','B','A','B','B','A'), - 9 => array('A','B','B','A','B','A')) - ); - - /** - * Default options for Postnet barcode - * @return void - */ - protected function getDefaultOptions() - { - $this->barcodeLength = 8; - $this->mandatoryChecksum = true; - $this->mandatoryQuietZones = true; - } - - /** - * Retrieve text to encode - * @return string - */ - public function getText() - { - $text = parent::getText(); - if ($text[0] != 1) { - $text[0] = 0; - } - return $text; - } - - /** - * Width of the barcode (in pixels) - * @return int - */ - protected function calculateBarcodeWidth() - { - $quietZone = $this->getQuietZone(); - $startCharacter = (3 * $this->barThinWidth) * $this->factor; - $stopCharacter = (6 * $this->barThinWidth) * $this->factor; - $encodedData = (7 * $this->barThinWidth) * $this->factor * 6; - return $quietZone + $startCharacter + $encodedData + $stopCharacter + $quietZone; - } - - /** - * Prepare array to draw barcode - * @return array - */ - protected function prepareBarcode() - { - $barcodeTable = array(); - $height = ($this->drawText) ? 1.1 : 1; - - // Start character (101) - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - - $textTable = str_split($this->getText()); - $system = 0; - if ($textTable[0] == 1) { - $system = 1; - } - $checksum = $textTable[7]; - $parity = $this->parities[$system][$checksum]; - - for ($i = 1; $i < 7; $i++) { - $bars = str_split($this->codingMap[$parity[$i - 1]][$textTable[$i]]); - foreach ($bars as $b) { - $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); - } - } - - // Stop character (10101) - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(0, $this->barThinWidth, 0, $height); - $barcodeTable[] = array(1, $this->barThinWidth, 0, $height); - return $barcodeTable; - } - - /** - * Partial function to draw text - * @return void - */ - protected function drawText() - { - if ($this->drawText) { - $text = $this->getTextToDisplay(); - $characterWidth = (7 * $this->barThinWidth) * $this->factor; - $leftPosition = $this->getQuietZone() - $characterWidth; - for ($i = 0; $i < $this->barcodeLength; $i ++) { - $fontSize = $this->fontSize; - if ($i == 0 || $i == 7) { - $fontSize *= 0.8; - } - $this->addText( - $text{$i}, - $fontSize * $this->factor, - $this->rotate( - $leftPosition, - (int) $this->withBorder * 2 + $this->factor * ($this->barHeight + $fontSize) + 1 - ), - $this->font, - $this->foreColor, - 'left', - - $this->orientation - ); - switch ($i) { - case 0: - $factor = 3; - break; - case 6: - $factor = 5; - break; - default: - $factor = 0; - } - $leftPosition = $leftPosition + $characterWidth + ($factor * $this->barThinWidth * $this->factor); - } - } - } - - /** - * Particular validation for Upce barcode objects - * (to suppress checksum character substitution) - * - * @param string $value - * @param array $options - * @throws Exception\BarcodeValidationException - */ - protected function validateSpecificText($value, $options = array()) - { - $validator = new BarcodeValidator(array( - 'adapter' => 'upce', - 'checksum' => false, - )); - - $value = $this->addLeadingZeros($value, true); - - if (!$validator->isValid($value)) { - $message = implode("\n", $validator->getMessages()); - throw new Exception\BarcodeValidationException($message); - } - } - - /** - * Get barcode checksum - * - * @param string $text - * @return int - */ - public function getChecksum($text) - { - $text = $this->addLeadingZeros($text, true); - if ($text[0] != 1) { - $text[0] = 0; - } - return parent::getChecksum($text); - } -} diff --git a/library/Zend/Barcode/ObjectPluginManager.php b/library/Zend/Barcode/ObjectPluginManager.php deleted file mode 100755 index 40345f83b..000000000 --- a/library/Zend/Barcode/ObjectPluginManager.php +++ /dev/null @@ -1,77 +0,0 @@ - 'Zend\Barcode\Object\Codabar', - 'code128' => 'Zend\Barcode\Object\Code128', - 'code25' => 'Zend\Barcode\Object\Code25', - 'code25interleaved' => 'Zend\Barcode\Object\Code25interleaved', - 'code39' => 'Zend\Barcode\Object\Code39', - 'ean13' => 'Zend\Barcode\Object\Ean13', - 'ean2' => 'Zend\Barcode\Object\Ean2', - 'ean5' => 'Zend\Barcode\Object\Ean5', - 'ean8' => 'Zend\Barcode\Object\Ean8', - 'error' => 'Zend\Barcode\Object\Error', - 'identcode' => 'Zend\Barcode\Object\Identcode', - 'itf14' => 'Zend\Barcode\Object\Itf14', - 'leitcode' => 'Zend\Barcode\Object\Leitcode', - 'planet' => 'Zend\Barcode\Object\Planet', - 'postnet' => 'Zend\Barcode\Object\Postnet', - 'royalmail' => 'Zend\Barcode\Object\Royalmail', - 'upca' => 'Zend\Barcode\Object\Upca', - 'upce' => 'Zend\Barcode\Object\Upce', - ); - - /** - * Validate the plugin - * - * Checks that the barcode parser loaded is an instance - * of Object\AbstractObject. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Object\AbstractObject) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must extend %s\Object\AbstractObject', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Barcode/README.md b/library/Zend/Barcode/README.md deleted file mode 100755 index 2dc1c0895..000000000 --- a/library/Zend/Barcode/README.md +++ /dev/null @@ -1,14 +0,0 @@ -Barcode Component from ZF2 -========================== - -This is the Barcode component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. diff --git a/library/Zend/Barcode/Renderer/AbstractRenderer.php b/library/Zend/Barcode/Renderer/AbstractRenderer.php deleted file mode 100755 index 8a625e853..000000000 --- a/library/Zend/Barcode/Renderer/AbstractRenderer.php +++ /dev/null @@ -1,515 +0,0 @@ -setOptions($options); - } - $this->type = strtolower(substr( - get_class($this), - strlen($this->rendererNamespace) + 1 - )); - } - - /** - * Set renderer state from options array - * @param array $options - * @return AbstractRenderer - */ - public function setOptions($options) - { - foreach ($options as $key => $value) { - $method = 'set' . $key; - if (method_exists($this, $method)) { - $this->$method($value); - } - } - return $this; - } - - /** - * Set renderer namespace for autoloading - * - * @param string $namespace - * @return AbstractRenderer - */ - public function setRendererNamespace($namespace) - { - $this->rendererNamespace = $namespace; - return $this; - } - - /** - * Retrieve renderer namespace - * - * @return string - */ - public function getRendererNamespace() - { - return $this->rendererNamespace; - } - - /** - * Set whether background should be transparent - * Will work for SVG and Image (png and gif only) - * - * @param $bool - * @return $this - */ - public function setTransparentBackground($bool) - { - $this->transparentBackground = $bool; - - return $this; - } - - /** - * @return bool - */ - public function getTransparentBackground() - { - return $this->transparentBackground; - } - - /** - * Retrieve renderer type - * @return string - */ - public function getType() - { - return $this->type; - } - - /** - * Manually adjust top position - * @param int $value - * @return AbstractRenderer - * @throws Exception\OutOfRangeException - */ - public function setTopOffset($value) - { - if (!is_numeric($value) || intval($value) < 0) { - throw new Exception\OutOfRangeException( - 'Vertical position must be greater than or equals 0' - ); - } - $this->topOffset = intval($value); - return $this; - } - - /** - * Retrieve vertical adjustment - * @return int - */ - public function getTopOffset() - { - return $this->topOffset; - } - - /** - * Manually adjust left position - * @param int $value - * @return AbstractRenderer - * @throws Exception\OutOfRangeException - */ - public function setLeftOffset($value) - { - if (!is_numeric($value) || intval($value) < 0) { - throw new Exception\OutOfRangeException( - 'Horizontal position must be greater than or equals 0' - ); - } - $this->leftOffset = intval($value); - return $this; - } - - /** - * Retrieve vertical adjustment - * @return int - */ - public function getLeftOffset() - { - return $this->leftOffset; - } - - /** - * Activate/Deactivate the automatic rendering of exception - * @param bool $value - * @return AbstractRenderer - */ - public function setAutomaticRenderError($value) - { - $this->automaticRenderError = (bool) $value; - return $this; - } - - /** - * Horizontal position of the barcode in the rendering resource - * @param string $value - * @return AbstractRenderer - * @throws Exception\UnexpectedValueException - */ - public function setHorizontalPosition($value) - { - if (!in_array($value, array('left', 'center', 'right'))) { - throw new Exception\UnexpectedValueException( - "Invalid barcode position provided must be 'left', 'center' or 'right'" - ); - } - $this->horizontalPosition = $value; - return $this; - } - - /** - * Horizontal position of the barcode in the rendering resource - * @return string - */ - public function getHorizontalPosition() - { - return $this->horizontalPosition; - } - - /** - * Vertical position of the barcode in the rendering resource - * @param string $value - * @return AbstractRenderer - * @throws Exception\UnexpectedValueException - */ - public function setVerticalPosition($value) - { - if (!in_array($value, array('top', 'middle', 'bottom'))) { - throw new Exception\UnexpectedValueException( - "Invalid barcode position provided must be 'top', 'middle' or 'bottom'" - ); - } - $this->verticalPosition = $value; - return $this; - } - - /** - * Vertical position of the barcode in the rendering resource - * @return string - */ - public function getVerticalPosition() - { - return $this->verticalPosition; - } - - /** - * Set the size of a module - * @param float $value - * @return AbstractRenderer - * @throws Exception\OutOfRangeException - */ - public function setModuleSize($value) - { - if (!is_numeric($value) || floatval($value) <= 0) { - throw new Exception\OutOfRangeException( - 'Float size must be greater than 0' - ); - } - $this->moduleSize = floatval($value); - return $this; - } - - /** - * Set the size of a module - * @return float - */ - public function getModuleSize() - { - return $this->moduleSize; - } - - /** - * Retrieve the automatic rendering of exception - * @return bool - */ - public function getAutomaticRenderError() - { - return $this->automaticRenderError; - } - - /** - * Set the barcode object - * @param Object\ObjectInterface $barcode - * @return AbstractRenderer - */ - public function setBarcode(Object\ObjectInterface $barcode) - { - $this->barcode = $barcode; - return $this; - } - - /** - * Retrieve the barcode object - * @return Object\ObjectInterface - */ - public function getBarcode() - { - return $this->barcode; - } - - /** - * Checking of parameters after all settings - * @return bool - */ - public function checkParams() - { - $this->checkBarcodeObject(); - $this->checkSpecificParams(); - return true; - } - - /** - * Check if a barcode object is correctly provided - * @return void - * @throws Exception\RuntimeException - */ - protected function checkBarcodeObject() - { - if ($this->barcode === null) { - throw new Exception\RuntimeException( - 'No barcode object provided' - ); - } - } - - /** - * Calculate the left and top offset of the barcode in the - * rendering support - * - * @param float $supportHeight - * @param float $supportWidth - * @return void - */ - protected function adjustPosition($supportHeight, $supportWidth) - { - $barcodeHeight = $this->barcode->getHeight(true) * $this->moduleSize; - if ($barcodeHeight != $supportHeight && $this->topOffset == 0) { - switch ($this->verticalPosition) { - case 'middle': - $this->topOffset = floor(($supportHeight - $barcodeHeight) / 2); - break; - case 'bottom': - $this->topOffset = $supportHeight - $barcodeHeight; - break; - case 'top': - default: - $this->topOffset = 0; - break; - } - } - $barcodeWidth = $this->barcode->getWidth(true) * $this->moduleSize; - if ($barcodeWidth != $supportWidth && $this->leftOffset == 0) { - switch ($this->horizontalPosition) { - case 'center': - $this->leftOffset = floor(($supportWidth - $barcodeWidth) / 2); - break; - case 'right': - $this->leftOffset = $supportWidth - $barcodeWidth; - break; - case 'left': - default: - $this->leftOffset = 0; - break; - } - } - } - - /** - * Draw the barcode in the rendering resource - * - * @throws BarcodeException\ExceptionInterface - * @return mixed - */ - public function draw() - { - try { - $this->checkParams(); - $this->initRenderer(); - $this->drawInstructionList(); - } catch (BarcodeException\ExceptionInterface $e) { - if ($this->automaticRenderError && !($e instanceof BarcodeException\RendererCreationException)) { - $barcode = Barcode::makeBarcode( - 'error', - array('text' => $e->getMessage()) - ); - $this->setBarcode($barcode); - $this->resource = null; - $this->initRenderer(); - $this->drawInstructionList(); - } else { - throw $e; - } - } - return $this->resource; - } - - /** - * Sub process to draw the barcode instructions - * Needed by the automatic error rendering - */ - private function drawInstructionList() - { - $instructionList = $this->barcode->draw(); - foreach ($instructionList as $instruction) { - switch ($instruction['type']) { - case 'polygon': - $this->drawPolygon( - $instruction['points'], - $instruction['color'], - $instruction['filled'] - ); - break; - case 'text': //$text, $size, $position, $font, $color, $alignment = 'center', $orientation = 0) - $this->drawText( - $instruction['text'], - $instruction['size'], - $instruction['position'], - $instruction['font'], - $instruction['color'], - $instruction['alignment'], - $instruction['orientation'] - ); - break; - default: - throw new Exception\UnexpectedValueException( - 'Unkown drawing command' - ); - } - } - } - - /** - * Checking of parameters after all settings - * @return void - */ - abstract protected function checkSpecificParams(); - - /** - * Initialize the rendering resource - * @return void - */ - abstract protected function initRenderer(); - - /** - * Draw a polygon in the rendering resource - * @param array $points - * @param int $color - * @param bool $filled - */ - abstract protected function drawPolygon($points, $color, $filled = true); - - /** - * Draw a polygon in the rendering resource - * @param string $text - * @param float $size - * @param array $position - * @param string $font - * @param int $color - * @param string $alignment - * @param float $orientation - */ - abstract protected function drawText( - $text, - $size, - $position, - $font, - $color, - $alignment = 'center', - $orientation = 0 - ); -} diff --git a/library/Zend/Barcode/Renderer/Exception/ExceptionInterface.php b/library/Zend/Barcode/Renderer/Exception/ExceptionInterface.php deleted file mode 100755 index f7f4d4454..000000000 --- a/library/Zend/Barcode/Renderer/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -userHeight = intval($value); - return $this; - } - - /** - * Get barcode height - * - * @return int - */ - public function getHeight() - { - return $this->userHeight; - } - - /** - * Set barcode width - * - * @param mixed $value - * @throws Exception\OutOfRangeException - * @return self - */ - public function setWidth($value) - { - if (!is_numeric($value) || intval($value) < 0) { - throw new Exception\OutOfRangeException( - 'Image width must be greater than or equals 0' - ); - } - $this->userWidth = intval($value); - return $this; - } - - /** - * Get barcode width - * - * @return int - */ - public function getWidth() - { - return $this->userWidth; - } - - /** - * Set an image resource to draw the barcode inside - * - * @param resource $image - * @return Image - * @throws Exception\InvalidArgumentException - */ - public function setResource($image) - { - if (gettype($image) != 'resource' || get_resource_type($image) != 'gd') { - throw new Exception\InvalidArgumentException( - 'Invalid image resource provided to setResource()' - ); - } - $this->resource = $image; - return $this; - } - - /** - * Set the image type to produce (png, jpeg, gif) - * - * @param string $value - * @throws Exception\InvalidArgumentException - * @return Image - */ - public function setImageType($value) - { - if ($value == 'jpg') { - $value = 'jpeg'; - } - - if (!in_array($value, $this->allowedImageType)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid type "%s" provided to setImageType()', - $value - )); - } - - $this->imageType = $value; - return $this; - } - - /** - * Retrieve the image type to produce - * - * @return string - */ - public function getImageType() - { - return $this->imageType; - } - - /** - * Initialize the image resource - * - * @return void - */ - protected function initRenderer() - { - $barcodeWidth = $this->barcode->getWidth(true); - $barcodeHeight = $this->barcode->getHeight(true); - - if (null === $this->resource) { - $width = $barcodeWidth; - $height = $barcodeHeight; - if ($this->userWidth && $this->barcode->getType() != 'error') { - $width = $this->userWidth; - } - if ($this->userHeight && $this->barcode->getType() != 'error') { - $height = $this->userHeight; - } - - $this->resource = imagecreatetruecolor($width, $height); - - $white = imagecolorallocate($this->resource, 255, 255, 255); - imagefilledrectangle($this->resource, 0, 0, $width - 1, $height - 1, $white); - } - - $foreColor = $this->barcode->getForeColor(); - $this->imageForeColor = imagecolorallocate( - $this->resource, - ($foreColor & 0xFF0000) >> 16, - ($foreColor & 0x00FF00) >> 8, - $foreColor & 0x0000FF - ); - - $backgroundColor = $this->barcode->getBackgroundColor(); - $this->imageBackgroundColor = imagecolorallocate( - $this->resource, - ($backgroundColor & 0xFF0000) >> 16, - ($backgroundColor & 0x00FF00) >> 8, - $backgroundColor & 0x0000FF - ); - - // JPEG does not support transparency, if transparentBackground is true and - // image type is JPEG, ignore transparency - if ($this->getImageType() != "jpeg" && $this->transparentBackground) { - imagecolortransparent($this->resource, $this->imageBackgroundColor); - } - - $this->adjustPosition(imagesy($this->resource), imagesx($this->resource)); - - imagefilledrectangle( - $this->resource, - $this->leftOffset, - $this->topOffset, - $this->leftOffset + $barcodeWidth - 1, - $this->topOffset + $barcodeHeight - 1, - $this->imageBackgroundColor - ); - } - - /** - * Check barcode parameters - * - * @return void - */ - protected function checkSpecificParams() - { - $this->checkDimensions(); - } - - /** - * Check barcode dimensions - * - * @throws Exception\RuntimeException - * @return void - */ - protected function checkDimensions() - { - if ($this->resource !== null) { - if (imagesy($this->resource) < $this->barcode->getHeight(true)) { - throw new Exception\RuntimeException( - 'Barcode is define outside the image (height)' - ); - } - } else { - if ($this->userHeight) { - $height = $this->barcode->getHeight(true); - if ($this->userHeight < $height) { - throw new Exception\RuntimeException(sprintf( - "Barcode is define outside the image (calculated: '%d', provided: '%d')", - $height, - $this->userHeight - )); - } - } - } - if ($this->resource !== null) { - if (imagesx($this->resource) < $this->barcode->getWidth(true)) { - throw new Exception\RuntimeException( - 'Barcode is define outside the image (width)' - ); - } - } else { - if ($this->userWidth) { - $width = $this->barcode->getWidth(true); - if ($this->userWidth < $width) { - throw new Exception\RuntimeException(sprintf( - "Barcode is define outside the image (calculated: '%d', provided: '%d')", - $width, - $this->userWidth - )); - } - } - } - } - - /** - * Draw and render the barcode with correct headers - * - * @return mixed - */ - public function render() - { - $this->draw(); - header("Content-Type: image/" . $this->imageType); - $functionName = 'image' . $this->imageType; - $functionName($this->resource); - - ErrorHandler::start(E_WARNING); - imagedestroy($this->resource); - ErrorHandler::stop(); - } - - /** - * Draw a polygon in the image resource - * - * @param array $points - * @param int $color - * @param bool $filled - */ - protected function drawPolygon($points, $color, $filled = true) - { - $newPoints = array($points[0][0] + $this->leftOffset, - $points[0][1] + $this->topOffset, - $points[1][0] + $this->leftOffset, - $points[1][1] + $this->topOffset, - $points[2][0] + $this->leftOffset, - $points[2][1] + $this->topOffset, - $points[3][0] + $this->leftOffset, - $points[3][1] + $this->topOffset, ); - - $allocatedColor = imagecolorallocate( - $this->resource, - ($color & 0xFF0000) >> 16, - ($color & 0x00FF00) >> 8, - $color & 0x0000FF - ); - - if ($filled) { - imagefilledpolygon($this->resource, $newPoints, 4, $allocatedColor); - } else { - imagepolygon($this->resource, $newPoints, 4, $allocatedColor); - } - } - - /** - * Draw a polygon in the image resource - * - * @param string $text - * @param float $size - * @param array $position - * @param string $font - * @param int $color - * @param string $alignment - * @param float $orientation - * @throws Exception\RuntimeException - */ - protected function drawText($text, $size, $position, $font, $color, $alignment = 'center', $orientation = 0) - { - $allocatedColor = imagecolorallocate( - $this->resource, - ($color & 0xFF0000) >> 16, - ($color & 0x00FF00) >> 8, - $color & 0x0000FF - ); - - if ($font == null) { - $font = 3; - } - $position[0] += $this->leftOffset; - $position[1] += $this->topOffset; - - if (is_numeric($font)) { - if ($orientation) { - /** - * imagestring() doesn't allow orientation, if orientation - * needed: a TTF font is required. - * Throwing an exception here, allow to use automaticRenderError - * to informe user of the problem instead of simply not drawing - * the text - */ - throw new Exception\RuntimeException( - 'No orientation possible with GD internal font' - ); - } - $fontWidth = imagefontwidth($font); - $positionY = $position[1] - imagefontheight($font) + 1; - switch ($alignment) { - case 'left': - $positionX = $position[0]; - break; - case 'center': - $positionX = $position[0] - ceil(($fontWidth * strlen($text)) / 2); - break; - case 'right': - $positionX = $position[0] - ($fontWidth * strlen($text)); - break; - } - imagestring($this->resource, $font, $positionX, $positionY, $text, $color); - } else { - if (!function_exists('imagettfbbox')) { - throw new Exception\RuntimeException( - 'A font was provided, but this instance of PHP does not have TTF (FreeType) support' - ); - } - - $box = imagettfbbox($size, 0, $font, $text); - switch ($alignment) { - case 'left': - $width = 0; - break; - case 'center': - $width = ($box[2] - $box[0]) / 2; - break; - case 'right': - $width = ($box[2] - $box[0]); - break; - } - imagettftext( - $this->resource, - $size, - $orientation, - $position[0] - ($width * cos(pi() * $orientation / 180)), - $position[1] + ($width * sin(pi() * $orientation / 180)), - $allocatedColor, - $font, - $text - ); - } - } -} diff --git a/library/Zend/Barcode/Renderer/Pdf.php b/library/Zend/Barcode/Renderer/Pdf.php deleted file mode 100755 index e4e084d49..000000000 --- a/library/Zend/Barcode/Renderer/Pdf.php +++ /dev/null @@ -1,215 +0,0 @@ -resource = $pdf; - $this->page = intval($page); - - if (!count($this->resource->pages)) { - $this->page = 0; - $this->resource->pages[] = new Page( - Page::SIZE_A4 - ); - } - return $this; - } - - /** - * Check renderer parameters - * - * @return void - */ - protected function checkSpecificParams() - { - } - - /** - * Draw the barcode in the PDF, send headers and the PDF - * @return mixed - */ - public function render() - { - $this->draw(); - header("Content-Type: application/pdf"); - echo $this->resource->render(); - } - - /** - * Initialize the PDF resource - * @return void - */ - protected function initRenderer() - { - if ($this->resource === null) { - $this->resource = new PdfDocument(); - $this->resource->pages[] = new Page( - Page::SIZE_A4 - ); - } - - $pdfPage = $this->resource->pages[$this->page]; - $this->adjustPosition($pdfPage->getHeight(), $pdfPage->getWidth()); - } - - /** - * Draw a polygon in the rendering resource - * @param array $points - * @param int $color - * @param bool $filled - */ - protected function drawPolygon($points, $color, $filled = true) - { - $page = $this->resource->pages[$this->page]; - $x = array(); - $y = array(); - foreach ($points as $point) { - $x[] = $point[0] * $this->moduleSize + $this->leftOffset; - $y[] = $page->getHeight() - $point[1] * $this->moduleSize - $this->topOffset; - } - if (count($y) == 4) { - if ($x[0] != $x[3] && $y[0] == $y[3]) { - $y[0] -= ($this->moduleSize / 2); - $y[3] -= ($this->moduleSize / 2); - } - if ($x[1] != $x[2] && $y[1] == $y[2]) { - $y[1] += ($this->moduleSize / 2); - $y[2] += ($this->moduleSize / 2); - } - } - - $color = new Color\Rgb( - (($color & 0xFF0000) >> 16) / 255.0, - (($color & 0x00FF00) >> 8) / 255.0, - ($color & 0x0000FF) / 255.0 - ); - - $page->setLineColor($color); - $page->setFillColor($color); - $page->setLineWidth($this->moduleSize); - - $fillType = ($filled) - ? Page::SHAPE_DRAW_FILL_AND_STROKE - : Page::SHAPE_DRAW_STROKE; - - $page->drawPolygon($x, $y, $fillType); - } - - /** - * Draw a polygon in the rendering resource - * @param string $text - * @param float $size - * @param array $position - * @param string $font - * @param int $color - * @param string $alignment - * @param float $orientation - */ - protected function drawText( - $text, - $size, - $position, - $font, - $color, - $alignment = 'center', - $orientation = 0 - ) { - $page = $this->resource->pages[$this->page]; - $color = new Color\Rgb( - (($color & 0xFF0000) >> 16) / 255.0, - (($color & 0x00FF00) >> 8) / 255.0, - ($color & 0x0000FF) / 255.0 - ); - - $page->setLineColor($color); - $page->setFillColor($color); - $page->setFont(Font::fontWithPath($font), $size * $this->moduleSize * 1.2); - - $width = $this->widthForStringUsingFontSize( - $text, - Font::fontWithPath($font), - $size * $this->moduleSize - ); - - $angle = pi() * $orientation / 180; - $left = $position[0] * $this->moduleSize + $this->leftOffset; - $top = $page->getHeight() - $position[1] * $this->moduleSize - $this->topOffset; - - switch ($alignment) { - case 'center': - $left -= ($width / 2) * cos($angle); - $top -= ($width / 2) * sin($angle); - break; - case 'right': - $left -= $width; - break; - } - $page->rotate($left, $top, $angle); - $page->drawText($text, $left, $top); - $page->rotate($left, $top, - $angle); - } - - /** - * Calculate the width of a string: - * in case of using alignment parameter in drawText - * @param string $text - * @param Font $font - * @param float $fontSize - * @return float - */ - public function widthForStringUsingFontSize($text, $font, $fontSize) - { - $drawingString = iconv('UTF-8', 'UTF-16BE//IGNORE', $text); - $characters = array(); - for ($i = 0, $len = strlen($drawingString); $i < $len; $i++) { - $characters[] = (ord($drawingString[$i ++]) << 8) | ord($drawingString[$i]); - } - $glyphs = $font->glyphNumbersForCharacters($characters); - $widths = $font->widthsForGlyphs($glyphs); - $stringWidth = (array_sum($widths) / $font->getUnitsPerEm()) * $fontSize; - return $stringWidth; - } -} diff --git a/library/Zend/Barcode/Renderer/RendererInterface.php b/library/Zend/Barcode/Renderer/RendererInterface.php deleted file mode 100755 index 795654f30..000000000 --- a/library/Zend/Barcode/Renderer/RendererInterface.php +++ /dev/null @@ -1,161 +0,0 @@ -userHeight = intval($value); - return $this; - } - - /** - * Get barcode height - * - * @return int - */ - public function getHeight() - { - return $this->userHeight; - } - - /** - * Set barcode width - * - * @param mixed $value - * @throws Exception\OutOfRangeException - * @return self - */ - public function setWidth($value) - { - if (!is_numeric($value) || intval($value) < 0) { - throw new Exception\OutOfRangeException( - 'Svg width must be greater than or equals 0' - ); - } - $this->userWidth = intval($value); - return $this; - } - - /** - * Get barcode width - * - * @return int - */ - public function getWidth() - { - return $this->userWidth; - } - - /** - * Set an image resource to draw the barcode inside - * - * @param DOMDocument $svg - * @return Svg - */ - public function setResource(DOMDocument $svg) - { - $this->resource = $svg; - return $this; - } - - /** - * Initialize the image resource - * - * @return void - */ - protected function initRenderer() - { - $barcodeWidth = $this->barcode->getWidth(true); - $barcodeHeight = $this->barcode->getHeight(true); - - $backgroundColor = $this->barcode->getBackgroundColor(); - $imageBackgroundColor = 'rgb(' . implode(', ', array(($backgroundColor & 0xFF0000) >> 16, - ($backgroundColor & 0x00FF00) >> 8, - ($backgroundColor & 0x0000FF))) . ')'; - - $width = $barcodeWidth; - $height = $barcodeHeight; - if ($this->userWidth && $this->barcode->getType() != 'error') { - $width = $this->userWidth; - } - if ($this->userHeight && $this->barcode->getType() != 'error') { - $height = $this->userHeight; - } - if ($this->resource === null) { - $this->resource = new DOMDocument('1.0', 'utf-8'); - $this->resource->formatOutput = true; - $this->rootElement = $this->resource->createElement('svg'); - $this->rootElement->setAttribute('xmlns', "http://www.w3.org/2000/svg"); - $this->rootElement->setAttribute('version', '1.1'); - $this->rootElement->setAttribute('width', $width); - $this->rootElement->setAttribute('height', $height); - - $this->appendRootElement( - 'title', - array(), - "Barcode " . strtoupper($this->barcode->getType()) . " " . $this->barcode->getText() - ); - } else { - $this->readRootElement(); - $width = $this->rootElement->getAttribute('width'); - $height = $this->rootElement->getAttribute('height'); - } - $this->adjustPosition($height, $width); - - $rect = array('x' => $this->leftOffset, - 'y' => $this->topOffset, - 'width' => ($this->leftOffset + $barcodeWidth - 1), - 'height' => ($this->topOffset + $barcodeHeight - 1), - 'fill' => $imageBackgroundColor); - - if ($this->transparentBackground) { - $rect['fill-opacity'] = 0; - } - - $this->appendRootElement('rect', $rect); - } - - protected function readRootElement() - { - if ($this->resource !== null) { - $this->rootElement = $this->resource->documentElement; - } - } - - /** - * Append a new DOMElement to the root element - * - * @param string $tagName - * @param array $attributes - * @param string $textContent - */ - protected function appendRootElement($tagName, $attributes = array(), $textContent = null) - { - $newElement = $this->createElement($tagName, $attributes, $textContent); - $this->rootElement->appendChild($newElement); - } - - /** - * Create DOMElement - * - * @param string $tagName - * @param array $attributes - * @param string $textContent - * @return DOMElement - */ - protected function createElement($tagName, $attributes = array(), $textContent = null) - { - $element = $this->resource->createElement($tagName); - foreach ($attributes as $k => $v) { - $element->setAttribute($k, $v); - } - if ($textContent !== null) { - $element->appendChild(new DOMText((string) $textContent)); - } - return $element; - } - - /** - * Check barcode parameters - * - * @return void - */ - protected function checkSpecificParams() - { - $this->checkDimensions(); - } - - /** - * Check barcode dimensions - * - * @throws Exception\RuntimeException - * @return void - */ - protected function checkDimensions() - { - if ($this->resource !== null) { - $this->readRootElement(); - $height = (float) $this->rootElement->getAttribute('height'); - if ($height < $this->barcode->getHeight(true)) { - throw new Exception\RuntimeException( - 'Barcode is define outside the image (height)' - ); - } - } else { - if ($this->userHeight) { - $height = $this->barcode->getHeight(true); - if ($this->userHeight < $height) { - throw new Exception\RuntimeException(sprintf( - "Barcode is define outside the image (calculated: '%d', provided: '%d')", - $height, - $this->userHeight - )); - } - } - } - if ($this->resource !== null) { - $this->readRootElement(); - $width = $this->rootElement->getAttribute('width'); - if ($width < $this->barcode->getWidth(true)) { - throw new Exception\RuntimeException( - 'Barcode is define outside the image (width)' - ); - } - } else { - if ($this->userWidth) { - $width = (float) $this->barcode->getWidth(true); - if ($this->userWidth < $width) { - throw new Exception\RuntimeException(sprintf( - "Barcode is define outside the image (calculated: '%d', provided: '%d')", - $width, - $this->userWidth - )); - } - } - } - } - - /** - * Draw the barcode in the rendering resource - * @return DOMDocument - */ - public function draw() - { - parent::draw(); - $this->resource->appendChild($this->rootElement); - return $this->resource; - } - - /** - * Draw and render the barcode with correct headers - * - * @return mixed - */ - public function render() - { - $this->draw(); - header("Content-Type: image/svg+xml"); - echo $this->resource->saveXML(); - } - - /** - * Draw a polygon in the svg resource - * - * @param array $points - * @param int $color - * @param bool $filled - */ - protected function drawPolygon($points, $color, $filled = true) - { - $color = 'rgb(' . implode(', ', array(($color & 0xFF0000) >> 16, - ($color & 0x00FF00) >> 8, - ($color & 0x0000FF))) . ')'; - $orientation = $this->getBarcode()->getOrientation(); - $newPoints = array( - $points[0][0] + $this->leftOffset, - $points[0][1] + $this->topOffset, - $points[1][0] + $this->leftOffset, - $points[1][1] + $this->topOffset, - $points[2][0] + $this->leftOffset + cos(-$orientation), - $points[2][1] + $this->topOffset - sin($orientation), - $points[3][0] + $this->leftOffset + cos(-$orientation), - $points[3][1] + $this->topOffset - sin($orientation), - ); - $newPoints = implode(' ', $newPoints); - $attributes = array(); - $attributes['points'] = $newPoints; - $attributes['fill'] = $color; - - // SVG passes a rect in as the first call to drawPolygon, we'll need to intercept - // this and set transparency if necessary. - if (!$this->drawPolygonExecuted) { - if ($this->transparentBackground) { - $attributes['fill-opacity'] = '0'; - } - $this->drawPolygonExecuted = true; - } - - $this->appendRootElement('polygon', $attributes); - } - - /** - * Draw a polygon in the svg resource - * - * @param string $text - * @param float $size - * @param array $position - * @param string $font - * @param int $color - * @param string $alignment - * @param float $orientation - */ - protected function drawText($text, $size, $position, $font, $color, $alignment = 'center', $orientation = 0) - { - $color = 'rgb(' . implode(', ', array(($color & 0xFF0000) >> 16, - ($color & 0x00FF00) >> 8, - ($color & 0x0000FF))) . ')'; - $attributes = array(); - $attributes['x'] = $position[0] + $this->leftOffset; - $attributes['y'] = $position[1] + $this->topOffset; - //$attributes['font-family'] = $font; - $attributes['color'] = $color; - $attributes['font-size'] = $size * 1.2; - switch ($alignment) { - case 'left': - $textAnchor = 'start'; - break; - case 'right': - $textAnchor = 'end'; - break; - case 'center': - default: - $textAnchor = 'middle'; - } - $attributes['style'] = 'text-anchor: ' . $textAnchor; - $attributes['transform'] = 'rotate(' - . (- $orientation) - . ', ' - . ($position[0] + $this->leftOffset) - . ', ' . ($position[1] + $this->topOffset) - . ')'; - $this->appendRootElement('text', $attributes, $text); - } -} diff --git a/library/Zend/Barcode/RendererPluginManager.php b/library/Zend/Barcode/RendererPluginManager.php deleted file mode 100755 index 0c8c2f8ae..000000000 --- a/library/Zend/Barcode/RendererPluginManager.php +++ /dev/null @@ -1,62 +0,0 @@ - 'Zend\Barcode\Renderer\Image', - 'pdf' => 'Zend\Barcode\Renderer\Pdf', - 'svg' => 'Zend\Barcode\Renderer\Svg' - ); - - /** - * Validate the plugin - * - * Checks that the barcode parser loaded is an instance - * of Renderer\AbstractRenderer. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Renderer\AbstractRenderer) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must extend %s\Renderer\AbstractRenderer', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Barcode/composer.json b/library/Zend/Barcode/composer.json deleted file mode 100755 index f351302eb..000000000 --- a/library/Zend/Barcode/composer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "zendframework/zend-barcode", - "description": "provides a generic way to generate barcodes", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "barcode" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Barcode\\": "" - } - }, - "target-dir": "Zend/Barcode", - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-validator": "self.version" - }, - "require-dev": { - "zendframework/zend-servicemanager": "self.version", - "zendframework/zendpdf": "*" - }, - "suggest": { - "zendframework/zend-servicemanager": "Zend\\ServiceManager component, required when using the factory methods of Zend\\Barcode.", - "zendframework/zendpdf": "ZendPdf component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Cache/CONTRIBUTING.md b/library/Zend/Cache/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Cache/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Cache/Exception/BadMethodCallException.php b/library/Zend/Cache/Exception/BadMethodCallException.php deleted file mode 100755 index dc8af1fc5..000000000 --- a/library/Zend/Cache/Exception/BadMethodCallException.php +++ /dev/null @@ -1,15 +0,0 @@ -options = $options; - return $this; - } - - /** - * Get all pattern options - * - * @return PatternOptions - */ - public function getOptions() - { - if (null === $this->options) { - $this->setOptions(new PatternOptions()); - } - return $this->options; - } -} diff --git a/library/Zend/Cache/Pattern/CallbackCache.php b/library/Zend/Cache/Pattern/CallbackCache.php deleted file mode 100755 index a26a00746..000000000 --- a/library/Zend/Cache/Pattern/CallbackCache.php +++ /dev/null @@ -1,200 +0,0 @@ -getStorage()) { - throw new Exception\InvalidArgumentException("Missing option 'storage'"); - } - return $this; - } - - /** - * Call the specified callback or get the result from cache - * - * @param callable $callback A valid callback - * @param array $args Callback arguments - * @return mixed Result - * @throws Exception\RuntimeException if invalid cached data - * @throws \Exception - */ - public function call($callback, array $args = array()) - { - $options = $this->getOptions(); - $storage = $options->getStorage(); - $success = null; - $key = $this->generateCallbackKey($callback, $args); - $result = $storage->getItem($key, $success); - if ($success) { - if (!array_key_exists(0, $result)) { - throw new Exception\RuntimeException("Invalid cached data for key '{$key}'"); - } - - echo isset($result[1]) ? $result[1] : ''; - return $result[0]; - } - - $cacheOutput = $options->getCacheOutput(); - if ($cacheOutput) { - ob_start(); - ob_implicit_flush(false); - } - - // TODO: do not cache on errors using [set|restore]_error_handler - - try { - if ($args) { - $ret = call_user_func_array($callback, $args); - } else { - $ret = call_user_func($callback); - } - } catch (\Exception $e) { - if ($cacheOutput) { - ob_end_flush(); - } - throw $e; - } - - if ($cacheOutput) { - $data = array($ret, ob_get_flush()); - } else { - $data = array($ret); - } - - $storage->setItem($key, $data); - - return $ret; - } - - /** - * function call handler - * - * @param string $function Function name to call - * @param array $args Function arguments - * @return mixed - * @throws Exception\RuntimeException - * @throws \Exception - */ - public function __call($function, array $args) - { - return $this->call($function, $args); - } - - /** - * Generate a unique key in base of a key representing the callback part - * and a key representing the arguments part. - * - * @param callable $callback A valid callback - * @param array $args Callback arguments - * @return string - * @throws Exception\RuntimeException - * @throws Exception\InvalidArgumentException - */ - public function generateKey($callback, array $args = array()) - { - return $this->generateCallbackKey($callback, $args); - } - - /** - * Generate a unique key in base of a key representing the callback part - * and a key representing the arguments part. - * - * @param callable $callback A valid callback - * @param array $args Callback arguments - * @throws Exception\RuntimeException if callback not serializable - * @throws Exception\InvalidArgumentException if invalid callback - * @return string - */ - protected function generateCallbackKey($callback, array $args) - { - if (!is_callable($callback, false, $callbackKey)) { - throw new Exception\InvalidArgumentException('Invalid callback'); - } - - // functions, methods and classnames are case-insensitive - $callbackKey = strtolower($callbackKey); - - // generate a unique key of object callbacks - if (is_object($callback)) { // Closures & __invoke - $object = $callback; - } elseif (isset($callback[0])) { // array($object, 'method') - $object = $callback[0]; - } - if (isset($object)) { - ErrorHandler::start(); - try { - $serializedObject = serialize($object); - } catch (\Exception $e) { - ErrorHandler::stop(); - throw new Exception\RuntimeException("Can't serialize callback: see previous exception", 0, $e); - } - $error = ErrorHandler::stop(); - - if (!$serializedObject) { - throw new Exception\RuntimeException( - sprintf('Cannot serialize callback%s', ($error ? ': ' . $error->getMessage() : '')), - 0, - $error - ); - } - $callbackKey.= $serializedObject; - } - - return md5($callbackKey) . $this->generateArgumentsKey($args); - } - - /** - * Generate a unique key of the argument part. - * - * @param array $args - * @throws Exception\RuntimeException - * @return string - */ - protected function generateArgumentsKey(array $args) - { - if (!$args) { - return ''; - } - - ErrorHandler::start(); - try { - $serializedArgs = serialize(array_values($args)); - } catch (\Exception $e) { - ErrorHandler::stop(); - throw new Exception\RuntimeException("Can't serialize arguments: see previous exception", 0, $e); - } - $error = ErrorHandler::stop(); - - if (!$serializedArgs) { - throw new Exception\RuntimeException( - sprintf('Cannot serialize arguments%s', ($error ? ': ' . $error->getMessage() : '')), - 0, - $error - ); - } - - return md5($serializedArgs); - } -} diff --git a/library/Zend/Cache/Pattern/CaptureCache.php b/library/Zend/Cache/Pattern/CaptureCache.php deleted file mode 100755 index 7d5cec698..000000000 --- a/library/Zend/Cache/Pattern/CaptureCache.php +++ /dev/null @@ -1,388 +0,0 @@ -detectPageId(); - } - - $that = $this; - ob_start(function ($content) use ($that, $pageId) { - $that->set($content, $pageId); - - // http://php.net/manual/function.ob-start.php - // -> If output_callback returns FALSE original input is sent to the browser. - return false; - }); - - ob_implicit_flush(false); - } - - /** - * Write content to page identity - * - * @param string $content - * @param null|string $pageId - * @throws Exception\LogicException - */ - public function set($content, $pageId = null) - { - $publicDir = $this->getOptions()->getPublicDir(); - if ($publicDir === null) { - throw new Exception\LogicException("Option 'public_dir' no set"); - } - - if ($pageId === null) { - $pageId = $this->detectPageId(); - } - - $path = $this->pageId2Path($pageId); - $file = $path . DIRECTORY_SEPARATOR . $this->pageId2Filename($pageId); - - $this->createDirectoryStructure($publicDir . DIRECTORY_SEPARATOR . $path); - $this->putFileContent($publicDir . DIRECTORY_SEPARATOR . $file, $content); - } - - /** - * Get from cache - * - * @param null|string $pageId - * @return string|null - * @throws Exception\LogicException - * @throws Exception\RuntimeException - */ - public function get($pageId = null) - { - $publicDir = $this->getOptions()->getPublicDir(); - if ($publicDir === null) { - throw new Exception\LogicException("Option 'public_dir' no set"); - } - - if ($pageId === null) { - $pageId = $this->detectPageId(); - } - - $file = $publicDir - . DIRECTORY_SEPARATOR . $this->pageId2Path($pageId) - . DIRECTORY_SEPARATOR . $this->pageId2Filename($pageId); - - if (file_exists($file)) { - ErrorHandler::start(); - $content = file_get_contents($file); - $error = ErrorHandler::stop(); - if ($content === false) { - throw new Exception\RuntimeException("Failed to read cached pageId '{$pageId}'", 0, $error); - } - return $content; - } - } - - /** - * Checks if a cache with given id exists - * - * @param null|string $pageId - * @throws Exception\LogicException - * @return bool - */ - public function has($pageId = null) - { - $publicDir = $this->getOptions()->getPublicDir(); - if ($publicDir === null) { - throw new Exception\LogicException("Option 'public_dir' no set"); - } - - if ($pageId === null) { - $pageId = $this->detectPageId(); - } - - $file = $publicDir - . DIRECTORY_SEPARATOR . $this->pageId2Path($pageId) - . DIRECTORY_SEPARATOR . $this->pageId2Filename($pageId); - - return file_exists($file); - } - - /** - * Remove from cache - * - * @param null|string $pageId - * @throws Exception\LogicException - * @throws Exception\RuntimeException - * @return bool - */ - public function remove($pageId = null) - { - $publicDir = $this->getOptions()->getPublicDir(); - if ($publicDir === null) { - throw new Exception\LogicException("Option 'public_dir' no set"); - } - - if ($pageId === null) { - $pageId = $this->detectPageId(); - } - - $file = $publicDir - . DIRECTORY_SEPARATOR . $this->pageId2Path($pageId) - . DIRECTORY_SEPARATOR . $this->pageId2Filename($pageId); - - if (file_exists($file)) { - ErrorHandler::start(); - $res = unlink($file); - $err = ErrorHandler::stop(); - if (!$res) { - throw new Exception\RuntimeException("Failed to remove cached pageId '{$pageId}'", 0, $err); - } - return true; - } - - return false; - } - - /** - * Clear cached pages matching glob pattern - * - * @param string $pattern - * @throws Exception\LogicException - */ - public function clearByGlob($pattern = '**') - { - $publicDir = $this->getOptions()->getPublicDir(); - if ($publicDir === null) { - throw new Exception\LogicException("Option 'public_dir' no set"); - } - - $it = new \GlobIterator( - $publicDir . '/' . $pattern, - \GlobIterator::CURRENT_AS_SELF | \GlobIterator::SKIP_DOTS | \GlobIterator::UNIX_PATHS - ); - foreach ($it as $pathname => $entry) { - if ($entry->isFile()) { - unlink($pathname); - } - } - } - - /** - * Determine the page to save from the request - * - * @throws Exception\RuntimeException - * @return string - */ - protected function detectPageId() - { - if (!isset($_SERVER['REQUEST_URI'])) { - throw new Exception\RuntimeException("Can't auto-detect current page identity"); - } - - return $_SERVER['REQUEST_URI']; - } - - /** - * Get filename for page id - * - * @param string $pageId - * @return string - */ - protected function pageId2Filename($pageId) - { - if (substr($pageId, -1) === '/') { - return $this->getOptions()->getIndexFilename(); - } - - return basename($pageId); - } - - /** - * Get path for page id - * - * @param string $pageId - * @return string - */ - protected function pageId2Path($pageId) - { - if (substr($pageId, -1) == '/') { - $path = rtrim($pageId, '/'); - } else { - $path = dirname($pageId); - } - - // convert requested "/" to the valid local directory separator - if ('/' != DIRECTORY_SEPARATOR) { - $path = str_replace('/', DIRECTORY_SEPARATOR, $path); - } - - return $path; - } - - /** - * Write content to a file - * - * @param string $file File complete path - * @param string $data Data to write - * @return void - * @throws Exception\RuntimeException - */ - protected function putFileContent($file, $data) - { - $options = $this->getOptions(); - $locking = $options->getFileLocking(); - $perm = $options->getFilePermission(); - $umask = $options->getUmask(); - if ($umask !== false && $perm !== false) { - $perm = $perm & ~$umask; - } - - ErrorHandler::start(); - - $umask = ($umask !== false) ? umask($umask) : false; - $rs = file_put_contents($file, $data, $locking ? LOCK_EX : 0); - if ($umask) { - umask($umask); - } - - if ($rs === false) { - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error writing file '{$file}'", 0, $err); - } - - if ($perm !== false && !chmod($file, $perm)) { - $oct = decoct($perm); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("chmod('{$file}', 0{$oct}) failed", 0, $err); - } - - ErrorHandler::stop(); - } - - /** - * Creates directory if not already done. - * - * @param string $pathname - * @return void - * @throws Exception\RuntimeException - */ - protected function createDirectoryStructure($pathname) - { - // Directory structure already exists - if (file_exists($pathname)) { - return; - } - - $options = $this->getOptions(); - $perm = $options->getDirPermission(); - $umask = $options->getUmask(); - if ($umask !== false && $perm !== false) { - $perm = $perm & ~$umask; - } - - ErrorHandler::start(); - - if ($perm === false) { - // build-in mkdir function is enough - - $umask = ($umask !== false) ? umask($umask) : false; - $res = mkdir($pathname, ($perm !== false) ? $perm : 0777, true); - - if ($umask !== false) { - umask($umask); - } - - if (!$res) { - $oct = ($perm === false) ? '777' : decoct($perm); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("mkdir('{$pathname}', 0{$oct}, true) failed", 0, $err); - } - - if ($perm !== false && !chmod($pathname, $perm)) { - $oct = decoct($perm); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("chmod('{$pathname}', 0{$oct}) failed", 0, $err); - } - } else { - // build-in mkdir function sets permission together with current umask - // which doesn't work well on multo threaded webservers - // -> create directories one by one and set permissions - - // find existing path and missing path parts - $parts = array(); - $path = $pathname; - while (!file_exists($path)) { - array_unshift($parts, basename($path)); - $nextPath = dirname($path); - if ($nextPath === $path) { - break; - } - $path = $nextPath; - } - - // make all missing path parts - foreach ($parts as $part) { - $path.= DIRECTORY_SEPARATOR . $part; - - // create a single directory, set and reset umask immediately - $umask = ($umask !== false) ? umask($umask) : false; - $res = mkdir($path, ($perm === false) ? 0777 : $perm, false); - if ($umask !== false) { - umask($umask); - } - - if (!$res) { - $oct = ($perm === false) ? '777' : decoct($perm); - ErrorHandler::stop(); - throw new Exception\RuntimeException( - "mkdir('{$path}', 0{$oct}, false) failed" - ); - } - - if ($perm !== false && !chmod($path, $perm)) { - $oct = decoct($perm); - ErrorHandler::stop(); - throw new Exception\RuntimeException( - "chmod('{$path}', 0{$oct}) failed" - ); - } - } - } - - ErrorHandler::stop(); - } - - /** - * Returns the generated file name. - * - * @param null|string $pageId - * @return string - */ - public function getFilename($pageId = null) - { - if ($pageId === null) { - $pageId = $this->detectPageId(); - } - - $publicDir = $this->getOptions()->getPublicDir(); - $path = $this->pageId2Path($pageId); - $file = $path . DIRECTORY_SEPARATOR . $this->pageId2Filename($pageId); - - return $publicDir . $file; - } -} diff --git a/library/Zend/Cache/Pattern/ClassCache.php b/library/Zend/Cache/Pattern/ClassCache.php deleted file mode 100755 index 238feed5e..000000000 --- a/library/Zend/Cache/Pattern/ClassCache.php +++ /dev/null @@ -1,167 +0,0 @@ -getClass()) { - throw new Exception\InvalidArgumentException("Missing option 'class'"); - } elseif (!$options->getStorage()) { - throw new Exception\InvalidArgumentException("Missing option 'storage'"); - } - return $this; - } - - /** - * Call and cache a class method - * - * @param string $method Method name to call - * @param array $args Method arguments - * @return mixed - * @throws Exception\RuntimeException - * @throws \Exception - */ - public function call($method, array $args = array()) - { - $options = $this->getOptions(); - $classname = $options->getClass(); - $method = strtolower($method); - $callback = $classname . '::' . $method; - - $cache = $options->getCacheByDefault(); - if ($cache) { - $cache = !in_array($method, $options->getClassNonCacheMethods()); - } else { - $cache = in_array($method, $options->getClassCacheMethods()); - } - - if (!$cache) { - if ($args) { - return call_user_func_array($callback, $args); - } else { - return $classname::$method(); - } - } - - return parent::call($callback, $args); - } - - /** - * Generate a unique key in base of a key representing the callback part - * and a key representing the arguments part. - * - * @param string $method The method - * @param array $args Callback arguments - * @return string - * @throws Exception\RuntimeException - */ - public function generateKey($method, array $args = array()) - { - return $this->generateCallbackKey( - $this->getOptions()->getClass() . '::' . $method, - $args - ); - } - - /** - * Generate a unique key in base of a key representing the callback part - * and a key representing the arguments part. - * - * @param callable $callback A valid callback - * @param array $args Callback arguments - * @return string - * @throws Exception\RuntimeException - */ - protected function generateCallbackKey($callback, array $args) - { - $callbackKey = md5(strtolower($callback)); - $argumentKey = $this->generateArgumentsKey($args); - return $callbackKey . $argumentKey; - } - - /** - * Calling a method of the entity. - * - * @param string $method Method name to call - * @param array $args Method arguments - * @return mixed - * @throws Exception\RuntimeException - * @throws \Exception - */ - public function __call($method, array $args) - { - return $this->call($method, $args); - } - - /** - * Set a static property - * - * @param string $name - * @param mixed $value - * @return void - * @see http://php.net/manual/language.oop5.overloading.php#language.oop5.overloading.members - */ - public function __set($name, $value) - { - $class = $this->getOptions()->getClass(); - $class::$name = $value; - } - - /** - * Get a static property - * - * @param string $name - * @return mixed - * @see http://php.net/manual/language.oop5.overloading.php#language.oop5.overloading.members - */ - public function __get($name) - { - $class = $this->getOptions()->getClass(); - return $class::$name; - } - - /** - * Is a static property exists. - * - * @param string $name - * @return bool - */ - public function __isset($name) - { - $class = $this->getOptions()->getClass(); - return isset($class::$name); - } - - /** - * Unset a static property - * - * @param string $name - * @return void - */ - public function __unset($name) - { - $class = $this->getOptions()->getClass(); - unset($class::$name); - } -} diff --git a/library/Zend/Cache/Pattern/ObjectCache.php b/library/Zend/Cache/Pattern/ObjectCache.php deleted file mode 100755 index 9ef2a2414..000000000 --- a/library/Zend/Cache/Pattern/ObjectCache.php +++ /dev/null @@ -1,284 +0,0 @@ -getObject()) { - throw new Exception\InvalidArgumentException("Missing option 'object'"); - } elseif (!$options->getStorage()) { - throw new Exception\InvalidArgumentException("Missing option 'storage'"); - } - } - - /** - * Call and cache a class method - * - * @param string $method Method name to call - * @param array $args Method arguments - * @return mixed - * @throws Exception\RuntimeException - * @throws \Exception - */ - public function call($method, array $args = array()) - { - $options = $this->getOptions(); - $object = $options->getObject(); - $method = strtolower($method); - - // handle magic methods - switch ($method) { - case '__set': - $property = array_shift($args); - $value = array_shift($args); - - $object->{$property} = $value; - - if (!$options->getObjectCacheMagicProperties() - || property_exists($object, $property) - ) { - // no caching if property isn't magic - // or caching magic properties is disabled - return; - } - - // remove cached __get and __isset - $removeKeys = null; - if (method_exists($object, '__get')) { - $removeKeys[] = $this->generateKey('__get', array($property)); - } - if (method_exists($object, '__isset')) { - $removeKeys[] = $this->generateKey('__isset', array($property)); - } - if ($removeKeys) { - $options->getStorage()->removeItems($removeKeys); - } - return; - - case '__get': - $property = array_shift($args); - - if (!$options->getObjectCacheMagicProperties() - || property_exists($object, $property) - ) { - // no caching if property isn't magic - // or caching magic properties is disabled - return $object->{$property}; - } - - array_unshift($args, $property); - return parent::call(array($object, '__get'), $args); - - case '__isset': - $property = array_shift($args); - - if (!$options->getObjectCacheMagicProperties() - || property_exists($object, $property) - ) { - // no caching if property isn't magic - // or caching magic properties is disabled - return isset($object->{$property}); - } - - return parent::call(array($object, '__isset'), array($property)); - - case '__unset': - $property = array_shift($args); - - unset($object->{$property}); - - if (!$options->getObjectCacheMagicProperties() - || property_exists($object, $property) - ) { - // no caching if property isn't magic - // or caching magic properties is disabled - return; - } - - // remove previous cached __get and __isset calls - $removeKeys = null; - if (method_exists($object, '__get')) { - $removeKeys[] = $this->generateKey('__get', array($property)); - } - if (method_exists($object, '__isset')) { - $removeKeys[] = $this->generateKey('__isset', array($property)); - } - if ($removeKeys) { - $options->getStorage()->removeItems($removeKeys); - } - return; - } - - $cache = $options->getCacheByDefault(); - if ($cache) { - $cache = !in_array($method, $options->getObjectNonCacheMethods()); - } else { - $cache = in_array($method, $options->getObjectCacheMethods()); - } - - if (!$cache) { - if ($args) { - return call_user_func_array(array($object, $method), $args); - } - return $object->{$method}(); - } - - return parent::call(array($object, $method), $args); - } - - /** - * Generate a unique key in base of a key representing the callback part - * and a key representing the arguments part. - * - * @param string $method The method - * @param array $args Callback arguments - * @return string - * @throws Exception\RuntimeException - */ - public function generateKey($method, array $args = array()) - { - return $this->generateCallbackKey( - array($this->getOptions()->getObject(), $method), - $args - ); - } - - /** - * Generate a unique key in base of a key representing the callback part - * and a key representing the arguments part. - * - * @param callable $callback A valid callback - * @param array $args Callback arguments - * @return string - * @throws Exception\RuntimeException - */ - protected function generateCallbackKey($callback, array $args = array()) - { - $callbackKey = md5($this->getOptions()->getObjectKey() . '::' . strtolower($callback[1])); - $argumentKey = $this->generateArgumentsKey($args); - return $callbackKey . $argumentKey; - } - - /** - * Class method call handler - * - * @param string $method Method name to call - * @param array $args Method arguments - * @return mixed - * @throws Exception\RuntimeException - * @throws \Exception - */ - public function __call($method, array $args) - { - return $this->call($method, $args); - } - - /** - * Writing data to properties. - * - * NOTE: - * Magic properties will be cached too if the option cacheMagicProperties - * is enabled and the property doesn't exist in real. If so it calls __set - * and removes cached data of previous __get and __isset calls. - * - * @param string $name - * @param mixed $value - * @return void - * @see http://php.net/manual/language.oop5.overloading.php#language.oop5.overloading.members - */ - public function __set($name, $value) - { - return $this->call('__set', array($name, $value)); - } - - /** - * Reading data from properties. - * - * NOTE: - * Magic properties will be cached too if the option cacheMagicProperties - * is enabled and the property doesn't exist in real. If so it calls __get. - * - * @param string $name - * @return mixed - * @see http://php.net/manual/language.oop5.overloading.php#language.oop5.overloading.members - */ - public function __get($name) - { - return $this->call('__get', array($name)); - } - - /** - * Checking existing properties. - * - * NOTE: - * Magic properties will be cached too if the option cacheMagicProperties - * is enabled and the property doesn't exist in real. If so it calls __get. - * - * @param string $name - * @return bool - * @see http://php.net/manual/language.oop5.overloading.php#language.oop5.overloading.members - */ - public function __isset($name) - { - return $this->call('__isset', array($name)); - } - - /** - * Unseting a property. - * - * NOTE: - * Magic properties will be cached too if the option cacheMagicProperties - * is enabled and the property doesn't exist in real. If so it removes - * previous cached __isset and __get calls. - * - * @param string $name - * @return void - * @see http://php.net/manual/language.oop5.overloading.php#language.oop5.overloading.members - */ - public function __unset($name) - { - return $this->call('__unset', array($name)); - } - - /** - * Handle casting to string - * - * @return string - * @see http://php.net/manual/language.oop5.magic.php#language.oop5.magic.tostring - */ - public function __toString() - { - return $this->call('__toString'); - } - - /** - * Handle invoke calls - * - * @return mixed - * @see http://php.net/manual/language.oop5.magic.php#language.oop5.magic.invoke - */ - public function __invoke() - { - return $this->call('__invoke', func_get_args()); - } -} diff --git a/library/Zend/Cache/Pattern/OutputCache.php b/library/Zend/Cache/Pattern/OutputCache.php deleted file mode 100755 index 549e17122..000000000 --- a/library/Zend/Cache/Pattern/OutputCache.php +++ /dev/null @@ -1,89 +0,0 @@ -getStorage()) { - throw new Exception\InvalidArgumentException("Missing option 'storage'"); - } - - return $this; - } - - /** - * if there is a cached item with the given key display it's data and return true - * else start buffering output until end() is called or the script ends. - * - * @param string $key Key - * @throws Exception\MissingKeyException if key is missing - * @return bool - */ - public function start($key) - { - if (($key = (string) $key) === '') { - throw new Exception\MissingKeyException('Missing key to read/write output from cache'); - } - - $success = null; - $data = $this->getOptions()->getStorage()->getItem($key, $success); - if ($success) { - echo $data; - return true; - } - - ob_start(); - ob_implicit_flush(false); - $this->keyStack[] = $key; - return false; - } - - /** - * Stops buffering output, write buffered data to cache using the given key on start() - * and displays the buffer. - * - * @throws Exception\RuntimeException if output cache not started or buffering not active - * @return bool TRUE on success, FALSE on failure writing to cache - */ - public function end() - { - $key = array_pop($this->keyStack); - if ($key === null) { - throw new Exception\RuntimeException('Output cache not started'); - } - - $output = ob_get_flush(); - if ($output === false) { - throw new Exception\RuntimeException('Output buffering not active'); - } - - return $this->getOptions()->getStorage()->setItem($key, $output); - } -} diff --git a/library/Zend/Cache/Pattern/PatternInterface.php b/library/Zend/Cache/Pattern/PatternInterface.php deleted file mode 100755 index a79bf5188..000000000 --- a/library/Zend/Cache/Pattern/PatternInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -filePermission = false; - $this->dirPermission = false; - } - - parent::__construct($options); - } - - /** - * Set flag indicating whether or not to cache by default - * - * Used by: - * - ClassCache - * - ObjectCache - * - * @param bool $cacheByDefault - * @return PatternOptions - */ - public function setCacheByDefault($cacheByDefault) - { - $this->cacheByDefault = $cacheByDefault; - return $this; - } - - /** - * Do we cache by default? - * - * Used by: - * - ClassCache - * - ObjectCache - * - * @return bool - */ - public function getCacheByDefault() - { - return $this->cacheByDefault; - } - - /** - * Set whether or not to cache output - * - * Used by: - * - CallbackCache - * - ClassCache - * - ObjectCache - * - * @param bool $cacheOutput - * @return PatternOptions - */ - public function setCacheOutput($cacheOutput) - { - $this->cacheOutput = (bool) $cacheOutput; - return $this; - } - - /** - * Will we cache output? - * - * Used by: - * - CallbackCache - * - ClassCache - * - ObjectCache - * - * @return bool - */ - public function getCacheOutput() - { - return $this->cacheOutput; - } - - /** - * Set class name - * - * Used by: - * - ClassCache - * - * @param string $class - * @throws Exception\InvalidArgumentException - * @return PatternOptions - */ - public function setClass($class) - { - if (!is_string($class)) { - throw new Exception\InvalidArgumentException('Invalid classname provided; must be a string'); - } - $this->class = $class; - return $this; - } - - /** - * Get class name - * - * Used by: - * - ClassCache - * - * @return null|string - */ - public function getClass() - { - return $this->class; - } - - /** - * Set list of method return values to cache - * - * Used by: - * - ClassCache - * - * @param array $classCacheMethods - * @return PatternOptions - */ - public function setClassCacheMethods(array $classCacheMethods) - { - $this->classCacheMethods = $this->recursiveStrtolower($classCacheMethods); - return $this; - } - - /** - * Get list of methods from which to cache return values - * - * Used by: - * - ClassCache - * - * @return array - */ - public function getClassCacheMethods() - { - return $this->classCacheMethods; - } - - /** - * Set list of method return values NOT to cache - * - * Used by: - * - ClassCache - * - * @param array $classNonCacheMethods - * @return PatternOptions - */ - public function setClassNonCacheMethods(array $classNonCacheMethods) - { - $this->classNonCacheMethods = $this->recursiveStrtolower($classNonCacheMethods); - return $this; - } - - /** - * Get list of methods from which NOT to cache return values - * - * Used by: - * - ClassCache - * - * @return array - */ - public function getClassNonCacheMethods() - { - return $this->classNonCacheMethods; - } - - /** - * Set directory permission - * - * @param false|int $dirPermission - * @throws Exception\InvalidArgumentException - * @return PatternOptions - */ - public function setDirPermission($dirPermission) - { - if ($dirPermission !== false) { - if (is_string($dirPermission)) { - $dirPermission = octdec($dirPermission); - } else { - $dirPermission = (int) $dirPermission; - } - - // validate - if (($dirPermission & 0700) != 0700) { - throw new Exception\InvalidArgumentException( - 'Invalid directory permission: need permission to execute, read and write by owner' - ); - } - } - - $this->dirPermission = $dirPermission; - return $this; - } - - /** - * Gets directory permission - * - * @return false|int - */ - public function getDirPermission() - { - return $this->dirPermission; - } - - /** - * Set umask - * - * Used by: - * - CaptureCache - * - * @param false|int $umask - * @throws Exception\InvalidArgumentException - * @return PatternOptions - */ - public function setUmask($umask) - { - if ($umask !== false) { - if (is_string($umask)) { - $umask = octdec($umask); - } else { - $umask = (int) $umask; - } - - // validate - if ($umask & 0700) { - throw new Exception\InvalidArgumentException( - 'Invalid umask: need permission to execute, read and write by owner' - ); - } - - // normalize - $umask = $umask & 0777; - } - - $this->umask = $umask; - return $this; - } - - /** - * Get umask - * - * Used by: - * - CaptureCache - * - * @return false|int - */ - public function getUmask() - { - return $this->umask; - } - - /** - * Set whether or not file locking should be used - * - * Used by: - * - CaptureCache - * - * @param bool $fileLocking - * @return PatternOptions - */ - public function setFileLocking($fileLocking) - { - $this->fileLocking = (bool) $fileLocking; - return $this; - } - - /** - * Is file locking enabled? - * - * Used by: - * - CaptureCache - * - * @return bool - */ - public function getFileLocking() - { - return $this->fileLocking; - } - - /** - * Set file permission - * - * @param false|int $filePermission - * @throws Exception\InvalidArgumentException - * @return PatternOptions - */ - public function setFilePermission($filePermission) - { - if ($filePermission !== false) { - if (is_string($filePermission)) { - $filePermission = octdec($filePermission); - } else { - $filePermission = (int) $filePermission; - } - - // validate - if (($filePermission & 0600) != 0600) { - throw new Exception\InvalidArgumentException( - 'Invalid file permission: need permission to read and write by owner' - ); - } elseif ($filePermission & 0111) { - throw new Exception\InvalidArgumentException( - "Invalid file permission: Files shoudn't be executable" - ); - } - } - - $this->filePermission = $filePermission; - return $this; - } - - /** - * Gets file permission - * - * @return false|int - */ - public function getFilePermission() - { - return $this->filePermission; - } - - /** - * Set value for index filename - * - * @param string $indexFilename - * @return PatternOptions - */ - public function setIndexFilename($indexFilename) - { - $this->indexFilename = (string) $indexFilename; - return $this; - } - - /** - * Get value for index filename - * - * @return string - */ - public function getIndexFilename() - { - return $this->indexFilename; - } - - /** - * Set object to cache - * - * @param mixed $object - * @throws Exception\InvalidArgumentException - * @return PatternOptions - */ - public function setObject($object) - { - if (!is_object($object)) { - throw new Exception\InvalidArgumentException( - sprintf('%s expects an object; received "%s"', __METHOD__, gettype($object)) - ); - } - $this->object = $object; - return $this; - } - - /** - * Get object to cache - * - * @return null|object - */ - public function getObject() - { - return $this->object; - } - - /** - * Set flag indicating whether or not to cache magic properties - * - * Used by: - * - ObjectCache - * - * @param bool $objectCacheMagicProperties - * @return PatternOptions - */ - public function setObjectCacheMagicProperties($objectCacheMagicProperties) - { - $this->objectCacheMagicProperties = (bool) $objectCacheMagicProperties; - return $this; - } - - /** - * Should we cache magic properties? - * - * Used by: - * - ObjectCache - * - * @return bool - */ - public function getObjectCacheMagicProperties() - { - return $this->objectCacheMagicProperties; - } - - /** - * Set list of object methods for which to cache return values - * - * @param array $objectCacheMethods - * @return PatternOptions - * @throws Exception\InvalidArgumentException - */ - public function setObjectCacheMethods(array $objectCacheMethods) - { - $this->objectCacheMethods = $this->normalizeObjectMethods($objectCacheMethods); - return $this; - } - - /** - * Get list of object methods for which to cache return values - * - * @return array - */ - public function getObjectCacheMethods() - { - return $this->objectCacheMethods; - } - - /** - * Set the object key part. - * - * Used to generate a callback key in order to speed up key generation. - * - * Used by: - * - ObjectCache - * - * @param mixed $objectKey - * @return PatternOptions - */ - public function setObjectKey($objectKey) - { - if ($objectKey !== null) { - $this->objectKey = (string) $objectKey; - } else { - $this->objectKey = null; - } - return $this; - } - - /** - * Get object key - * - * Used by: - * - ObjectCache - * - * @return string - */ - public function getObjectKey() - { - if (!$this->objectKey) { - return get_class($this->getObject()); - } - return $this->objectKey; - } - - /** - * Set list of object methods for which NOT to cache return values - * - * @param array $objectNonCacheMethods - * @return PatternOptions - * @throws Exception\InvalidArgumentException - */ - public function setObjectNonCacheMethods(array $objectNonCacheMethods) - { - $this->objectNonCacheMethods = $this->normalizeObjectMethods($objectNonCacheMethods); - return $this; - } - - /** - * Get list of object methods for which NOT to cache return values - * - * @return array - */ - public function getObjectNonCacheMethods() - { - return $this->objectNonCacheMethods; - } - - /** - * Set location of public directory - * - * Used by: - * - CaptureCache - * - * @param string $publicDir - * @throws Exception\InvalidArgumentException - * @return PatternOptions - */ - public function setPublicDir($publicDir) - { - $publicDir = (string) $publicDir; - - if (!is_dir($publicDir)) { - throw new Exception\InvalidArgumentException( - "Public directory '{$publicDir}' not found or not a directory" - ); - } elseif (!is_writable($publicDir)) { - throw new Exception\InvalidArgumentException( - "Public directory '{$publicDir}' not writable" - ); - } elseif (!is_readable($publicDir)) { - throw new Exception\InvalidArgumentException( - "Public directory '{$publicDir}' not readable" - ); - } - - $this->publicDir = rtrim(realpath($publicDir), DIRECTORY_SEPARATOR); - return $this; - } - - /** - * Get location of public directory - * - * Used by: - * - CaptureCache - * - * @return null|string - */ - public function getPublicDir() - { - return $this->publicDir; - } - - /** - * Set storage adapter - * - * Required for the following Pattern classes: - * - CallbackCache - * - ClassCache - * - ObjectCache - * - OutputCache - * - * @param string|array|Storage $storage - * @return PatternOptions - */ - public function setStorage($storage) - { - $this->storage = $this->storageFactory($storage); - return $this; - } - - /** - * Get storage adapter - * - * Used by: - * - CallbackCache - * - ClassCache - * - ObjectCache - * - OutputCache - * - * @return null|Storage - */ - public function getStorage() - { - return $this->storage; - } - - /** - * Recursively apply strtolower on all values of an array, and return as a - * list of unique values - * - * @param array $array - * @return array - */ - protected function recursiveStrtolower(array $array) - { - return array_values(array_unique(array_map('strtolower', $array))); - } - - /** - * Normalize object methods - * - * Recursively casts values to lowercase, then determines if any are in a - * list of methods not handled, raising an exception if so. - * - * @param array $methods - * @return array - * @throws Exception\InvalidArgumentException - */ - protected function normalizeObjectMethods(array $methods) - { - $methods = $this->recursiveStrtolower($methods); - $intersect = array_intersect(array('__set', '__get', '__unset', '__isset'), $methods); - if (!empty($intersect)) { - throw new Exception\InvalidArgumentException( - "Magic properties are handled by option 'cache_magic_properties'" - ); - } - return $methods; - } - - /** - * Create a storage object from a given specification - * - * @param array|string|Storage $storage - * @throws Exception\InvalidArgumentException - * @return Storage - */ - protected function storageFactory($storage) - { - if (is_array($storage)) { - $storage = StorageFactory::factory($storage); - } elseif (is_string($storage)) { - $storage = StorageFactory::adapterFactory($storage); - } elseif (!($storage instanceof Storage)) { - throw new Exception\InvalidArgumentException( - 'The storage must be an instanceof Zend\Cache\Storage\StorageInterface ' - . 'or an array passed to Zend\Cache\Storage::factory ' - . 'or simply the name of the storage adapter' - ); - } - - return $storage; - } -} diff --git a/library/Zend/Cache/PatternFactory.php b/library/Zend/Cache/PatternFactory.php deleted file mode 100755 index dceed0032..000000000 --- a/library/Zend/Cache/PatternFactory.php +++ /dev/null @@ -1,92 +0,0 @@ -setOptions($options); - return $patternName; - } - - $pattern = static::getPluginManager()->get($patternName); - $pattern->setOptions($options); - return $pattern; - } - - /** - * Get the pattern plugin manager - * - * @return PatternPluginManager - */ - public static function getPluginManager() - { - if (static::$plugins === null) { - static::$plugins = new PatternPluginManager(); - } - - return static::$plugins; - } - - /** - * Set the pattern plugin manager - * - * @param PatternPluginManager $plugins - * @return void - */ - public static function setPluginManager(PatternPluginManager $plugins) - { - static::$plugins = $plugins; - } - - /** - * Reset pattern plugin manager to default - * - * @return void - */ - public static function resetPluginManager() - { - static::$plugins = null; - } -} diff --git a/library/Zend/Cache/PatternPluginManager.php b/library/Zend/Cache/PatternPluginManager.php deleted file mode 100755 index 7d5d0e1a6..000000000 --- a/library/Zend/Cache/PatternPluginManager.php +++ /dev/null @@ -1,66 +0,0 @@ - 'Zend\Cache\Pattern\CallbackCache', - 'capture' => 'Zend\Cache\Pattern\CaptureCache', - 'class' => 'Zend\Cache\Pattern\ClassCache', - 'object' => 'Zend\Cache\Pattern\ObjectCache', - 'output' => 'Zend\Cache\Pattern\OutputCache', - 'page' => 'Zend\Cache\Pattern\PageCache', - ); - - /** - * Don't share by default - * - * @var array - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the pattern adapter loaded is an instance of Pattern\PatternInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\RuntimeException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Pattern\PatternInterface) { - // we're okay - return; - } - - throw new Exception\RuntimeException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Pattern\PatternInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Cache/README.md b/library/Zend/Cache/README.md deleted file mode 100755 index 62aa9e0e0..000000000 --- a/library/Zend/Cache/README.md +++ /dev/null @@ -1,14 +0,0 @@ -Cache Component from ZF2 -======================== - -This is the Cache component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. diff --git a/library/Zend/Cache/Service/StorageCacheAbstractServiceFactory.php b/library/Zend/Cache/Service/StorageCacheAbstractServiceFactory.php deleted file mode 100755 index 66eb6505e..000000000 --- a/library/Zend/Cache/Service/StorageCacheAbstractServiceFactory.php +++ /dev/null @@ -1,88 +0,0 @@ -getConfig($services); - if (empty($config)) { - return false; - } - - return (isset($config[$requestedName]) && is_array($config[$requestedName])); - } - - /** - * @param ServiceLocatorInterface $services - * @param string $name - * @param string $requestedName - * @return \Zend\Cache\Storage\StorageInterface - */ - public function createServiceWithName(ServiceLocatorInterface $services, $name, $requestedName) - { - $config = $this->getConfig($services); - $config = $config[$requestedName]; - return StorageFactory::factory($config); - } - - /** - * Retrieve cache configuration, if any - * - * @param ServiceLocatorInterface $services - * @return array - */ - protected function getConfig(ServiceLocatorInterface $services) - { - if ($this->config !== null) { - return $this->config; - } - - if (!$services->has('Config')) { - $this->config = array(); - return $this->config; - } - - $config = $services->get('Config'); - if (!isset($config[$this->configKey])) { - $this->config = array(); - return $this->config; - } - - $this->config = $config[$this->configKey]; - return $this->config; - } -} diff --git a/library/Zend/Cache/Service/StorageCacheFactory.php b/library/Zend/Cache/Service/StorageCacheFactory.php deleted file mode 100755 index f2c204993..000000000 --- a/library/Zend/Cache/Service/StorageCacheFactory.php +++ /dev/null @@ -1,30 +0,0 @@ -get('Config'); - $cacheConfig = isset($config['cache']) ? $config['cache'] : array(); - $cache = StorageFactory::factory($cacheConfig); - - return $cache; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/AbstractAdapter.php b/library/Zend/Cache/Storage/Adapter/AbstractAdapter.php deleted file mode 100755 index 71edf763e..000000000 --- a/library/Zend/Cache/Storage/Adapter/AbstractAdapter.php +++ /dev/null @@ -1,1580 +0,0 @@ -setOptions($options); - } - } - - /** - * Destructor - * - * detach all registered plugins to free - * event handles of event manager - * - * @return void - */ - public function __destruct() - { - foreach ($this->getPluginRegistry() as $plugin) { - $this->removePlugin($plugin); - } - - if ($this->eventHandles) { - $events = $this->getEventManager(); - foreach ($this->eventHandles as $handle) { - $events->detach($handle); - } - } - } - - /* configuration */ - - /** - * Set options. - * - * @param array|Traversable|AdapterOptions $options - * @return AbstractAdapter - * @see getOptions() - */ - public function setOptions($options) - { - if ($this->options !== $options) { - if (!$options instanceof AdapterOptions) { - $options = new AdapterOptions($options); - } - - if ($this->options) { - $this->options->setAdapter(null); - } - $options->setAdapter($this); - $this->options = $options; - - $event = new Event('option', $this, new ArrayObject($options->toArray())); - $this->getEventManager()->trigger($event); - } - return $this; - } - - /** - * Get options. - * - * @return AdapterOptions - * @see setOptions() - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new AdapterOptions()); - } - return $this->options; - } - - /** - * Enable/Disable caching. - * - * Alias of setWritable and setReadable. - * - * @see setWritable() - * @see setReadable() - * @param bool $flag - * @return AbstractAdapter - */ - public function setCaching($flag) - { - $flag = (bool) $flag; - $options = $this->getOptions(); - $options->setWritable($flag); - $options->setReadable($flag); - return $this; - } - - /** - * Get caching enabled. - * - * Alias of getWritable and getReadable. - * - * @see getWritable() - * @see getReadable() - * @return bool - */ - public function getCaching() - { - $options = $this->getOptions(); - return ($options->getWritable() && $options->getReadable()); - } - - /* Event/Plugin handling */ - - /** - * Get the event manager - * - * @return EventManagerInterface - */ - public function getEventManager() - { - if ($this->events === null) { - $this->events = new EventManager(array(__CLASS__, get_class($this))); - } - return $this->events; - } - - /** - * Trigger a pre event and return the event response collection - * - * @param string $eventName - * @param ArrayObject $args - * @return \Zend\EventManager\ResponseCollection All handler return values - */ - protected function triggerPre($eventName, ArrayObject $args) - { - return $this->getEventManager()->trigger(new Event($eventName . '.pre', $this, $args)); - } - - /** - * Triggers the PostEvent and return the result value. - * - * @param string $eventName - * @param ArrayObject $args - * @param mixed $result - * @return mixed - */ - protected function triggerPost($eventName, ArrayObject $args, & $result) - { - $postEvent = new PostEvent($eventName . '.post', $this, $args, $result); - $eventRs = $this->getEventManager()->trigger($postEvent); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - return $postEvent->getResult(); - } - - /** - * Trigger an exception event - * - * If the ExceptionEvent has the flag "throwException" enabled throw the - * exception after trigger else return the result. - * - * @param string $eventName - * @param ArrayObject $args - * @param mixed $result - * @param \Exception $exception - * @throws Exception\ExceptionInterface - * @return mixed - */ - protected function triggerException($eventName, ArrayObject $args, & $result, \Exception $exception) - { - $exceptionEvent = new ExceptionEvent($eventName . '.exception', $this, $args, $result, $exception); - $eventRs = $this->getEventManager()->trigger($exceptionEvent); - - if ($exceptionEvent->getThrowException()) { - throw $exceptionEvent->getException(); - } - - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - return $exceptionEvent->getResult(); - } - - /** - * Check if a plugin is registered - * - * @param Plugin\PluginInterface $plugin - * @return bool - */ - public function hasPlugin(Plugin\PluginInterface $plugin) - { - $registry = $this->getPluginRegistry(); - return $registry->contains($plugin); - } - - /** - * Register a plugin - * - * @param Plugin\PluginInterface $plugin - * @param int $priority - * @return AbstractAdapter Fluent interface - * @throws Exception\LogicException - */ - public function addPlugin(Plugin\PluginInterface $plugin, $priority = 1) - { - $registry = $this->getPluginRegistry(); - if ($registry->contains($plugin)) { - throw new Exception\LogicException(sprintf( - 'Plugin of type "%s" already registered', - get_class($plugin) - )); - } - - $plugin->attach($this->getEventManager(), $priority); - $registry->attach($plugin); - - return $this; - } - - /** - * Unregister an already registered plugin - * - * @param Plugin\PluginInterface $plugin - * @return AbstractAdapter Fluent interface - * @throws Exception\LogicException - */ - public function removePlugin(Plugin\PluginInterface $plugin) - { - $registry = $this->getPluginRegistry(); - if ($registry->contains($plugin)) { - $plugin->detach($this->getEventManager()); - $registry->detach($plugin); - } - return $this; - } - - /** - * Return registry of plugins - * - * @return SplObjectStorage - */ - public function getPluginRegistry() - { - if (!$this->pluginRegistry instanceof SplObjectStorage) { - $this->pluginRegistry = new SplObjectStorage(); - } - return $this->pluginRegistry; - } - - /* reading */ - - /** - * Get an item. - * - * @param string $key - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - * - * @triggers getItem.pre(PreEvent) - * @triggers getItem.post(PostEvent) - * @triggers getItem.exception(ExceptionEvent) - */ - public function getItem($key, & $success = null, & $casToken = null) - { - if (!$this->getOptions()->getReadable()) { - $success = false; - return null; - } - - $this->normalizeKey($key); - - $argn = func_num_args(); - $args = array( - 'key' => & $key, - ); - if ($argn > 1) { - $args['success'] = & $success; - } - if ($argn > 2) { - $args['casToken'] = & $casToken; - } - $args = new ArrayObject($args); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - if ($args->offsetExists('success') && $args->offsetExists('casToken')) { - $result = $this->internalGetItem($args['key'], $args['success'], $args['casToken']); - } elseif ($args->offsetExists('success')) { - $result = $this->internalGetItem($args['key'], $args['success']); - } else { - $result = $this->internalGetItem($args['key']); - } - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - abstract protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null); - - /** - * Get multiple items. - * - * @param array $keys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - * - * @triggers getItems.pre(PreEvent) - * @triggers getItems.post(PostEvent) - * @triggers getItems.exception(ExceptionEvent) - */ - public function getItems(array $keys) - { - if (!$this->getOptions()->getReadable()) { - return array(); - } - - $this->normalizeKeys($keys); - $args = new ArrayObject(array( - 'keys' => & $keys, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalGetItems($args['keys']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array(); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $success = null; - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - $value = $this->internalGetItem($normalizedKey, $success); - if ($success) { - $result[$normalizedKey] = $value; - } - } - - return $result; - } - - /** - * Test if an item exists. - * - * @param string $key - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers hasItem.pre(PreEvent) - * @triggers hasItem.post(PostEvent) - * @triggers hasItem.exception(ExceptionEvent) - */ - public function hasItem($key) - { - if (!$this->getOptions()->getReadable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalHasItem($args['key']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $success = null; - $this->internalGetItem($normalizedKey, $success); - return $success; - } - - /** - * Test multiple items. - * - * @param array $keys - * @return array Array of found keys - * @throws Exception\ExceptionInterface - * - * @triggers hasItems.pre(PreEvent) - * @triggers hasItems.post(PostEvent) - * @triggers hasItems.exception(ExceptionEvent) - */ - public function hasItems(array $keys) - { - if (!$this->getOptions()->getReadable()) { - return array(); - } - - $this->normalizeKeys($keys); - $args = new ArrayObject(array( - 'keys' => & $keys, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalHasItems($args['keys']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array(); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - * @throws Exception\ExceptionInterface - */ - protected function internalHasItems(array & $normalizedKeys) - { - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - if ($this->internalHasItem($normalizedKey)) { - $result[] = $normalizedKey; - } - } - return $result; - } - - /** - * Get metadata of an item. - * - * @param string $key - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface - * - * @triggers getMetadata.pre(PreEvent) - * @triggers getMetadata.post(PostEvent) - * @triggers getMetadata.exception(ExceptionEvent) - */ - public function getMetadata($key) - { - if (!$this->getOptions()->getReadable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalGetMetadata($args['key']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to get metadata of an item. - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadata(& $normalizedKey) - { - if (!$this->internalHasItem($normalizedKey)) { - return false; - } - - return array(); - } - - /** - * Get multiple metadata - * - * @param array $keys - * @return array Associative array of keys and metadata - * @throws Exception\ExceptionInterface - * - * @triggers getMetadatas.pre(PreEvent) - * @triggers getMetadatas.post(PostEvent) - * @triggers getMetadatas.exception(ExceptionEvent) - */ - public function getMetadatas(array $keys) - { - if (!$this->getOptions()->getReadable()) { - return array(); - } - - $this->normalizeKeys($keys); - $args = new ArrayObject(array( - 'keys' => & $keys, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalGetMetadatas($args['keys']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array(); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to get multiple metadata - * - * @param array $normalizedKeys - * @return array Associative array of keys and metadata - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadatas(array & $normalizedKeys) - { - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - $metadata = $this->internalGetMetadata($normalizedKey); - if ($metadata !== false) { - $result[$normalizedKey] = $metadata; - } - } - return $result; - } - - /* writing */ - - /** - * Store an item. - * - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers setItem.pre(PreEvent) - * @triggers setItem.post(PostEvent) - * @triggers setItem.exception(ExceptionEvent) - */ - public function setItem($key, $value) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - 'value' => & $value, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalSetItem($args['key'], $args['value']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - abstract protected function internalSetItem(& $normalizedKey, & $value); - - /** - * Store multiple items. - * - * @param array $keyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - * - * @triggers setItems.pre(PreEvent) - * @triggers setItems.post(PostEvent) - * @triggers setItems.exception(ExceptionEvent) - */ - public function setItems(array $keyValuePairs) - { - if (!$this->getOptions()->getWritable()) { - return array_keys($keyValuePairs); - } - - $this->normalizeKeyValuePairs($keyValuePairs); - $args = new ArrayObject(array( - 'keyValuePairs' => & $keyValuePairs, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalSetItems($args['keyValuePairs']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array_keys($keyValuePairs); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $failedKeys = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - if (!$this->internalSetItem($normalizedKey, $value)) { - $failedKeys[] = $normalizedKey; - } - } - return $failedKeys; - } - - /** - * Add an item. - * - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers addItem.pre(PreEvent) - * @triggers addItem.post(PostEvent) - * @triggers addItem.exception(ExceptionEvent) - */ - public function addItem($key, $value) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - 'value' => & $value, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalAddItem($args['key'], $args['value']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - if ($this->internalHasItem($normalizedKey)) { - return false; - } - return $this->internalSetItem($normalizedKey, $value); - } - - /** - * Add multiple items. - * - * @param array $keyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - * - * @triggers addItems.pre(PreEvent) - * @triggers addItems.post(PostEvent) - * @triggers addItems.exception(ExceptionEvent) - */ - public function addItems(array $keyValuePairs) - { - if (!$this->getOptions()->getWritable()) { - return array_keys($keyValuePairs); - } - - $this->normalizeKeyValuePairs($keyValuePairs); - $args = new ArrayObject(array( - 'keyValuePairs' => & $keyValuePairs, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalAddItems($args['keyValuePairs']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array_keys($keyValuePairs); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to add multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalAddItems(array & $normalizedKeyValuePairs) - { - $result = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - if (!$this->internalAddItem($normalizedKey, $value)) { - $result[] = $normalizedKey; - } - } - return $result; - } - - /** - * Replace an existing item. - * - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers replaceItem.pre(PreEvent) - * @triggers replaceItem.post(PostEvent) - * @triggers replaceItem.exception(ExceptionEvent) - */ - public function replaceItem($key, $value) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - 'value' => & $value, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalReplaceItem($args['key'], $args['value']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItem(& $normalizedKey, & $value) - { - if (!$this->internalhasItem($normalizedKey)) { - return false; - } - - return $this->internalSetItem($normalizedKey, $value); - } - - /** - * Replace multiple existing items. - * - * @param array $keyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - * - * @triggers replaceItems.pre(PreEvent) - * @triggers replaceItems.post(PostEvent) - * @triggers replaceItems.exception(ExceptionEvent) - */ - public function replaceItems(array $keyValuePairs) - { - if (!$this->getOptions()->getWritable()) { - return array_keys($keyValuePairs); - } - - $this->normalizeKeyValuePairs($keyValuePairs); - $args = new ArrayObject(array( - 'keyValuePairs' => & $keyValuePairs, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalReplaceItems($args['keyValuePairs']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array_keys($keyValuePairs); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to replace multiple existing items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItems(array & $normalizedKeyValuePairs) - { - $result = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - if (!$this->internalReplaceItem($normalizedKey, $value)) { - $result[] = $normalizedKey; - } - } - return $result; - } - - /** - * Set an item only if token matches - * - * It uses the token received from getItem() to check if the item has - * changed before overwriting it. - * - * @param mixed $token - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * @see getItem() - * @see setItem() - */ - public function checkAndSetItem($token, $key, $value) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'token' => & $token, - 'key' => & $key, - 'value' => & $value, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalCheckAndSetItem($args['token'], $args['key'], $args['value']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to set an item only if token matches - * - * @param mixed $token - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * @see getItem() - * @see setItem() - */ - protected function internalCheckAndSetItem(& $token, & $normalizedKey, & $value) - { - $oldValue = $this->internalGetItem($normalizedKey); - if ($oldValue !== $token) { - return false; - } - - return $this->internalSetItem($normalizedKey, $value); - } - - /** - * Reset lifetime of an item - * - * @param string $key - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers touchItem.pre(PreEvent) - * @triggers touchItem.post(PostEvent) - * @triggers touchItem.exception(ExceptionEvent) - */ - public function touchItem($key) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalTouchItem($args['key']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to reset lifetime of an item - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalTouchItem(& $normalizedKey) - { - $success = null; - $value = $this->internalGetItem($normalizedKey, $success); - if (!$success) { - return false; - } - - return $this->internalReplaceItem($normalizedKey, $value); - } - - /** - * Reset lifetime of multiple items. - * - * @param array $keys - * @return array Array of not updated keys - * @throws Exception\ExceptionInterface - * - * @triggers touchItems.pre(PreEvent) - * @triggers touchItems.post(PostEvent) - * @triggers touchItems.exception(ExceptionEvent) - */ - public function touchItems(array $keys) - { - if (!$this->getOptions()->getWritable()) { - return $keys; - } - - $this->normalizeKeys($keys); - $args = new ArrayObject(array( - 'keys' => & $keys, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalTouchItems($args['keys']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - return $this->triggerException(__FUNCTION__, $args, $keys, $e); - } - } - - /** - * Internal method to reset lifetime of multiple items. - * - * @param array $normalizedKeys - * @return array Array of not updated keys - * @throws Exception\ExceptionInterface - */ - protected function internalTouchItems(array & $normalizedKeys) - { - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - if (!$this->internalTouchItem($normalizedKey)) { - $result[] = $normalizedKey; - } - } - return $result; - } - - /** - * Remove an item. - * - * @param string $key - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers removeItem.pre(PreEvent) - * @triggers removeItem.post(PostEvent) - * @triggers removeItem.exception(ExceptionEvent) - */ - public function removeItem($key) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalRemoveItem($args['key']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - abstract protected function internalRemoveItem(& $normalizedKey); - - /** - * Remove multiple items. - * - * @param array $keys - * @return array Array of not removed keys - * @throws Exception\ExceptionInterface - * - * @triggers removeItems.pre(PreEvent) - * @triggers removeItems.post(PostEvent) - * @triggers removeItems.exception(ExceptionEvent) - */ - public function removeItems(array $keys) - { - if (!$this->getOptions()->getWritable()) { - return $keys; - } - - $this->normalizeKeys($keys); - $args = new ArrayObject(array( - 'keys' => & $keys, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalRemoveItems($args['keys']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - return $this->triggerException(__FUNCTION__, $args, $keys, $e); - } - } - - /** - * Internal method to remove multiple items. - * - * @param array $normalizedKeys - * @return array Array of not removed keys - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItems(array & $normalizedKeys) - { - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - if (!$this->internalRemoveItem($normalizedKey)) { - $result[] = $normalizedKey; - } - } - return $result; - } - - /** - * Increment an item. - * - * @param string $key - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - * - * @triggers incrementItem.pre(PreEvent) - * @triggers incrementItem.post(PostEvent) - * @triggers incrementItem.exception(ExceptionEvent) - */ - public function incrementItem($key, $value) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - 'value' => & $value, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalIncrementItem($args['key'], $args['value']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $success = null; - $value = (int) $value; - $get = (int) $this->internalGetItem($normalizedKey, $success); - $newValue = $get + $value; - - if ($success) { - $this->internalReplaceItem($normalizedKey, $newValue); - } else { - $this->internalAddItem($normalizedKey, $newValue); - } - - return $newValue; - } - - /** - * Increment multiple items. - * - * @param array $keyValuePairs - * @return array Associative array of keys and new values - * @throws Exception\ExceptionInterface - * - * @triggers incrementItems.pre(PreEvent) - * @triggers incrementItems.post(PostEvent) - * @triggers incrementItems.exception(ExceptionEvent) - */ - public function incrementItems(array $keyValuePairs) - { - if (!$this->getOptions()->getWritable()) { - return array(); - } - - $this->normalizeKeyValuePairs($keyValuePairs); - $args = new ArrayObject(array( - 'keyValuePairs' => & $keyValuePairs, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalIncrementItems($args['keyValuePairs']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array(); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to increment multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Associative array of keys and new values - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItems(array & $normalizedKeyValuePairs) - { - $result = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - $newValue = $this->internalIncrementItem($normalizedKey, $value); - if ($newValue !== false) { - $result[$normalizedKey] = $newValue; - } - } - return $result; - } - - /** - * Decrement an item. - * - * @param string $key - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - * - * @triggers decrementItem.pre(PreEvent) - * @triggers decrementItem.post(PostEvent) - * @triggers decrementItem.exception(ExceptionEvent) - */ - public function decrementItem($key, $value) - { - if (!$this->getOptions()->getWritable()) { - return false; - } - - $this->normalizeKey($key); - $args = new ArrayObject(array( - 'key' => & $key, - 'value' => & $value, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalDecrementItem($args['key'], $args['value']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $success = null; - $value = (int) $value; - $get = (int) $this->internalGetItem($normalizedKey, $success); - $newValue = $get - $value; - - if ($success) { - $this->internalReplaceItem($normalizedKey, $newValue); - } else { - $this->internalAddItem($normalizedKey, $newValue); - } - - return $newValue; - } - - /** - * Decrement multiple items. - * - * @param array $keyValuePairs - * @return array Associative array of keys and new values - * @throws Exception\ExceptionInterface - * - * @triggers incrementItems.pre(PreEvent) - * @triggers incrementItems.post(PostEvent) - * @triggers incrementItems.exception(ExceptionEvent) - */ - public function decrementItems(array $keyValuePairs) - { - if (!$this->getOptions()->getWritable()) { - return array(); - } - - $this->normalizeKeyValuePairs($keyValuePairs); - $args = new ArrayObject(array( - 'keyValuePairs' => & $keyValuePairs, - )); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalDecrementItems($args['keyValuePairs']); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = array(); - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to decrement multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Associative array of keys and new values - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItems(array & $normalizedKeyValuePairs) - { - $result = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - $newValue = $this->decrementItem($normalizedKey, $value); - if ($newValue !== false) { - $result[$normalizedKey] = $newValue; - } - } - return $result; - } - - /* status */ - - /** - * Get capabilities of this adapter - * - * @return Capabilities - * @triggers getCapabilities.pre(PreEvent) - * @triggers getCapabilities.post(PostEvent) - * @triggers getCapabilities.exception(ExceptionEvent) - */ - public function getCapabilities() - { - $args = new ArrayObject(); - - try { - $eventRs = $this->triggerPre(__FUNCTION__, $args); - if ($eventRs->stopped()) { - return $eventRs->last(); - } - - $result = $this->internalGetCapabilities(); - return $this->triggerPost(__FUNCTION__, $args, $result); - } catch (\Exception $e) { - $result = false; - return $this->triggerException(__FUNCTION__, $args, $result, $e); - } - } - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $this->capabilityMarker = new stdClass(); - $this->capabilities = new Capabilities($this, $this->capabilityMarker); - } - return $this->capabilities; - } - - /* internal */ - - /** - * Validates and normalizes a key - * - * @param string $key - * @return void - * @throws Exception\InvalidArgumentException On an invalid key - */ - protected function normalizeKey(& $key) - { - $key = (string) $key; - - if ($key === '') { - throw new Exception\InvalidArgumentException( - "An empty key isn't allowed" - ); - } elseif (($p = $this->getOptions()->getKeyPattern()) && !preg_match($p, $key)) { - throw new Exception\InvalidArgumentException( - "The key '{$key}' doesn't match against pattern '{$p}'" - ); - } - } - - /** - * Validates and normalizes multiple keys - * - * @param array $keys - * @return void - * @throws Exception\InvalidArgumentException On an invalid key - */ - protected function normalizeKeys(array & $keys) - { - if (!$keys) { - throw new Exception\InvalidArgumentException( - "An empty list of keys isn't allowed" - ); - } - - array_walk($keys, array($this, 'normalizeKey')); - $keys = array_values(array_unique($keys)); - } - - /** - * Validates and normalizes an array of key-value pairs - * - * @param array $keyValuePairs - * @return void - * @throws Exception\InvalidArgumentException On an invalid key - */ - protected function normalizeKeyValuePairs(array & $keyValuePairs) - { - $normalizedKeyValuePairs = array(); - foreach ($keyValuePairs as $key => $value) { - $this->normalizeKey($key); - $normalizedKeyValuePairs[$key] = $value; - } - $keyValuePairs = $normalizedKeyValuePairs; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/AbstractZendServer.php b/library/Zend/Cache/Storage/Adapter/AbstractZendServer.php deleted file mode 100755 index 22933beb0..000000000 --- a/library/Zend/Cache/Storage/Adapter/AbstractZendServer.php +++ /dev/null @@ -1,273 +0,0 @@ -getOptions()->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . self::NAMESPACE_SEPARATOR; - - $result = $this->zdcFetch($prefix . $normalizedKey); - if ($result === null) { - $success = false; - } else { - $success = true; - $casToken = $result; - } - - return $result; - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $namespace = $this->getOptions()->getNamespace(); - if ($namespace === '') { - return $this->zdcFetchMulti($normalizedKeys); - } - - $prefix = $namespace . self::NAMESPACE_SEPARATOR; - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $fetch = $this->zdcFetchMulti($internalKeys); - $result = array(); - $prefixL = strlen($prefix); - foreach ($fetch as $k => & $v) { - $result[substr($k, $prefixL)] = $v; - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $namespace = $this->getOptions()->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . self::NAMESPACE_SEPARATOR; - return ($this->zdcFetch($prefix . $normalizedKey) !== false); - } - - /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - * @throws Exception\ExceptionInterface - */ - protected function internalHasItems(array & $normalizedKeys) - { - $namespace = $this->getOptions()->getNamespace(); - if ($namespace === '') { - return array_keys($this->zdcFetchMulti($normalizedKeys)); - } - - $prefix = $namespace . self::NAMESPACE_SEPARATOR; - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $fetch = $this->zdcFetchMulti($internalKeys); - $result = array(); - $prefixL = strlen($prefix); - foreach ($fetch as $internalKey => & $value) { - $result[] = substr($internalKey, $prefixL); - } - - return $result; - } - - /** - * Get metadata for multiple items - * - * @param array $normalizedKeys - * @return array Associative array of keys and metadata - * - * @triggers getMetadatas.pre(PreEvent) - * @triggers getMetadatas.post(PostEvent) - * @triggers getMetadatas.exception(ExceptionEvent) - */ - protected function internalGetMetadatas(array & $normalizedKeys) - { - $namespace = $this->getOptions()->getNamespace(); - if ($namespace === '') { - $result = $this->zdcFetchMulti($normalizedKeys); - return array_fill_keys(array_keys($result), array()); - } - - $prefix = $namespace . self::NAMESPACE_SEPARATOR; - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $fetch = $this->zdcFetchMulti($internalKeys); - $result = array(); - $prefixL = strlen($prefix); - foreach ($fetch as $internalKey => $value) { - $result[substr($internalKey, $prefixL)] = array(); - } - - return $result; - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . self::NAMESPACE_SEPARATOR; - $this->zdcStore($prefix . $normalizedKey, $value, $options->getTtl()); - return true; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $namespace = $this->getOptions()->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . self::NAMESPACE_SEPARATOR; - return $this->zdcDelete($prefix . $normalizedKey); - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $this->capabilityMarker = new stdClass(); - $this->capabilities = new Capabilities( - $this, - $this->capabilityMarker, - array( - 'supportedDatatypes' => array( - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ), - 'supportedMetadata' => array(), - 'maxTtl' => 0, - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => false, - 'expiredRead' => false, - 'maxKeyLength' => 0, - 'namespaceIsPrefix' => true, - 'namespaceSeparator' => self::NAMESPACE_SEPARATOR, - ) - ); - } - - return $this->capabilities; - } - - /* internal wrapper of zend_[disk|shm]_cache_* functions */ - - /** - * Store data into Zend Data Cache (zdc) - * - * @param string $internalKey - * @param mixed $value - * @param int $ttl - * @return void - * @throws Exception\RuntimeException - */ - abstract protected function zdcStore($internalKey, $value, $ttl); - - /** - * Fetch a single item from Zend Data Cache (zdc) - * - * @param string $internalKey - * @return mixed The stored value or FALSE if item wasn't found - * @throws Exception\RuntimeException - */ - abstract protected function zdcFetch($internalKey); - - /** - * Fetch multiple items from Zend Data Cache (zdc) - * - * @param array $internalKeys - * @return array All found items - * @throws Exception\RuntimeException - */ - abstract protected function zdcFetchMulti(array $internalKeys); - - /** - * Delete data from Zend Data Cache (zdc) - * - * @param string $internalKey - * @return bool - * @throws Exception\RuntimeException - */ - abstract protected function zdcDelete($internalKey); -} diff --git a/library/Zend/Cache/Storage/Adapter/AdapterOptions.php b/library/Zend/Cache/Storage/Adapter/AdapterOptions.php deleted file mode 100755 index b3669ffa4..000000000 --- a/library/Zend/Cache/Storage/Adapter/AdapterOptions.php +++ /dev/null @@ -1,264 +0,0 @@ -adapter = $adapter; - return $this; - } - - /** - * Set key pattern - * - * @param null|string $keyPattern - * @throws Exception\InvalidArgumentException - * @return AdapterOptions - */ - public function setKeyPattern($keyPattern) - { - $keyPattern = (string) $keyPattern; - if ($this->keyPattern !== $keyPattern) { - // validate pattern - if ($keyPattern !== '') { - ErrorHandler::start(E_WARNING); - $result = preg_match($keyPattern, ''); - $error = ErrorHandler::stop(); - if ($result === false) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid pattern "%s"%s', - $keyPattern, - ($error ? ': ' . $error->getMessage() : '') - ), 0, $error); - } - } - - $this->triggerOptionEvent('key_pattern', $keyPattern); - $this->keyPattern = $keyPattern; - } - - return $this; - } - - /** - * Get key pattern - * - * @return string - */ - public function getKeyPattern() - { - return $this->keyPattern; - } - - /** - * Set namespace. - * - * @param string $namespace - * @return AdapterOptions - */ - public function setNamespace($namespace) - { - $namespace = (string) $namespace; - if ($this->namespace !== $namespace) { - $this->triggerOptionEvent('namespace', $namespace); - $this->namespace = $namespace; - } - - return $this; - } - - /** - * Get namespace - * - * @return string - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * Enable/Disable reading data from cache. - * - * @param bool $readable - * @return AbstractAdapter - */ - public function setReadable($readable) - { - $readable = (bool) $readable; - if ($this->readable !== $readable) { - $this->triggerOptionEvent('readable', $readable); - $this->readable = $readable; - } - return $this; - } - - /** - * If reading data from cache enabled. - * - * @return bool - */ - public function getReadable() - { - return $this->readable; - } - - /** - * Set time to live. - * - * @param int|float $ttl - * @return AdapterOptions - */ - public function setTtl($ttl) - { - $this->normalizeTtl($ttl); - if ($this->ttl !== $ttl) { - $this->triggerOptionEvent('ttl', $ttl); - $this->ttl = $ttl; - } - return $this; - } - - /** - * Get time to live. - * - * @return float - */ - public function getTtl() - { - return $this->ttl; - } - - /** - * Enable/Disable writing data to cache. - * - * @param bool $writable - * @return AdapterOptions - */ - public function setWritable($writable) - { - $writable = (bool) $writable; - if ($this->writable !== $writable) { - $this->triggerOptionEvent('writable', $writable); - $this->writable = $writable; - } - return $this; - } - - /** - * If writing data to cache enabled. - * - * @return bool - */ - public function getWritable() - { - return $this->writable; - } - - /** - * Triggers an option event if this options instance has a connection to - * an adapter implements EventsCapableInterface. - * - * @param string $optionName - * @param mixed $optionValue - * @return void - */ - protected function triggerOptionEvent($optionName, $optionValue) - { - if ($this->adapter instanceof EventsCapableInterface) { - $event = new Event('option', $this->adapter, new ArrayObject(array($optionName => $optionValue))); - $this->adapter->getEventManager()->trigger($event); - } - } - - /** - * Validates and normalize a TTL. - * - * @param int|float $ttl - * @throws Exception\InvalidArgumentException - * @return void - */ - protected function normalizeTtl(&$ttl) - { - if (!is_int($ttl)) { - $ttl = (float) $ttl; - - // convert to int if possible - if ($ttl === (float) (int) $ttl) { - $ttl = (int) $ttl; - } - } - - if ($ttl < 0) { - throw new Exception\InvalidArgumentException("TTL can't be negative"); - } - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Apc.php b/library/Zend/Cache/Storage/Adapter/Apc.php deleted file mode 100755 index c2336e96a..000000000 --- a/library/Zend/Cache/Storage/Adapter/Apc.php +++ /dev/null @@ -1,751 +0,0 @@ - 0) { - throw new Exception\ExtensionNotLoadedException("Missing ext/apc >= 3.1.6"); - } - - $enabled = ini_get('apc.enabled'); - if (PHP_SAPI == 'cli') { - $enabled = $enabled && (bool) ini_get('apc.enable_cli'); - } - - if (!$enabled) { - throw new Exception\ExtensionNotLoadedException( - "ext/apc is disabled - see 'apc.enabled' and 'apc.enable_cli'" - ); - } - - parent::__construct($options); - } - - /* options */ - - /** - * Set options. - * - * @param array|Traversable|ApcOptions $options - * @return Apc - * @see getOptions() - */ - public function setOptions($options) - { - if (!$options instanceof ApcOptions) { - $options = new ApcOptions($options); - } - - return parent::setOptions($options); - } - - /** - * Get options. - * - * @return ApcOptions - * @see setOptions() - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new ApcOptions()); - } - return $this->options; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - if ($this->totalSpace === null) { - $smaInfo = apc_sma_info(true); - $this->totalSpace = $smaInfo['num_seg'] * $smaInfo['seg_size']; - } - - return $this->totalSpace; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - $smaInfo = apc_sma_info(true); - return $smaInfo['avail_mem']; - } - - /* IterableInterface */ - - /** - * Get the storage iterator - * - * @return ApcIterator - */ - public function getIterator() - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ''; - $pattern = null; - if ($namespace !== '') { - $prefix = $namespace . $options->getNamespaceSeparator(); - $pattern = '/^' . preg_quote($prefix, '/') . '/'; - } - - $baseIt = new BaseApcIterator('user', $pattern, 0, 1, APC_LIST_ACTIVE); - return new ApcIterator($this, $baseIt, $prefix); - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - return apc_clear_cache('user'); - } - - /* ClearByNamespaceInterface */ - - /** - * Remove items by given namespace - * - * @param string $namespace - * @return bool - */ - public function clearByNamespace($namespace) - { - $namespace = (string) $namespace; - if ($namespace === '') { - throw new Exception\InvalidArgumentException('No namespace given'); - } - - $options = $this->getOptions(); - $prefix = $namespace . $options->getNamespaceSeparator(); - $pattern = '/^' . preg_quote($prefix, '/') . '/'; - return apc_delete(new BaseApcIterator('user', $pattern, 0, 1, APC_LIST_ACTIVE)); - } - - /* ClearByPrefixInterface */ - - /** - * Remove items matching given prefix - * - * @param string $prefix - * @return bool - */ - public function clearByPrefix($prefix) - { - $prefix = (string) $prefix; - if ($prefix === '') { - throw new Exception\InvalidArgumentException('No prefix given'); - } - - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $nsPrefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $pattern = '/^' . preg_quote($nsPrefix . $prefix, '/') . '/'; - return apc_delete(new BaseApcIterator('user', $pattern, 0, 1, APC_LIST_ACTIVE)); - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $result = apc_fetch($internalKey, $success); - - if (!$success) { - return null; - } - - $casToken = $result; - return $result; - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - return apc_fetch($normalizedKeys); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $fetch = apc_fetch($internalKeys); - - // remove namespace prefix - $prefixL = strlen($prefix); - $result = array(); - foreach ($fetch as $internalKey => & $value) { - $result[substr($internalKey, $prefixL)] = $value; - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - return apc_exists($prefix . $normalizedKey); - } - - /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - * @throws Exception\ExceptionInterface - */ - protected function internalHasItems(array & $normalizedKeys) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - // array_filter with no callback will remove entries equal to FALSE - return array_keys(array_filter(apc_exists($normalizedKeys))); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $exists = apc_exists($internalKeys); - $result = array(); - $prefixL = strlen($prefix); - foreach ($exists as $internalKey => $bool) { - if ($bool === true) { - $result[] = substr($internalKey, $prefixL); - } - } - - return $result; - } - - /** - * Get metadata of an item. - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadata(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - // @see http://pecl.php.net/bugs/bug.php?id=22564 - if (!apc_exists($internalKey)) { - $metadata = false; - } else { - $format = APC_ITER_ALL ^ APC_ITER_VALUE ^ APC_ITER_TYPE ^ APC_ITER_REFCOUNT; - $regexp = '/^' . preg_quote($internalKey, '/') . '$/'; - $it = new BaseApcIterator('user', $regexp, $format, 100, APC_LIST_ACTIVE); - $metadata = $it->current(); - } - - if (!$metadata) { - return false; - } - - $this->normalizeMetadata($metadata); - return $metadata; - } - - /** - * Get metadata of multiple items - * - * @param array $normalizedKeys - * @return array Associative array of keys and metadata - * - * @triggers getMetadatas.pre(PreEvent) - * @triggers getMetadatas.post(PostEvent) - * @triggers getMetadatas.exception(ExceptionEvent) - */ - protected function internalGetMetadatas(array & $normalizedKeys) - { - $keysRegExp = array(); - foreach ($normalizedKeys as $normalizedKey) { - $keysRegExp[] = preg_quote($normalizedKey, '/'); - } - - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - $pattern = '/^(' . implode('|', $keysRegExp) . ')' . '$/'; - } else { - $prefix = $namespace . $options->getNamespaceSeparator(); - $pattern = '/^' . preg_quote($prefix, '/') . '(' . implode('|', $keysRegExp) . ')' . '$/'; - } - $format = APC_ITER_ALL ^ APC_ITER_VALUE ^ APC_ITER_TYPE ^ APC_ITER_REFCOUNT; - $it = new BaseApcIterator('user', $pattern, $format, 100, APC_LIST_ACTIVE); - $result = array(); - $prefixL = strlen($prefix); - foreach ($it as $internalKey => $metadata) { - // @see http://pecl.php.net/bugs/bug.php?id=22564 - if (!apc_exists($internalKey)) { - continue; - } - - $this->normalizeMetadata($metadata); - $result[substr($internalKey, $prefixL)] = & $metadata; - } - - return $result; - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $ttl = $options->getTtl(); - - if (!apc_store($internalKey, $value, $ttl)) { - $type = is_object($value) ? get_class($value) : gettype($value); - throw new Exception\RuntimeException( - "apc_store('{$internalKey}', <{$type}>, {$ttl}) failed" - ); - } - - return true; - } - - /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - return array_keys(apc_store($normalizedKeyValuePairs, null, $options->getTtl())); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeyValuePairs = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => &$value) { - $internalKey = $prefix . $normalizedKey; - $internalKeyValuePairs[$internalKey] = &$value; - } - - $failedKeys = apc_store($internalKeyValuePairs, null, $options->getTtl()); - $failedKeys = array_keys($failedKeys); - - // remove prefix - $prefixL = strlen($prefix); - foreach ($failedKeys as & $key) { - $key = substr($key, $prefixL); - } - - return $failedKeys; - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $ttl = $options->getTtl(); - - if (!apc_add($internalKey, $value, $ttl)) { - if (apc_exists($internalKey)) { - return false; - } - - $type = is_object($value) ? get_class($value) : gettype($value); - throw new Exception\RuntimeException( - "apc_add('{$internalKey}', <{$type}>, {$ttl}) failed" - ); - } - - return true; - } - - /** - * Internal method to add multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalAddItems(array & $normalizedKeyValuePairs) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - return array_keys(apc_add($normalizedKeyValuePairs, null, $options->getTtl())); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeyValuePairs = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - $internalKey = $prefix . $normalizedKey; - $internalKeyValuePairs[$internalKey] = $value; - } - - $failedKeys = apc_add($internalKeyValuePairs, null, $options->getTtl()); - $failedKeys = array_keys($failedKeys); - - // remove prefix - $prefixL = strlen($prefix); - foreach ($failedKeys as & $key) { - $key = substr($key, $prefixL); - } - - return $failedKeys; - } - - /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - if (!apc_exists($internalKey)) { - return false; - } - - $ttl = $options->getTtl(); - if (!apc_store($internalKey, $value, $ttl)) { - $type = is_object($value) ? get_class($value) : gettype($value); - throw new Exception\RuntimeException( - "apc_store('{$internalKey}', <{$type}>, {$ttl}) failed" - ); - } - - return true; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - return apc_delete($prefix . $normalizedKey); - } - - /** - * Internal method to remove multiple items. - * - * @param array $normalizedKeys - * @return array Array of not removed keys - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItems(array & $normalizedKeys) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - return apc_delete($normalizedKeys); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $failedKeys = apc_delete($internalKeys); - - // remove prefix - $prefixL = strlen($prefix); - foreach ($failedKeys as & $key) { - $key = substr($key, $prefixL); - } - - return $failedKeys; - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $value = (int) $value; - $newValue = apc_inc($internalKey, $value); - - // initial value - if ($newValue === false) { - $ttl = $options->getTtl(); - $newValue = $value; - if (!apc_add($internalKey, $newValue, $ttl)) { - throw new Exception\RuntimeException( - "apc_add('{$internalKey}', {$newValue}, {$ttl}) failed" - ); - } - } - - return $newValue; - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $value = (int) $value; - $newValue = apc_dec($internalKey, $value); - - // initial value - if ($newValue === false) { - $ttl = $options->getTtl(); - $newValue = -$value; - if (!apc_add($internalKey, $newValue, $ttl)) { - throw new Exception\RuntimeException( - "apc_add('{$internalKey}', {$newValue}, {$ttl}) failed" - ); - } - } - - return $newValue; - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $marker = new stdClass(); - $capabilities = new Capabilities( - $this, - $marker, - array( - 'supportedDatatypes' => array( - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ), - 'supportedMetadata' => array( - 'internal_key', - 'atime', 'ctime', 'mtime', 'rtime', - 'size', 'hits', 'ttl', - ), - 'minTtl' => 1, - 'maxTtl' => 0, - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => (bool) ini_get('apc.use_request_time'), - 'expiredRead' => false, - 'maxKeyLength' => 5182, - 'namespaceIsPrefix' => true, - 'namespaceSeparator' => $this->getOptions()->getNamespaceSeparator(), - ) - ); - - // update namespace separator on change option - $this->getEventManager()->attach('option', function ($event) use ($capabilities, $marker) { - $params = $event->getParams(); - - if (isset($params['namespace_separator'])) { - $capabilities->setNamespaceSeparator($marker, $params['namespace_separator']); - } - }); - - $this->capabilities = $capabilities; - $this->capabilityMarker = $marker; - } - - return $this->capabilities; - } - - /* internal */ - - /** - * Normalize metadata to work with APC - * - * @param array $metadata - * @return void - */ - protected function normalizeMetadata(array & $metadata) - { - $metadata['internal_key'] = $metadata['key']; - $metadata['ctime'] = $metadata['creation_time']; - $metadata['atime'] = $metadata['access_time']; - $metadata['rtime'] = $metadata['deletion_time']; - $metadata['size'] = $metadata['mem_size']; - $metadata['hits'] = $metadata['num_hits']; - - unset( - $metadata['key'], - $metadata['creation_time'], - $metadata['access_time'], - $metadata['deletion_time'], - $metadata['mem_size'], - $metadata['num_hits'] - ); - } - - /** - * Internal method to set an item only if token matches - * - * @param mixed $token - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @see getItem() - * @see setItem() - */ - protected function internalCheckAndSetItem(& $token, & $normalizedKey, & $value) - { - return apc_cas($normalizedKey, $token, $value); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/ApcIterator.php b/library/Zend/Cache/Storage/Adapter/ApcIterator.php deleted file mode 100755 index 3cdcbf1c5..000000000 --- a/library/Zend/Cache/Storage/Adapter/ApcIterator.php +++ /dev/null @@ -1,157 +0,0 @@ -storage = $storage; - $this->baseIterator = $baseIterator; - $this->prefixLength = strlen($prefix); - } - - /** - * Get storage instance - * - * @return Apc - */ - public function getStorage() - { - return $this->storage; - } - - /** - * Get iterator mode - * - * @return int Value of IteratorInterface::CURRENT_AS_* - */ - public function getMode() - { - return $this->mode; - } - - /** - * Set iterator mode - * - * @param int $mode - * @return ApcIterator Fluent interface - */ - public function setMode($mode) - { - $this->mode = (int) $mode; - return $this; - } - - /* Iterator */ - - /** - * Get current key, value or metadata. - * - * @return mixed - */ - public function current() - { - if ($this->mode == IteratorInterface::CURRENT_AS_SELF) { - return $this; - } - - $key = $this->key(); - - if ($this->mode == IteratorInterface::CURRENT_AS_VALUE) { - return $this->storage->getItem($key); - } elseif ($this->mode == IteratorInterface::CURRENT_AS_METADATA) { - return $this->storage->getMetadata($key); - } - - return $key; - } - - /** - * Get current key - * - * @return string - */ - public function key() - { - $key = $this->baseIterator->key(); - - // remove namespace prefix - return substr($key, $this->prefixLength); - } - - /** - * Move forward to next element - * - * @return void - */ - public function next() - { - $this->baseIterator->next(); - } - - /** - * Checks if current position is valid - * - * @return bool - */ - public function valid() - { - return $this->baseIterator->valid(); - } - - /** - * Rewind the Iterator to the first element. - * - * @return void - */ - public function rewind() - { - return $this->baseIterator->rewind(); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/ApcOptions.php b/library/Zend/Cache/Storage/Adapter/ApcOptions.php deleted file mode 100755 index 0299d9446..000000000 --- a/library/Zend/Cache/Storage/Adapter/ApcOptions.php +++ /dev/null @@ -1,47 +0,0 @@ -triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/BlackHole.php b/library/Zend/Cache/Storage/Adapter/BlackHole.php deleted file mode 100755 index 2938cfdee..000000000 --- a/library/Zend/Cache/Storage/Adapter/BlackHole.php +++ /dev/null @@ -1,502 +0,0 @@ -setOptions($options); - } - } - - /** - * Set options. - * - * @param array|\Traversable|AdapterOptions $options - * @return StorageInterface Fluent interface - */ - public function setOptions($options) - { - if ($this->options !== $options) { - if (!$options instanceof AdapterOptions) { - $options = new AdapterOptions($options); - } - - if ($this->options) { - $this->options->setAdapter(null); - } - $options->setAdapter($this); - $this->options = $options; - } - return $this; - } - - /** - * Get options - * - * @return AdapterOptions - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new AdapterOptions()); - } - return $this->options; - } - - /** - * Get an item. - * - * @param string $key - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - */ - public function getItem($key, & $success = null, & $casToken = null) - { - $success = false; - return null; - } - - /** - * Get multiple items. - * - * @param array $keys - * @return array Associative array of keys and values - */ - public function getItems(array $keys) - { - return array(); - } - - /** - * Test if an item exists. - * - * @param string $key - * @return bool - */ - public function hasItem($key) - { - return false; - } - - /** - * Test multiple items. - * - * @param array $keys - * @return array Array of found keys - */ - public function hasItems(array $keys) - { - return array(); - } - - /** - * Get metadata of an item. - * - * @param string $key - * @return array|bool Metadata on success, false on failure - */ - public function getMetadata($key) - { - return false; - } - - /** - * Get multiple metadata - * - * @param array $keys - * @return array Associative array of keys and metadata - */ - public function getMetadatas(array $keys) - { - return array(); - } - - /** - * Store an item. - * - * @param string $key - * @param mixed $value - * @return bool - */ - public function setItem($key, $value) - { - return false; - } - - /** - * Store multiple items. - * - * @param array $keyValuePairs - * @return array Array of not stored keys - */ - public function setItems(array $keyValuePairs) - { - return array_keys($keyValuePairs); - } - - /** - * Add an item. - * - * @param string $key - * @param mixed $value - * @return bool - */ - public function addItem($key, $value) - { - return false; - } - - /** - * Add multiple items. - * - * @param array $keyValuePairs - * @return array Array of not stored keys - */ - public function addItems(array $keyValuePairs) - { - return array_keys($keyValuePairs); - } - - /** - * Replace an existing item. - * - * @param string $key - * @param mixed $value - * @return bool - */ - public function replaceItem($key, $value) - { - return false; - } - - /** - * Replace multiple existing items. - * - * @param array $keyValuePairs - * @return array Array of not stored keys - */ - public function replaceItems(array $keyValuePairs) - { - return array_keys($keyValuePairs); - } - - /** - * Set an item only if token matches - * - * It uses the token received from getItem() to check if the item has - * changed before overwriting it. - * - * @param mixed $token - * @param string $key - * @param mixed $value - * @return bool - */ - public function checkAndSetItem($token, $key, $value) - { - return false; - } - - /** - * Reset lifetime of an item - * - * @param string $key - * @return bool - */ - public function touchItem($key) - { - return false; - } - - /** - * Reset lifetime of multiple items. - * - * @param array $keys - * @return array Array of not updated keys - */ - public function touchItems(array $keys) - { - return $keys; - } - - /** - * Remove an item. - * - * @param string $key - * @return bool - */ - public function removeItem($key) - { - return false; - } - - /** - * Remove multiple items. - * - * @param array $keys - * @return array Array of not removed keys - */ - public function removeItems(array $keys) - { - return $keys; - } - - /** - * Increment an item. - * - * @param string $key - * @param int $value - * @return int|bool The new value on success, false on failure - */ - public function incrementItem($key, $value) - { - return false; - } - - /** - * Increment multiple items. - * - * @param array $keyValuePairs - * @return array Associative array of keys and new values - */ - public function incrementItems(array $keyValuePairs) - { - return array(); - } - - /** - * Decrement an item. - * - * @param string $key - * @param int $value - * @return int|bool The new value on success, false on failure - */ - public function decrementItem($key, $value) - { - return false; - } - - /** - * Decrement multiple items. - * - * @param array $keyValuePairs - * @return array Associative array of keys and new values - */ - public function decrementItems(array $keyValuePairs) - { - return array(); - } - - /** - * Capabilities of this storage - * - * @return Capabilities - */ - public function getCapabilities() - { - if ($this->capabilities === null) { - // use default capabilities only - $this->capabilityMarker = new stdClass(); - $this->capabilities = new Capabilities($this, $this->capabilityMarker); - } - return $this->capabilities; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - return 0; - } - - /* ClearByNamespaceInterface */ - - /** - * Remove items of given namespace - * - * @param string $namespace - * @return bool - */ - public function clearByNamespace($namespace) - { - return false; - } - - /* ClearByPrefixInterface */ - - /** - * Remove items matching given prefix - * - * @param string $prefix - * @return bool - */ - public function clearByPrefix($prefix) - { - return false; - } - - /* ClearExpiredInterface */ - - /** - * Remove expired items - * - * @return bool - */ - public function clearExpired() - { - return false; - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - return false; - } - - /* IterableInterface */ - - /** - * Get the storage iterator - * - * @return KeyListIterator - */ - public function getIterator() - { - return new KeyListIterator($this, array()); - } - - /* OptimizableInterface */ - - /** - * Optimize the storage - * - * @return bool - */ - public function optimize() - { - return false; - } - - /* TaggableInterface */ - - /** - * Set tags to an item by given key. - * An empty array will remove all tags. - * - * @param string $key - * @param string[] $tags - * @return bool - */ - public function setTags($key, array $tags) - { - return false; - } - - /** - * Get tags of an item by given key - * - * @param string $key - * @return string[]|FALSE - */ - public function getTags($key) - { - return false; - } - - /** - * Remove items matching given tags. - * - * If $disjunction only one of the given tags must match - * else all given tags must match. - * - * @param string[] $tags - * @param bool $disjunction - * @return bool - */ - public function clearByTags(array $tags, $disjunction = false) - { - return false; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - return 0; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Dba.php b/library/Zend/Cache/Storage/Adapter/Dba.php deleted file mode 100755 index bb2860d7c..000000000 --- a/library/Zend/Cache/Storage/Adapter/Dba.php +++ /dev/null @@ -1,541 +0,0 @@ -_close(); - - parent::__destruct(); - } - - /* options */ - - /** - * Set options. - * - * @param array|Traversable|DbaOptions $options - * @return Apc - * @see getOptions() - */ - public function setOptions($options) - { - if (!$options instanceof DbaOptions) { - $options = new DbaOptions($options); - } - - return parent::setOptions($options); - } - - /** - * Get options. - * - * @return DbaOptions - * @see setOptions() - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new DbaOptions()); - } - return $this->options; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - if ($this->totalSpace === null) { - $pathname = $this->getOptions()->getPathname(); - - if ($pathname === '') { - throw new Exception\LogicException('No pathname to database file'); - } - - ErrorHandler::start(); - $total = disk_total_space(dirname($pathname)); - $error = ErrorHandler::stop(); - if ($total === false) { - throw new Exception\RuntimeException("Can't detect total space of '{$pathname}'", 0, $error); - } - $this->totalSpace = $total; - - // clean total space buffer on change pathname - $events = $this->getEventManager(); - $handle = null; - $totalSpace = & $this->totalSpace; - $callback = function ($event) use (& $events, & $handle, & $totalSpace) { - $params = $event->getParams(); - if (isset($params['pathname'])) { - $totalSpace = null; - $events->detach($handle); - } - }; - $events->attach('option', $callback); - } - - return $this->totalSpace; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - $pathname = $this->getOptions()->getPathname(); - - if ($pathname === '') { - throw new Exception\LogicException('No pathname to database file'); - } - - ErrorHandler::start(); - $avail = disk_free_space(dirname($pathname)); - $error = ErrorHandler::stop(); - if ($avail === false) { - throw new Exception\RuntimeException("Can't detect free space of '{$pathname}'", 0, $error); - } - - return $avail; - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - $pathname = $this->getOptions()->getPathname(); - - if ($pathname === '') { - throw new Exception\LogicException('No pathname to database file'); - } - - if (file_exists($pathname)) { - // close the dba file before delete - // and reopen (create) on next use - $this->_close(); - - ErrorHandler::start(); - $result = unlink($pathname); - $error = ErrorHandler::stop(); - if (!$result) { - throw new Exception\RuntimeException("unlink('{$pathname}') failed", 0, $error); - } - } - - return true; - } - - /* ClearByNamespaceInterface */ - - /** - * Remove items by given namespace - * - * @param string $namespace - * @return bool - */ - public function clearByNamespace($namespace) - { - $namespace = (string) $namespace; - if ($namespace === '') { - throw new Exception\InvalidArgumentException('No namespace given'); - } - - $prefix = $namespace . $this->getOptions()->getNamespaceSeparator(); - $prefixl = strlen($prefix); - $result = true; - - $this->_open(); - - do { // Workaround for PHP-Bug #62491 & #62492 - $recheck = false; - $internalKey = dba_firstkey($this->handle); - while ($internalKey !== false && $internalKey !== null) { - if (substr($internalKey, 0, $prefixl) === $prefix) { - $result = dba_delete($internalKey, $this->handle) && $result; - } - - $internalKey = dba_nextkey($this->handle); - } - } while ($recheck); - - return $result; - } - - /* ClearByPrefixInterface */ - - /** - * Remove items matching given prefix - * - * @param string $prefix - * @return bool - */ - public function clearByPrefix($prefix) - { - $prefix = (string) $prefix; - if ($prefix === '') { - throw new Exception\InvalidArgumentException('No prefix given'); - } - - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator() . $prefix; - $prefixL = strlen($prefix); - $result = true; - - $this->_open(); - - do { // Workaround for PHP-Bug #62491 & #62492 - $recheck = false; - $internalKey = dba_firstkey($this->handle); - while ($internalKey !== false && $internalKey !== null) { - if (substr($internalKey, 0, $prefixL) === $prefix) { - $result = dba_delete($internalKey, $this->handle) && $result; - $recheck = true; - } - - $internalKey = dba_nextkey($this->handle); - } - } while ($recheck); - - return $result; - } - - /* IterableInterface */ - - /** - * Get the storage iterator - * - * @return ApcIterator - */ - public function getIterator() - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - - return new DbaIterator($this, $this->handle, $prefix); - } - - /* OptimizableInterface */ - - /** - * Optimize the storage - * - * @return bool - * @return Exception\RuntimeException - */ - public function optimize() - { - $this->_open(); - if (!dba_optimize($this->handle)) { - throw new Exception\RuntimeException('dba_optimize failed'); - } - return true; - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - - $this->_open(); - $value = dba_fetch($prefix . $normalizedKey, $this->handle); - - if ($value === false) { - $success = false; - return null; - } - - $success = true; - $casToken = $value; - return $value; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - - $this->_open(); - return dba_exists($prefix . $normalizedKey, $this->handle); - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - $this->_open(); - if (!dba_replace($internalKey, $value, $this->handle)) { - throw new Exception\RuntimeException("dba_replace('{$internalKey}', ...) failed"); - } - - return true; - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - $this->_open(); - - // Workaround for PHP-Bug #54242 & #62489 - if (dba_exists($internalKey, $this->handle)) { - return false; - } - - // Workaround for PHP-Bug #54242 & #62489 - // dba_insert returns true if key already exists - ErrorHandler::start(); - $result = dba_insert($internalKey, $value, $this->handle); - $error = ErrorHandler::stop(); - if (!$result || $error) { - return false; - } - - return true; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - $this->_open(); - - // Workaround for PHP-Bug #62490 - if (!dba_exists($internalKey, $this->handle)) { - return false; - } - - return dba_delete($internalKey, $this->handle); - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $marker = new stdClass(); - $capabilities = new Capabilities( - $this, - $marker, - array( - 'supportedDatatypes' => array( - 'NULL' => 'string', - 'boolean' => 'string', - 'integer' => 'string', - 'double' => 'string', - 'string' => true, - 'array' => false, - 'object' => false, - 'resource' => false, - ), - 'minTtl' => 0, - 'supportedMetadata' => array(), - 'maxKeyLength' => 0, // TODO: maxKeyLength ???? - 'namespaceIsPrefix' => true, - 'namespaceSeparator' => $this->getOptions()->getNamespaceSeparator(), - ) - ); - - // update namespace separator on change option - $this->getEventManager()->attach('option', function ($event) use ($capabilities, $marker) { - $params = $event->getParams(); - - if (isset($params['namespace_separator'])) { - $capabilities->setNamespaceSeparator($marker, $params['namespace_separator']); - } - }); - - $this->capabilities = $capabilities; - $this->capabilityMarker = $marker; - } - - return $this->capabilities; - } - - /** - * Open the database if not already done. - * - * @return void - * @throws Exception\LogicException - * @throws Exception\RuntimeException - */ - protected function _open() - { - if (!$this->handle) { - $options = $this->getOptions(); - $pathname = $options->getPathname(); - $mode = $options->getMode(); - $handler = $options->getHandler(); - - if ($pathname === '') { - throw new Exception\LogicException('No pathname to database file'); - } - - ErrorHandler::start(); - $dba = dba_open($pathname, $mode, $handler); - $err = ErrorHandler::stop(); - if (!$dba) { - throw new Exception\RuntimeException( - "dba_open('{$pathname}', '{$mode}', '{$handler}') failed", - 0, - $err - ); - } - $this->handle = $dba; - } - } - - /** - * Close database file if opened - * - * @return void - */ - protected function _close() - { - if ($this->handle) { - ErrorHandler::start(E_NOTICE); - dba_close($this->handle); - ErrorHandler::stop(); - $this->handle = null; - } - } -} diff --git a/library/Zend/Cache/Storage/Adapter/DbaIterator.php b/library/Zend/Cache/Storage/Adapter/DbaIterator.php deleted file mode 100755 index a895ce545..000000000 --- a/library/Zend/Cache/Storage/Adapter/DbaIterator.php +++ /dev/null @@ -1,190 +0,0 @@ -storage = $storage; - $this->handle = $handle; - $this->prefixLength = strlen($prefix); - - $this->rewind(); - } - - /** - * Get storage instance - * - * @return Dba - */ - public function getStorage() - { - return $this->storage; - } - - /** - * Get iterator mode - * - * @return int Value of IteratorInterface::CURRENT_AS_* - */ - public function getMode() - { - return $this->mode; - } - - /** - * Set iterator mode - * - * @param int $mode - * @return ApcIterator Fluent interface - */ - public function setMode($mode) - { - $this->mode = (int) $mode; - return $this; - } - - /* Iterator */ - - /** - * Get current key, value or metadata. - * - * @return mixed - * @throws Exception\RuntimeException - */ - public function current() - { - if ($this->mode == IteratorInterface::CURRENT_AS_SELF) { - return $this; - } - - $key = $this->key(); - - if ($this->mode == IteratorInterface::CURRENT_AS_VALUE) { - return $this->storage->getItem($key); - } elseif ($this->mode == IteratorInterface::CURRENT_AS_METADATA) { - return $this->storage->getMetadata($key); - } - - return $key; - } - - /** - * Get current key - * - * @return string - * @throws Exception\RuntimeException - */ - public function key() - { - if ($this->currentInternalKey === false) { - throw new Exception\RuntimeException("Iterator is on an invalid state"); - } - - // remove namespace prefix - return substr($this->currentInternalKey, $this->prefixLength); - } - - /** - * Move forward to next element - * - * @return void - * @throws Exception\RuntimeException - */ - public function next() - { - if ($this->currentInternalKey === false) { - throw new Exception\RuntimeException("Iterator is on an invalid state"); - } - - $this->currentInternalKey = dba_nextkey($this->handle); - - // Workaround for PHP-Bug #62492 - if ($this->currentInternalKey === null) { - $this->currentInternalKey = false; - } - } - - /** - * Checks if current position is valid - * - * @return bool - */ - public function valid() - { - return ($this->currentInternalKey !== false); - } - - /** - * Rewind the Iterator to the first element. - * - * @return void - * @throws Exception\RuntimeException - */ - public function rewind() - { - if ($this->currentInternalKey === false) { - throw new Exception\RuntimeException("Iterator is on an invalid state"); - } - - $this->currentInternalKey = dba_firstkey($this->handle); - - // Workaround for PHP-Bug #62492 - if ($this->currentInternalKey === null) { - $this->currentInternalKey = false; - } - } -} diff --git a/library/Zend/Cache/Storage/Adapter/DbaOptions.php b/library/Zend/Cache/Storage/Adapter/DbaOptions.php deleted file mode 100755 index 13172b749..000000000 --- a/library/Zend/Cache/Storage/Adapter/DbaOptions.php +++ /dev/null @@ -1,129 +0,0 @@ -triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } - - /** - * Set pathname to database file - * - * @param string $pathname - * @return DbaOptions - */ - public function setPathname($pathname) - { - $this->pathname = (string) $pathname; - $this->triggerOptionEvent('pathname', $pathname); - return $this; - } - - /** - * Get pathname to database file - * - * @return string - */ - public function getPathname() - { - return $this->pathname; - } - - /** - * - * - * @param string $mode - * @return \Zend\Cache\Storage\Adapter\DbaOptions - */ - public function setMode($mode) - { - $this->mode = (string) $mode; - $this->triggerOptionEvent('mode', $mode); - return $this; - } - - public function getMode() - { - return $this->mode; - } - - public function setHandler($handler) - { - $handler = (string) $handler; - - if (!function_exists('dba_handlers') || !in_array($handler, dba_handlers())) { - throw new Exception\ExtensionNotLoadedException("DBA-Handler '{$handler}' not supported"); - } - - $this->triggerOptionEvent('handler', $handler); - $this->handler = $handler; - return $this; - } - - public function getHandler() - { - return $this->handler; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Filesystem.php b/library/Zend/Cache/Storage/Adapter/Filesystem.php deleted file mode 100755 index ef1c2a7de..000000000 --- a/library/Zend/Cache/Storage/Adapter/Filesystem.php +++ /dev/null @@ -1,1616 +0,0 @@ -options) { - $this->setOptions(new FilesystemOptions()); - } - return $this->options; - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @throws Exception\RuntimeException - * @return bool - */ - public function flush() - { - $flags = GlobIterator::SKIP_DOTS | GlobIterator::CURRENT_AS_PATHNAME; - $dir = $this->getOptions()->getCacheDir(); - $clearFolder = null; - $clearFolder = function ($dir) use (& $clearFolder, $flags) { - $it = new GlobIterator($dir . DIRECTORY_SEPARATOR . '*', $flags); - foreach ($it as $pathname) { - if ($it->isDir()) { - $clearFolder($pathname); - rmdir($pathname); - } else { - unlink($pathname); - } - } - }; - - ErrorHandler::start(); - $clearFolder($dir); - $error = ErrorHandler::stop(); - if ($error) { - throw new Exception\RuntimeException("Flushing directory '{$dir}' failed", 0, $error); - } - - return true; - } - - /* ClearExpiredInterface */ - - /** - * Remove expired items - * - * @return bool - * - * @triggers clearExpired.exception(ExceptionEvent) - */ - public function clearExpired() - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - - $flags = GlobIterator::SKIP_DOTS | GlobIterator::CURRENT_AS_FILEINFO; - $path = $options->getCacheDir() - . str_repeat(DIRECTORY_SEPARATOR . $prefix . '*', $options->getDirLevel()) - . DIRECTORY_SEPARATOR . $prefix . '*.dat'; - $glob = new GlobIterator($path, $flags); - $time = time(); - $ttl = $options->getTtl(); - - ErrorHandler::start(); - foreach ($glob as $entry) { - $mtime = $entry->getMTime(); - if ($time >= $mtime + $ttl) { - $pathname = $entry->getPathname(); - unlink($pathname); - - $tagPathname = substr($pathname, 0, -4) . '.tag'; - if (file_exists($tagPathname)) { - unlink($tagPathname); - } - } - } - $error = ErrorHandler::stop(); - if ($error) { - $result = false; - return $this->triggerException( - __FUNCTION__, - new ArrayObject(), - $result, - new Exception\RuntimeException('Failed to clear expired items', 0, $error) - ); - } - - return true; - } - - /* ClearByNamespaceInterface */ - - /** - * Remove items by given namespace - * - * @param string $namespace - * @throws Exception\RuntimeException - * @return bool - */ - public function clearByNamespace($namespace) - { - $namespace = (string) $namespace; - if ($namespace === '') { - throw new Exception\InvalidArgumentException('No namespace given'); - } - - $options = $this->getOptions(); - $prefix = $namespace . $options->getNamespaceSeparator(); - - $flags = GlobIterator::SKIP_DOTS | GlobIterator::CURRENT_AS_PATHNAME; - $path = $options->getCacheDir() - . str_repeat(DIRECTORY_SEPARATOR . $prefix . '*', $options->getDirLevel()) - . DIRECTORY_SEPARATOR . $prefix . '*.*'; - $glob = new GlobIterator($path, $flags); - - ErrorHandler::start(); - foreach ($glob as $pathname) { - unlink($pathname); - } - $error = ErrorHandler::stop(); - if ($error) { - throw new Exception\RuntimeException("Failed to remove files of '{$path}'", 0, $error); - } - - return true; - } - - /* ClearByPrefixInterface */ - - /** - * Remove items matching given prefix - * - * @param string $prefix - * @throws Exception\RuntimeException - * @return bool - */ - public function clearByPrefix($prefix) - { - $prefix = (string) $prefix; - if ($prefix === '') { - throw new Exception\InvalidArgumentException('No prefix given'); - } - - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $nsPrefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - - $flags = GlobIterator::SKIP_DOTS | GlobIterator::CURRENT_AS_PATHNAME; - $path = $options->getCacheDir() - . str_repeat(DIRECTORY_SEPARATOR . $nsPrefix . '*', $options->getDirLevel()) - . DIRECTORY_SEPARATOR . $nsPrefix . $prefix . '*.*'; - $glob = new GlobIterator($path, $flags); - - ErrorHandler::start(); - foreach ($glob as $pathname) { - unlink($pathname); - } - $error = ErrorHandler::stop(); - if ($error) { - throw new Exception\RuntimeException("Failed to remove files of '{$path}'", 0, $error); - } - - return true; - } - - /* TaggableInterface */ - - /** - * Set tags to an item by given key. - * An empty array will remove all tags. - * - * @param string $key - * @param string[] $tags - * @return bool - */ - public function setTags($key, array $tags) - { - $this->normalizeKey($key); - if (!$this->internalHasItem($key)) { - return false; - } - - $filespec = $this->getFileSpec($key); - - if (!$tags) { - $this->unlink($filespec . '.tag'); - return true; - } - - $this->putFileContent($filespec . '.tag', implode("\n", $tags)); - return true; - } - - /** - * Get tags of an item by given key - * - * @param string $key - * @return string[]|FALSE - */ - public function getTags($key) - { - $this->normalizeKey($key); - if (!$this->internalHasItem($key)) { - return false; - } - - $filespec = $this->getFileSpec($key); - $tags = array(); - if (file_exists($filespec . '.tag')) { - $tags = explode("\n", $this->getFileContent($filespec . '.tag')); - } - - return $tags; - } - - /** - * Remove items matching given tags. - * - * If $disjunction only one of the given tags must match - * else all given tags must match. - * - * @param string[] $tags - * @param bool $disjunction - * @return bool - */ - public function clearByTags(array $tags, $disjunction = false) - { - if (!$tags) { - return true; - } - - $tagCount = count($tags); - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - - $flags = GlobIterator::SKIP_DOTS | GlobIterator::CURRENT_AS_PATHNAME; - $path = $options->getCacheDir() - . str_repeat(DIRECTORY_SEPARATOR . $prefix . '*', $options->getDirLevel()) - . DIRECTORY_SEPARATOR . $prefix . '*.tag'; - $glob = new GlobIterator($path, $flags); - - foreach ($glob as $pathname) { - $diff = array_diff($tags, explode("\n", $this->getFileContent($pathname))); - - $rem = false; - if ($disjunction && count($diff) < $tagCount) { - $rem = true; - } elseif (!$disjunction && !$diff) { - $rem = true; - } - - if ($rem) { - unlink($pathname); - - $datPathname = substr($pathname, 0, -4) . '.dat'; - if (file_exists($datPathname)) { - unlink($datPathname); - } - } - } - - return true; - } - - /* IterableInterface */ - - /** - * Get the storage iterator - * - * @return FilesystemIterator - */ - public function getIterator() - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $path = $options->getCacheDir() - . str_repeat(DIRECTORY_SEPARATOR . $prefix . '*', $options->getDirLevel()) - . DIRECTORY_SEPARATOR . $prefix . '*.dat'; - return new FilesystemIterator($this, $path, $prefix); - } - - /* OptimizableInterface */ - - /** - * Optimize the storage - * - * @return bool - * @return Exception\RuntimeException - */ - public function optimize() - { - $options = $this->getOptions(); - if ($options->getDirLevel()) { - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - - // removes only empty directories - $this->rmDir($options->getCacheDir(), $prefix); - } - return true; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @throws Exception\RuntimeException - * @return int|float - */ - public function getTotalSpace() - { - if ($this->totalSpace === null) { - $path = $this->getOptions()->getCacheDir(); - - ErrorHandler::start(); - $total = disk_total_space($path); - $error = ErrorHandler::stop(); - if ($total === false) { - throw new Exception\RuntimeException("Can't detect total space of '{$path}'", 0, $error); - } - $this->totalSpace = $total; - - // clean total space buffer on change cache_dir - $events = $this->getEventManager(); - $handle = null; - $totalSpace = & $this->totalSpace; - $callback = function ($event) use (& $events, & $handle, & $totalSpace) { - $params = $event->getParams(); - if (isset($params['cache_dir'])) { - $totalSpace = null; - $events->detach($handle); - } - }; - $events->attach('option', $callback); - } - - return $this->totalSpace; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @throws Exception\RuntimeException - * @return int|float - */ - public function getAvailableSpace() - { - $path = $this->getOptions()->getCacheDir(); - - ErrorHandler::start(); - $avail = disk_free_space($path); - $error = ErrorHandler::stop(); - if ($avail === false) { - throw new Exception\RuntimeException("Can't detect free space of '{$path}'", 0, $error); - } - - return $avail; - } - - /* reading */ - - /** - * Get an item. - * - * @param string $key - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - * - * @triggers getItem.pre(PreEvent) - * @triggers getItem.post(PostEvent) - * @triggers getItem.exception(ExceptionEvent) - */ - public function getItem($key, & $success = null, & $casToken = null) - { - $options = $this->getOptions(); - if ($options->getReadable() && $options->getClearStatCache()) { - clearstatcache(); - } - - $argn = func_num_args(); - if ($argn > 2) { - return parent::getItem($key, $success, $casToken); - } elseif ($argn > 1) { - return parent::getItem($key, $success); - } - - return parent::getItem($key); - } - - /** - * Get multiple items. - * - * @param array $keys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - * - * @triggers getItems.pre(PreEvent) - * @triggers getItems.post(PostEvent) - * @triggers getItems.exception(ExceptionEvent) - */ - public function getItems(array $keys) - { - $options = $this->getOptions(); - if ($options->getReadable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::getItems($keys); - } - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - if (!$this->internalHasItem($normalizedKey)) { - $success = false; - return null; - } - - try { - $filespec = $this->getFileSpec($normalizedKey); - $data = $this->getFileContent($filespec . '.dat'); - - // use filemtime + filesize as CAS token - if (func_num_args() > 2) { - $casToken = filemtime($filespec . '.dat') . filesize($filespec . '.dat'); - } - $success = true; - return $data; - } catch (BaseException $e) { - $success = false; - throw $e; - } - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $keys = $normalizedKeys; // Don't change argument passed by reference - $result = array(); - while ($keys) { - // LOCK_NB if more than one items have to read - $nonBlocking = count($keys) > 1; - $wouldblock = null; - - // read items - foreach ($keys as $i => $key) { - if (!$this->internalHasItem($key)) { - unset($keys[$i]); - continue; - } - - $filespec = $this->getFileSpec($key); - $data = $this->getFileContent($filespec . '.dat', $nonBlocking, $wouldblock); - if ($nonBlocking && $wouldblock) { - continue; - } else { - unset($keys[$i]); - } - - $result[$key] = $data; - } - - // TODO: Don't check ttl after first iteration - // $options['ttl'] = 0; - } - - return $result; - } - - /** - * Test if an item exists. - * - * @param string $key - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers hasItem.pre(PreEvent) - * @triggers hasItem.post(PostEvent) - * @triggers hasItem.exception(ExceptionEvent) - */ - public function hasItem($key) - { - $options = $this->getOptions(); - if ($options->getReadable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::hasItem($key); - } - - /** - * Test multiple items. - * - * @param array $keys - * @return array Array of found keys - * @throws Exception\ExceptionInterface - * - * @triggers hasItems.pre(PreEvent) - * @triggers hasItems.post(PostEvent) - * @triggers hasItems.exception(ExceptionEvent) - */ - public function hasItems(array $keys) - { - $options = $this->getOptions(); - if ($options->getReadable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::hasItems($keys); - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $file = $this->getFileSpec($normalizedKey) . '.dat'; - if (!file_exists($file)) { - return false; - } - - $ttl = $this->getOptions()->getTtl(); - if ($ttl) { - ErrorHandler::start(); - $mtime = filemtime($file); - $error = ErrorHandler::stop(); - if (!$mtime) { - throw new Exception\RuntimeException("Error getting mtime of file '{$file}'", 0, $error); - } - - if (time() >= ($mtime + $ttl)) { - return false; - } - } - - return true; - } - - /** - * Get metadata - * - * @param string $key - * @return array|bool Metadata on success, false on failure - */ - public function getMetadata($key) - { - $options = $this->getOptions(); - if ($options->getReadable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::getMetadata($key); - } - - /** - * Get metadatas - * - * @param array $keys - * @param array $options - * @return array Associative array of keys and metadata - */ - public function getMetadatas(array $keys, array $options = array()) - { - $options = $this->getOptions(); - if ($options->getReadable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::getMetadatas($keys); - } - - /** - * Get info by key - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - */ - protected function internalGetMetadata(& $normalizedKey) - { - if (!$this->internalHasItem($normalizedKey)) { - return false; - } - - $options = $this->getOptions(); - $filespec = $this->getFileSpec($normalizedKey); - $file = $filespec . '.dat'; - - $metadata = array( - 'filespec' => $filespec, - 'mtime' => filemtime($file) - ); - - if (!$options->getNoCtime()) { - $metadata['ctime'] = filectime($file); - } - - if (!$options->getNoAtime()) { - $metadata['atime'] = fileatime($file); - } - - return $metadata; - } - - /** - * Internal method to get multiple metadata - * - * @param array $normalizedKeys - * @return array Associative array of keys and metadata - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadatas(array & $normalizedKeys) - { - $options = $this->getOptions(); - $result = array(); - - foreach ($normalizedKeys as $normalizedKey) { - $filespec = $this->getFileSpec($normalizedKey); - $file = $filespec . '.dat'; - - $metadata = array( - 'filespec' => $filespec, - 'mtime' => filemtime($file), - ); - - if (!$options->getNoCtime()) { - $metadata['ctime'] = filectime($file); - } - - if (!$options->getNoAtime()) { - $metadata['atime'] = fileatime($file); - } - - $result[$normalizedKey] = $metadata; - } - - return $result; - } - - /* writing */ - - /** - * Store an item. - * - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers setItem.pre(PreEvent) - * @triggers setItem.post(PostEvent) - * @triggers setItem.exception(ExceptionEvent) - */ - public function setItem($key, $value) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - return parent::setItem($key, $value); - } - - /** - * Store multiple items. - * - * @param array $keyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - * - * @triggers setItems.pre(PreEvent) - * @triggers setItems.post(PostEvent) - * @triggers setItems.exception(ExceptionEvent) - */ - public function setItems(array $keyValuePairs) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::setItems($keyValuePairs); - } - - /** - * Add an item. - * - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers addItem.pre(PreEvent) - * @triggers addItem.post(PostEvent) - * @triggers addItem.exception(ExceptionEvent) - */ - public function addItem($key, $value) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::addItem($key, $value); - } - - /** - * Add multiple items. - * - * @param array $keyValuePairs - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers addItems.pre(PreEvent) - * @triggers addItems.post(PostEvent) - * @triggers addItems.exception(ExceptionEvent) - */ - public function addItems(array $keyValuePairs) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::addItems($keyValuePairs); - } - - /** - * Replace an existing item. - * - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers replaceItem.pre(PreEvent) - * @triggers replaceItem.post(PostEvent) - * @triggers replaceItem.exception(ExceptionEvent) - */ - public function replaceItem($key, $value) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::replaceItem($key, $value); - } - - /** - * Replace multiple existing items. - * - * @param array $keyValuePairs - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers replaceItems.pre(PreEvent) - * @triggers replaceItems.post(PostEvent) - * @triggers replaceItems.exception(ExceptionEvent) - */ - public function replaceItems(array $keyValuePairs) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::replaceItems($keyValuePairs); - } - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $filespec = $this->getFileSpec($normalizedKey); - $this->prepareDirectoryStructure($filespec); - - // write data in non-blocking mode - $wouldblock = null; - $this->putFileContent($filespec . '.dat', $value, true, $wouldblock); - - // delete related tag file (if present) - $this->unlink($filespec . '.tag'); - - // Retry writing data in blocking mode if it was blocked before - if ($wouldblock) { - $this->putFileContent($filespec . '.dat', $value); - } - - return true; - } - - /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $oldUmask = null; - - // create an associated array of files and contents to write - $contents = array(); - foreach ($normalizedKeyValuePairs as $key => & $value) { - $filespec = $this->getFileSpec($key); - $this->prepareDirectoryStructure($filespec); - - // *.dat file - $contents[$filespec . '.dat'] = & $value; - - // *.tag file - $this->unlink($filespec . '.tag'); - } - - // write to disk - while ($contents) { - $nonBlocking = count($contents) > 1; - $wouldblock = null; - - foreach ($contents as $file => & $content) { - $this->putFileContent($file, $content, $nonBlocking, $wouldblock); - if (!$nonBlocking || !$wouldblock) { - unset($contents[$file]); - } - } - } - - // return OK - return array(); - } - - /** - * Set an item only if token matches - * - * It uses the token received from getItem() to check if the item has - * changed before overwriting it. - * - * @param mixed $token - * @param string $key - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * @see getItem() - * @see setItem() - */ - public function checkAndSetItem($token, $key, $value) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::checkAndSetItem($token, $key, $value); - } - - /** - * Internal method to set an item only if token matches - * - * @param mixed $token - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * @see getItem() - * @see setItem() - */ - protected function internalCheckAndSetItem(& $token, & $normalizedKey, & $value) - { - if (!$this->internalHasItem($normalizedKey)) { - return false; - } - - // use filemtime + filesize as CAS token - $file = $this->getFileSpec($normalizedKey) . '.dat'; - $check = filemtime($file) . filesize($file); - if ($token !== $check) { - return false; - } - - return $this->internalSetItem($normalizedKey, $value); - } - - /** - * Reset lifetime of an item - * - * @param string $key - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers touchItem.pre(PreEvent) - * @triggers touchItem.post(PostEvent) - * @triggers touchItem.exception(ExceptionEvent) - */ - public function touchItem($key) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::touchItem($key); - } - - /** - * Reset lifetime of multiple items. - * - * @param array $keys - * @return array Array of not updated keys - * @throws Exception\ExceptionInterface - * - * @triggers touchItems.pre(PreEvent) - * @triggers touchItems.post(PostEvent) - * @triggers touchItems.exception(ExceptionEvent) - */ - public function touchItems(array $keys) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::touchItems($keys); - } - - /** - * Internal method to reset lifetime of an item - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalTouchItem(& $normalizedKey) - { - if (!$this->internalHasItem($normalizedKey)) { - return false; - } - - $filespec = $this->getFileSpec($normalizedKey); - - ErrorHandler::start(); - $touch = touch($filespec . '.dat'); - $error = ErrorHandler::stop(); - if (!$touch) { - throw new Exception\RuntimeException("Error touching file '{$filespec}.dat'", 0, $error); - } - - return true; - } - - /** - * Remove an item. - * - * @param string $key - * @return bool - * @throws Exception\ExceptionInterface - * - * @triggers removeItem.pre(PreEvent) - * @triggers removeItem.post(PostEvent) - * @triggers removeItem.exception(ExceptionEvent) - */ - public function removeItem($key) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::removeItem($key); - } - - /** - * Remove multiple items. - * - * @param array $keys - * @return array Array of not removed keys - * @throws Exception\ExceptionInterface - * - * @triggers removeItems.pre(PreEvent) - * @triggers removeItems.post(PostEvent) - * @triggers removeItems.exception(ExceptionEvent) - */ - public function removeItems(array $keys) - { - $options = $this->getOptions(); - if ($options->getWritable() && $options->getClearStatCache()) { - clearstatcache(); - } - - return parent::removeItems($keys); - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $filespec = $this->getFileSpec($normalizedKey); - if (!file_exists($filespec . '.dat')) { - return false; - } else { - $this->unlink($filespec . '.dat'); - $this->unlink($filespec . '.tag'); - } - return true; - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $marker = new stdClass(); - $options = $this->getOptions(); - - // detect metadata - $metadata = array('mtime', 'filespec'); - if (!$options->getNoAtime()) { - $metadata[] = 'atime'; - } - if (!$options->getNoCtime()) { - $metadata[] = 'ctime'; - } - - $capabilities = new Capabilities( - $this, - $marker, - array( - 'supportedDatatypes' => array( - 'NULL' => 'string', - 'boolean' => 'string', - 'integer' => 'string', - 'double' => 'string', - 'string' => true, - 'array' => false, - 'object' => false, - 'resource' => false, - ), - 'supportedMetadata' => $metadata, - 'minTtl' => 1, - 'maxTtl' => 0, - 'staticTtl' => false, - 'ttlPrecision' => 1, - 'expiredRead' => true, - 'maxKeyLength' => 251, // 255 - strlen(.dat | .tag) - 'namespaceIsPrefix' => true, - 'namespaceSeparator' => $options->getNamespaceSeparator(), - ) - ); - - // update capabilities on change options - $this->getEventManager()->attach('option', function ($event) use ($capabilities, $marker) { - $params = $event->getParams(); - - if (isset($params['namespace_separator'])) { - $capabilities->setNamespaceSeparator($marker, $params['namespace_separator']); - } - - if (isset($params['no_atime']) || isset($params['no_ctime'])) { - $metadata = $capabilities->getSupportedMetadata(); - - if (isset($params['no_atime']) && !$params['no_atime']) { - $metadata[] = 'atime'; - } elseif (isset($params['no_atime']) && ($index = array_search('atime', $metadata)) !== false) { - unset($metadata[$index]); - } - - if (isset($params['no_ctime']) && !$params['no_ctime']) { - $metadata[] = 'ctime'; - } elseif (isset($params['no_ctime']) && ($index = array_search('ctime', $metadata)) !== false) { - unset($metadata[$index]); - } - - $capabilities->setSupportedMetadata($marker, $metadata); - } - }); - - $this->capabilityMarker = $marker; - $this->capabilities = $capabilities; - } - - return $this->capabilities; - } - - /* internal */ - - /** - * Removes directories recursive by namespace - * - * @param string $dir Directory to delete - * @param string $prefix Namespace + Separator - * @return bool - */ - protected function rmDir($dir, $prefix) - { - $glob = glob( - $dir . DIRECTORY_SEPARATOR . $prefix . '*', - GLOB_ONLYDIR | GLOB_NOESCAPE | GLOB_NOSORT - ); - if (!$glob) { - // On some systems glob returns false even on empty result - return true; - } - - $ret = true; - foreach ($glob as $subdir) { - // skip removing current directory if removing of sub-directory failed - if ($this->rmDir($subdir, $prefix)) { - // ignore not empty directories - ErrorHandler::start(); - $ret = rmdir($subdir) && $ret; - ErrorHandler::stop(); - } else { - $ret = false; - } - } - - return $ret; - } - - /** - * Get file spec of the given key and namespace - * - * @param string $normalizedKey - * @return string - */ - protected function getFileSpec($normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $path = $options->getCacheDir() . DIRECTORY_SEPARATOR; - $level = $options->getDirLevel(); - - $fileSpecId = $path . $prefix . $normalizedKey . '/' . $level; - if ($this->lastFileSpecId !== $fileSpecId) { - if ($level > 0) { - // create up to 256 directories per directory level - $hash = md5($normalizedKey); - for ($i = 0, $max = ($level * 2); $i < $max; $i+= 2) { - $path .= $prefix . $hash[$i] . $hash[$i+1] . DIRECTORY_SEPARATOR; - } - } - - $this->lastFileSpecId = $fileSpecId; - $this->lastFileSpec = $path . $prefix . $normalizedKey; - } - - return $this->lastFileSpec; - } - - /** - * Read info file - * - * @param string $file - * @param bool $nonBlocking Don't block script if file is locked - * @param bool $wouldblock The optional argument is set to TRUE if the lock would block - * @return array|bool The info array or false if file wasn't found - * @throws Exception\RuntimeException - */ - protected function readInfoFile($file, $nonBlocking = false, & $wouldblock = null) - { - if (!file_exists($file)) { - return false; - } - - $content = $this->getFileContent($file, $nonBlocking, $wouldblock); - if ($nonBlocking && $wouldblock) { - return false; - } - - ErrorHandler::start(); - $ifo = unserialize($content); - $err = ErrorHandler::stop(); - if (!is_array($ifo)) { - throw new Exception\RuntimeException("Corrupted info file '{$file}'", 0, $err); - } - - return $ifo; - } - - /** - * Read a complete file - * - * @param string $file File complete path - * @param bool $nonBlocking Don't block script if file is locked - * @param bool $wouldblock The optional argument is set to TRUE if the lock would block - * @return string - * @throws Exception\RuntimeException - */ - protected function getFileContent($file, $nonBlocking = false, & $wouldblock = null) - { - $locking = $this->getOptions()->getFileLocking(); - $wouldblock = null; - - ErrorHandler::start(); - - // if file locking enabled -> file_get_contents can't be used - if ($locking) { - $fp = fopen($file, 'rb'); - if ($fp === false) { - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error opening file '{$file}'", 0, $err); - } - - if ($nonBlocking) { - $lock = flock($fp, LOCK_SH | LOCK_NB, $wouldblock); - if ($wouldblock) { - fclose($fp); - ErrorHandler::stop(); - return; - } - } else { - $lock = flock($fp, LOCK_SH); - } - - if (!$lock) { - fclose($fp); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error locking file '{$file}'", 0, $err); - } - - $res = stream_get_contents($fp); - if ($res === false) { - flock($fp, LOCK_UN); - fclose($fp); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException('Error getting stream contents', 0, $err); - } - - flock($fp, LOCK_UN); - fclose($fp); - - // if file locking disabled -> file_get_contents can be used - } else { - $res = file_get_contents($file, false); - if ($res === false) { - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error getting file contents for file '{$file}'", 0, $err); - } - } - - ErrorHandler::stop(); - return $res; - } - - /** - * Prepares a directory structure for the given file(spec) - * using the configured directory level. - * - * @param string $file - * @return void - * @throws Exception\RuntimeException - */ - protected function prepareDirectoryStructure($file) - { - $options = $this->getOptions(); - $level = $options->getDirLevel(); - - // Directory structure is required only if directory level > 0 - if (!$level) { - return; - } - - // Directory structure already exists - $pathname = dirname($file); - if (file_exists($pathname)) { - return; - } - - $perm = $options->getDirPermission(); - $umask = $options->getUmask(); - if ($umask !== false && $perm !== false) { - $perm = $perm & ~$umask; - } - - ErrorHandler::start(); - - if ($perm === false || $level == 1) { - // build-in mkdir function is enough - - $umask = ($umask !== false) ? umask($umask) : false; - $res = mkdir($pathname, ($perm !== false) ? $perm : 0777, true); - - if ($umask !== false) { - umask($umask); - } - - if (!$res) { - $err = ErrorHandler::stop(); - - // Issue 6435: - // mkdir could fail because of a race condition it was already created by another process - // after the first file_exists above - if (file_exists($pathname)) { - return; - } - - $oct = ($perm === false) ? '777' : decoct($perm); - throw new Exception\RuntimeException("mkdir('{$pathname}', 0{$oct}, true) failed", 0, $err); - } - - if ($perm !== false && !chmod($pathname, $perm)) { - $oct = decoct($perm); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("chmod('{$pathname}', 0{$oct}) failed", 0, $err); - } - } else { - // build-in mkdir function sets permission together with current umask - // which doesn't work well on multo threaded webservers - // -> create directories one by one and set permissions - - // find existing path and missing path parts - $parts = array(); - $path = $pathname; - while (!file_exists($path)) { - array_unshift($parts, basename($path)); - $nextPath = dirname($path); - if ($nextPath === $path) { - break; - } - $path = $nextPath; - } - - // make all missing path parts - foreach ($parts as $part) { - $path.= DIRECTORY_SEPARATOR . $part; - - // create a single directory, set and reset umask immediately - $umask = ($umask !== false) ? umask($umask) : false; - $res = mkdir($path, ($perm === false) ? 0777 : $perm, false); - if ($umask !== false) { - umask($umask); - } - - if (!$res) { - // Issue 6435: - // mkdir could fail because of a race condition it was already created by another process - // after the first file_exists above ... go to the next path part. - if (file_exists($path)) { - continue; - } - - $oct = ($perm === false) ? '777' : decoct($perm); - ErrorHandler::stop(); - throw new Exception\RuntimeException( - "mkdir('{$path}', 0{$oct}, false) failed" - ); - } - - if ($perm !== false && !chmod($path, $perm)) { - $oct = decoct($perm); - ErrorHandler::stop(); - throw new Exception\RuntimeException( - "chmod('{$path}', 0{$oct}) failed" - ); - } - } - } - - ErrorHandler::stop(); - } - - /** - * Write content to a file - * - * @param string $file File complete path - * @param string $data Data to write - * @param bool $nonBlocking Don't block script if file is locked - * @param bool $wouldblock The optional argument is set to TRUE if the lock would block - * @return void - * @throws Exception\RuntimeException - */ - protected function putFileContent($file, $data, $nonBlocking = false, & $wouldblock = null) - { - $options = $this->getOptions(); - $locking = $options->getFileLocking(); - $nonBlocking = $locking && $nonBlocking; - $wouldblock = null; - - $umask = $options->getUmask(); - $perm = $options->getFilePermission(); - if ($umask !== false && $perm !== false) { - $perm = $perm & ~$umask; - } - - ErrorHandler::start(); - - // if locking and non blocking is enabled -> file_put_contents can't used - if ($locking && $nonBlocking) { - $umask = ($umask !== false) ? umask($umask) : false; - - $fp = fopen($file, 'cb'); - - if ($umask) { - umask($umask); - } - - if (!$fp) { - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error opening file '{$file}'", 0, $err); - } - - if ($perm !== false && !chmod($file, $perm)) { - fclose($fp); - $oct = decoct($perm); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("chmod('{$file}', 0{$oct}) failed", 0, $err); - } - - if (!flock($fp, LOCK_EX | LOCK_NB, $wouldblock)) { - fclose($fp); - $err = ErrorHandler::stop(); - if ($wouldblock) { - return; - } else { - throw new Exception\RuntimeException("Error locking file '{$file}'", 0, $err); - } - } - - if (fwrite($fp, $data) === false) { - flock($fp, LOCK_UN); - fclose($fp); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error writing file '{$file}'", 0, $err); - } - - if (!ftruncate($fp, strlen($data))) { - flock($fp, LOCK_UN); - fclose($fp); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error truncating file '{$file}'", 0, $err); - } - - flock($fp, LOCK_UN); - fclose($fp); - - // else -> file_put_contents can be used - } else { - $flags = 0; - if ($locking) { - $flags = $flags | LOCK_EX; - } - - $umask = ($umask !== false) ? umask($umask) : false; - - $rs = file_put_contents($file, $data, $flags); - - if ($umask) { - umask($umask); - } - - if ($rs === false) { - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("Error writing file '{$file}'", 0, $err); - } - - if ($perm !== false && !chmod($file, $perm)) { - $oct = decoct($perm); - $err = ErrorHandler::stop(); - throw new Exception\RuntimeException("chmod('{$file}', 0{$oct}) failed", 0, $err); - } - } - - ErrorHandler::stop(); - } - - /** - * Unlink a file - * - * @param string $file - * @return void - * @throws Exception\RuntimeException - */ - protected function unlink($file) - { - ErrorHandler::start(); - $res = unlink($file); - $err = ErrorHandler::stop(); - - // only throw exception if file still exists after deleting - if (!$res && file_exists($file)) { - throw new Exception\RuntimeException( - "Error unlinking file '{$file}'; file still exists", - 0, - $err - ); - } - } -} diff --git a/library/Zend/Cache/Storage/Adapter/FilesystemIterator.php b/library/Zend/Cache/Storage/Adapter/FilesystemIterator.php deleted file mode 100755 index 447cfb3db..000000000 --- a/library/Zend/Cache/Storage/Adapter/FilesystemIterator.php +++ /dev/null @@ -1,179 +0,0 @@ -storage = $storage; - $this->globIterator = new GlobIterator($path, GlobIterator::KEY_AS_FILENAME); - $this->prefix = $prefix; - $this->prefixLength = strlen($prefix); - } - - /** - * Get storage instance - * - * @return Filesystem - */ - public function getStorage() - { - return $this->storage; - } - - /** - * Get iterator mode - * - * @return int Value of IteratorInterface::CURRENT_AS_* - */ - public function getMode() - { - return $this->mode; - } - - /** - * Set iterator mode - * - * @param int $mode - * @return FilesystemIterator Fluent interface - */ - public function setMode($mode) - { - $this->mode = (int) $mode; - return $this; - } - - /* Iterator */ - - /** - * Get current key, value or metadata. - * - * @return mixed - */ - public function current() - { - if ($this->mode == IteratorInterface::CURRENT_AS_SELF) { - return $this; - } - - $key = $this->key(); - - if ($this->mode == IteratorInterface::CURRENT_AS_VALUE) { - return $this->storage->getItem($key); - } elseif ($this->mode == IteratorInterface::CURRENT_AS_METADATA) { - return $this->storage->getMetadata($key); - } - - return $key; - } - - /** - * Get current key - * - * @return string - */ - public function key() - { - $filename = $this->globIterator->key(); - - // return without namespace prefix and file suffix - return substr($filename, $this->prefixLength, -4); - } - - /** - * Move forward to next element - * - * @return void - */ - public function next() - { - $this->globIterator->next(); - } - - /** - * Checks if current position is valid - * - * @return bool - */ - public function valid() - { - try { - return $this->globIterator->valid(); - } catch (\LogicException $e) { - // @link https://bugs.php.net/bug.php?id=55701 - // GlobIterator throws LogicException with message - // 'The parent constructor was not called: the object is in an invalid state' - return false; - } - } - - /** - * Rewind the Iterator to the first element. - * - * @return bool false if the operation failed. - */ - public function rewind() - { - try { - return $this->globIterator->rewind(); - } catch (\LogicException $e) { - // @link https://bugs.php.net/bug.php?id=55701 - // GlobIterator throws LogicException with message - // 'The parent constructor was not called: the object is in an invalid state' - return false; - } - } -} diff --git a/library/Zend/Cache/Storage/Adapter/FilesystemOptions.php b/library/Zend/Cache/Storage/Adapter/FilesystemOptions.php deleted file mode 100755 index 5eabbdf3f..000000000 --- a/library/Zend/Cache/Storage/Adapter/FilesystemOptions.php +++ /dev/null @@ -1,457 +0,0 @@ -filePermission = false; - $this->dirPermission = false; - } - - parent::__construct($options); - } - - /** - * Set cache dir - * - * @param string $cacheDir - * @return FilesystemOptions - * @throws Exception\InvalidArgumentException - */ - public function setCacheDir($cacheDir) - { - if ($cacheDir !== null) { - if (!is_dir($cacheDir)) { - throw new Exception\InvalidArgumentException( - "Cache directory '{$cacheDir}' not found or not a directory" - ); - } elseif (!is_writable($cacheDir)) { - throw new Exception\InvalidArgumentException( - "Cache directory '{$cacheDir}' not writable" - ); - } elseif (!is_readable($cacheDir)) { - throw new Exception\InvalidArgumentException( - "Cache directory '{$cacheDir}' not readable" - ); - } - - $cacheDir = rtrim(realpath($cacheDir), DIRECTORY_SEPARATOR); - } else { - $cacheDir = sys_get_temp_dir(); - } - - $this->triggerOptionEvent('cache_dir', $cacheDir); - $this->cacheDir = $cacheDir; - return $this; - } - - /** - * Get cache dir - * - * @return null|string - */ - public function getCacheDir() - { - if ($this->cacheDir === null) { - $this->setCacheDir(null); - } - - return $this->cacheDir; - } - - /** - * Set clear stat cache - * - * @param bool $clearStatCache - * @return FilesystemOptions - */ - public function setClearStatCache($clearStatCache) - { - $clearStatCache = (bool) $clearStatCache; - $this->triggerOptionEvent('clear_stat_cache', $clearStatCache); - $this->clearStatCache = $clearStatCache; - return $this; - } - - /** - * Get clear stat cache - * - * @return bool - */ - public function getClearStatCache() - { - return $this->clearStatCache; - } - - /** - * Set dir level - * - * @param int $dirLevel - * @return FilesystemOptions - * @throws Exception\InvalidArgumentException - */ - public function setDirLevel($dirLevel) - { - $dirLevel = (int) $dirLevel; - if ($dirLevel < 0 || $dirLevel > 16) { - throw new Exception\InvalidArgumentException( - "Directory level '{$dirLevel}' must be between 0 and 16" - ); - } - $this->triggerOptionEvent('dir_level', $dirLevel); - $this->dirLevel = $dirLevel; - return $this; - } - - /** - * Get dir level - * - * @return int - */ - public function getDirLevel() - { - return $this->dirLevel; - } - - /** - * Set permission to create directories on unix systems - * - * @param false|string|int $dirPermission FALSE to disable explicit permission or an octal number - * @return FilesystemOptions - * @see setUmask - * @see setFilePermission - * @link http://php.net/manual/function.chmod.php - */ - public function setDirPermission($dirPermission) - { - if ($dirPermission !== false) { - if (is_string($dirPermission)) { - $dirPermission = octdec($dirPermission); - } else { - $dirPermission = (int) $dirPermission; - } - - // validate - if (($dirPermission & 0700) != 0700) { - throw new Exception\InvalidArgumentException( - 'Invalid directory permission: need permission to execute, read and write by owner' - ); - } - } - - if ($this->dirPermission !== $dirPermission) { - $this->triggerOptionEvent('dir_permission', $dirPermission); - $this->dirPermission = $dirPermission; - } - - return $this; - } - - /** - * Get permission to create directories on unix systems - * - * @return false|int - */ - public function getDirPermission() - { - return $this->dirPermission; - } - - /** - * Set file locking - * - * @param bool $fileLocking - * @return FilesystemOptions - */ - public function setFileLocking($fileLocking) - { - $fileLocking = (bool) $fileLocking; - $this->triggerOptionEvent('file_locking', $fileLocking); - $this->fileLocking = $fileLocking; - return $this; - } - - /** - * Get file locking - * - * @return bool - */ - public function getFileLocking() - { - return $this->fileLocking; - } - - /** - * Set permission to create files on unix systems - * - * @param false|string|int $filePermission FALSE to disable explicit permission or an octal number - * @return FilesystemOptions - * @see setUmask - * @see setDirPermission - * @link http://php.net/manual/function.chmod.php - */ - public function setFilePermission($filePermission) - { - if ($filePermission !== false) { - if (is_string($filePermission)) { - $filePermission = octdec($filePermission); - } else { - $filePermission = (int) $filePermission; - } - - // validate - if (($filePermission & 0600) != 0600) { - throw new Exception\InvalidArgumentException( - 'Invalid file permission: need permission to read and write by owner' - ); - } elseif ($filePermission & 0111) { - throw new Exception\InvalidArgumentException( - "Invalid file permission: Cache files shoudn't be executable" - ); - } - } - - if ($this->filePermission !== $filePermission) { - $this->triggerOptionEvent('file_permission', $filePermission); - $this->filePermission = $filePermission; - } - - return $this; - } - - /** - * Get permission to create files on unix systems - * - * @return false|int - */ - public function getFilePermission() - { - return $this->filePermission; - } - - /** - * Set namespace separator - * - * @param string $namespaceSeparator - * @return FilesystemOptions - */ - public function setNamespaceSeparator($namespaceSeparator) - { - $namespaceSeparator = (string) $namespaceSeparator; - $this->triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } - - /** - * Set no atime - * - * @param bool $noAtime - * @return FilesystemOptions - */ - public function setNoAtime($noAtime) - { - $noAtime = (bool) $noAtime; - $this->triggerOptionEvent('no_atime', $noAtime); - $this->noAtime = $noAtime; - return $this; - } - - /** - * Get no atime - * - * @return bool - */ - public function getNoAtime() - { - return $this->noAtime; - } - - /** - * Set no ctime - * - * @param bool $noCtime - * @return FilesystemOptions - */ - public function setNoCtime($noCtime) - { - $noCtime = (bool) $noCtime; - $this->triggerOptionEvent('no_ctime', $noCtime); - $this->noCtime = $noCtime; - return $this; - } - - /** - * Get no ctime - * - * @return bool - */ - public function getNoCtime() - { - return $this->noCtime; - } - - /** - * Set the umask to create files and directories on unix systems - * - * Note: On multithreaded webservers it's better to explicit set file and dir permission. - * - * @param false|string|int $umask FALSE to disable umask or an octal number - * @return FilesystemOptions - * @see setFilePermission - * @see setDirPermission - * @link http://php.net/manual/function.umask.php - * @link http://en.wikipedia.org/wiki/Umask - */ - public function setUmask($umask) - { - if ($umask !== false) { - if (is_string($umask)) { - $umask = octdec($umask); - } else { - $umask = (int) $umask; - } - - // validate - if ($umask & 0700) { - throw new Exception\InvalidArgumentException( - 'Invalid umask: need permission to execute, read and write by owner' - ); - } - - // normalize - $umask = $umask & 0777; - } - - if ($this->umask !== $umask) { - $this->triggerOptionEvent('umask', $umask); - $this->umask = $umask; - } - - return $this; - } - - /** - * Get the umask to create files and directories on unix systems - * - * @return false|int - */ - public function getUmask() - { - return $this->umask; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/KeyListIterator.php b/library/Zend/Cache/Storage/Adapter/KeyListIterator.php deleted file mode 100755 index 86bcbe160..000000000 --- a/library/Zend/Cache/Storage/Adapter/KeyListIterator.php +++ /dev/null @@ -1,169 +0,0 @@ -storage = $storage; - $this->keys = $keys; - $this->count = count($keys); - } - - /** - * Get storage instance - * - * @return StorageInterface - */ - public function getStorage() - { - return $this->storage; - } - - /** - * Get iterator mode - * - * @return int Value of IteratorInterface::CURRENT_AS_* - */ - public function getMode() - { - return $this->mode; - } - - /** - * Set iterator mode - * - * @param int $mode - * @return KeyListIterator Fluent interface - */ - public function setMode($mode) - { - $this->mode = (int) $mode; - return $this; - } - - /** - * Get current key, value or metadata. - * - * @return mixed - */ - public function current() - { - if ($this->mode == IteratorInterface::CURRENT_AS_SELF) { - return $this; - } - - $key = $this->key(); - - if ($this->mode == IteratorInterface::CURRENT_AS_METADATA) { - return $this->storage->getMetadata($key); - } elseif ($this->mode == IteratorInterface::CURRENT_AS_VALUE) { - return $this->storage->getItem($key); - } - - return $key; - } - - /** - * Get current key - * - * @return string - */ - public function key() - { - return $this->keys[$this->position]; - } - - /** - * Checks if current position is valid - * - * @return bool - */ - public function valid() - { - return $this->position < $this->count; - } - - /** - * Move forward to next element - * - * @return void - */ - public function next() - { - $this->position++; - } - - /** - * Rewind the Iterator to the first element. - * - * @return void - */ - public function rewind() - { - $this->position = 0; - } - - /** - * Count number of items - * - * @return int - */ - public function count() - { - return $this->count; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Memcache.php b/library/Zend/Cache/Storage/Adapter/Memcache.php deleted file mode 100755 index 953e52cda..000000000 --- a/library/Zend/Cache/Storage/Adapter/Memcache.php +++ /dev/null @@ -1,574 +0,0 @@ - 0) { - throw new Exception\ExtensionNotLoadedException("Missing ext/memcache version >= 2.0.0"); - } - - parent::__construct($options); - - // reset initialized flag on update option(s) - $initialized = & $this->initialized; - $this->getEventManager()->attach('option', function ($event) use (& $initialized) { - $initialized = false; - }); - } - - /** - * Initialize the internal memcache resource - * - * @return MemcacheResource - */ - protected function getMemcacheResource() - { - if ($this->initialized) { - return $this->resourceManager->getResource($this->resourceId); - } - - $options = $this->getOptions(); - - // get resource manager and resource id - $this->resourceManager = $options->getResourceManager(); - $this->resourceId = $options->getResourceId(); - - // init namespace prefix - $this->namespacePrefix = ''; - $namespace = $options->getNamespace(); - if ($namespace !== '') { - $this->namespacePrefix = $namespace . $options->getNamespaceSeparator(); - } - - // update initialized flag - $this->initialized = true; - - return $this->resourceManager->getResource($this->resourceId); - } - - /* options */ - - /** - * Set options. - * - * @param array|Traversable|MemcacheOptions $options - * @return Memcache - * @see getOptions() - */ - public function setOptions($options) - { - if (!$options instanceof MemcacheOptions) { - $options = new MemcacheOptions($options); - } - - return parent::setOptions($options); - } - - /** - * Get options. - * - * @return MemcacheOptions - * @see setOptions() - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new MemcacheOptions()); - } - return $this->options; - } - - /** - * @param mixed $value - * @return int - */ - protected function getWriteFlag(& $value) - { - if (!$this->getOptions()->getCompression()) { - return 0; - } - // Don't compress numeric or boolean types - return (is_bool($value) || is_int($value) || is_float($value)) ? 0 : MEMCACHE_COMPRESSED; - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - $memc = $this->getMemcacheResource(); - if (!$memc->flush()) { - return new Exception\RuntimeException("Memcache flush failed"); - } - return true; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - $memc = $this->getMemcacheResource(); - $stats = $memc->getExtendedStats(); - if ($stats === false) { - return new Exception\RuntimeException("Memcache getStats failed"); - } - - $mem = array_pop($stats); - return $mem['limit_maxbytes']; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - $memc = $this->getMemcacheResource(); - $stats = $memc->getExtendedStats(); - if ($stats === false) { - throw new Exception\RuntimeException('Memcache getStats failed'); - } - - $mem = array_pop($stats); - return $mem['limit_maxbytes'] - $mem['bytes']; - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $memc = $this->getMemcacheResource(); - $internalKey = $this->namespacePrefix . $normalizedKey; - - $result = $memc->get($internalKey); - $success = ($result !== false); - if ($result === false) { - return null; - } - - $casToken = $result; - return $result; - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $memc = $this->getMemcacheResource(); - - foreach ($normalizedKeys as & $normalizedKey) { - $normalizedKey = $this->namespacePrefix . $normalizedKey; - } - - $result = $memc->get($normalizedKeys); - if ($result === false) { - return array(); - } - - // remove namespace prefix from result - if ($this->namespacePrefix !== '') { - $tmp = array(); - $nsPrefixLength = strlen($this->namespacePrefix); - foreach ($result as $internalKey => & $value) { - $tmp[substr($internalKey, $nsPrefixLength)] = & $value; - } - $result = $tmp; - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $memc = $this->getMemcacheResource(); - $value = $memc->get($this->namespacePrefix . $normalizedKey); - return ($value !== false); - } - - /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - * @throws Exception\ExceptionInterface - */ - protected function internalHasItems(array & $normalizedKeys) - { - $memc = $this->getMemcacheResource(); - - foreach ($normalizedKeys as & $normalizedKey) { - $normalizedKey = $this->namespacePrefix . $normalizedKey; - } - - $result = $memc->get($normalizedKeys); - if ($result === false) { - return array(); - } - - // Convert to a single list - $result = array_keys($result); - - // remove namespace prefix - if ($result && $this->namespacePrefix !== '') { - $nsPrefixLength = strlen($this->namespacePrefix); - foreach ($result as & $internalKey) { - $internalKey = substr($internalKey, $nsPrefixLength); - } - } - - return $result; - } - - /** - * Get metadata of multiple items - * - * @param array $normalizedKeys - * @return array Associative array of keys and metadata - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadatas(array & $normalizedKeys) - { - $memc = $this->getMemcacheResource(); - - foreach ($normalizedKeys as & $normalizedKey) { - $normalizedKey = $this->namespacePrefix . $normalizedKey; - } - - $result = $memc->get($normalizedKeys); - if ($result === false) { - return array(); - } - - // remove namespace prefix and use an empty array as metadata - if ($this->namespacePrefix === '') { - foreach ($result as & $value) { - $value = array(); - } - return $result; - } - - $final = array(); - $nsPrefixLength = strlen($this->namespacePrefix); - foreach (array_keys($result) as $internalKey) { - $final[substr($internalKey, $nsPrefixLength)] = array(); - } - return $final; - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcacheResource(); - $expiration = $this->expirationTime(); - $flag = $this->getWriteFlag($value); - - if (!$memc->set($this->namespacePrefix . $normalizedKey, $value, $flag, $expiration)) { - throw new Exception\RuntimeException('Memcache set value failed'); - } - - return true; - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcacheResource(); - $expiration = $this->expirationTime(); - $flag = $this->getWriteFlag($value); - - return $memc->add($this->namespacePrefix . $normalizedKey, $value, $flag, $expiration); - } - - /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcacheResource(); - $expiration = $this->expirationTime(); - $flag = $this->getWriteFlag($value); - - return $memc->replace($this->namespacePrefix . $normalizedKey, $value, $flag, $expiration); - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $memc = $this->getMemcacheResource(); - // Delete's second parameter (timeout) is deprecated and not supported. - // Values other than 0 may cause delete to fail. - // http://www.php.net/manual/memcache.delete.php - return $memc->delete($this->namespacePrefix . $normalizedKey, 0); - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcacheResource(); - $internalKey = $this->namespacePrefix . $normalizedKey; - $value = (int) $value; - $newValue = $memc->increment($internalKey, $value); - - if ($newValue !== false) { - return $newValue; - } - - // Set initial value. Don't use compression! - // http://www.php.net/manual/memcache.increment.php - $newValue = $value; - if (!$memc->add($internalKey, $newValue, 0, $this->expirationTime())) { - throw new Exception\RuntimeException('Memcache unable to add increment value'); - } - - return $newValue; - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcacheResource(); - $internalKey = $this->namespacePrefix . $normalizedKey; - $value = (int) $value; - $newValue = $memc->decrement($internalKey, $value); - - if ($newValue !== false) { - return $newValue; - } - - // Set initial value. Don't use compression! - // http://www.php.net/manual/memcache.decrement.php - $newValue = -$value; - if (!$memc->add($internalKey, $newValue, 0, $this->expirationTime())) { - throw new Exception\RuntimeException('Memcache unable to add decrement value'); - } - - return $newValue; - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities !== null) { - return $this->capabilities; - } - - if (version_compare('3.0.3', phpversion('memcache')) <= 0) { - // In ext/memcache v3.0.3: - // Scalar data types (int, bool, double) are preserved by get/set. - // http://pecl.php.net/package/memcache/3.0.3 - // - // This effectively removes support for `boolean` types since - // "not found" return values are === false. - $supportedDatatypes = array( - 'NULL' => true, - 'boolean' => false, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ); - } else { - // In stable 2.x ext/memcache versions, scalar data types are - // converted to strings and must be manually cast back to original - // types by the user. - // - // ie. It is impossible to know if the saved value: (string)"1" - // was previously: (bool)true, (int)1, or (string)"1". - // Similarly, the saved value: (string)"" - // might have previously been: (bool)false or (string)"" - $supportedDatatypes = array( - 'NULL' => true, - 'boolean' => 'boolean', - 'integer' => 'integer', - 'double' => 'double', - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ); - } - - $this->capabilityMarker = new stdClass(); - $this->capabilities = new Capabilities( - $this, - $this->capabilityMarker, - array( - 'supportedDatatypes' => $supportedDatatypes, - 'supportedMetadata' => array(), - 'minTtl' => 1, - 'maxTtl' => 0, - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => false, - 'expiredRead' => false, - 'maxKeyLength' => 255, - 'namespaceIsPrefix' => true, - ) - ); - - return $this->capabilities; - } - - /* internal */ - - /** - * Get expiration time by ttl - * - * Some storage commands involve sending an expiration value (relative to - * an item or to an operation requested by the client) to the server. In - * all such cases, the actual value sent may either be Unix time (number of - * seconds since January 1, 1970, as an integer), or a number of seconds - * starting from current time. In the latter case, this number of seconds - * may not exceed 60*60*24*30 (number of seconds in 30 days); if the - * expiration value is larger than that, the server will consider it to be - * real Unix time value rather than an offset from current time. - * - * @return int - */ - protected function expirationTime() - { - $ttl = $this->getOptions()->getTtl(); - if ($ttl > 2592000) { - return time() + $ttl; - } - return $ttl; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/MemcacheOptions.php b/library/Zend/Cache/Storage/Adapter/MemcacheOptions.php deleted file mode 100755 index 5fcdc3427..000000000 --- a/library/Zend/Cache/Storage/Adapter/MemcacheOptions.php +++ /dev/null @@ -1,284 +0,0 @@ -namespaceSeparator !== $namespaceSeparator) { - $this->triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - } - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } - - /** - * Set the memcache resource manager to use - * - * @param null|MemcacheResourceManager $resourceManager - * @return MemcacheOptions - */ - public function setResourceManager(MemcacheResourceManager $resourceManager = null) - { - if ($this->resourceManager !== $resourceManager) { - $this->triggerOptionEvent('resource_manager', $resourceManager); - $this->resourceManager = $resourceManager; - } - return $this; - } - - /** - * Get the memcache resource manager - * - * @return MemcacheResourceManager - */ - public function getResourceManager() - { - if (!$this->resourceManager) { - $this->resourceManager = new MemcacheResourceManager(); - } - return $this->resourceManager; - } - - /** - * Get the memcache resource id - * - * @return string - */ - public function getResourceId() - { - return $this->resourceId; - } - - /** - * Set the memcache resource id - * - * @param string $resourceId - * @return MemcacheOptions - */ - public function setResourceId($resourceId) - { - $resourceId = (string) $resourceId; - if ($this->resourceId !== $resourceId) { - $this->triggerOptionEvent('resource_id', $resourceId); - $this->resourceId = $resourceId; - } - return $this; - } - - /** - * Is compressed writes turned on? - * - * @return boolean - */ - public function getCompression() - { - return $this->compression; - } - - /** - * Set whether compressed writes are turned on or not - * - * @param boolean $compression - * @return $this - */ - public function setCompression($compression) - { - $compression = (bool) $compression; - if ($this->compression !== $compression) { - $this->triggerOptionEvent('compression', $compression); - $this->compression = $compression; - } - return $this; - } - - /** - * Sets a list of memcache servers to add on initialize - * - * @param string|array $servers list of servers - * @return MemcacheOptions - * @throws Exception\InvalidArgumentException - */ - public function setServers($servers) - { - $this->getResourceManager()->addServers($this->getResourceId(), $servers); - return $this; - } - - /** - * Get Servers - * - * @return array - */ - public function getServers() - { - return $this->getResourceManager()->getServers($this->getResourceId()); - } - - /** - * Set compress threshold - * - * @param int|string|array|\ArrayAccess|null $threshold - * @return MemcacheOptions - */ - public function setAutoCompressThreshold($threshold) - { - $this->getResourceManager()->setAutoCompressThreshold($this->getResourceId(), $threshold); - return $this; - } - - /** - * Get compress threshold - * - * @return int|null - */ - public function getAutoCompressThreshold() - { - return $this->getResourceManager()->getAutoCompressThreshold($this->getResourceId()); - } - - /** - * Set compress min savings option - * - * @param float|string|null $minSavings - * @return MemcacheOptions - */ - public function setAutoCompressMinSavings($minSavings) - { - $this->getResourceManager()->setAutoCompressMinSavings($this->getResourceId(), $minSavings); - return $this; - } - - /** - * Get compress min savings - * - * @return Exception\RuntimeException - */ - public function getAutoCompressMinSavings() - { - return $this->getResourceManager()->getAutoCompressMinSavings($this->getResourceId()); - } - - /** - * Set default server values - * - * @param array $serverDefaults - * @return MemcacheOptions - */ - public function setServerDefaults(array $serverDefaults) - { - $this->getResourceManager()->setServerDefaults($this->getResourceId(), $serverDefaults); - return $this; - } - - /** - * Get default server values - * - * @return array - */ - public function getServerDefaults() - { - return $this->getResourceManager()->getServerDefaults($this->getResourceId()); - } - - /** - * Set callback for server connection failures - * - * @param callable $callback - * @return $this - */ - public function setFailureCallback($callback) - { - $this->getResourceManager()->setFailureCallback($this->getResourceId(), $callback); - return $this; - } - - /** - * Get callback for server connection failures - * - * @return callable - */ - public function getFailureCallback() - { - return $this->getResourceManager()->getFailureCallback($this->getResourceId()); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/MemcacheResourceManager.php b/library/Zend/Cache/Storage/Adapter/MemcacheResourceManager.php deleted file mode 100755 index 1fbff1828..000000000 --- a/library/Zend/Cache/Storage/Adapter/MemcacheResourceManager.php +++ /dev/null @@ -1,646 +0,0 @@ -resources[$id]); - } - - /** - * Gets a memcache resource - * - * @param string $id - * @return MemcacheResource - * @throws Exception\RuntimeException - */ - public function getResource($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = $this->resources[$id]; - if ($resource instanceof MemcacheResource) { - return $resource; - } - - $memc = new MemcacheResource(); - $this->setResourceAutoCompressThreshold( - $memc, - $resource['auto_compress_threshold'], - $resource['auto_compress_min_savings'] - ); - foreach ($resource['servers'] as $server) { - $this->addServerToResource( - $memc, - $server, - $this->serverDefaults[$id], - $this->failureCallbacks[$id] - ); - } - - // buffer and return - $this->resources[$id] = $memc; - return $memc; - } - - /** - * Set a resource - * - * @param string $id - * @param array|Traversable|MemcacheResource $resource - * @return MemcacheResourceManager - */ - public function setResource($id, $resource, $failureCallback = null, $serverDefaults = array()) - { - $id = (string) $id; - - if ($serverDefaults instanceof Traversable) { - $serverDefaults = ArrayUtils::iteratorToArray($serverDefaults); - } elseif (!is_array($serverDefaults)) { - throw new Exception\InvalidArgumentException( - 'ServerDefaults must be an instance Traversable or an array' - ); - } - - if (!($resource instanceof MemcacheResource)) { - if ($resource instanceof Traversable) { - $resource = ArrayUtils::iteratorToArray($resource); - } elseif (!is_array($resource)) { - throw new Exception\InvalidArgumentException( - 'Resource must be an instance of Memcache or an array or Traversable' - ); - } - - if (isset($resource['server_defaults'])) { - $serverDefaults = array_merge($serverDefaults, $resource['server_defaults']); - unset($resource['server_defaults']); - } - - $resourceOptions = array( - 'servers' => array(), - 'auto_compress_threshold' => null, - 'auto_compress_min_savings' => null, - ); - $resource = array_merge($resourceOptions, $resource); - - // normalize and validate params - $this->normalizeAutoCompressThreshold( - $resource['auto_compress_threshold'], - $resource['auto_compress_min_savings'] - ); - $this->normalizeServers($resource['servers']); - } - - $this->normalizeServerDefaults($serverDefaults); - - $this->resources[$id] = $resource; - $this->failureCallbacks[$id] = $failureCallback; - $this->serverDefaults[$id] = $serverDefaults; - - return $this; - } - - /** - * Remove a resource - * - * @param string $id - * @return MemcacheResourceManager - */ - public function removeResource($id) - { - unset($this->resources[$id]); - return $this; - } - - /** - * Normalize compress threshold options - * - * @param int|string|array|ArrayAccess $threshold - * @param float|string $minSavings - */ - protected function normalizeAutoCompressThreshold(& $threshold, & $minSavings) - { - if (is_array($threshold) || ($threshold instanceof ArrayAccess)) { - $tmpThreshold = (isset($threshold['threshold'])) ? $threshold['threshold'] : null; - $minSavings = (isset($threshold['min_savings'])) ? $threshold['min_savings'] : $minSavings; - $threshold = $tmpThreshold; - } - if (isset($threshold)) { - $threshold = (int) $threshold; - } - if (isset($minSavings)) { - $minSavings = (float) $minSavings; - } - } - - /** - * Set compress threshold on a Memcache resource - * - * @param MemcacheResource $resource - * @param array $libOptions - */ - protected function setResourceAutoCompressThreshold(MemcacheResource $resource, $threshold, $minSavings) - { - if (!isset($threshold)) { - return; - } - if (isset($minSavings)) { - $resource->setCompressThreshold($threshold, $minSavings); - } else { - $resource->setCompressThreshold($threshold); - } - } - - /** - * Get compress threshold - * - * @param string $id - * @return int|null - * @throws \Zend\Cache\Exception\RuntimeException - */ - public function getAutoCompressThreshold($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcacheResource) { - // Cannot get options from Memcache resource once created - throw new Exception\RuntimeException("Cannot get compress threshold once resource is created"); - } - return $resource['auto_compress_threshold']; - } - - /** - * Set compress threshold - * - * @param string $id - * @param int|string|array|ArrayAccess|null $threshold - * @param float|string|bool $minSavings - * @return MemcacheResourceManager - */ - public function setAutoCompressThreshold($id, $threshold, $minSavings = false) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'auto_compress_threshold' => $threshold, - )); - } - - $this->normalizeAutoCompressThreshold($threshold, $minSavings); - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcacheResource) { - $this->setResourceAutoCompressThreshold($resource, $threshold, $minSavings); - } else { - $resource['auto_compress_threshold'] = $threshold; - if ($minSavings !== false) { - $resource['auto_compress_min_savings'] = $minSavings; - } - } - return $this; - } - - /** - * Get compress min savings - * - * @param string $id - * @return float|null - * @throws Exception\RuntimeException - */ - public function getAutoCompressMinSavings($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcacheResource) { - // Cannot get options from Memcache resource once created - throw new Exception\RuntimeException("Cannot get compress min savings once resource is created"); - } - return $resource['auto_compress_min_savings']; - } - - /** - * Set compress min savings - * - * @param string $id - * @param float|string|null $minSavings - * @return MemcacheResourceManager - * @throws \Zend\Cache\Exception\RuntimeException - */ - public function setAutoCompressMinSavings($id, $minSavings) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'auto_compress_min_savings' => $minSavings, - )); - } - - $minSavings = (float) $minSavings; - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcacheResource) { - throw new Exception\RuntimeException( - "Cannot set compress min savings without a threshold value once a resource is created" - ); - } else { - $resource['auto_compress_min_savings'] = $minSavings; - } - return $this; - } - - /** - * Set default server values - * array( - * 'persistent' => , 'weight' => , - * 'timeout' => , 'retry_interval' => , - * ) - * @param string $id - * @param array $serverDefaults - * @return MemcacheResourceManager - */ - public function setServerDefaults($id, array $serverDefaults) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'server_defaults' => $serverDefaults - )); - } - - $this->normalizeServerDefaults($serverDefaults); - $this->serverDefaults[$id] = $serverDefaults; - - return $this; - } - - /** - * Get default server values - * - * @param string $id - * @return array - * @throws Exception\RuntimeException - */ - public function getServerDefaults($id) - { - if (!isset($this->serverDefaults[$id])) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - return $this->serverDefaults[$id]; - } - - /** - * @param array $serverDefaults - * @throws Exception\InvalidArgumentException - */ - protected function normalizeServerDefaults(& $serverDefaults) - { - if (!is_array($serverDefaults) && !($serverDefaults instanceof Traversable)) { - throw new Exception\InvalidArgumentException( - "Server defaults must be an array or an instance of Traversable" - ); - } - - // Defaults - $result = array( - 'persistent' => true, - 'weight' => 1, - 'timeout' => 1, // seconds - 'retry_interval' => 15, // seconds - ); - - foreach ($serverDefaults as $key => $value) { - switch ($key) { - case 'persistent': - $value = (bool) $value; - break; - case 'weight': - case 'timeout': - case 'retry_interval': - $value = (int) $value; - break; - } - $result[$key] = $value; - } - - $serverDefaults = $result; - } - - /** - * Set callback for server connection failures - * - * @param string $id - * @param callable|null $failureCallback - * @return MemcacheResourceManager - */ - public function setFailureCallback($id, $failureCallback) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array(), $failureCallback); - } - - $this->failureCallbacks[$id] = $failureCallback; - return $this; - } - - /** - * Get callback for server connection failures - * - * @param string $id - * @return callable|null - * @throws Exception\RuntimeException - */ - public function getFailureCallback($id) - { - if (!isset($this->failureCallbacks[$id])) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - return $this->failureCallbacks[$id]; - } - - /** - * Get servers - * - * @param string $id - * @throws Exception\RuntimeException - * @return array array('host' => , 'port' => , 'weight' => ) - */ - public function getServers($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcacheResource) { - throw new Exception\RuntimeException("Cannot get server list once resource is created"); - } - return $resource['servers']; - } - - /** - * Add servers - * - * @param string $id - * @param string|array $servers - * @return MemcacheResourceManager - */ - public function addServers($id, $servers) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'servers' => $servers - )); - } - - $this->normalizeServers($servers); - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcacheResource) { - foreach ($servers as $server) { - $this->addServerToResource( - $resource, - $server, - $this->serverDefaults[$id], - $this->failureCallbacks[$id] - ); - } - } else { - // don't add servers twice - $resource['servers'] = array_merge( - $resource['servers'], - array_udiff($servers, $resource['servers'], array($this, 'compareServers')) - ); - } - - return $this; - } - - /** - * Add one server - * - * @param string $id - * @param string|array $server - * @return MemcacheResourceManager - */ - public function addServer($id, $server) - { - return $this->addServers($id, array($server)); - } - - /** - * @param MemcacheResource $resource - * @param array $server - * @param array $serverDefaults - * @param callable|null $failureCallback - */ - protected function addServerToResource( - MemcacheResource $resource, - array $server, - array $serverDefaults, - $failureCallback - ) { - // Apply server defaults - $server = array_merge($serverDefaults, $server); - - // Reorder parameters - $params = array( - $server['host'], - $server['port'], - $server['persistent'], - $server['weight'], - $server['timeout'], - $server['retry_interval'], - $server['status'], - ); - if (isset($failureCallback)) { - $params[] = $failureCallback; - } - call_user_func_array(array($resource, 'addServer'), $params); - } - - /** - * Normalize a list of servers into the following format: - * array(array('host' => , 'port' => , 'weight' => )[, ...]) - * - * @param string|array $servers - */ - protected function normalizeServers(& $servers) - { - if (is_string($servers)) { - // Convert string into a list of servers - $servers = explode(',', $servers); - } - - $result = array(); - foreach ($servers as $server) { - $this->normalizeServer($server); - $result[$server['host'] . ':' . $server['port']] = $server; - } - - $servers = array_values($result); - } - - /** - * Normalize one server into the following format: - * array( - * 'host' => , 'port' => , 'weight' => , - * 'status' => , 'persistent' => , - * 'timeout' => , 'retry_interval' => , - * ) - * - * @param string|array $server - * @throws Exception\InvalidArgumentException - */ - protected function normalizeServer(& $server) - { - // WARNING: The order of this array is important. - // Used for converting an ordered array to a keyed array. - // Append new options, do not insert or you will break BC. - $sTmp = array( - 'host' => null, - 'port' => 11211, - 'weight' => null, - 'status' => true, - 'persistent' => null, - 'timeout' => null, - 'retry_interval' => null, - ); - - // convert a single server into an array - if ($server instanceof Traversable) { - $server = ArrayUtils::iteratorToArray($server); - } - - if (is_array($server)) { - if (isset($server[0])) { - // Convert ordered array to keyed array - // array([, [, [, [, [, [, ]]]]]]) - $server = array_combine( - array_slice(array_keys($sTmp), 0, count($server)), - $server - ); - } - $sTmp = array_merge($sTmp, $server); - } elseif (is_string($server)) { - // parse server from URI host{:?port}{?weight} - $server = trim($server); - if (strpos($server, '://') === false) { - $server = 'tcp://' . $server; - } - - $urlParts = parse_url($server); - if (!$urlParts) { - throw new Exception\InvalidArgumentException("Invalid server given"); - } - - $sTmp = array_merge($sTmp, array_intersect_key($urlParts, $sTmp)); - if (isset($urlParts['query'])) { - $query = null; - parse_str($urlParts['query'], $query); - $sTmp = array_merge($sTmp, array_intersect_key($query, $sTmp)); - } - } - - if (!$sTmp['host']) { - throw new Exception\InvalidArgumentException('Missing required server host'); - } - - // Filter values - foreach ($sTmp as $key => $value) { - if (isset($value)) { - switch ($key) { - case 'host': - $value = (string) $value; - break; - case 'status': - case 'persistent': - $value = (bool) $value; - break; - case 'port': - case 'weight': - case 'timeout': - case 'retry_interval': - $value = (int) $value; - break; - } - } - $sTmp[$key] = $value; - } - $sTmp = array_filter( - $sTmp, - function ($val) { - return isset($val); - } - ); - - $server = $sTmp; - } - - /** - * Compare 2 normalized server arrays - * (Compares only the host and the port) - * - * @param array $serverA - * @param array $serverB - * @return int - */ - protected function compareServers(array $serverA, array $serverB) - { - $keyA = $serverA['host'] . ':' . $serverA['port']; - $keyB = $serverB['host'] . ':' . $serverB['port']; - if ($keyA === $keyB) { - return 0; - } - return $keyA > $keyB ? 1 : -1; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Memcached.php b/library/Zend/Cache/Storage/Adapter/Memcached.php deleted file mode 100755 index 54bbed783..000000000 --- a/library/Zend/Cache/Storage/Adapter/Memcached.php +++ /dev/null @@ -1,703 +0,0 @@ -= 1.0.0'); - } - - parent::__construct($options); - - // reset initialized flag on update option(s) - $initialized = & $this->initialized; - $this->getEventManager()->attach('option', function ($event) use (& $initialized) { - $initialized = false; - }); - } - - /** - * Initialize the internal memcached resource - * - * @return MemcachedResource - */ - protected function getMemcachedResource() - { - if (!$this->initialized) { - $options = $this->getOptions(); - - // get resource manager and resource id - $this->resourceManager = $options->getResourceManager(); - $this->resourceId = $options->getResourceId(); - - // init namespace prefix - $namespace = $options->getNamespace(); - if ($namespace !== '') { - $this->namespacePrefix = $namespace . $options->getNamespaceSeparator(); - } else { - $this->namespacePrefix = ''; - } - - // update initialized flag - $this->initialized = true; - } - - return $this->resourceManager->getResource($this->resourceId); - } - - /* options */ - - /** - * Set options. - * - * @param array|Traversable|MemcachedOptions $options - * @return Memcached - * @see getOptions() - */ - public function setOptions($options) - { - if (!$options instanceof MemcachedOptions) { - $options = new MemcachedOptions($options); - } - - return parent::setOptions($options); - } - - /** - * Get options. - * - * @return MemcachedOptions - * @see setOptions() - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new MemcachedOptions()); - } - return $this->options; - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - $memc = $this->getMemcachedResource(); - if (!$memc->flush()) { - throw $this->getExceptionByResultCode($memc->getResultCode()); - } - return true; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - $memc = $this->getMemcachedResource(); - $stats = $memc->getStats(); - if ($stats === false) { - throw new Exception\RuntimeException($memc->getResultMessage()); - } - - $mem = array_pop($stats); - return $mem['limit_maxbytes']; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - $memc = $this->getMemcachedResource(); - $stats = $memc->getStats(); - if ($stats === false) { - throw new Exception\RuntimeException($memc->getResultMessage()); - } - - $mem = array_pop($stats); - return $mem['limit_maxbytes'] - $mem['bytes']; - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $memc = $this->getMemcachedResource(); - $internalKey = $this->namespacePrefix . $normalizedKey; - - if (func_num_args() > 2) { - $result = $memc->get($internalKey, null, $casToken); - } else { - $result = $memc->get($internalKey); - } - - $success = true; - if ($result === false) { - $rsCode = $memc->getResultCode(); - if ($rsCode == MemcachedResource::RES_NOTFOUND) { - $result = null; - $success = false; - } elseif ($rsCode) { - $success = false; - throw $this->getExceptionByResultCode($rsCode); - } - } - - return $result; - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $memc = $this->getMemcachedResource(); - - foreach ($normalizedKeys as & $normalizedKey) { - $normalizedKey = $this->namespacePrefix . $normalizedKey; - } - - $result = $memc->getMulti($normalizedKeys); - if ($result === false) { - throw $this->getExceptionByResultCode($memc->getResultCode()); - } - - // remove namespace prefix from result - if ($result && $this->namespacePrefix !== '') { - $tmp = array(); - $nsPrefixLength = strlen($this->namespacePrefix); - foreach ($result as $internalKey => & $value) { - $tmp[substr($internalKey, $nsPrefixLength)] = & $value; - } - $result = $tmp; - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $memc = $this->getMemcachedResource(); - $value = $memc->get($this->namespacePrefix . $normalizedKey); - if ($value === false) { - $rsCode = $memc->getResultCode(); - if ($rsCode == MemcachedResource::RES_SUCCESS) { - return true; - } elseif ($rsCode == MemcachedResource::RES_NOTFOUND) { - return false; - } else { - throw $this->getExceptionByResultCode($rsCode); - } - } - - return true; - } - - /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - * @throws Exception\ExceptionInterface - */ - protected function internalHasItems(array & $normalizedKeys) - { - $memc = $this->getMemcachedResource(); - - foreach ($normalizedKeys as & $normalizedKey) { - $normalizedKey = $this->namespacePrefix . $normalizedKey; - } - - $result = $memc->getMulti($normalizedKeys); - if ($result === false) { - throw $this->getExceptionByResultCode($memc->getResultCode()); - } - - // Convert to a simgle list - $result = array_keys($result); - - // remove namespace prefix - if ($result && $this->namespacePrefix !== '') { - $nsPrefixLength = strlen($this->namespacePrefix); - foreach ($result as & $internalKey) { - $internalKey = substr($internalKey, $nsPrefixLength); - } - } - - return $result; - } - - /** - * Get metadata of multiple items - * - * @param array $normalizedKeys - * @return array Associative array of keys and metadata - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadatas(array & $normalizedKeys) - { - $memc = $this->getMemcachedResource(); - - foreach ($normalizedKeys as & $normalizedKey) { - $normalizedKey = $this->namespacePrefix . $normalizedKey; - } - - $result = $memc->getMulti($normalizedKeys); - if ($result === false) { - throw $this->getExceptionByResultCode($memc->getResultCode()); - } - - // remove namespace prefix and use an empty array as metadata - if ($this->namespacePrefix !== '') { - $tmp = array(); - $nsPrefixLength = strlen($this->namespacePrefix); - foreach (array_keys($result) as $internalKey) { - $tmp[substr($internalKey, $nsPrefixLength)] = array(); - } - $result = $tmp; - } else { - foreach ($result as & $value) { - $value = array(); - } - } - - return $result; - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcachedResource(); - $expiration = $this->expirationTime(); - if (!$memc->set($this->namespacePrefix . $normalizedKey, $value, $expiration)) { - throw $this->getExceptionByResultCode($memc->getResultCode()); - } - - return true; - } - - /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $memc = $this->getMemcachedResource(); - $expiration = $this->expirationTime(); - - $namespacedKeyValuePairs = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => & $value) { - $namespacedKeyValuePairs[$this->namespacePrefix . $normalizedKey] = & $value; - } - - if (!$memc->setMulti($namespacedKeyValuePairs, $expiration)) { - throw $this->getExceptionByResultCode($memc->getResultCode()); - } - - return array(); - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcachedResource(); - $expiration = $this->expirationTime(); - if (!$memc->add($this->namespacePrefix . $normalizedKey, $value, $expiration)) { - if ($memc->getResultCode() == MemcachedResource::RES_NOTSTORED) { - return false; - } - throw $this->getExceptionByResultCode($memc->getResultCode()); - } - - return true; - } - - /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcachedResource(); - $expiration = $this->expirationTime(); - if (!$memc->replace($this->namespacePrefix . $normalizedKey, $value, $expiration)) { - $rsCode = $memc->getResultCode(); - if ($rsCode == MemcachedResource::RES_NOTSTORED) { - return false; - } - throw $this->getExceptionByResultCode($rsCode); - } - - return true; - } - - /** - * Internal method to set an item only if token matches - * - * @param mixed $token - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - * @see getItem() - * @see setItem() - */ - protected function internalCheckAndSetItem(& $token, & $normalizedKey, & $value) - { - $memc = $this->getMemcachedResource(); - $expiration = $this->expirationTime(); - $result = $memc->cas($token, $this->namespacePrefix . $normalizedKey, $value, $expiration); - - if ($result === false) { - $rsCode = $memc->getResultCode(); - if ($rsCode !== 0 && $rsCode != MemcachedResource::RES_DATA_EXISTS) { - throw $this->getExceptionByResultCode($rsCode); - } - } - - return $result; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $memc = $this->getMemcachedResource(); - $result = $memc->delete($this->namespacePrefix . $normalizedKey); - - if ($result === false) { - $rsCode = $memc->getResultCode(); - if ($rsCode == MemcachedResource::RES_NOTFOUND) { - return false; - } elseif ($rsCode != MemcachedResource::RES_SUCCESS) { - throw $this->getExceptionByResultCode($rsCode); - } - } - - return true; - } - - /** - * Internal method to remove multiple items. - * - * @param array $normalizedKeys - * @return array Array of not removed keys - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItems(array & $normalizedKeys) - { - // support for removing multiple items at once has been added in ext/memcached-2.0.0 - if (static::$extMemcachedMajorVersion < 2) { - return parent::internalRemoveItems($normalizedKeys); - } - - $memc = $this->getMemcachedResource(); - - foreach ($normalizedKeys as & $normalizedKey) { - $normalizedKey = $this->namespacePrefix . $normalizedKey; - } - - $rsCodes = $memc->deleteMulti($normalizedKeys); - - $missingKeys = array(); - foreach ($rsCodes as $key => $rsCode) { - if ($rsCode !== true && $rsCode != MemcachedResource::RES_SUCCESS) { - if ($rsCode != MemcachedResource::RES_NOTFOUND) { - throw $this->getExceptionByResultCode($rsCode); - } - $missingKeys[] = $key; - } - } - - // remove namespace prefix - if ($missingKeys && $this->namespacePrefix !== '') { - $nsPrefixLength = strlen($this->namespacePrefix); - foreach ($missingKeys as & $missingKey) { - $missingKey = substr($missingKey, $nsPrefixLength); - } - } - - return $missingKeys; - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcachedResource(); - $internalKey = $this->namespacePrefix . $normalizedKey; - $value = (int) $value; - $newValue = $memc->increment($internalKey, $value); - - if ($newValue === false) { - $rsCode = $memc->getResultCode(); - - // initial value - if ($rsCode == MemcachedResource::RES_NOTFOUND) { - $newValue = $value; - $memc->add($internalKey, $newValue, $this->expirationTime()); - $rsCode = $memc->getResultCode(); - } - - if ($rsCode) { - throw $this->getExceptionByResultCode($rsCode); - } - } - - return $newValue; - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $memc = $this->getMemcachedResource(); - $internalKey = $this->namespacePrefix . $normalizedKey; - $value = (int) $value; - $newValue = $memc->decrement($internalKey, $value); - - if ($newValue === false) { - $rsCode = $memc->getResultCode(); - - // initial value - if ($rsCode == MemcachedResource::RES_NOTFOUND) { - $newValue = -$value; - $memc->add($internalKey, $newValue, $this->expirationTime()); - $rsCode = $memc->getResultCode(); - } - - if ($rsCode) { - throw $this->getExceptionByResultCode($rsCode); - } - } - - return $newValue; - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $this->capabilityMarker = new stdClass(); - $this->capabilities = new Capabilities( - $this, - $this->capabilityMarker, - array( - 'supportedDatatypes' => array( - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ), - 'supportedMetadata' => array(), - 'minTtl' => 1, - 'maxTtl' => 0, - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => false, - 'expiredRead' => false, - 'maxKeyLength' => 255, - 'namespaceIsPrefix' => true, - ) - ); - } - - return $this->capabilities; - } - - /* internal */ - - /** - * Get expiration time by ttl - * - * Some storage commands involve sending an expiration value (relative to - * an item or to an operation requested by the client) to the server. In - * all such cases, the actual value sent may either be Unix time (number of - * seconds since January 1, 1970, as an integer), or a number of seconds - * starting from current time. In the latter case, this number of seconds - * may not exceed 60*60*24*30 (number of seconds in 30 days); if the - * expiration value is larger than that, the server will consider it to be - * real Unix time value rather than an offset from current time. - * - * @return int - */ - protected function expirationTime() - { - $ttl = $this->getOptions()->getTtl(); - if ($ttl > 2592000) { - return time() + $ttl; - } - return $ttl; - } - - /** - * Generate exception based of memcached result code - * - * @param int $code - * @return Exception\RuntimeException - * @throws Exception\InvalidArgumentException On success code - */ - protected function getExceptionByResultCode($code) - { - switch ($code) { - case MemcachedResource::RES_SUCCESS: - throw new Exception\InvalidArgumentException( - "The result code '{$code}' (SUCCESS) isn't an error" - ); - - default: - return new Exception\RuntimeException($this->getMemcachedResource()->getResultMessage()); - } - } -} diff --git a/library/Zend/Cache/Storage/Adapter/MemcachedOptions.php b/library/Zend/Cache/Storage/Adapter/MemcachedOptions.php deleted file mode 100755 index fabf3033d..000000000 --- a/library/Zend/Cache/Storage/Adapter/MemcachedOptions.php +++ /dev/null @@ -1,319 +0,0 @@ -namespaceSeparator !== $namespaceSeparator) { - $this->triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - } - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } - - /** - * A memcached resource to share - * - * @param null|MemcachedResource $memcachedResource - * @return MemcachedOptions - * @deprecated Please use the resource manager instead - */ - public function setMemcachedResource(MemcachedResource $memcachedResource = null) - { - trigger_error( - 'This method is deprecated and will be removed in the feature' - . ', please use the resource manager instead', - E_USER_DEPRECATED - ); - - if ($memcachedResource !== null) { - $this->triggerOptionEvent('memcached_resource', $memcachedResource); - $resourceManager = $this->getResourceManager(); - $resourceId = $this->getResourceId(); - $resourceManager->setResource($resourceId, $memcachedResource); - } - return $this; - } - - /** - * Get memcached resource to share - * - * @return MemcachedResource - * @deprecated Please use the resource manager instead - */ - public function getMemcachedResource() - { - trigger_error( - 'This method is deprecated and will be removed in the feature' - . ', please use the resource manager instead', - E_USER_DEPRECATED - ); - - return $this->resourceManager->getResource($this->getResourceId()); - } - - /** - * Set the memcached resource manager to use - * - * @param null|MemcachedResourceManager $resourceManager - * @return MemcachedOptions - */ - public function setResourceManager(MemcachedResourceManager $resourceManager = null) - { - if ($this->resourceManager !== $resourceManager) { - $this->triggerOptionEvent('resource_manager', $resourceManager); - $this->resourceManager = $resourceManager; - } - return $this; - } - - /** - * Get the memcached resource manager - * - * @return MemcachedResourceManager - */ - public function getResourceManager() - { - if (!$this->resourceManager) { - $this->resourceManager = new MemcachedResourceManager(); - } - return $this->resourceManager; - } - - /** - * Get the memcached resource id - * - * @return string - */ - public function getResourceId() - { - return $this->resourceId; - } - - /** - * Set the memcached resource id - * - * @param string $resourceId - * @return MemcachedOptions - */ - public function setResourceId($resourceId) - { - $resourceId = (string) $resourceId; - if ($this->resourceId !== $resourceId) { - $this->triggerOptionEvent('resource_id', $resourceId); - $this->resourceId = $resourceId; - } - return $this; - } - - /** - * Get the persistent id - * - * @return string - */ - public function getPersistentId() - { - return $this->getResourceManager()->getPersistentId($this->getResourceId()); - } - - /** - * Set the persistent id - * - * @param string $persistentId - * @return MemcachedOptions - */ - public function setPersistentId($persistentId) - { - $this->triggerOptionEvent('persistent_id', $persistentId); - $this->getResourceManager()->setPersistentId($this->getResourceId(), $persistentId); - return $this; - } - - /** - * Add a server to the list - * - * @param string $host - * @param int $port - * @param int $weight - * @return MemcachedOptions - * @deprecated Please use the resource manager instead - */ - public function addServer($host, $port = 11211, $weight = 0) - { - trigger_error( - 'This method is deprecated and will be removed in the feature' - . ', please use the resource manager instead', - E_USER_DEPRECATED - ); - - $this->getResourceManager()->addServer($this->getResourceId(), array( - 'host' => $host, - 'port' => $port, - 'weight' => $weight - )); - - return $this; - } - - /** - * Set a list of memcached servers to add on initialize - * - * @param string|array $servers list of servers - * @return MemcachedOptions - * @throws Exception\InvalidArgumentException - */ - public function setServers($servers) - { - $this->getResourceManager()->setServers($this->getResourceId(), $servers); - return $this; - } - - /** - * Get Servers - * - * @return array - */ - public function getServers() - { - return $this->getResourceManager()->getServers($this->getResourceId()); - } - - /** - * Set libmemcached options - * - * @param array $libOptions - * @return MemcachedOptions - * @link http://php.net/manual/memcached.constants.php - */ - public function setLibOptions(array $libOptions) - { - $this->getResourceManager()->setLibOptions($this->getResourceId(), $libOptions); - return $this; - } - - /** - * Set libmemcached option - * - * @param string|int $key - * @param mixed $value - * @return MemcachedOptions - * @link http://php.net/manual/memcached.constants.php - * @deprecated Please use lib_options or the resource manager instead - */ - public function setLibOption($key, $value) - { - trigger_error( - 'This method is deprecated and will be removed in the feature' - . ', please use "lib_options" or the resource manager instead', - E_USER_DEPRECATED - ); - - $this->getResourceManager()->setLibOption($this->getResourceId(), $key, $value); - return $this; - } - - /** - * Get libmemcached options - * - * @return array - * @link http://php.net/manual/memcached.constants.php - */ - public function getLibOptions() - { - return $this->getResourceManager()->getLibOptions($this->getResourceId()); - } - - /** - * Get libmemcached option - * - * @param string|int $key - * @return mixed - * @link http://php.net/manual/memcached.constants.php - * @deprecated Please use lib_options or the resource manager instead - */ - public function getLibOption($key) - { - trigger_error( - 'This method is deprecated and will be removed in the feature' - . ', please use "lib_options" or the resource manager instead', - E_USER_DEPRECATED - ); - - return $this->getResourceManager()->getLibOption($this->getResourceId(), $key); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/MemcachedResourceManager.php b/library/Zend/Cache/Storage/Adapter/MemcachedResourceManager.php deleted file mode 100755 index 10edb99ae..000000000 --- a/library/Zend/Cache/Storage/Adapter/MemcachedResourceManager.php +++ /dev/null @@ -1,547 +0,0 @@ - , 'port' => , 'weight' => ) - */ - public function getServers($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - - if ($resource instanceof MemcachedResource) { - return $resource->getServerList(); - } - return $resource['servers']; - } - - /** - * Normalize one server into the following format: - * array('host' => , 'port' => , 'weight' => ) - * - * @param string|array &$server - * @throws Exception\InvalidArgumentException - */ - protected function normalizeServer(&$server) - { - $host = null; - $port = 11211; - $weight = 0; - - // convert a single server into an array - if ($server instanceof Traversable) { - $server = ArrayUtils::iteratorToArray($server); - } - - if (is_array($server)) { - // array([, [, ]]) - if (isset($server[0])) { - $host = (string) $server[0]; - $port = isset($server[1]) ? (int) $server[1] : $port; - $weight = isset($server[2]) ? (int) $server[2] : $weight; - } - - // array('host' => [, 'port' => [, 'weight' => ]]) - if (!isset($server[0]) && isset($server['host'])) { - $host = (string) $server['host']; - $port = isset($server['port']) ? (int) $server['port'] : $port; - $weight = isset($server['weight']) ? (int) $server['weight'] : $weight; - } - } else { - // parse server from URI host{:?port}{?weight} - $server = trim($server); - if (strpos($server, '://') === false) { - $server = 'tcp://' . $server; - } - - $server = parse_url($server); - if (!$server) { - throw new Exception\InvalidArgumentException("Invalid server given"); - } - - $host = $server['host']; - $port = isset($server['port']) ? (int) $server['port'] : $port; - - if (isset($server['query'])) { - $query = null; - parse_str($server['query'], $query); - if (isset($query['weight'])) { - $weight = (int) $query['weight']; - } - } - } - - if (!$host) { - throw new Exception\InvalidArgumentException('Missing required server host'); - } - - $server = array( - 'host' => $host, - 'port' => $port, - 'weight' => $weight, - ); - } - - /** - * Check if a resource exists - * - * @param string $id - * @return bool - */ - public function hasResource($id) - { - return isset($this->resources[$id]); - } - - /** - * Gets a memcached resource - * - * @param string $id - * @return MemcachedResource - * @throws Exception\RuntimeException - */ - public function getResource($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = $this->resources[$id]; - if ($resource instanceof MemcachedResource) { - return $resource; - } - - if ($resource['persistent_id'] !== '') { - $memc = new MemcachedResource($resource['persistent_id']); - } else { - $memc = new MemcachedResource(); - } - - if (method_exists($memc, 'setOptions')) { - $memc->setOptions($resource['lib_options']); - } else { - foreach ($resource['lib_options'] as $k => $v) { - $memc->setOption($k, $v); - } - } - - // merge and add servers (with persistence id servers could be added already) - $servers = array_udiff($resource['servers'], $memc->getServerList(), array($this, 'compareServers')); - if ($servers) { - $memc->addServers($servers); - } - - // buffer and return - $this->resources[$id] = $memc; - return $memc; - } - - /** - * Set a resource - * - * @param string $id - * @param array|Traversable|MemcachedResource $resource - * @return MemcachedResourceManager Fluent interface - */ - public function setResource($id, $resource) - { - $id = (string) $id; - - if (!($resource instanceof MemcachedResource)) { - if ($resource instanceof Traversable) { - $resource = ArrayUtils::iteratorToArray($resource); - } elseif (!is_array($resource)) { - throw new Exception\InvalidArgumentException( - 'Resource must be an instance of Memcached or an array or Traversable' - ); - } - - $resource = array_merge(array( - 'persistent_id' => '', - 'lib_options' => array(), - 'servers' => array(), - ), $resource); - - // normalize and validate params - $this->normalizePersistentId($resource['persistent_id']); - $this->normalizeLibOptions($resource['lib_options']); - $this->normalizeServers($resource['servers']); - } - - $this->resources[$id] = $resource; - return $this; - } - - /** - * Remove a resource - * - * @param string $id - * @return MemcachedResourceManager Fluent interface - */ - public function removeResource($id) - { - unset($this->resources[$id]); - return $this; - } - - /** - * Set the persistent id - * - * @param string $id - * @param string $persistentId - * @return MemcachedResourceManager Fluent interface - * @throws Exception\RuntimeException - */ - public function setPersistentId($id, $persistentId) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'persistent_id' => $persistentId - )); - } - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcachedResource) { - throw new Exception\RuntimeException( - "Can't change persistent id of resource {$id} after instanziation" - ); - } - - $this->normalizePersistentId($persistentId); - $resource['persistent_id'] = $persistentId; - - return $this; - } - - /** - * Get the persistent id - * - * @param string $id - * @return string - * @throws Exception\RuntimeException - */ - public function getPersistentId($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - - if ($resource instanceof MemcachedResource) { - throw new Exception\RuntimeException( - "Can't get persistent id of an instantiated memcached resource" - ); - } - - return $resource['persistent_id']; - } - - /** - * Normalize the persistent id - * - * @param string $persistentId - */ - protected function normalizePersistentId(& $persistentId) - { - $persistentId = (string) $persistentId; - } - - /** - * Set Libmemcached options - * - * @param string $id - * @param array $libOptions - * @return MemcachedResourceManager Fluent interface - */ - public function setLibOptions($id, array $libOptions) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'lib_options' => $libOptions - )); - } - - $this->normalizeLibOptions($libOptions); - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcachedResource) { - if (method_exists($resource, 'setOptions')) { - $resource->setOptions($libOptions); - } else { - foreach ($libOptions as $key => $value) { - $resource->setOption($key, $value); - } - } - } else { - $resource['lib_options'] = $libOptions; - } - - return $this; - } - - /** - * Get Libmemcached options - * - * @param string $id - * @return array - * @throws Exception\RuntimeException - */ - public function getLibOptions($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - - if ($resource instanceof MemcachedResource) { - $libOptions = array(); - $reflection = new ReflectionClass('Memcached'); - $constants = $reflection->getConstants(); - foreach ($constants as $constName => $constValue) { - if (substr($constName, 0, 4) == 'OPT_') { - $libOptions[$constValue] = $resource->getOption($constValue); - } - } - return $libOptions; - } - return $resource['lib_options']; - } - - /** - * Set one Libmemcached option - * - * @param string $id - * @param string|int $key - * @param mixed $value - * @return MemcachedResourceManager Fluent interface - */ - public function setLibOption($id, $key, $value) - { - return $this->setLibOptions($id, array($key => $value)); - } - - /** - * Get one Libmemcached option - * - * @param string $id - * @param string|int $key - * @return mixed - * @throws Exception\RuntimeException - */ - public function getLibOption($id, $key) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $this->normalizeLibOptionKey($key); - $resource = & $this->resources[$id]; - - if ($resource instanceof MemcachedResource) { - return $resource->getOption($key); - } - - return isset($resource['lib_options'][$key]) ? $resource['lib_options'][$key] : null; - } - - /** - * Normalize libmemcached options - * - * @param array|Traversable $libOptions - * @throws Exception\InvalidArgumentException - */ - protected function normalizeLibOptions(& $libOptions) - { - if (!is_array($libOptions) && !($libOptions instanceof Traversable)) { - throw new Exception\InvalidArgumentException( - "Lib-Options must be an array or an instance of Traversable" - ); - } - - $result = array(); - foreach ($libOptions as $key => $value) { - $this->normalizeLibOptionKey($key); - $result[$key] = $value; - } - - $libOptions = $result; - } - - /** - * Convert option name into it's constant value - * - * @param string|int $key - * @throws Exception\InvalidArgumentException - */ - protected function normalizeLibOptionKey(& $key) - { - // convert option name into it's constant value - if (is_string($key)) { - $const = 'Memcached::OPT_' . str_replace(array(' ', '-'), '_', strtoupper($key)); - if (!defined($const)) { - throw new Exception\InvalidArgumentException("Unknown libmemcached option '{$key}' ({$const})"); - } - $key = constant($const); - } else { - $key = (int) $key; - } - } - - /** - * Set servers - * - * $servers can be an array list or a comma separated list of servers. - * One server in the list can be descripted as follows: - * - URI: [tcp://][:][?weight=] - * - Assoc: array('host' => [, 'port' => ][, 'weight' => ]) - * - List: array([, ][, ]) - * - * @param string $id - * @param string|array $servers - * @return MemcachedResourceManager - */ - public function setServers($id, $servers) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'servers' => $servers - )); - } - - $this->normalizeServers($servers); - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcachedResource) { - // don't add servers twice - $servers = array_udiff($servers, $resource->getServerList(), array($this, 'compareServers')); - if ($servers) { - $resource->addServers($servers); - } - } else { - $resource['servers'] = $servers; - } - - return $this; - } - - /** - * Add servers - * - * @param string $id - * @param string|array $servers - * @return MemcachedResourceManager - */ - public function addServers($id, $servers) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'servers' => $servers - )); - } - - $this->normalizeServers($servers); - - $resource = & $this->resources[$id]; - if ($resource instanceof MemcachedResource) { - // don't add servers twice - $servers = array_udiff($servers, $resource->getServerList(), array($this, 'compareServers')); - if ($servers) { - $resource->addServers($servers); - } - } else { - // don't add servers twice - $resource['servers'] = array_merge( - $resource['servers'], - array_udiff($servers, $resource['servers'], array($this, 'compareServers')) - ); - } - - return $this; - } - - /** - * Add one server - * - * @param string $id - * @param string|array $server - * @return MemcachedResourceManager - */ - public function addServer($id, $server) - { - return $this->addServers($id, array($server)); - } - - /** - * Normalize a list of servers into the following format: - * array(array('host' => , 'port' => , 'weight' => )[, ...]) - * - * @param string|array $servers - */ - protected function normalizeServers(& $servers) - { - if (!is_array($servers) && !$servers instanceof Traversable) { - // Convert string into a list of servers - $servers = explode(',', $servers); - } - - $result = array(); - foreach ($servers as $server) { - $this->normalizeServer($server); - $result[$server['host'] . ':' . $server['port']] = $server; - } - - $servers = array_values($result); - } - - /** - * Compare 2 normalized server arrays - * (Compares only the host and the port) - * - * @param array $serverA - * @param array $serverB - * @return int - */ - protected function compareServers(array $serverA, array $serverB) - { - $keyA = $serverA['host'] . ':' . $serverA['port']; - $keyB = $serverB['host'] . ':' . $serverB['port']; - if ($keyA === $keyB) { - return 0; - } - return $keyA > $keyB ? 1 : -1; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Memory.php b/library/Zend/Cache/Storage/Adapter/Memory.php deleted file mode 100755 index 85aa32e6b..000000000 --- a/library/Zend/Cache/Storage/Adapter/Memory.php +++ /dev/null @@ -1,747 +0,0 @@ - => array( - * => array( - * 0 => - * 1 => - * ['tags' => ] - * ) - * ) - * ) - * - * @var array - */ - protected $data = array(); - - /** - * Set options. - * - * @param array|\Traversable|MemoryOptions $options - * @return Memory - * @see getOptions() - */ - public function setOptions($options) - { - if (!$options instanceof MemoryOptions) { - $options = new MemoryOptions($options); - } - - return parent::setOptions($options); - } - - /** - * Get options. - * - * @return MemoryOptions - * @see setOptions() - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new MemoryOptions()); - } - return $this->options; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - return $this->getOptions()->getMemoryLimit(); - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - $total = $this->getOptions()->getMemoryLimit(); - $avail = $total - (float) memory_get_usage(true); - return ($avail > 0) ? $avail : 0; - } - - /* IterableInterface */ - - /** - * Get the storage iterator - * - * @return KeyListIterator - */ - public function getIterator() - { - $ns = $this->getOptions()->getNamespace(); - $keys = array(); - - if (isset($this->data[$ns])) { - foreach ($this->data[$ns] as $key => & $tmp) { - if ($this->internalHasItem($key)) { - $keys[] = $key; - } - } - } - - return new KeyListIterator($this, $keys); - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - $this->data = array(); - return true; - } - - /* ClearExpiredInterface */ - - /** - * Remove expired items - * - * @return bool - */ - public function clearExpired() - { - $ttl = $this->getOptions()->getTtl(); - if ($ttl <= 0) { - return true; - } - - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns])) { - return true; - } - - $data = & $this->data[$ns]; - foreach ($data as $key => & $item) { - if (microtime(true) >= $data[$key][1] + $ttl) { - unset($data[$key]); - } - } - - return true; - } - - /* ClearByNamespaceInterface */ - - public function clearByNamespace($namespace) - { - $namespace = (string) $namespace; - if ($namespace === '') { - throw new Exception\InvalidArgumentException('No namespace given'); - } - - unset($this->data[$namespace]); - return true; - } - - /* ClearByPrefixInterface */ - - /** - * Remove items matching given prefix - * - * @param string $prefix - * @return bool - */ - public function clearByPrefix($prefix) - { - $prefix = (string) $prefix; - if ($prefix === '') { - throw new Exception\InvalidArgumentException('No prefix given'); - } - - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns])) { - return true; - } - - $prefixL = strlen($prefix); - $data = & $this->data[$ns]; - foreach ($data as $key => & $item) { - if (substr($key, 0, $prefixL) === $prefix) { - unset($data[$key]); - } - } - - return true; - } - - /* TaggableInterface */ - - /** - * Set tags to an item by given key. - * An empty array will remove all tags. - * - * @param string $key - * @param string[] $tags - * @return bool - */ - public function setTags($key, array $tags) - { - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns][$key])) { - return false; - } - - $this->data[$ns][$key]['tags'] = $tags; - return true; - } - - /** - * Get tags of an item by given key - * - * @param string $key - * @return string[]|FALSE - */ - public function getTags($key) - { - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns][$key])) { - return false; - } - - return isset($this->data[$ns][$key]['tags']) ? $this->data[$ns][$key]['tags'] : array(); - } - - /** - * Remove items matching given tags. - * - * If $disjunction only one of the given tags must match - * else all given tags must match. - * - * @param string[] $tags - * @param bool $disjunction - * @return bool - */ - public function clearByTags(array $tags, $disjunction = false) - { - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns])) { - return true; - } - - $tagCount = count($tags); - $data = & $this->data[$ns]; - foreach ($data as $key => & $item) { - if (isset($item['tags'])) { - $diff = array_diff($tags, $item['tags']); - if (($disjunction && count($diff) < $tagCount) || (!$disjunction && !$diff)) { - unset($data[$key]); - } - } - } - - return true; - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $options = $this->getOptions(); - $ns = $options->getNamespace(); - $success = isset($this->data[$ns][$normalizedKey]); - if ($success) { - $data = & $this->data[$ns][$normalizedKey]; - $ttl = $options->getTtl(); - if ($ttl && microtime(true) >= ($data[1] + $ttl)) { - $success = false; - } - } - - if (!$success) { - return null; - } - - $casToken = $data[0]; - return $data[0]; - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $options = $this->getOptions(); - $ns = $options->getNamespace(); - if (!isset($this->data[$ns])) { - return array(); - } - - $data = & $this->data[$ns]; - $ttl = $options->getTtl(); - $now = microtime(true); - - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - if (isset($data[$normalizedKey])) { - if (!$ttl || $now < ($data[$normalizedKey][1] + $ttl)) { - $result[$normalizedKey] = $data[$normalizedKey][0]; - } - } - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - */ - protected function internalHasItem(& $normalizedKey) - { - $options = $this->getOptions(); - $ns = $options->getNamespace(); - if (!isset($this->data[$ns][$normalizedKey])) { - return false; - } - - // check if expired - $ttl = $options->getTtl(); - if ($ttl && microtime(true) >= ($this->data[$ns][$normalizedKey][1] + $ttl)) { - return false; - } - - return true; - } - - /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - */ - protected function internalHasItems(array & $normalizedKeys) - { - $options = $this->getOptions(); - $ns = $options->getNamespace(); - if (!isset($this->data[$ns])) { - return array(); - } - - $data = & $this->data[$ns]; - $ttl = $options->getTtl(); - $now = microtime(true); - - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - if (isset($data[$normalizedKey])) { - if (!$ttl || $now < ($data[$normalizedKey][1] + $ttl)) { - $result[] = $normalizedKey; - } - } - } - - return $result; - } - - /** - * Get metadata of an item. - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface - * - * @triggers getMetadata.pre(PreEvent) - * @triggers getMetadata.post(PostEvent) - * @triggers getMetadata.exception(ExceptionEvent) - */ - protected function internalGetMetadata(& $normalizedKey) - { - if (!$this->internalHasItem($normalizedKey)) { - return false; - } - - $ns = $this->getOptions()->getNamespace(); - return array( - 'mtime' => $this->data[$ns][$normalizedKey][1], - ); - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - - if (!$this->hasAvailableSpace()) { - $memoryLimit = $options->getMemoryLimit(); - throw new Exception\OutOfSpaceException( - "Memory usage exceeds limit ({$memoryLimit})." - ); - } - - $ns = $options->getNamespace(); - $this->data[$ns][$normalizedKey] = array($value, microtime(true)); - - return true; - } - - /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $options = $this->getOptions(); - - if (!$this->hasAvailableSpace()) { - $memoryLimit = $options->getMemoryLimit(); - throw new Exception\OutOfSpaceException( - "Memory usage exceeds limit ({$memoryLimit})." - ); - } - - $ns = $options->getNamespace(); - if (!isset($this->data[$ns])) { - $this->data[$ns] = array(); - } - - $data = & $this->data[$ns]; - $now = microtime(true); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - $data[$normalizedKey] = array($value, $now); - } - - return array(); - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - - if (!$this->hasAvailableSpace()) { - $memoryLimit = $options->getMemoryLimit(); - throw new Exception\OutOfSpaceException( - "Memory usage exceeds limit ({$memoryLimit})." - ); - } - - $ns = $options->getNamespace(); - if (isset($this->data[$ns][$normalizedKey])) { - return false; - } - - $this->data[$ns][$normalizedKey] = array($value, microtime(true)); - return true; - } - - /** - * Internal method to add multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalAddItems(array & $normalizedKeyValuePairs) - { - $options = $this->getOptions(); - - if (!$this->hasAvailableSpace()) { - $memoryLimit = $options->getMemoryLimit(); - throw new Exception\OutOfSpaceException( - "Memory usage exceeds limit ({$memoryLimit})." - ); - } - - $ns = $options->getNamespace(); - if (!isset($this->data[$ns])) { - $this->data[$ns] = array(); - } - - $result = array(); - $data = & $this->data[$ns]; - $now = microtime(true); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - if (isset($data[$normalizedKey])) { - $result[] = $normalizedKey; - } else { - $data[$normalizedKey] = array($value, $now); - } - } - - return $result; - } - - /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItem(& $normalizedKey, & $value) - { - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns][$normalizedKey])) { - return false; - } - $this->data[$ns][$normalizedKey] = array($value, microtime(true)); - - return true; - } - - /** - * Internal method to replace multiple existing items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItems(array & $normalizedKeyValuePairs) - { - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns])) { - return array_keys($normalizedKeyValuePairs); - } - - $result = array(); - $data = & $this->data[$ns]; - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - if (!isset($data[$normalizedKey])) { - $result[] = $normalizedKey; - } else { - $data[$normalizedKey] = array($value, microtime(true)); - } - } - - return $result; - } - - /** - * Internal method to reset lifetime of an item - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalTouchItem(& $normalizedKey) - { - $ns = $this->getOptions()->getNamespace(); - - if (!isset($this->data[$ns][$normalizedKey])) { - return false; - } - - $this->data[$ns][$normalizedKey][1] = microtime(true); - return true; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $ns = $this->getOptions()->getNamespace(); - if (!isset($this->data[$ns][$normalizedKey])) { - return false; - } - - unset($this->data[$ns][$normalizedKey]); - - // remove empty namespace - if (!$this->data[$ns]) { - unset($this->data[$ns]); - } - - return true; - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $ns = $this->getOptions()->getNamespace(); - if (isset($this->data[$ns][$normalizedKey])) { - $data = & $this->data[$ns][$normalizedKey]; - $data[0]+= $value; - $data[1] = microtime(true); - $newValue = $data[0]; - } else { - // initial value - $newValue = $value; - $this->data[$ns][$normalizedKey] = array($newValue, microtime(true)); - } - - return $newValue; - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $ns = $this->getOptions()->getNamespace(); - if (isset($this->data[$ns][$normalizedKey])) { - $data = & $this->data[$ns][$normalizedKey]; - $data[0]-= $value; - $data[1] = microtime(true); - $newValue = $data[0]; - } else { - // initial value - $newValue = -$value; - $this->data[$ns][$normalizedKey] = array($newValue, microtime(true)); - } - - return $newValue; - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $this->capabilityMarker = new stdClass(); - $this->capabilities = new Capabilities( - $this, - $this->capabilityMarker, - array( - 'supportedDatatypes' => array( - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => true, - 'resource' => true, - ), - 'supportedMetadata' => array('mtime'), - 'minTtl' => 1, - 'maxTtl' => PHP_INT_MAX, - 'staticTtl' => false, - 'ttlPrecision' => 0.05, - 'expiredRead' => true, - 'maxKeyLength' => 0, - 'namespaceIsPrefix' => false, - 'namespaceSeparator' => '', - ) - ); - } - - return $this->capabilities; - } - - /* internal */ - - /** - * Has space available to store items? - * - * @return bool - */ - protected function hasAvailableSpace() - { - $total = $this->getOptions()->getMemoryLimit(); - - // check memory limit disabled - if ($total <= 0) { - return true; - } - - $free = $total - (float) memory_get_usage(true); - return ($free > 0); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/MemoryOptions.php b/library/Zend/Cache/Storage/Adapter/MemoryOptions.php deleted file mode 100755 index be48418c6..000000000 --- a/library/Zend/Cache/Storage/Adapter/MemoryOptions.php +++ /dev/null @@ -1,112 +0,0 @@ -normalizeMemoryLimit($memoryLimit); - - if ($this->memoryLimit != $memoryLimit) { - $this->triggerOptionEvent('memory_limit', $memoryLimit); - $this->memoryLimit = $memoryLimit; - } - - return $this; - } - - /** - * Get memory limit - * - * If the used memory of PHP exceeds this limit an OutOfSpaceException - * will be thrown. - * - * @return int - */ - public function getMemoryLimit() - { - if ($this->memoryLimit === null) { - // By default use half of PHP's memory limit if possible - $memoryLimit = $this->normalizeMemoryLimit(ini_get('memory_limit')); - if ($memoryLimit >= 0) { - $this->memoryLimit = (int) ($memoryLimit / 2); - } else { - // disable memory limit - $this->memoryLimit = 0; - } - } - - return $this->memoryLimit; - } - - /** - * Normalized a given value of memory limit into the number of bytes - * - * @param string|int $value - * @throws Exception\InvalidArgumentException - * @return int - */ - protected function normalizeMemoryLimit($value) - { - if (is_numeric($value)) { - return (int) $value; - } - - if (!preg_match('/(\-?\d+)\s*(\w*)/', ini_get('memory_limit'), $matches)) { - throw new Exception\InvalidArgumentException("Invalid memory limit '{$value}'"); - } - - $value = (int) $matches[1]; - if ($value <= 0) { - return 0; - } - - switch (strtoupper($matches[2])) { - case 'G': - $value*= 1024; - // no break - - case 'M': - $value*= 1024; - // no break - - case 'K': - $value*= 1024; - // no break - } - - return $value; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Redis.php b/library/Zend/Cache/Storage/Adapter/Redis.php deleted file mode 100755 index 1adb3d4a4..000000000 --- a/library/Zend/Cache/Storage/Adapter/Redis.php +++ /dev/null @@ -1,433 +0,0 @@ -initialized; - $this->getEventManager()->attach('option', function ($event) use (& $initialized) { - $initialized = false; - }); - } - - /** - * Get Redis resource - * - * @return RedisResource - */ - protected function getRedisResource() - { - if (!$this->initialized) { - $options = $this->getOptions(); - - // get resource manager and resource id - $this->resourceManager = $options->getResourceManager(); - $this->resourceId = $options->getResourceId(); - - // init namespace prefix - $namespace = $options->getNamespace(); - if ($namespace !== '') { - $this->namespacePrefix = $namespace . $options->getNamespaceSeparator(); - } else { - $this->namespacePrefix = ''; - } - - // update initialized flag - $this->initialized = true; - } - - return $this->resourceManager->getResource($this->resourceId); - } - - /* options */ - - /** - * Set options. - * - * @param array|Traversable|RedisOptions $options - * @return Redis - * @see getOptions() - */ - public function setOptions($options) - { - if (!$options instanceof RedisOptions) { - $options = new RedisOptions($options); - } - return parent::setOptions($options); - } - - /** - * Get options. - * - * @return RedisOptions - * @see setOptions() - */ - public function getOptions() - { - if (!$this->options) { - $this->setOptions(new RedisOptions()); - } - return $this->options; - } - - /** - * Internal method to get an item. - * - * @param string &$normalizedKey Key where to store data - * @param bool &$success If the operation was successfull - * @param mixed &$casToken Token - * @return mixed Data on success, false on key not found - * @throws Exception\RuntimeException - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $redis = $this->getRedisResource(); - try { - $value = $redis->get($this->namespacePrefix . $normalizedKey); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - - if ($value === false) { - $success = false; - return null; - } - - $success = true; - $casToken = $value; - return $value; - } - - /** - * Internal method to get multiple items. - * - * @param array &$normalizedKeys Array of keys to be obtained - * - * @return array Associative array of keys and values - * @throws Exception\RuntimeException - */ - protected function internalGetItems(array & $normalizedKeys) - { - $redis = $this->getRedisResource(); - - $namespacedKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $namespacedKeys[] = $this->namespacePrefix . $normalizedKey; - } - - try { - $results = $redis->mGet($namespacedKeys); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - //combine the key => value pairs and remove all missing values - return array_filter( - array_combine($normalizedKeys, $results), - function ($value) { - return $value !== false; - } - ); - } - - /** - * Internal method to test if an item exists. - * - * @param string &$normalizedKey Normalized key which will be checked - * - * @return bool - * @throws Exception\RuntimeException - */ - protected function internalHasItem(& $normalizedKey) - { - $redis = $this->getRedisResource(); - try { - return $redis->exists($this->namespacePrefix . $normalizedKey); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - } - - /** - * Internal method to store an item. - * - * @param string &$normalizedKey Key in Redis under which value will be saved - * @param mixed &$value Value to store under cache key - * - * @return bool - * @throws Exception\RuntimeException - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $redis = $this->getRedisResource(); - $ttl = $this->getOptions()->getTtl(); - - try { - if ($ttl) { - if ($this->resourceManager->getMajorVersion($this->resourceId) < 2) { - throw new Exception\UnsupportedMethodCallException("To use ttl you need version >= 2.0.0"); - } - $success = $redis->setex($this->namespacePrefix . $normalizedKey, $ttl, $value); - } else { - $success = $redis->set($this->namespacePrefix . $normalizedKey, $value); - } - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - - return $success; - } - - /** - * Internal method to store multiple items. - * - * @param array &$normalizedKeyValuePairs An array of normalized key/value pairs - * - * @return array Array of not stored keys - * @throws Exception\RuntimeException - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $redis = $this->getRedisResource(); - $ttl = $this->getOptions()->getTtl(); - - $namespacedKeyValuePairs = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - $namespacedKeyValuePairs[$this->namespacePrefix . $normalizedKey] = $value; - } - try { - if ($ttl > 0) { - //check if ttl is supported - if ($this->resourceManager->getMajorVersion($this->resourceId) < 2) { - throw new Exception\UnsupportedMethodCallException("To use ttl you need version >= 2.0.0"); - } - //mSet does not allow ttl, so use transaction - $transaction = $redis->multi(); - foreach ($namespacedKeyValuePairs as $key => $value) { - $transaction->setex($key, $ttl, $value); - } - $success = $transaction->exec(); - } else { - $success = $redis->mSet($namespacedKeyValuePairs); - } - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - if (!$success) { - throw new Exception\RuntimeException($redis->getLastError()); - } - - return array(); - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\RuntimeException - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $redis = $this->getRedisResource(); - try { - return $redis->setnx($this->namespacePrefix . $normalizedKey, $value); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - } - - /** - * Internal method to remove an item. - * - * @param string &$normalizedKey Key which will be removed - * - * @return bool - * @throws Exception\RuntimeException - */ - protected function internalRemoveItem(& $normalizedKey) - { - $redis = $this->getRedisResource(); - try { - return (bool) $redis->delete($this->namespacePrefix . $normalizedKey); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\RuntimeException - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $redis = $this->getRedisResource(); - try { - return $redis->incrBy($this->namespacePrefix . $normalizedKey, $value); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\RuntimeException - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $redis = $this->getRedisResource(); - try { - return $redis->decrBy($this->namespacePrefix . $normalizedKey, $value); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - } - - /** - * Flush currently set DB - * - * @return bool - * @throws Exception\RuntimeException - */ - public function flush() - { - $redis = $this->getRedisResource(); - try { - return $redis->flushDB(); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - $redis = $this->getRedisResource(); - try { - $info = $redis->info(); - } catch (RedisResourceException $e) { - throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); - } - - return $info['used_memory']; - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $this->capabilityMarker = new stdClass(); - $minTtl = $this->resourceManager->getMajorVersion($this->resourceId) < 2 ? 0 : 1; - //without serialization redis supports only strings for simple - //get/set methods - $this->capabilities = new Capabilities( - $this, - $this->capabilityMarker, - array( - 'supportedDatatypes' => array( - 'NULL' => 'string', - 'boolean' => 'string', - 'integer' => 'string', - 'double' => 'string', - 'string' => true, - 'array' => false, - 'object' => false, - 'resource' => false, - ), - 'supportedMetadata' => array(), - 'minTtl' => $minTtl, - 'maxTtl' => 0, - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => false, - 'expiredRead' => false, - 'maxKeyLength' => 255, - 'namespaceIsPrefix' => true, - ) - ); - } - - return $this->capabilities; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/RedisOptions.php b/library/Zend/Cache/Storage/Adapter/RedisOptions.php deleted file mode 100755 index f5e674875..000000000 --- a/library/Zend/Cache/Storage/Adapter/RedisOptions.php +++ /dev/null @@ -1,263 +0,0 @@ -namespaceSeparator !== $namespaceSeparator) { - $this->triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - } - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } - - /** - * Set the redis resource manager to use - * - * @param null|RedisResourceManager $resourceManager - * @return RedisOptions - */ - public function setResourceManager(RedisResourceManager $resourceManager = null) - { - if ($this->resourceManager !== $resourceManager) { - $this->triggerOptionEvent('resource_manager', $resourceManager); - $this->resourceManager = $resourceManager; - } - return $this; - } - - /** - * Get the redis resource manager - * - * @return RedisResourceManager - */ - public function getResourceManager() - { - if (!$this->resourceManager) { - $this->resourceManager = new RedisResourceManager(); - } - return $this->resourceManager; - } - - /** - * Get the redis resource id - * - * @return string - */ - public function getResourceId() - { - return $this->resourceId; - } - - /** - * Set the redis resource id - * - * @param string $resourceId - * @return RedisOptions - */ - public function setResourceId($resourceId) - { - $resourceId = (string) $resourceId; - if ($this->resourceId !== $resourceId) { - $this->triggerOptionEvent('resource_id', $resourceId); - $this->resourceId = $resourceId; - } - return $this; - } - - /** - * Get the persistent id - * - * @return string - */ - public function getPersistentId() - { - return $this->getResourceManager()->getPersistentId($this->getResourceId()); - } - - /** - * Set the persistent id - * - * @param string $persistentId - * @return RedisOptions - */ - public function setPersistentId($persistentId) - { - $this->triggerOptionEvent('persistent_id', $persistentId); - $this->getResourceManager()->setPersistentId($this->getResourceId(), $persistentId); - return $this; - } - - /** - * Set redis options - * - * @param array $libOptions - * @return RedisOptions - * @link http://github.com/nicolasff/phpredis#setoption - */ - public function setLibOptions(array $libOptions) - { - $this->triggerOptionEvent('lib_option', $libOptions); - $this->getResourceManager()->setLibOptions($this->getResourceId(), $libOptions); - return $this; - } - - /** - * Get redis options - * - * @return array - * @link http://github.com/nicolasff/phpredis#setoption - */ - public function getLibOptions() - { - return $this->getResourceManager()->getLibOptions($this->getResourceId()); - } - - /** - * Set server - * - * Server can be described as follows: - * - URI: /path/to/sock.sock - * - Assoc: array('host' => [, 'port' => [, 'timeout' => ]]) - * - List: array([, , [, ]]) - * - * @param string|array $server - * - * @return RedisOptions - */ - public function setServer($server) - { - $this->getResourceManager()->setServer($this->getResourceId(), $server); - return $this; - } - - /** - * Get server - * - * @return array array('host' => [, 'port' => [, 'timeout' => ]]) - */ - public function getServer() - { - return $this->getResourceManager()->getServer($this->getResourceId()); - } - - /** - * Set resource database number - * - * @param int $database Database number - * - * @return RedisOptions - */ - public function setDatabase($database) - { - $this->getResourceManager()->setDatabase($this->getResourceId(), $database); - return $this; - } - - /** - * Get resource database number - * - * @return int Database number - */ - public function getDatabase() - { - return $this->getResourceManager()->getDatabase($this->getResourceId()); - } - - /** - * Set resource password - * - * @param string $password Password - * - * @return RedisOptions - */ - public function setPassword($password) - { - $this->getResourceManager()->setPassword($this->getResourceId(), $password); - return $this; - } - - /** - * Get resource password - * - * @return string - */ - public function getPassword() - { - return $this->getResourceManager()->getPassword($this->getResourceId()); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/RedisResourceManager.php b/library/Zend/Cache/Storage/Adapter/RedisResourceManager.php deleted file mode 100755 index ed8ee2147..000000000 --- a/library/Zend/Cache/Storage/Adapter/RedisResourceManager.php +++ /dev/null @@ -1,645 +0,0 @@ -resources[$id]); - } - - /** - * Get redis server version - * - * @param string $id - * @return int - * @throws Exception\RuntimeException - */ - public function getMajorVersion($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - return (int) $resource['version']; - } - - /** - * Get redis server version - * - * @deprecated 2.2.2 Use getMajorVersion instead - * - * @param string $id - * @return int - * @throws Exception\RuntimeException - */ - public function getMayorVersion($id) - { - return $this->getMajorVersion($id); - } - - /** - * Get redis resource database - * - * @param string $id - * @return string - */ - public function getDatabase($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - return $resource['database']; - } - - /** - * Get redis resource password - * - * @param string $id - * @return string - */ - public function getPassword($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - return $resource['password']; - } - - /** - * Gets a redis resource - * - * @param string $id - * @return RedisResource - * @throws Exception\RuntimeException - */ - public function getResource($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - if ($resource['resource'] instanceof RedisResource) { - //in case new server was set then connect - if (!$resource['initialized']) { - $this->connect($resource); - } - $info = $resource['resource']->info(); - $resource['version'] = $info['redis_version']; - return $resource['resource']; - } - - $redis = new RedisResource(); - - $resource['resource'] = $redis; - $this->connect($resource); - - foreach ($resource['lib_options'] as $k => $v) { - $redis->setOption($k, $v); - } - - $info = $redis->info(); - $resource['version'] = $info['redis_version']; - $this->resources[$id]['resource'] = $redis; - return $redis; - } - - /** - * Get server - * @param string $id - * @throws Exception\RuntimeException - * @return array array('host' => [, 'port' => [, 'timeout' => ]]) - */ - public function getServer($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - return $resource['server']; - } - - /** - * Normalize one server into the following format: - * array('host' => [, 'port' => [, 'timeout' => ]]) - * - * @param string|array $server - * - * @throws Exception\InvalidArgumentException - */ - protected function normalizeServer(&$server) - { - $host = null; - $port = null; - $timeout = 0; - - // convert a single server into an array - if ($server instanceof Traversable) { - $server = ArrayUtils::iteratorToArray($server); - } - - if (is_array($server)) { - // array([, [, ]]) - if (isset($server[0])) { - $host = (string) $server[0]; - $port = isset($server[1]) ? (int) $server[1] : $port; - $timeout = isset($server[2]) ? (int) $server[2] : $timeout; - } - - // array('host' => [, 'port' => , ['timeout' => ]]) - if (!isset($server[0]) && isset($server['host'])) { - $host = (string) $server['host']; - $port = isset($server['port']) ? (int) $server['port'] : $port; - $timeout = isset($server['timeout']) ? (int) $server['timeout'] : $timeout; - } - } else { - // parse server from URI host{:?port} - $server = trim($server); - if (strpos($server, '/') !== 0) { - //non unix domain socket connection - $server = parse_url($server); - } else { - $server = array('host' => $server); - } - if (!$server) { - throw new Exception\InvalidArgumentException("Invalid server given"); - } - - $host = $server['host']; - $port = isset($server['port']) ? (int) $server['port'] : $port; - $timeout = isset($server['timeout']) ? (int) $server['timeout'] : $timeout; - } - - if (!$host) { - throw new Exception\InvalidArgumentException('Missing required server host'); - } - - $server = array( - 'host' => $host, - 'port' => $port, - 'timeout' => $timeout, - ); - } - - /** - * Extract password to be used on connection - * - * @param mixed $resource - * @param mixed $serverUri - * - * @return string|null - */ - protected function extractPassword($resource, $serverUri) - { - if (! empty($resource['password'])) { - return $resource['password']; - } - - if (! is_string($serverUri)) { - return null; - } - - // parse server from URI host{:?port} - $server = trim($serverUri); - - if (strpos($server, '/') === 0) { - return null; - } - - //non unix domain socket connection - $server = parse_url($server); - - return isset($server['pass']) ? $server['pass'] : null; - } - - /** - * Connects to redis server - * - * - * @param array & $resource - * - * @return null - * @throws Exception\RuntimeException - */ - protected function connect(array & $resource) - { - $server = $resource['server']; - $redis = $resource['resource']; - if ($resource['persistent_id'] !== '') { - //connect or reuse persistent connection - $success = $redis->pconnect($server['host'], $server['port'], $server['timeout'], $server['persistent_id']); - } elseif ($server['port']) { - $success = $redis->connect($server['host'], $server['port'], $server['timeout']); - } elseif ($server['timeout']) { - //connect through unix domain socket - $success = $redis->connect($server['host'], $server['timeout']); - } else { - $success = $redis->connect($server['host']); - } - - if (!$success) { - throw new Exception\RuntimeException('Could not estabilish connection with Redis instance'); - } - - $resource['initialized'] = true; - if ($resource['password']) { - $redis->auth($resource['password']); - } - $redis->select($resource['database']); - } - - /** - * Set a resource - * - * @param string $id - * @param array|Traversable|RedisResource $resource - * @return RedisResourceManager Fluent interface - */ - public function setResource($id, $resource) - { - $id = (string) $id; - //TODO: how to get back redis connection info from resource? - $defaults = array( - 'persistent_id' => '', - 'lib_options' => array(), - 'server' => array(), - 'password' => '', - 'database' => 0, - 'resource' => null, - 'initialized' => false, - 'version' => 0, - ); - if (!$resource instanceof RedisResource) { - if ($resource instanceof Traversable) { - $resource = ArrayUtils::iteratorToArray($resource); - } elseif (!is_array($resource)) { - throw new Exception\InvalidArgumentException( - 'Resource must be an instance of an array or Traversable' - ); - } - - $resource = array_merge($defaults, $resource); - // normalize and validate params - $this->normalizePersistentId($resource['persistent_id']); - $this->normalizeLibOptions($resource['lib_options']); - - // #6495 note: order is important here, as `normalizeServer` applies destructive - // transformations on $resource['server'] - $resource['password'] = $this->extractPassword($resource, $resource['server']); - - $this->normalizeServer($resource['server']); - } else { - //there are two ways of determining if redis is already initialized - //with connect function: - //1) pinging server - //2) checking undocumented property socket which is available only - //after successful connect - $resource = array_merge( - $defaults, - array( - 'resource' => $resource, - 'initialized' => isset($resource->socket), - ) - ); - } - $this->resources[$id] = $resource; - return $this; - } - - /** - * Remove a resource - * - * @param string $id - * @return RedisResourceManager Fluent interface - */ - public function removeResource($id) - { - unset($this->resources[$id]); - return $this; - } - - /** - * Set the persistent id - * - * @param string $id - * @param string $persistentId - * @return RedisResourceManager Fluent interface - * @throws Exception\RuntimeException - */ - public function setPersistentId($id, $persistentId) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'persistent_id' => $persistentId - )); - } - - $resource = & $this->resources[$id]; - if ($resource instanceof RedisResource) { - throw new Exception\RuntimeException( - "Can't change persistent id of resource {$id} after instanziation" - ); - } - - $this->normalizePersistentId($persistentId); - $resource['persistent_id'] = $persistentId; - - return $this; - } - - /** - * Get the persistent id - * - * @param string $id - * @return string - * @throws Exception\RuntimeException - */ - public function getPersistentId($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - - if ($resource instanceof RedisResource) { - throw new Exception\RuntimeException( - "Can't get persistent id of an instantiated redis resource" - ); - } - - return $resource['persistent_id']; - } - - /** - * Normalize the persistent id - * - * @param string $persistentId - */ - protected function normalizePersistentId(& $persistentId) - { - $persistentId = (string) $persistentId; - } - - /** - * Set Redis options - * - * @param string $id - * @param array $libOptions - * @return RedisResourceManager Fluent interface - */ - public function setLibOptions($id, array $libOptions) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'lib_options' => $libOptions - )); - } - - $this->normalizeLibOptions($libOptions); - $resource = & $this->resources[$id]; - - $resource['lib_options'] = $libOptions; - - if ($resource['resource'] instanceof RedisResource) { - $redis = & $resource['resource']; - if (method_exists($redis, 'setOptions')) { - $redis->setOptions($libOptions); - } else { - foreach ($libOptions as $key => $value) { - $redis->setOption($key, $value); - } - } - } - - return $this; - } - - /** - * Get Redis options - * - * @param string $id - * @return array - * @throws Exception\RuntimeException - */ - public function getLibOptions($id) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $resource = & $this->resources[$id]; - - if ($resource instanceof RedisResource) { - $libOptions = array(); - $reflection = new ReflectionClass('Redis'); - $constants = $reflection->getConstants(); - foreach ($constants as $constName => $constValue) { - if (substr($constName, 0, 4) == 'OPT_') { - $libOptions[$constValue] = $resource->getOption($constValue); - } - } - return $libOptions; - } - return $resource['lib_options']; - } - - /** - * Set one Redis option - * - * @param string $id - * @param string|int $key - * @param mixed $value - * @return RedisResourceManager Fluent interface - */ - public function setLibOption($id, $key, $value) - { - return $this->setLibOptions($id, array($key => $value)); - } - - /** - * Get one Redis option - * - * @param string $id - * @param string|int $key - * @return mixed - * @throws Exception\RuntimeException - */ - public function getLibOption($id, $key) - { - if (!$this->hasResource($id)) { - throw new Exception\RuntimeException("No resource with id '{$id}'"); - } - - $this->normalizeLibOptionKey($key); - $resource = & $this->resources[$id]; - - if ($resource instanceof RedisResource) { - return $resource->getOption($key); - } - - return isset($resource['lib_options'][$key]) ? $resource['lib_options'][$key] : null; - } - - /** - * Normalize Redis options - * - * @param array|Traversable $libOptions - * @throws Exception\InvalidArgumentException - */ - protected function normalizeLibOptions(& $libOptions) - { - if (!is_array($libOptions) && !($libOptions instanceof Traversable)) { - throw new Exception\InvalidArgumentException( - "Lib-Options must be an array or an instance of Traversable" - ); - } - - $result = array(); - foreach ($libOptions as $key => $value) { - $this->normalizeLibOptionKey($key); - $result[$key] = $value; - } - - $libOptions = $result; - } - - /** - * Convert option name into it's constant value - * - * @param string|int $key - * @throws Exception\InvalidArgumentException - */ - protected function normalizeLibOptionKey(& $key) - { - // convert option name into it's constant value - if (is_string($key)) { - $const = 'Redis::OPT_' . str_replace(array(' ', '-'), '_', strtoupper($key)); - if (!defined($const)) { - throw new Exception\InvalidArgumentException("Unknown redis option '{$key}' ({$const})"); - } - $key = constant($const); - } else { - $key = (int) $key; - } - } - - /** - * Set server - * - * Server can be described as follows: - * - URI: /path/to/sock.sock - * - Assoc: array('host' => [, 'port' => [, 'timeout' => ]]) - * - List: array([, , [, ]]) - * - * @param string $id - * @param string|array $server - * @return RedisResourceManager - */ - public function setServer($id, $server) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'server' => $server - )); - } - - $this->normalizeServer($server); - - $resource = & $this->resources[$id]; - $resource['password'] = $this->extractPassword($resource, $server); - - if ($resource['resource'] instanceof RedisResource) { - $resourceParams = array('server' => $server); - - if (! empty($resource['password'])) { - $resourceParams['password'] = $resource['password']; - } - - $this->setResource($id, $resourceParams); - } else { - $resource['server'] = $server; - } - - return $this; - } - - /** - * Set redis password - * - * @param string $id - * @param string $password - * @return RedisResource - */ - public function setPassword($id, $password) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'password' => $password, - )); - } - - $resource = & $this->resources[$id]; - $resource['password'] = $password; - $resource['initialized'] = false; - return $this; - } - - /** - * Set redis database number - * - * @param string $id - * @param int $database - * @return RedisResource - */ - public function setDatabase($id, $database) - { - if (!$this->hasResource($id)) { - return $this->setResource($id, array( - 'database' => (int) $database, - )); - } - - $resource = & $this->resources[$id]; - $resource['database'] = $database; - $resource['initialized'] = false; - return $this; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/Session.php b/library/Zend/Cache/Storage/Adapter/Session.php deleted file mode 100755 index 4603c2314..000000000 --- a/library/Zend/Cache/Storage/Adapter/Session.php +++ /dev/null @@ -1,546 +0,0 @@ -options) { - $this->setOptions(new SessionOptions()); - } - return $this->options; - } - - /** - * Get the session container - * - * @return SessionContainer - */ - protected function getSessionContainer() - { - $sessionContainer = $this->getOptions()->getSessionContainer(); - if (!$sessionContainer) { - throw new Exception\RuntimeException("No session container configured"); - } - return $sessionContainer; - } - - /* IterableInterface */ - - /** - * Get the storage iterator - * - * @return KeyListIterator - */ - public function getIterator() - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if ($cntr->offsetExists($ns)) { - $keys = array_keys($cntr->offsetGet($ns)); - } else { - $keys = array(); - } - - return new KeyListIterator($this, $keys); - } - - /* FlushableInterface */ - - /** - * Flush the whole session container - * - * @return bool - */ - public function flush() - { - $this->getSessionContainer()->exchangeArray(array()); - return true; - } - - /* ClearByPrefixInterface */ - - /** - * Remove items matching given prefix - * - * @param string $prefix - * @return bool - */ - public function clearByPrefix($prefix) - { - $prefix = (string) $prefix; - if ($prefix === '') { - throw new Exception\InvalidArgumentException('No prefix given'); - } - - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if (!$cntr->offsetExists($ns)) { - return true; - } - - $data = $cntr->offsetGet($ns); - $prefixL = strlen($prefix); - foreach ($data as $key => & $item) { - if (substr($key, 0, $prefixL) === $prefix) { - unset($data[$key]); - } - } - $cntr->offsetSet($ns, $data); - - return true; - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if (!$cntr->offsetExists($ns)) { - $success = false; - return null; - } - - $data = $cntr->offsetGet($ns); - $success = array_key_exists($normalizedKey, $data); - if (!$success) { - return null; - } - - $casToken = $value = $data[$normalizedKey]; - return $value; - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if (!$cntr->offsetExists($ns)) { - return array(); - } - - $data = $cntr->offsetGet($ns); - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - if (array_key_exists($normalizedKey, $data)) { - $result[$normalizedKey] = $data[$normalizedKey]; - } - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - */ - protected function internalHasItem(& $normalizedKey) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if (!$cntr->offsetExists($ns)) { - return false; - } - - $data = $cntr->offsetGet($ns); - return array_key_exists($normalizedKey, $data); - } - - /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - */ - protected function internalHasItems(array & $normalizedKeys) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if (!$cntr->offsetExists($ns)) { - return array(); - } - - $data = $cntr->offsetGet($ns); - $result = array(); - foreach ($normalizedKeys as $normalizedKey) { - if (array_key_exists($normalizedKey, $data)) { - $result[] = $normalizedKey; - } - } - - return $result; - } - - /** - * Get metadata of an item. - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface - * - * @triggers getMetadata.pre(PreEvent) - * @triggers getMetadata.post(PostEvent) - * @triggers getMetadata.exception(ExceptionEvent) - */ - protected function internalGetMetadata(& $normalizedKey) - { - return $this->internalHasItem($normalizedKey) ? array() : false; - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - $data = $cntr->offsetExists($ns) ? $cntr->offsetGet($ns) : array(); - $data[$normalizedKey] = $value; - $cntr->offsetSet($ns, $data); - return true; - } - - /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if ($cntr->offsetExists($ns)) { - $data = array_merge($cntr->offsetGet($ns), $normalizedKeyValuePairs); - } else { - $data = $normalizedKeyValuePairs; - } - $cntr->offsetSet($ns, $data); - - return array(); - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if ($cntr->offsetExists($ns)) { - $data = $cntr->offsetGet($ns); - - if (array_key_exists($normalizedKey, $data)) { - return false; - } - - $data[$normalizedKey] = $value; - } else { - $data = array($normalizedKey => $value); - } - - $cntr->offsetSet($ns, $data); - return true; - } - - /** - * Internal method to add multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalAddItems(array & $normalizedKeyValuePairs) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - $result = array(); - if ($cntr->offsetExists($ns)) { - $data = $cntr->offsetGet($ns); - - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - if (array_key_exists($normalizedKey, $data)) { - $result[] = $normalizedKey; - } else { - $data[$normalizedKey] = $value; - } - } - } else { - $data = $normalizedKeyValuePairs; - } - - $cntr->offsetSet($ns, $data); - return $result; - } - - /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItem(& $normalizedKey, & $value) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if (!$cntr->offsetExists($ns)) { - return false; - } - - $data = $cntr->offsetGet($ns); - if (!array_key_exists($normalizedKey, $data)) { - return false; - } - $data[$normalizedKey] = $value; - $cntr->offsetSet($ns, $data); - - return true; - } - - /** - * Internal method to replace multiple existing items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItems(array & $normalizedKeyValuePairs) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - if (!$cntr->offsetExists($ns)) { - return array_keys($normalizedKeyValuePairs); - } - - $data = $cntr->offsetGet($ns); - $result = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - if (!array_key_exists($normalizedKey, $data)) { - $result[] = $normalizedKey; - } else { - $data[$normalizedKey] = $value; - } - } - $cntr->offsetSet($ns, $data); - - return $result; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if (!$cntr->offsetExists($ns)) { - return false; - } - - $data = $cntr->offsetGet($ns); - if (!array_key_exists($normalizedKey, $data)) { - return false; - } - - unset($data[$normalizedKey]); - - if (!$data) { - $cntr->offsetUnset($ns); - } else { - $cntr->offsetSet($ns, $data); - } - - return true; - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if ($cntr->offsetExists($ns)) { - $data = $cntr->offsetGet($ns); - } else { - $data = array(); - } - - if (array_key_exists($normalizedKey, $data)) { - $data[$normalizedKey]+= $value; - $newValue = $data[$normalizedKey]; - } else { - // initial value - $newValue = $value; - $data[$normalizedKey] = $newValue; - } - - $cntr->offsetSet($ns, $data); - return $newValue; - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $cntr = $this->getSessionContainer(); - $ns = $this->getOptions()->getNamespace(); - - if ($cntr->offsetExists($ns)) { - $data = $cntr->offsetGet($ns); - } else { - $data = array(); - } - - if (array_key_exists($normalizedKey, $data)) { - $data[$normalizedKey]-= $value; - $newValue = $data[$normalizedKey]; - } else { - // initial value - $newValue = -$value; - $data[$normalizedKey] = $newValue; - } - - $cntr->offsetSet($ns, $data); - return $newValue; - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $this->capabilityMarker = new stdClass(); - $this->capabilities = new Capabilities( - $this, - $this->capabilityMarker, - array( - 'supportedDatatypes' => array( - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => 'array', - 'object' => 'object', - 'resource' => false, - ), - 'supportedMetadata' => array(), - 'minTtl' => 0, - 'maxKeyLength' => 0, - 'namespaceIsPrefix' => false, - 'namespaceSeparator' => '', - ) - ); - } - - return $this->capabilities; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/SessionOptions.php b/library/Zend/Cache/Storage/Adapter/SessionOptions.php deleted file mode 100755 index 8e4c6d5c9..000000000 --- a/library/Zend/Cache/Storage/Adapter/SessionOptions.php +++ /dev/null @@ -1,51 +0,0 @@ -sessionContainer != $sessionContainer) { - $this->triggerOptionEvent('session_container', $sessionContainer); - $this->sessionContainer = $sessionContainer; - } - - return $this; - } - - /** - * Get the session container - * - * @return null|SessionContainer - */ - public function getSessionContainer() - { - return $this->sessionContainer; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/WinCache.php b/library/Zend/Cache/Storage/Adapter/WinCache.php deleted file mode 100755 index b911e0400..000000000 --- a/library/Zend/Cache/Storage/Adapter/WinCache.php +++ /dev/null @@ -1,533 +0,0 @@ -options) { - $this->setOptions(new WinCacheOptions()); - } - return $this->options; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - $mem = wincache_ucache_meminfo(); - return $mem['memory_total']; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - $mem = wincache_ucache_meminfo(); - return $mem['memory_free']; - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - return wincache_ucache_clear(); - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $result = wincache_ucache_get($internalKey, $success); - - if ($success) { - $casToken = $result; - } else { - $result = null; - } - - return $result; - } - - /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface - */ - protected function internalGetItems(array & $normalizedKeys) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - return wincache_ucache_get($normalizedKeys); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $fetch = wincache_ucache_get($internalKeys); - - // remove namespace prefix - $prefixL = strlen($prefix); - $result = array(); - foreach ($fetch as $internalKey => & $value) { - $result[substr($internalKey, $prefixL)] = & $value; - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - return wincache_ucache_exists($prefix . $normalizedKey); - } - - /** - * Get metadata of an item. - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadata(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - $info = wincache_ucache_info(true, $internalKey); - if (isset($info['ucache_entries'][1])) { - $metadata = $info['ucache_entries'][1]; - $this->normalizeMetadata($metadata); - return $metadata; - } - - return false; - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $ttl = $options->getTtl(); - - if (!wincache_ucache_set($internalKey, $value, $ttl)) { - $type = is_object($value) ? get_class($value) : gettype($value); - throw new Exception\RuntimeException( - "wincache_ucache_set('{$internalKey}', <{$type}>, {$ttl}) failed" - ); - } - - return true; - } - - /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalSetItems(array & $normalizedKeyValuePairs) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - return wincache_ucache_set($normalizedKeyValuePairs, null, $options->getTtl()); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeyValuePairs = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => & $value) { - $internalKey = $prefix . $normalizedKey; - $internalKeyValuePairs[$internalKey] = & $value; - } - - $result = wincache_ucache_set($internalKeyValuePairs, null, $options->getTtl()); - - // remove key prefic - $prefixL = strlen($prefix); - foreach ($result as & $key) { - $key = substr($key, $prefixL); - } - - return $result; - } - - /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalAddItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $ttl = $options->getTtl(); - - if (!wincache_ucache_add($internalKey, $value, $ttl)) { - $type = is_object($value) ? get_class($value) : gettype($value); - throw new Exception\RuntimeException( - "wincache_ucache_add('{$internalKey}', <{$type}>, {$ttl}) failed" - ); - } - - return true; - } - - /** - * Internal method to add multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface - */ - protected function internalAddItems(array & $normalizedKeyValuePairs) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - return wincache_ucache_add($normalizedKeyValuePairs, null, $options->getTtl()); - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeyValuePairs = array(); - foreach ($normalizedKeyValuePairs as $normalizedKey => $value) { - $internalKey = $prefix . $normalizedKey; - $internalKeyValuePairs[$internalKey] = $value; - } - - $result = wincache_ucache_add($internalKeyValuePairs, null, $options->getTtl()); - - // remove key prefic - $prefixL = strlen($prefix); - foreach ($result as & $key) { - $key = substr($key, $prefixL); - } - - return $result; - } - - /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalReplaceItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - if (!wincache_ucache_exists($internalKey)) { - return false; - } - - $ttl = $options->getTtl(); - if (!wincache_ucache_set($internalKey, $value, $ttl)) { - $type = is_object($value) ? get_class($value) : gettype($value); - throw new Exception\RuntimeException( - "wincache_ucache_set('{$internalKey}', <{$type}>, {$ttl}) failed" - ); - } - - return true; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - return wincache_ucache_delete($internalKey); - } - - /** - * Internal method to remove multiple items. - * - * @param array $normalizedKeys - * @return array Array of not removed keys - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItems(array & $normalizedKeys) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - if ($namespace === '') { - $result = wincache_ucache_delete($normalizedKeys); - return ($result === false) ? $normalizedKeys : $result; - } - - $prefix = $namespace . $options->getNamespaceSeparator(); - $internalKeys = array(); - foreach ($normalizedKeys as $normalizedKey) { - $internalKeys[] = $prefix . $normalizedKey; - } - - $result = wincache_ucache_delete($internalKeys); - if ($result === false) { - return $normalizedKeys; - } elseif ($result) { - // remove key prefix - $prefixL = strlen($prefix); - foreach ($result as & $key) { - $key = substr($key, $prefixL); - } - } - - return $result; - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - return wincache_ucache_inc($internalKey, (int) $value); - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - return wincache_ucache_dec($internalKey, (int) $value); - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $marker = new stdClass(); - $capabilities = new Capabilities( - $this, - $marker, - array( - 'supportedDatatypes' => array( - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ), - 'supportedMetadata' => array( - 'internal_key', 'ttl', 'hits', 'size' - ), - 'minTtl' => 1, - 'maxTtl' => 0, - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => false, - 'expiredRead' => false, - 'namespaceIsPrefix' => true, - 'namespaceSeparator' => $this->getOptions()->getNamespaceSeparator(), - ) - ); - - // update namespace separator on change option - $this->getEventManager()->attach('option', function ($event) use ($capabilities, $marker) { - $params = $event->getParams(); - - if (isset($params['namespace_separator'])) { - $capabilities->setNamespaceSeparator($marker, $params['namespace_separator']); - } - }); - - $this->capabilities = $capabilities; - $this->capabilityMarker = $marker; - } - - return $this->capabilities; - } - - /* internal */ - - /** - * Normalize metadata to work with WinCache - * - * @param array $metadata - * @return void - */ - protected function normalizeMetadata(array & $metadata) - { - $metadata['internal_key'] = $metadata['key_name']; - $metadata['hits'] = $metadata['hitcount']; - $metadata['ttl'] = $metadata['ttl_seconds']; - $metadata['size'] = $metadata['value_size']; - - unset( - $metadata['key_name'], - $metadata['hitcount'], - $metadata['ttl_seconds'], - $metadata['value_size'] - ); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/WinCacheOptions.php b/library/Zend/Cache/Storage/Adapter/WinCacheOptions.php deleted file mode 100755 index 8c9789ae7..000000000 --- a/library/Zend/Cache/Storage/Adapter/WinCacheOptions.php +++ /dev/null @@ -1,47 +0,0 @@ -triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/XCache.php b/library/Zend/Cache/Storage/Adapter/XCache.php deleted file mode 100755 index 18073e9fe..000000000 --- a/library/Zend/Cache/Storage/Adapter/XCache.php +++ /dev/null @@ -1,524 +0,0 @@ -options) { - $this->setOptions(new XCacheOptions()); - } - return $this->options; - } - - /* TotalSpaceCapableInterface */ - - /** - * Get total space in bytes - * - * @return int|float - */ - public function getTotalSpace() - { - if ($this->totalSpace === null) { - $this->totalSpace = 0; - - $this->initAdminAuth(); - $cnt = xcache_count(XC_TYPE_VAR); - for ($i=0; $i < $cnt; $i++) { - $info = xcache_info(XC_TYPE_VAR, $i); - $this->totalSpace+= $info['size']; - } - $this->resetAdminAuth(); - } - - return $this->totalSpace; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @return int|float - */ - public function getAvailableSpace() - { - $availableSpace = 0; - - $this->initAdminAuth(); - $cnt = xcache_count(XC_TYPE_VAR); - for ($i = 0; $i < $cnt; $i++) { - $info = xcache_info(XC_TYPE_VAR, $i); - $availableSpace+= $info['avail']; - } - $this->resetAdminAuth(); - - return $availableSpace; - } - - /* ClearByNamespaceInterface */ - - /** - * Remove items by given namespace - * - * @param string $namespace - * @return bool - */ - public function clearByNamespace($namespace) - { - $namespace = (string) $namespace; - if ($namespace === '') { - throw new Exception\InvalidArgumentException('No namespace given'); - } - - $options = $this->getOptions(); - $prefix = $namespace . $options->getNamespaceSeparator(); - - xcache_unset_by_prefix($prefix); - return true; - } - - /* ClearByPrefixInterface */ - - /** - * Remove items matching given prefix - * - * @param string $prefix - * @return bool - */ - public function clearByPrefix($prefix) - { - $prefix = (string) $prefix; - if ($prefix === '') { - throw new Exception\InvalidArgumentException('No prefix given'); - } - - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator() . $prefix; - - xcache_unset_by_prefix($prefix); - return true; - } - - /* FlushableInterface */ - - /** - * Flush the whole storage - * - * @return bool - */ - public function flush() - { - $this->initAdminAuth(); - $cnt = xcache_count(XC_TYPE_VAR); - for ($i = 0; $i < $cnt; $i++) { - xcache_clear_cache(XC_TYPE_VAR, $i); - } - $this->resetAdminAuth(); - - return true; - } - - /* IterableInterface */ - - /** - * Get the storage iterator - * - * @return KeyListIterator - */ - public function getIterator() - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $keys = array(); - - $this->initAdminAuth(); - - if ($namespace === '') { - $cnt = xcache_count(XC_TYPE_VAR); - for ($i=0; $i < $cnt; $i++) { - $list = xcache_list(XC_TYPE_VAR, $i); - foreach ($list['cache_list'] as & $item) { - $keys[] = $item['name']; - } - } - } else { - $prefix = $namespace . $options->getNamespaceSeparator(); - $prefixL = strlen($prefix); - - $cnt = xcache_count(XC_TYPE_VAR); - for ($i=0; $i < $cnt; $i++) { - $list = xcache_list(XC_TYPE_VAR, $i); - foreach ($list['cache_list'] as & $item) { - $keys[] = substr($item['name'], $prefixL); - } - } - } - - $this->resetAdminAuth(); - - return new KeyListIterator($this, $keys); - } - - /* reading */ - - /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - $result = xcache_get($internalKey); - $success = ($result !== null); - - if ($success) { - $casToken = $result; - } - - return $result; - } - - /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalHasItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - return xcache_isset($prefix . $normalizedKey); - } - - /** - * Get metadata of an item. - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalGetMetadata(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - if (xcache_isset($internalKey)) { - $this->initAdminAuth(); - $cnt = xcache_count(XC_TYPE_VAR); - for ($i=0; $i < $cnt; $i++) { - $list = xcache_list(XC_TYPE_VAR, $i); - foreach ($list['cache_list'] as & $metadata) { - if ($metadata['name'] === $internalKey) { - $this->normalizeMetadata($metadata); - return $metadata; - } - } - } - $this->resetAdminAuth(); - } - - return false; - } - - /* writing */ - - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalSetItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($options === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $ttl = $options->getTtl(); - - if (!xcache_set($internalKey, $value, $ttl)) { - $type = is_object($value) ? get_class($value) : gettype($value); - throw new Exception\RuntimeException( - "xcache_set('{$internalKey}', <{$type}>, {$ttl}) failed" - ); - } - - return true; - } - - /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface - */ - protected function internalRemoveItem(& $normalizedKey) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - - return xcache_unset($internalKey); - } - - /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalIncrementItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $ttl = $options->getTtl(); - $value = (int) $value; - - return xcache_inc($internalKey, $value, $ttl); - } - - /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface - */ - protected function internalDecrementItem(& $normalizedKey, & $value) - { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $ttl = $options->getTtl(); - $value = (int) $value; - - return xcache_dec($internalKey, $value, $ttl); - } - - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $marker = new stdClass(); - $capabilities = new Capabilities( - $this, - $marker, - array( - 'supportedDatatypes' => array( - 'NULL' => false, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ), - 'supportedMetadata' => array( - 'internal_key', - 'size', 'refcount', 'hits', - 'ctime', 'atime', 'hvalue', - ), - 'minTtl' => 1, - 'maxTtl' => (int)ini_get('xcache.var_maxttl'), - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => true, - 'expiredRead' => false, - 'maxKeyLength' => 5182, - 'namespaceIsPrefix' => true, - 'namespaceSeparator' => $this->getOptions()->getNamespaceSeparator(), - ) - ); - - // update namespace separator on change option - $this->getEventManager()->attach('option', function ($event) use ($capabilities, $marker) { - $params = $event->getParams(); - - if (isset($params['namespace_separator'])) { - $capabilities->setNamespaceSeparator($marker, $params['namespace_separator']); - } - }); - - $this->capabilities = $capabilities; - $this->capabilityMarker = $marker; - } - - return $this->capabilities; - } - - /* internal */ - - /** - * Init authentication before calling admin functions - * - * @return void - */ - protected function initAdminAuth() - { - $options = $this->getOptions(); - - if ($options->getAdminAuth()) { - $adminUser = $options->getAdminUser(); - $adminPass = $options->getAdminPass(); - - // backup HTTP authentication properties - if (isset($_SERVER['PHP_AUTH_USER'])) { - $this->backupAuth['PHP_AUTH_USER'] = $_SERVER['PHP_AUTH_USER']; - } - if (isset($_SERVER['PHP_AUTH_PW'])) { - $this->backupAuth['PHP_AUTH_PW'] = $_SERVER['PHP_AUTH_PW']; - } - - // set authentication - $_SERVER['PHP_AUTH_USER'] = $adminUser; - $_SERVER['PHP_AUTH_PW'] = $adminPass; - } - } - - /** - * Reset authentication after calling admin functions - * - * @return void - */ - protected function resetAdminAuth() - { - unset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); - $_SERVER = $this->backupAuth + $_SERVER; - $this->backupAuth = array(); - } - - /** - * Normalize metadata to work with XCache - * - * @param array $metadata - */ - protected function normalizeMetadata(array & $metadata) - { - $metadata['internal_key'] = &$metadata['name']; - unset($metadata['name']); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/XCacheOptions.php b/library/Zend/Cache/Storage/Adapter/XCacheOptions.php deleted file mode 100755 index 4c97136b7..000000000 --- a/library/Zend/Cache/Storage/Adapter/XCacheOptions.php +++ /dev/null @@ -1,146 +0,0 @@ -triggerOptionEvent('namespace_separator', $namespaceSeparator); - $this->namespaceSeparator = $namespaceSeparator; - return $this; - } - - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } - - /** - * Set username to call admin functions - * - * @param null|string $adminUser - * @return XCacheOptions - */ - public function setAdminUser($adminUser) - { - $adminUser = ($adminUser === null) ? null : (string) $adminUser; - if ($this->adminUser !== $adminUser) { - $this->triggerOptionEvent('admin_user', $adminUser); - $this->adminUser = $adminUser; - } - return $this; - } - - /** - * Get username to call admin functions - * - * @return string - */ - public function getAdminUser() - { - return $this->adminUser; - } - - /** - * Enable/Disable admin authentication handling - * - * @param bool $adminAuth - * @return XCacheOptions - */ - public function setAdminAuth($adminAuth) - { - $adminAuth = (bool) $adminAuth; - if ($this->adminAuth !== $adminAuth) { - $this->triggerOptionEvent('admin_auth', $adminAuth); - $this->adminAuth = $adminAuth; - } - return $this; - } - - /** - * Get admin authentication enabled - * - * @return bool - */ - public function getAdminAuth() - { - return $this->adminAuth; - } - - /** - * Set password to call admin functions - * - * @param null|string $adminPass - * @return XCacheOptions - */ - public function setAdminPass($adminPass) - { - $adminPass = ($adminPass === null) ? null : (string) $adminPass; - if ($this->adminPass !== $adminPass) { - $this->triggerOptionEvent('admin_pass', $adminPass); - $this->adminPass = $adminPass; - } - return $this; - } - - /** - * Get password to call admin functions - * - * @return string - */ - public function getAdminPass() - { - return $this->adminPass; - } -} diff --git a/library/Zend/Cache/Storage/Adapter/ZendServerDisk.php b/library/Zend/Cache/Storage/Adapter/ZendServerDisk.php deleted file mode 100755 index c48992a59..000000000 --- a/library/Zend/Cache/Storage/Adapter/ZendServerDisk.php +++ /dev/null @@ -1,186 +0,0 @@ -totalSpace === null) { - $path = ini_get('zend_datacache.disk.save_path'); - - ErrorHandler::start(); - $total = disk_total_space($path); - $error = ErrorHandler::stop(); - if ($total === false) { - throw new Exception\RuntimeException("Can't detect total space of '{$path}'", 0, $error); - } - - $this->totalSpace = $total; - } - return $this->totalSpace; - } - - /* AvailableSpaceCapableInterface */ - - /** - * Get available space in bytes - * - * @throws Exception\RuntimeException - * @return int|float - */ - public function getAvailableSpace() - { - $path = ini_get('zend_datacache.disk.save_path'); - - ErrorHandler::start(); - $avail = disk_free_space($path); - $error = ErrorHandler::stop(); - if ($avail === false) { - throw new Exception\RuntimeException("Can't detect free space of '{$path}'", 0, $error); - } - - return $avail; - } - - /* internal */ - - /** - * Store data into Zend Data Disk Cache - * - * @param string $internalKey - * @param mixed $value - * @param int $ttl - * @return void - * @throws Exception\RuntimeException - */ - protected function zdcStore($internalKey, $value, $ttl) - { - if (!zend_disk_cache_store($internalKey, $value, $ttl)) { - $valueType = gettype($value); - throw new Exception\RuntimeException( - "zend_disk_cache_store($internalKey, <{$valueType}>, {$ttl}) failed" - ); - } - } - - /** - * Fetch a single item from Zend Data Disk Cache - * - * @param string $internalKey - * @return mixed The stored value or NULL if item wasn't found - * @throws Exception\RuntimeException - */ - protected function zdcFetch($internalKey) - { - return zend_disk_cache_fetch((string) $internalKey); - } - - /** - * Fetch multiple items from Zend Data Disk Cache - * - * @param array $internalKeys - * @return array All found items - * @throws Exception\RuntimeException - */ - protected function zdcFetchMulti(array $internalKeys) - { - $items = zend_disk_cache_fetch($internalKeys); - if ($items === false) { - throw new Exception\RuntimeException("zend_disk_cache_fetch() failed"); - } - return $items; - } - - /** - * Delete data from Zend Data Disk Cache - * - * @param string $internalKey - * @return bool - * @throws Exception\RuntimeException - */ - protected function zdcDelete($internalKey) - { - return zend_disk_cache_delete($internalKey); - } -} diff --git a/library/Zend/Cache/Storage/Adapter/ZendServerShm.php b/library/Zend/Cache/Storage/Adapter/ZendServerShm.php deleted file mode 100755 index 6b226d7c0..000000000 --- a/library/Zend/Cache/Storage/Adapter/ZendServerShm.php +++ /dev/null @@ -1,141 +0,0 @@ -, {$ttl}) failed" - ); - } - } - - /** - * Fetch a single item from Zend Data SHM Cache - * - * @param string $internalKey - * @return mixed The stored value or NULL if item wasn't found - * @throws Exception\RuntimeException - */ - protected function zdcFetch($internalKey) - { - return zend_shm_cache_fetch((string) $internalKey); - } - - /** - * Fetch multiple items from Zend Data SHM Cache - * - * @param array $internalKeys - * @return array All found items - * @throws Exception\RuntimeException - */ - protected function zdcFetchMulti(array $internalKeys) - { - $items = zend_shm_cache_fetch($internalKeys); - if ($items === false) { - throw new Exception\RuntimeException("zend_shm_cache_fetch() failed"); - } - return $items; - } - - /** - * Delete data from Zend Data SHM Cache - * - * @param string $internalKey - * @return bool - * @throws Exception\RuntimeException - */ - protected function zdcDelete($internalKey) - { - return zend_shm_cache_delete($internalKey); - } -} diff --git a/library/Zend/Cache/Storage/AdapterPluginManager.php b/library/Zend/Cache/Storage/AdapterPluginManager.php deleted file mode 100755 index 665b36c81..000000000 --- a/library/Zend/Cache/Storage/AdapterPluginManager.php +++ /dev/null @@ -1,74 +0,0 @@ - 'Zend\Cache\Storage\Adapter\Apc', - 'blackhole' => 'Zend\Cache\Storage\Adapter\BlackHole', - 'dba' => 'Zend\Cache\Storage\Adapter\Dba', - 'filesystem' => 'Zend\Cache\Storage\Adapter\Filesystem', - 'memcache' => 'Zend\Cache\Storage\Adapter\Memcache', - 'memcached' => 'Zend\Cache\Storage\Adapter\Memcached', - 'memory' => 'Zend\Cache\Storage\Adapter\Memory', - 'redis' => 'Zend\Cache\Storage\Adapter\Redis', - 'session' => 'Zend\Cache\Storage\Adapter\Session', - 'xcache' => 'Zend\Cache\Storage\Adapter\XCache', - 'wincache' => 'Zend\Cache\Storage\Adapter\WinCache', - 'zendserverdisk' => 'Zend\Cache\Storage\Adapter\ZendServerDisk', - 'zendservershm' => 'Zend\Cache\Storage\Adapter\ZendServerShm', - ); - - /** - * Do not share by default - * - * @var array - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the adapter loaded is an instance of StorageInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\RuntimeException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof StorageInterface) { - // we're okay - return; - } - - throw new Exception\RuntimeException(sprintf( - 'Plugin of type %s is invalid; must implement %s\StorageInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Cache/Storage/AvailableSpaceCapableInterface.php b/library/Zend/Cache/Storage/AvailableSpaceCapableInterface.php deleted file mode 100755 index 5088fe255..000000000 --- a/library/Zend/Cache/Storage/AvailableSpaceCapableInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -storage = $storage; - $this->marker = $marker; - $this->baseCapabilities = $baseCapabilities; - - foreach ($capabilities as $name => $value) { - $this->setCapability($marker, $name, $value); - } - } - - /** - * Get the storage adapter - * - * @return StorageInterface - */ - public function getAdapter() - { - return $this->storage; - } - - /** - * Get supported datatypes - * - * @return array - */ - public function getSupportedDatatypes() - { - return $this->getCapability('supportedDatatypes', array( - 'NULL' => false, - 'boolean' => false, - 'integer' => false, - 'double' => false, - 'string' => true, - 'array' => false, - 'object' => false, - 'resource' => false, - )); - } - - /** - * Set supported datatypes - * - * @param stdClass $marker - * @param array $datatypes - * @throws Exception\InvalidArgumentException - * @return Capabilities Fluent interface - */ - public function setSupportedDatatypes(stdClass $marker, array $datatypes) - { - $allTypes = array( - 'array', - 'boolean', - 'double', - 'integer', - 'NULL', - 'object', - 'resource', - 'string', - ); - - // check/normalize datatype values - foreach ($datatypes as $type => &$toType) { - if (!in_array($type, $allTypes)) { - throw new Exception\InvalidArgumentException("Unknown datatype '{$type}'"); - } - - if (is_string($toType)) { - $toType = strtolower($toType); - if (!in_array($toType, $allTypes)) { - throw new Exception\InvalidArgumentException("Unknown datatype '{$toType}'"); - } - } else { - $toType = (bool) $toType; - } - } - - // add missing datatypes as not supported - $missingTypes = array_diff($allTypes, array_keys($datatypes)); - foreach ($missingTypes as $type) { - $datatypes[$type] = false; - } - - return $this->setCapability($marker, 'supportedDatatypes', $datatypes); - } - - /** - * Get supported metadata - * - * @return array - */ - public function getSupportedMetadata() - { - return $this->getCapability('supportedMetadata', array()); - } - - /** - * Set supported metadata - * - * @param stdClass $marker - * @param string[] $metadata - * @throws Exception\InvalidArgumentException - * @return Capabilities Fluent interface - */ - public function setSupportedMetadata(stdClass $marker, array $metadata) - { - foreach ($metadata as $name) { - if (!is_string($name)) { - throw new Exception\InvalidArgumentException('$metadata must be an array of strings'); - } - } - return $this->setCapability($marker, 'supportedMetadata', $metadata); - } - - /** - * Get minimum supported time-to-live - * - * @return int 0 means items never expire - */ - public function getMinTtl() - { - return $this->getCapability('minTtl', 0); - } - - /** - * Set minimum supported time-to-live - * - * @param stdClass $marker - * @param int $minTtl - * @throws Exception\InvalidArgumentException - * @return Capabilities Fluent interface - */ - public function setMinTtl(stdClass $marker, $minTtl) - { - $minTtl = (int) $minTtl; - if ($minTtl < 0) { - throw new Exception\InvalidArgumentException('$minTtl must be greater or equal 0'); - } - return $this->setCapability($marker, 'minTtl', $minTtl); - } - - /** - * Get maximum supported time-to-live - * - * @return int 0 means infinite - */ - public function getMaxTtl() - { - return $this->getCapability('maxTtl', 0); - } - - /** - * Set maximum supported time-to-live - * - * @param stdClass $marker - * @param int $maxTtl - * @throws Exception\InvalidArgumentException - * @return Capabilities Fluent interface - */ - public function setMaxTtl(stdClass $marker, $maxTtl) - { - $maxTtl = (int) $maxTtl; - if ($maxTtl < 0) { - throw new Exception\InvalidArgumentException('$maxTtl must be greater or equal 0'); - } - return $this->setCapability($marker, 'maxTtl', $maxTtl); - } - - /** - * Is the time-to-live handled static (on write) - * or dynamic (on read) - * - * @return bool - */ - public function getStaticTtl() - { - return $this->getCapability('staticTtl', false); - } - - /** - * Set if the time-to-live handled static (on write) or dynamic (on read) - * - * @param stdClass $marker - * @param bool $flag - * @return Capabilities Fluent interface - */ - public function setStaticTtl(stdClass $marker, $flag) - { - return $this->setCapability($marker, 'staticTtl', (bool) $flag); - } - - /** - * Get time-to-live precision - * - * @return float - */ - public function getTtlPrecision() - { - return $this->getCapability('ttlPrecision', 1); - } - - /** - * Set time-to-live precision - * - * @param stdClass $marker - * @param float $ttlPrecision - * @throws Exception\InvalidArgumentException - * @return Capabilities Fluent interface - */ - public function setTtlPrecision(stdClass $marker, $ttlPrecision) - { - $ttlPrecision = (float) $ttlPrecision; - if ($ttlPrecision <= 0) { - throw new Exception\InvalidArgumentException('$ttlPrecision must be greater than 0'); - } - return $this->setCapability($marker, 'ttlPrecision', $ttlPrecision); - } - - /** - * Get use request time - * - * @return bool - */ - public function getUseRequestTime() - { - return $this->getCapability('useRequestTime', false); - } - - /** - * Set use request time - * - * @param stdClass $marker - * @param bool $flag - * @return Capabilities Fluent interface - */ - public function setUseRequestTime(stdClass $marker, $flag) - { - return $this->setCapability($marker, 'useRequestTime', (bool) $flag); - } - - /** - * Get if expired items are readable - * - * @return bool - */ - public function getExpiredRead() - { - return $this->getCapability('expiredRead', false); - } - - /** - * Set if expired items are readable - * - * @param stdClass $marker - * @param bool $flag - * @return Capabilities Fluent interface - */ - public function setExpiredRead(stdClass $marker, $flag) - { - return $this->setCapability($marker, 'expiredRead', (bool) $flag); - } - - /** - * Get maximum key lenth - * - * @return int -1 means unknown, 0 means infinite - */ - public function getMaxKeyLength() - { - return $this->getCapability('maxKeyLength', -1); - } - - /** - * Set maximum key length - * - * @param stdClass $marker - * @param int $maxKeyLength - * @throws Exception\InvalidArgumentException - * @return Capabilities Fluent interface - */ - public function setMaxKeyLength(stdClass $marker, $maxKeyLength) - { - $maxKeyLength = (int) $maxKeyLength; - if ($maxKeyLength < -1) { - throw new Exception\InvalidArgumentException('$maxKeyLength must be greater or equal than -1'); - } - return $this->setCapability($marker, 'maxKeyLength', $maxKeyLength); - } - - /** - * Get if namespace support is implemented as prefix - * - * @return bool - */ - public function getNamespaceIsPrefix() - { - return $this->getCapability('namespaceIsPrefix', true); - } - - /** - * Set if namespace support is implemented as prefix - * - * @param stdClass $marker - * @param bool $flag - * @return Capabilities Fluent interface - */ - public function setNamespaceIsPrefix(stdClass $marker, $flag) - { - return $this->setCapability($marker, 'namespaceIsPrefix', (bool) $flag); - } - - /** - * Get namespace separator if namespace is implemented as prefix - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->getCapability('namespaceSeparator', ''); - } - - /** - * Set the namespace separator if namespace is implemented as prefix - * - * @param stdClass $marker - * @param string $separator - * @return Capabilities Fluent interface - */ - public function setNamespaceSeparator(stdClass $marker, $separator) - { - return $this->setCapability($marker, 'namespaceSeparator', (string) $separator); - } - - /** - * Get a capability - * - * @param string $property - * @param mixed $default - * @return mixed - */ - protected function getCapability($property, $default = null) - { - if ($this->$property !== null) { - return $this->$property; - } elseif ($this->baseCapabilities) { - $getMethod = 'get' . $property; - return $this->baseCapabilities->$getMethod(); - } - return $default; - } - - /** - * Change a capability - * - * @param stdClass $marker - * @param string $property - * @param mixed $value - * @return Capabilities Fluent interface - * @throws Exception\InvalidArgumentException - */ - protected function setCapability(stdClass $marker, $property, $value) - { - if ($this->marker !== $marker) { - throw new Exception\InvalidArgumentException('Invalid marker'); - } - - if ($this->$property !== $value) { - $this->$property = $value; - - // trigger event - if ($this->storage instanceof EventsCapableInterface) { - $this->storage->getEventManager()->trigger('capability', $this->storage, new ArrayObject(array( - $property => $value - ))); - } - } - - return $this; - } -} diff --git a/library/Zend/Cache/Storage/ClearByNamespaceInterface.php b/library/Zend/Cache/Storage/ClearByNamespaceInterface.php deleted file mode 100755 index 15fb4e756..000000000 --- a/library/Zend/Cache/Storage/ClearByNamespaceInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -setStorage($target); - } - - /** - * Alias of setTarget - * - * @param StorageInterface $storage - * @return Event - * @see Zend\EventManager\Event::setTarget() - */ - public function setStorage(StorageInterface $storage) - { - $this->target = $storage; - return $this; - } - - /** - * Alias of getTarget - * - * @return StorageInterface - */ - public function getStorage() - { - return $this->getTarget(); - } -} diff --git a/library/Zend/Cache/Storage/ExceptionEvent.php b/library/Zend/Cache/Storage/ExceptionEvent.php deleted file mode 100755 index e9ffb4a0c..000000000 --- a/library/Zend/Cache/Storage/ExceptionEvent.php +++ /dev/null @@ -1,91 +0,0 @@ -setException($exception); - } - - /** - * Set the exception to be thrown - * - * @param Exception $exception - * @return ExceptionEvent - */ - public function setException(Exception $exception) - { - $this->exception = $exception; - return $this; - } - - /** - * Get the exception to be thrown - * - * @return Exception - */ - public function getException() - { - return $this->exception; - } - - /** - * Throw the exception or use the result - * - * @param bool $flag - * @return ExceptionEvent - */ - public function setThrowException($flag) - { - $this->throwException = (bool) $flag; - return $this; - } - - /** - * Throw the exception or use the result - * - * @return bool - */ - public function getThrowException() - { - return $this->throwException; - } -} diff --git a/library/Zend/Cache/Storage/FlushableInterface.php b/library/Zend/Cache/Storage/FlushableInterface.php deleted file mode 100755 index 6c72541e6..000000000 --- a/library/Zend/Cache/Storage/FlushableInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -options = $options; - return $this; - } - - /** - * Get all pattern options - * - * @return PluginOptions - */ - public function getOptions() - { - if (null === $this->options) { - $this->setOptions(new PluginOptions()); - } - return $this->options; - } -} diff --git a/library/Zend/Cache/Storage/Plugin/ClearExpiredByFactor.php b/library/Zend/Cache/Storage/Plugin/ClearExpiredByFactor.php deleted file mode 100755 index 0b257be77..000000000 --- a/library/Zend/Cache/Storage/Plugin/ClearExpiredByFactor.php +++ /dev/null @@ -1,49 +0,0 @@ -listeners[] = $events->attach('setItem.post', $callback, $priority); - $this->listeners[] = $events->attach('setItems.post', $callback, $priority); - $this->listeners[] = $events->attach('addItem.post', $callback, $priority); - $this->listeners[] = $events->attach('addItems.post', $callback, $priority); - } - - /** - * Clear expired items by factor after writing new item(s) - * - * @param PostEvent $event - * @return void - */ - public function clearExpiredByFactor(PostEvent $event) - { - $storage = $event->getStorage(); - if (!($storage instanceof ClearExpiredInterface)) { - return; - } - - $factor = $this->getOptions()->getClearingFactor(); - if ($factor && mt_rand(1, $factor) == 1) { - $storage->clearExpired(); - } - } -} diff --git a/library/Zend/Cache/Storage/Plugin/ExceptionHandler.php b/library/Zend/Cache/Storage/Plugin/ExceptionHandler.php deleted file mode 100755 index e6acace0c..000000000 --- a/library/Zend/Cache/Storage/Plugin/ExceptionHandler.php +++ /dev/null @@ -1,79 +0,0 @@ -listeners[] = $events->attach('getItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('getItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('hasItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('hasItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('getMetadata.exception', $callback, $priority); - $this->listeners[] = $events->attach('getMetadatas.exception', $callback, $priority); - - // write - $this->listeners[] = $events->attach('setItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('setItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('addItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('addItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('replaceItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('replaceItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('touchItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('touchItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('removeItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('removeItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('checkAndSetItem.exception', $callback, $priority); - - // increment / decrement item(s) - $this->listeners[] = $events->attach('incrementItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('incrementItems.exception', $callback, $priority); - - $this->listeners[] = $events->attach('decrementItem.exception', $callback, $priority); - $this->listeners[] = $events->attach('decrementItems.exception', $callback, $priority); - - // utility - $this->listeners[] = $events->attach('clearExpired.exception', $callback, $priority); - } - - /** - * On exception - * - * @param ExceptionEvent $event - * @return void - */ - public function onException(ExceptionEvent $event) - { - $options = $this->getOptions(); - $callback = $options->getExceptionCallback(); - if ($callback) { - call_user_func($callback, $event->getException()); - } - - $event->setThrowException($options->getThrowExceptions()); - } -} diff --git a/library/Zend/Cache/Storage/Plugin/IgnoreUserAbort.php b/library/Zend/Cache/Storage/Plugin/IgnoreUserAbort.php deleted file mode 100755 index ddec6354c..000000000 --- a/library/Zend/Cache/Storage/Plugin/IgnoreUserAbort.php +++ /dev/null @@ -1,117 +0,0 @@ -listeners[] = $events->attach('setItem.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('setItem.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('setItem.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('setItems.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('setItems.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('setItems.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('addItem.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('addItem.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('addItem.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('addItems.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('addItems.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('addItems.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('replaceItem.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('replaceItem.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('replaceItem.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('replaceItems.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('replaceItems.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('replaceItems.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('checkAndSetItem.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('checkAndSetItem.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('checkAndSetItem.exception', $cbOnAfter, $priority); - - // increment / decrement item(s) - $this->listeners[] = $events->attach('incrementItem.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('incrementItem.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('incrementItem.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('incrementItems.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('incrementItems.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('incrementItems.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('decrementItem.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('decrementItem.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('decrementItem.exception', $cbOnAfter, $priority); - - $this->listeners[] = $events->attach('decrementItems.pre', $cbOnBefore, $priority); - $this->listeners[] = $events->attach('decrementItems.post', $cbOnAfter, $priority); - $this->listeners[] = $events->attach('decrementItems.exception', $cbOnAfter, $priority); - } - - /** - * Activate ignore_user_abort if not already done - * and save the target who activated it. - * - * @param Event $event - * @return void - */ - public function onBefore(Event $event) - { - if ($this->activatedTarget === null && !ignore_user_abort(true)) { - $this->activatedTarget = $event->getTarget(); - } - } - - /** - * Reset ignore_user_abort if it's activated and if it's the same target - * who activated it. - * - * If exit_on_abort is enabled and the connection has been aborted - * exit the script. - * - * @param Event $event - * @return void - */ - public function onAfter(Event $event) - { - if ($this->activatedTarget === $event->getTarget()) { - // exit if connection aborted - if ($this->getOptions()->getExitOnAbort() && connection_aborted()) { - exit; - } - - // reset ignore_user_abort - ignore_user_abort(false); - - // remove activated target - $this->activatedTarget = null; - } - } -} diff --git a/library/Zend/Cache/Storage/Plugin/OptimizeByFactor.php b/library/Zend/Cache/Storage/Plugin/OptimizeByFactor.php deleted file mode 100755 index 42643df7a..000000000 --- a/library/Zend/Cache/Storage/Plugin/OptimizeByFactor.php +++ /dev/null @@ -1,46 +0,0 @@ -listeners[] = $events->attach('removeItem.post', $callback, $priority); - $this->listeners[] = $events->attach('removeItems.post', $callback, $priority); - } - - /** - * Optimize by factor on a success _RESULT_ - * - * @param PostEvent $event - * @return void - */ - public function optimizeByFactor(PostEvent $event) - { - $storage = $event->getStorage(); - if (!($storage instanceof OptimizableInterface)) { - return; - } - - $factor = $this->getOptions()->getOptimizingFactor(); - if ($factor && mt_rand(1, $factor) == 1) { - $storage->optimize(); - } - } -} diff --git a/library/Zend/Cache/Storage/Plugin/PluginInterface.php b/library/Zend/Cache/Storage/Plugin/PluginInterface.php deleted file mode 100755 index af3d007ca..000000000 --- a/library/Zend/Cache/Storage/Plugin/PluginInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -clearingFactor = $this->normalizeFactor($clearingFactor); - return $this; - } - - /** - * Get automatic clearing factor - * - * Used by: - * - ClearExpiredByFactor - * - * @return int - */ - public function getClearingFactor() - { - return $this->clearingFactor; - } - - /** - * Set callback to call on intercepted exception - * - * Used by: - * - ExceptionHandler - * - * @param callable $exceptionCallback - * @throws Exception\InvalidArgumentException - * @return PluginOptions - */ - public function setExceptionCallback($exceptionCallback) - { - if ($exceptionCallback !== null && !is_callable($exceptionCallback, true)) { - throw new Exception\InvalidArgumentException('Not a valid callback'); - } - $this->exceptionCallback = $exceptionCallback; - return $this; - } - - /** - * Get callback to call on intercepted exception - * - * Used by: - * - ExceptionHandler - * - * @return callable - */ - public function getExceptionCallback() - { - return $this->exceptionCallback; - } - - /** - * Exit if connection aborted and ignore_user_abort is disabled. - * - * @param bool $exitOnAbort - * @return PluginOptions - */ - public function setExitOnAbort($exitOnAbort) - { - $this->exitOnAbort = (bool) $exitOnAbort; - return $this; - } - - /** - * Exit if connection aborted and ignore_user_abort is disabled. - * - * @return bool - */ - public function getExitOnAbort() - { - return $this->exitOnAbort; - } - - /** - * Set automatic optimizing factor - * - * Used by: - * - OptimizeByFactor - * - * @param int $optimizingFactor - * @return PluginOptions - */ - public function setOptimizingFactor($optimizingFactor) - { - $this->optimizingFactor = $this->normalizeFactor($optimizingFactor); - return $this; - } - - /** - * Set automatic optimizing factor - * - * Used by: - * - OptimizeByFactor - * - * @return int - */ - public function getOptimizingFactor() - { - return $this->optimizingFactor; - } - - /** - * Set serializer - * - * Used by: - * - Serializer - * - * @param string|SerializerAdapter $serializer - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setSerializer($serializer) - { - if (!is_string($serializer) && !$serializer instanceof SerializerAdapter) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects either a string serializer name or Zend\Serializer\Adapter\AdapterInterface instance; ' - . 'received "%s"', - __METHOD__, - (is_object($serializer) ? get_class($serializer) : gettype($serializer)) - )); - } - $this->serializer = $serializer; - return $this; - } - - /** - * Get serializer - * - * Used by: - * - Serializer - * - * @return SerializerAdapter - */ - public function getSerializer() - { - if (!$this->serializer instanceof SerializerAdapter) { - // use default serializer - if (!$this->serializer) { - $this->setSerializer(SerializerFactory::getDefaultAdapter()); - // instantiate by class name + serializer_options - } else { - $options = $this->getSerializerOptions(); - $this->setSerializer(SerializerFactory::factory($this->serializer, $options)); - } - } - return $this->serializer; - } - - /** - * Set configuration options for instantiating a serializer adapter - * - * Used by: - * - Serializer - * - * @param mixed $serializerOptions - * @return PluginOptions - */ - public function setSerializerOptions($serializerOptions) - { - $this->serializerOptions = $serializerOptions; - return $this; - } - - /** - * Get configuration options for instantiating a serializer adapter - * - * Used by: - * - Serializer - * - * @return array - */ - public function getSerializerOptions() - { - return $this->serializerOptions; - } - - /** - * Set flag indicating we should re-throw exceptions - * - * Used by: - * - ExceptionHandler - * - * @param bool $throwExceptions - * @return PluginOptions - */ - public function setThrowExceptions($throwExceptions) - { - $this->throwExceptions = (bool) $throwExceptions; - return $this; - } - - /** - * Should we re-throw exceptions? - * - * Used by: - * - ExceptionHandler - * - * @return bool - */ - public function getThrowExceptions() - { - return $this->throwExceptions; - } - - /** - * Normalize a factor - * - * Cast to int and ensure we have a value greater than zero. - * - * @param int $factor - * @return int - * @throws Exception\InvalidArgumentException - */ - protected function normalizeFactor($factor) - { - $factor = (int) $factor; - if ($factor < 0) { - throw new Exception\InvalidArgumentException( - "Invalid factor '{$factor}': must be greater or equal 0" - ); - } - return $factor; - } -} diff --git a/library/Zend/Cache/Storage/Plugin/Serializer.php b/library/Zend/Cache/Storage/Plugin/Serializer.php deleted file mode 100755 index c785e751e..000000000 --- a/library/Zend/Cache/Storage/Plugin/Serializer.php +++ /dev/null @@ -1,259 +0,0 @@ -listeners[] = $events->attach('getItem.post', array($this, 'onReadItemPost'), $postPriority); - $this->listeners[] = $events->attach('getItems.post', array($this, 'onReadItemsPost'), $postPriority); - - // write - $this->listeners[] = $events->attach('setItem.pre', array($this, 'onWriteItemPre'), $prePriority); - $this->listeners[] = $events->attach('setItems.pre', array($this, 'onWriteItemsPre'), $prePriority); - - $this->listeners[] = $events->attach('addItem.pre', array($this, 'onWriteItemPre'), $prePriority); - $this->listeners[] = $events->attach('addItems.pre', array($this, 'onWriteItemsPre'), $prePriority); - - $this->listeners[] = $events->attach('replaceItem.pre', array($this, 'onWriteItemPre'), $prePriority); - $this->listeners[] = $events->attach('replaceItems.pre', array($this, 'onWriteItemsPre'), $prePriority); - - $this->listeners[] = $events->attach('checkAndSetItem.pre', array($this, 'onWriteItemPre'), $prePriority); - - // increment / decrement item(s) - $this->listeners[] = $events->attach('incrementItem.pre', array($this, 'onIncrementItemPre'), $prePriority); - $this->listeners[] = $events->attach('incrementItems.pre', array($this, 'onIncrementItemsPre'), $prePriority); - - $this->listeners[] = $events->attach('decrementItem.pre', array($this, 'onDecrementItemPre'), $prePriority); - $this->listeners[] = $events->attach('decrementItems.pre', array($this, 'onDecrementItemsPre'), $prePriority); - - // overwrite capabilities - $this->listeners[] = $events->attach('getCapabilities.post', array($this, 'onGetCapabilitiesPost'), $postPriority); - } - - /** - * On read item post - * - * @param PostEvent $event - * @return void - */ - public function onReadItemPost(PostEvent $event) - { - $serializer = $this->getOptions()->getSerializer(); - $result = $event->getResult(); - $result = $serializer->unserialize($result); - $event->setResult($result); - } - - /** - * On read items post - * - * @param PostEvent $event - * @return void - */ - public function onReadItemsPost(PostEvent $event) - { - $serializer = $this->getOptions()->getSerializer(); - $result = $event->getResult(); - foreach ($result as &$value) { - $value = $serializer->unserialize($value); - } - $event->setResult($result); - } - - /** - * On write item pre - * - * @param Event $event - * @return void - */ - public function onWriteItemPre(Event $event) - { - $serializer = $this->getOptions()->getSerializer(); - $params = $event->getParams(); - $params['value'] = $serializer->serialize($params['value']); - } - - /** - * On write items pre - * - * @param Event $event - * @return void - */ - public function onWriteItemsPre(Event $event) - { - $serializer = $this->getOptions()->getSerializer(); - $params = $event->getParams(); - foreach ($params['keyValuePairs'] as &$value) { - $value = $serializer->serialize($value); - } - } - - /** - * On increment item pre - * - * @param Event $event - * @return mixed - */ - public function onIncrementItemPre(Event $event) - { - $storage = $event->getTarget(); - $params = $event->getParams(); - $casToken = null; - $success = null; - $oldValue = $storage->getItem($params['key'], $success, $casToken); - $newValue = $oldValue + $params['value']; - - if ($success) { - $storage->checkAndSetItem($casToken, $params['key'], $oldValue + $params['value']); - $result = $newValue; - } else { - $result = false; - } - - $event->stopPropagation(true); - return $result; - } - - /** - * On increment items pre - * - * @param Event $event - * @return mixed - */ - public function onIncrementItemsPre(Event $event) - { - $storage = $event->getTarget(); - $params = $event->getParams(); - $keyValuePairs = $storage->getItems(array_keys($params['keyValuePairs'])); - foreach ($params['keyValuePairs'] as $key => & $value) { - if (isset($keyValuePairs[$key])) { - $keyValuePairs[$key]+= $value; - } else { - $keyValuePairs[$key] = $value; - } - } - - $failedKeys = $storage->setItems($keyValuePairs); - foreach ($failedKeys as $failedKey) { - unset($keyValuePairs[$failedKey]); - } - - $event->stopPropagation(true); - return $keyValuePairs; - } - - /** - * On decrement item pre - * - * @param Event $event - * @return mixed - */ - public function onDecrementItemPre(Event $event) - { - $storage = $event->getTarget(); - $params = $event->getParams(); - $success = null; - $casToken = null; - $oldValue = $storage->getItem($params['key'], $success, $casToken); - $newValue = $oldValue - $params['value']; - - if ($success) { - $storage->checkAndSetItem($casToken, $params['key'], $oldValue + $params['value']); - $result = $newValue; - } else { - $result = false; - } - - $event->stopPropagation(true); - return $result; - } - - /** - * On decrement items pre - * - * @param Event $event - * @return mixed - */ - public function onDecrementItemsPre(Event $event) - { - $storage = $event->getTarget(); - $params = $event->getParams(); - $keyValuePairs = $storage->getItems(array_keys($params['keyValuePairs'])); - foreach ($params['keyValuePairs'] as $key => &$value) { - if (isset($keyValuePairs[$key])) { - $keyValuePairs[$key]-= $value; - } else { - $keyValuePairs[$key] = -$value; - } - } - - $failedKeys = $storage->setItems($keyValuePairs); - foreach ($failedKeys as $failedKey) { - unset($keyValuePairs[$failedKey]); - } - - $event->stopPropagation(true); - return $keyValuePairs; - } - - /** - * On get capabilities - * - * @param PostEvent $event - * @return void - */ - public function onGetCapabilitiesPost(PostEvent $event) - { - $baseCapabilities = $event->getResult(); - $index = spl_object_hash($baseCapabilities); - - if (!isset($this->capabilities[$index])) { - $this->capabilities[$index] = new Capabilities( - $baseCapabilities->getAdapter(), - new stdClass(), // marker - array('supportedDatatypes' => array( - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - )), - $baseCapabilities - ); - } - - $event->setResult($this->capabilities[$index]); - } -} diff --git a/library/Zend/Cache/Storage/PluginManager.php b/library/Zend/Cache/Storage/PluginManager.php deleted file mode 100755 index a799a37d3..000000000 --- a/library/Zend/Cache/Storage/PluginManager.php +++ /dev/null @@ -1,66 +0,0 @@ - 'Zend\Cache\Storage\Plugin\ClearExpiredByFactor', - 'exceptionhandler' => 'Zend\Cache\Storage\Plugin\ExceptionHandler', - 'ignoreuserabort' => 'Zend\Cache\Storage\Plugin\IgnoreUserAbort', - 'optimizebyfactor' => 'Zend\Cache\Storage\Plugin\OptimizeByFactor', - 'serializer' => 'Zend\Cache\Storage\Plugin\Serializer', - ); - - /** - * Do not share by default - * - * @var array - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the plugin loaded is an instance of Plugin\PluginInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\RuntimeException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Plugin\PluginInterface) { - // we're okay - return; - } - - throw new Exception\RuntimeException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Plugin\PluginInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Cache/Storage/PostEvent.php b/library/Zend/Cache/Storage/PostEvent.php deleted file mode 100755 index 9302b0814..000000000 --- a/library/Zend/Cache/Storage/PostEvent.php +++ /dev/null @@ -1,60 +0,0 @@ -setResult($result); - } - - /** - * Set the result/return value - * - * @param mixed $value - * @return PostEvent - */ - public function setResult(& $value) - { - $this->result = & $value; - return $this; - } - - /** - * Get the result/return value - * - * @return mixed - */ - public function & getResult() - { - return $this->result; - } -} diff --git a/library/Zend/Cache/Storage/StorageInterface.php b/library/Zend/Cache/Storage/StorageInterface.php deleted file mode 100755 index c89ca5bef..000000000 --- a/library/Zend/Cache/Storage/StorageInterface.php +++ /dev/null @@ -1,246 +0,0 @@ - $v) { - $pluginPrio = 1; // default priority - - if (is_string($k)) { - if (!is_array($v)) { - throw new Exception\InvalidArgumentException( - "'plugins.{$k}' needs to be an array" - ); - } - $pluginName = $k; - $pluginOptions = $v; - } elseif (is_array($v)) { - if (!isset($v['name'])) { - throw new Exception\InvalidArgumentException("Invalid plugins[{$k}] or missing plugins[{$k}].name"); - } - $pluginName = (string) $v['name']; - - if (isset($v['options'])) { - $pluginOptions = $v['options']; - } else { - $pluginOptions = array(); - } - - if (isset($v['priority'])) { - $pluginPrio = $v['priority']; - } - } else { - $pluginName = $v; - $pluginOptions = array(); - } - - $plugin = static::pluginFactory($pluginName, $pluginOptions); - $adapter->addPlugin($plugin, $pluginPrio); - } - } - - return $adapter; - } - - /** - * Instantiate a storage adapter - * - * @param string|Storage\StorageInterface $adapterName - * @param array|Traversable|Storage\Adapter\AdapterOptions $options - * @return Storage\StorageInterface - * @throws Exception\RuntimeException - */ - public static function adapterFactory($adapterName, $options = array()) - { - if ($adapterName instanceof Storage\StorageInterface) { - // $adapterName is already an adapter object - $adapter = $adapterName; - } else { - $adapter = static::getAdapterPluginManager()->get($adapterName); - } - - if ($options) { - $adapter->setOptions($options); - } - - return $adapter; - } - - /** - * Get the adapter plugin manager - * - * @return Storage\AdapterPluginManager - */ - public static function getAdapterPluginManager() - { - if (static::$adapters === null) { - static::$adapters = new Storage\AdapterPluginManager(); - } - return static::$adapters; - } - - /** - * Change the adapter plugin manager - * - * @param Storage\AdapterPluginManager $adapters - * @return void - */ - public static function setAdapterPluginManager(Storage\AdapterPluginManager $adapters) - { - static::$adapters = $adapters; - } - - /** - * Resets the internal adapter plugin manager - * - * @return void - */ - public static function resetAdapterPluginManager() - { - static::$adapters = null; - } - - /** - * Instantiate a storage plugin - * - * @param string|Storage\Plugin\PluginInterface $pluginName - * @param array|Traversable|Storage\Plugin\PluginOptions $options - * @return Storage\Plugin\PluginInterface - * @throws Exception\RuntimeException - */ - public static function pluginFactory($pluginName, $options = array()) - { - if ($pluginName instanceof Storage\Plugin\PluginInterface) { - // $pluginName is already a plugin object - $plugin = $pluginName; - } else { - $plugin = static::getPluginManager()->get($pluginName); - } - - if (!$options instanceof Storage\Plugin\PluginOptions) { - $options = new Storage\Plugin\PluginOptions($options); - } - - if ($options) { - $plugin->setOptions($options); - } - - return $plugin; - } - - /** - * Get the plugin manager - * - * @return Storage\PluginManager - */ - public static function getPluginManager() - { - if (static::$plugins === null) { - static::$plugins = new Storage\PluginManager(); - } - return static::$plugins; - } - - /** - * Change the plugin manager - * - * @param Storage\PluginManager $plugins - * @return void - */ - public static function setPluginManager(Storage\PluginManager $plugins) - { - static::$plugins = $plugins; - } - - /** - * Resets the internal plugin manager - * - * @return void - */ - public static function resetPluginManager() - { - static::$plugins = null; - } -} diff --git a/library/Zend/Cache/composer.json b/library/Zend/Cache/composer.json deleted file mode 100755 index 3d20dff9a..000000000 --- a/library/Zend/Cache/composer.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "zendframework/zend-cache", - "description": "provides a generic way to cache any data", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "cache" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Cache\\": "" - } - }, - "target-dir": "Zend/Cache", - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-eventmanager": "self.version" - }, - "require-dev": { - "zendframework/zend-session": "self.version" - }, - "suggest": { - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-session": "Zend\\Session component", - "ext-apc": "APC >= 3.1.6 to use the APC storage adapter", - "ext-dba": "DBA, to use the DBA storage adapter", - "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter", - "ext-wincache": "WinCache, to use the WinCache storage adapter" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Captcha/AbstractAdapter.php b/library/Zend/Captcha/AbstractAdapter.php deleted file mode 100755 index 11784d69e..000000000 --- a/library/Zend/Captcha/AbstractAdapter.php +++ /dev/null @@ -1,135 +0,0 @@ -name; - } - - /** - * Set name - * - * @param string $name - * @return AbstractAdapter - */ - public function setName($name) - { - $this->name = $name; - return $this; - } - - /** - * Set single option for the object - * - * @param string $key - * @param string $value - * @return AbstractAdapter - */ - public function setOption($key, $value) - { - if (in_array(strtolower($key), $this->skipOptions)) { - return $this; - } - - $method = 'set' . ucfirst($key); - if (method_exists($this, $method)) { - // Setter exists; use it - $this->$method($value); - $this->options[$key] = $value; - } elseif (property_exists($this, $key)) { - // Assume it's metadata - $this->$key = $value; - $this->options[$key] = $value; - } - return $this; - } - - /** - * Set object state from options array - * - * @param array|Traversable $options - * @throws Exception\InvalidArgumentException - * @return AbstractAdapter - */ - public function setOptions($options = array()) - { - if (!is_array($options) && !$options instanceof Traversable) { - throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable'); - } - - foreach ($options as $key => $value) { - $this->setOption($key, $value); - } - return $this; - } - - /** - * Retrieve options representing object state - * - * @return array - */ - public function getOptions() - { - return $this->options; - } - - /** - * Get helper name used to render captcha - * - * By default, return empty string, indicating no helper needed. - * - * @return string - */ - public function getHelperName() - { - return ''; - } -} diff --git a/library/Zend/Captcha/AbstractWord.php b/library/Zend/Captcha/AbstractWord.php deleted file mode 100755 index 5ad803661..000000000 --- a/library/Zend/Captcha/AbstractWord.php +++ /dev/null @@ -1,407 +0,0 @@ - 'Empty captcha value', - self::MISSING_ID => 'Captcha ID field is missing', - self::BAD_CAPTCHA => 'Captcha value is wrong', - ); - - /** - * Length of the word to generate - * - * @var int - */ - protected $wordlen = 8; - - /** - * Retrieve session class to utilize - * - * @return string - */ - public function getSessionClass() - { - return $this->sessionClass; - } - - /** - * Set session class for persistence - * - * @param string $sessionClass - * @return AbstractWord - */ - public function setSessionClass($sessionClass) - { - $this->sessionClass = $sessionClass; - return $this; - } - - /** - * Retrieve word length to use when generating captcha - * - * @return int - */ - public function getWordlen() - { - return $this->wordlen; - } - - /** - * Set word length of captcha - * - * @param int $wordlen - * @return AbstractWord - */ - public function setWordlen($wordlen) - { - $this->wordlen = $wordlen; - return $this; - } - - /** - * Retrieve captcha ID - * - * @return string - */ - public function getId() - { - if (null === $this->id) { - $this->setId($this->generateRandomId()); - } - return $this->id; - } - - /** - * Set captcha identifier - * - * @param string $id - * @return AbstractWord - */ - protected function setId($id) - { - $this->id = $id; - return $this; - } - - /** - * Set timeout for session token - * - * @param int $ttl - * @return AbstractWord - */ - public function setTimeout($ttl) - { - $this->timeout = (int) $ttl; - return $this; - } - - /** - * Get session token timeout - * - * @return int - */ - public function getTimeout() - { - return $this->timeout; - } - - /** - * Sets if session should be preserved on generate() - * - * @param bool $keepSession Should session be kept on generate()? - * @return AbstractWord - */ - public function setKeepSession($keepSession) - { - $this->keepSession = $keepSession; - return $this; - } - - /** - * Numbers should be included in the pattern? - * - * @return bool - */ - public function getUseNumbers() - { - return $this->useNumbers; - } - - /** - * Set if numbers should be included in the pattern - * - * @param bool $useNumbers numbers should be included in the pattern? - * @return AbstractWord - */ - public function setUseNumbers($useNumbers) - { - $this->useNumbers = $useNumbers; - return $this; - } - - /** - * Get session object - * - * @throws Exception\InvalidArgumentException - * @return Container - */ - public function getSession() - { - if (!isset($this->session) || (null === $this->session)) { - $id = $this->getId(); - if (!class_exists($this->sessionClass)) { - throw new Exception\InvalidArgumentException("Session class $this->sessionClass not found"); - } - $this->session = new $this->sessionClass('Zend_Form_Captcha_' . $id); - $this->session->setExpirationHops(1, null); - $this->session->setExpirationSeconds($this->getTimeout()); - } - return $this->session; - } - - /** - * Set session namespace object - * - * @param Container $session - * @return AbstractWord - */ - public function setSession(Container $session) - { - $this->session = $session; - if ($session) { - $this->keepSession = true; - } - return $this; - } - - /** - * Get captcha word - * - * @return string - */ - public function getWord() - { - if (empty($this->word)) { - $session = $this->getSession(); - $this->word = $session->word; - } - return $this->word; - } - - /** - * Set captcha word - * - * @param string $word - * @return AbstractWord - */ - protected function setWord($word) - { - $session = $this->getSession(); - $session->word = $word; - $this->word = $word; - return $this; - } - - /** - * Generate new random word - * - * @return string - */ - protected function generateWord() - { - $word = ''; - $wordLen = $this->getWordLen(); - $vowels = $this->useNumbers ? static::$VN : static::$V; - $consonants = $this->useNumbers ? static::$CN : static::$C; - - for ($i=0; $i < $wordLen; $i = $i + 2) { - // generate word with mix of vowels and consonants - $consonant = $consonants[array_rand($consonants)]; - $vowel = $vowels[array_rand($vowels)]; - $word .= $consonant . $vowel; - } - - if (strlen($word) > $wordLen) { - $word = substr($word, 0, $wordLen); - } - - return $word; - } - - /** - * Generate new session ID and new word - * - * @return string session ID - */ - public function generate() - { - if (!$this->keepSession) { - $this->session = null; - } - $id = $this->generateRandomId(); - $this->setId($id); - $word = $this->generateWord(); - $this->setWord($word); - return $id; - } - - /** - * Generate a random identifier - * - * @return string - */ - protected function generateRandomId() - { - return md5(Rand::getBytes(32)); - } - - /** - * Validate the word - * - * @see Zend\Validator\ValidatorInterface::isValid() - * @param mixed $value - * @param mixed $context - * @return bool - */ - public function isValid($value, $context = null) - { - if (!is_array($value)) { - if (!is_array($context)) { - $this->error(self::MISSING_VALUE); - return false; - } - $value = $context; - } - - $name = $this->getName(); - - if (isset($value[$name])) { - $value = $value[$name]; - } - - if (!isset($value['input'])) { - $this->error(self::MISSING_VALUE); - return false; - } - $input = strtolower($value['input']); - $this->setValue($input); - - if (!isset($value['id'])) { - $this->error(self::MISSING_ID); - return false; - } - - $this->id = $value['id']; - if ($input !== $this->getWord()) { - $this->error(self::BAD_CAPTCHA); - return false; - } - - return true; - } - - /** - * Get helper name used to render captcha - * - * @return string - */ - public function getHelperName() - { - return 'captcha/word'; - } -} diff --git a/library/Zend/Captcha/AdapterInterface.php b/library/Zend/Captcha/AdapterInterface.php deleted file mode 100755 index 227daa5c7..000000000 --- a/library/Zend/Captcha/AdapterInterface.php +++ /dev/null @@ -1,49 +0,0 @@ -label = $label; - } - - /** - * Retrieve the label for the CAPTCHA - * @return string - */ - public function getLabel() - { - return $this->label; - } - - /** - * Retrieve optional view helper name to use when rendering this captcha - * - * @return string - */ - public function getHelperName() - { - return 'captcha/dumb'; - } -} diff --git a/library/Zend/Captcha/Exception/DomainException.php b/library/Zend/Captcha/Exception/DomainException.php deleted file mode 100755 index ac900097b..000000000 --- a/library/Zend/Captcha/Exception/DomainException.php +++ /dev/null @@ -1,14 +0,0 @@ - 'Zend\Captcha\Dumb', - 'figlet' => 'Zend\Captcha\Figlet', - 'image' => 'Zend\Captcha\Image', - 'recaptcha' => 'Zend\Captcha\ReCaptcha', - ); - - /** - * Create a captcha adapter instance - * - * @param array|Traversable $options - * @return AdapterInterface - * @throws Exception\InvalidArgumentException for a non-array, non-Traversable $options - * @throws Exception\DomainException if class is missing or invalid - */ - public static function factory($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects an array or Traversable argument; received "%s"', - __METHOD__, - (is_object($options) ? get_class($options) : gettype($options)) - )); - } - - if (!isset($options['class'])) { - throw new Exception\DomainException(sprintf( - '%s expects a "class" attribute in the options; none provided', - __METHOD__ - )); - } - - $class = $options['class']; - if (isset(static::$classMap[strtolower($class)])) { - $class = static::$classMap[strtolower($class)]; - } - if (!class_exists($class)) { - throw new Exception\DomainException(sprintf( - '%s expects the "class" attribute to resolve to an existing class; received "%s"', - __METHOD__, - $class - )); - } - - unset($options['class']); - - if (isset($options['options'])) { - $options = $options['options']; - } - $captcha = new $class($options); - - if (!$captcha instanceof AdapterInterface) { - throw new Exception\DomainException(sprintf( - '%s expects the "class" attribute to resolve to a valid Zend\Captcha\AdapterInterface instance; received "%s"', - __METHOD__, - $class - )); - } - - return $captcha; - } -} diff --git a/library/Zend/Captcha/Figlet.php b/library/Zend/Captcha/Figlet.php deleted file mode 100755 index 002f5f307..000000000 --- a/library/Zend/Captcha/Figlet.php +++ /dev/null @@ -1,69 +0,0 @@ -figlet = new FigletManager($options); - } - - /** - * Retrieve the composed figlet manager - * - * @return FigletManager - */ - public function getFiglet() - { - return $this->figlet; - } - - /** - * Generate new captcha - * - * @return string - */ - public function generate() - { - $this->useNumbers = false; - return parent::generate(); - } - - /** - * Get helper name used to render captcha - * - * @return string - */ - public function getHelperName() - { - return 'captcha/figlet'; - } -} diff --git a/library/Zend/Captcha/Image.php b/library/Zend/Captcha/Image.php deleted file mode 100755 index 7f91b9128..000000000 --- a/library/Zend/Captcha/Image.php +++ /dev/null @@ -1,628 +0,0 @@ -imgAlt; - } - - /** - * @return string - */ - public function getStartImage() - { - return $this->startImage; - } - - /** - * @return int - */ - public function getDotNoiseLevel() - { - return $this->dotNoiseLevel; - } - - /** - * @return int - */ - public function getLineNoiseLevel() - { - return $this->lineNoiseLevel; - } - - /** - * Get captcha expiration - * - * @return int - */ - public function getExpiration() - { - return $this->expiration; - } - - /** - * Get garbage collection frequency - * - * @return int - */ - public function getGcFreq() - { - return $this->gcFreq; - } - - /** - * Get font to use when generating captcha - * - * @return string - */ - public function getFont() - { - return $this->font; - } - - /** - * Get font size - * - * @return int - */ - public function getFontSize() - { - return $this->fsize; - } - - /** - * Get captcha image height - * - * @return int - */ - public function getHeight() - { - return $this->height; - } - - /** - * Get captcha image directory - * - * @return string - */ - public function getImgDir() - { - return $this->imgDir; - } - - /** - * Get captcha image base URL - * - * @return string - */ - public function getImgUrl() - { - return $this->imgUrl; - } - - /** - * Get captcha image file suffix - * - * @return string - */ - public function getSuffix() - { - return $this->suffix; - } - - /** - * Get captcha image width - * - * @return int - */ - public function getWidth() - { - return $this->width; - } - - /** - * @param string $startImage - * @return Image - */ - public function setStartImage($startImage) - { - $this->startImage = $startImage; - return $this; - } - - /** - * @param int $dotNoiseLevel - * @return Image - */ - public function setDotNoiseLevel($dotNoiseLevel) - { - $this->dotNoiseLevel = $dotNoiseLevel; - return $this; - } - - /** - * @param int $lineNoiseLevel - * @return Image - */ - public function setLineNoiseLevel($lineNoiseLevel) - { - $this->lineNoiseLevel = $lineNoiseLevel; - return $this; - } - - /** - * Set captcha expiration - * - * @param int $expiration - * @return Image - */ - public function setExpiration($expiration) - { - $this->expiration = $expiration; - return $this; - } - - /** - * Set garbage collection frequency - * - * @param int $gcFreq - * @return Image - */ - public function setGcFreq($gcFreq) - { - $this->gcFreq = $gcFreq; - return $this; - } - - /** - * Set captcha font - * - * @param string $font - * @return Image - */ - public function setFont($font) - { - $this->font = $font; - return $this; - } - - /** - * Set captcha font size - * - * @param int $fsize - * @return Image - */ - public function setFontSize($fsize) - { - $this->fsize = $fsize; - return $this; - } - - /** - * Set captcha image height - * - * @param int $height - * @return Image - */ - public function setHeight($height) - { - $this->height = $height; - return $this; - } - - /** - * Set captcha image storage directory - * - * @param string $imgDir - * @return Image - */ - public function setImgDir($imgDir) - { - $this->imgDir = rtrim($imgDir, "/\\") . '/'; - return $this; - } - - /** - * Set captcha image base URL - * - * @param string $imgUrl - * @return Image - */ - public function setImgUrl($imgUrl) - { - $this->imgUrl = rtrim($imgUrl, "/\\") . '/'; - return $this; - } - - /** - * @param string $imgAlt - * @return Image - */ - public function setImgAlt($imgAlt) - { - $this->imgAlt = $imgAlt; - return $this; - } - - /** - * Set captcha image filename suffix - * - * @param string $suffix - * @return Image - */ - public function setSuffix($suffix) - { - $this->suffix = $suffix; - return $this; - } - - /** - * Set captcha image width - * - * @param int $width - * @return Image - */ - public function setWidth($width) - { - $this->width = $width; - return $this; - } - - /** - * Generate random frequency - * - * @return float - */ - protected function randomFreq() - { - return mt_rand(700000, 1000000) / 15000000; - } - - /** - * Generate random phase - * - * @return float - */ - protected function randomPhase() - { - // random phase from 0 to pi - return mt_rand(0, 3141592) / 1000000; - } - - /** - * Generate random character size - * - * @return int - */ - protected function randomSize() - { - return mt_rand(300, 700) / 100; - } - - /** - * Generate captcha - * - * @return string captcha ID - */ - public function generate() - { - $id = parent::generate(); - $tries = 5; - - // If there's already such file, try creating a new ID - while ($tries-- && file_exists($this->getImgDir() . $id . $this->getSuffix())) { - $id = $this->generateRandomId(); - $this->setId($id); - } - $this->generateImage($id, $this->getWord()); - - if (mt_rand(1, $this->getGcFreq()) == 1) { - $this->gc(); - } - - return $id; - } - - /** - * Generate image captcha - * - * Override this function if you want different image generator - * Wave transform from http://www.captcha.ru/captchas/multiwave/ - * - * @param string $id Captcha ID - * @param string $word Captcha word - * @throws Exception\NoFontProvidedException if no font was set - * @throws Exception\ImageNotLoadableException if start image cannot be loaded - */ - protected function generateImage($id, $word) - { - $font = $this->getFont(); - - if (empty($font)) { - throw new Exception\NoFontProvidedException('Image CAPTCHA requires font'); - } - - $w = $this->getWidth(); - $h = $this->getHeight(); - $fsize = $this->getFontSize(); - - $imgFile = $this->getImgDir() . $id . $this->getSuffix(); - - if (empty($this->startImage)) { - $img = imagecreatetruecolor($w, $h); - } else { - // Potential error is change to exception - ErrorHandler::start(); - $img = imagecreatefrompng($this->startImage); - $error = ErrorHandler::stop(); - if (!$img || $error) { - throw new Exception\ImageNotLoadableException( - "Can not load start image '{$this->startImage}'", - 0, - $error - ); - } - $w = imagesx($img); - $h = imagesy($img); - } - - $textColor = imagecolorallocate($img, 0, 0, 0); - $bgColor = imagecolorallocate($img, 255, 255, 255); - imagefilledrectangle($img, 0, 0, $w-1, $h-1, $bgColor); - $textbox = imageftbbox($fsize, 0, $font, $word); - $x = ($w - ($textbox[2] - $textbox[0])) / 2; - $y = ($h - ($textbox[7] - $textbox[1])) / 2; - imagefttext($img, $fsize, 0, $x, $y, $textColor, $font, $word); - - // generate noise - for ($i=0; $i < $this->dotNoiseLevel; $i++) { - imagefilledellipse($img, mt_rand(0, $w), mt_rand(0, $h), 2, 2, $textColor); - } - for ($i=0; $i < $this->lineNoiseLevel; $i++) { - imageline($img, mt_rand(0, $w), mt_rand(0, $h), mt_rand(0, $w), mt_rand(0, $h), $textColor); - } - - // transformed image - $img2 = imagecreatetruecolor($w, $h); - $bgColor = imagecolorallocate($img2, 255, 255, 255); - imagefilledrectangle($img2, 0, 0, $w-1, $h-1, $bgColor); - - // apply wave transforms - $freq1 = $this->randomFreq(); - $freq2 = $this->randomFreq(); - $freq3 = $this->randomFreq(); - $freq4 = $this->randomFreq(); - - $ph1 = $this->randomPhase(); - $ph2 = $this->randomPhase(); - $ph3 = $this->randomPhase(); - $ph4 = $this->randomPhase(); - - $szx = $this->randomSize(); - $szy = $this->randomSize(); - - for ($x = 0; $x < $w; $x++) { - for ($y = 0; $y < $h; $y++) { - $sx = $x + (sin($x*$freq1 + $ph1) + sin($y*$freq3 + $ph3)) * $szx; - $sy = $y + (sin($x*$freq2 + $ph2) + sin($y*$freq4 + $ph4)) * $szy; - - if ($sx < 0 || $sy < 0 || $sx >= $w - 1 || $sy >= $h - 1) { - continue; - } else { - $color = (imagecolorat($img, $sx, $sy) >> 16) & 0xFF; - $colorX = (imagecolorat($img, $sx + 1, $sy) >> 16) & 0xFF; - $colorY = (imagecolorat($img, $sx, $sy + 1) >> 16) & 0xFF; - $colorXY = (imagecolorat($img, $sx + 1, $sy + 1) >> 16) & 0xFF; - } - - if ($color == 255 && $colorX == 255 && $colorY == 255 && $colorXY == 255) { - // ignore background - continue; - } elseif ($color == 0 && $colorX == 0 && $colorY == 0 && $colorXY == 0) { - // transfer inside of the image as-is - $newcolor = 0; - } else { - // do antialiasing for border items - $fracX = $sx - floor($sx); - $fracY = $sy - floor($sy); - $fracX1 = 1 - $fracX; - $fracY1 = 1 - $fracY; - - $newcolor = $color * $fracX1 * $fracY1 - + $colorX * $fracX * $fracY1 - + $colorY * $fracX1 * $fracY - + $colorXY * $fracX * $fracY; - } - - imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newcolor, $newcolor, $newcolor)); - } - } - - // generate noise - for ($i=0; $i<$this->dotNoiseLevel; $i++) { - imagefilledellipse($img2, mt_rand(0, $w), mt_rand(0, $h), 2, 2, $textColor); - } - - for ($i=0; $i<$this->lineNoiseLevel; $i++) { - imageline($img2, mt_rand(0, $w), mt_rand(0, $h), mt_rand(0, $w), mt_rand(0, $h), $textColor); - } - - imagepng($img2, $imgFile); - imagedestroy($img); - imagedestroy($img2); - } - - /** - * Remove old files from image directory - * - */ - protected function gc() - { - $expire = time() - $this->getExpiration(); - $imgdir = $this->getImgDir(); - if (!$imgdir || strlen($imgdir) < 2) { - // safety guard - return; - } - - $suffixLength = strlen($this->suffix); - foreach (new DirectoryIterator($imgdir) as $file) { - if (!$file->isDot() && !$file->isDir()) { - if (file_exists($file->getPathname()) && $file->getMTime() < $expire) { - // only deletes files ending with $this->suffix - if (substr($file->getFilename(), -($suffixLength)) == $this->suffix) { - unlink($file->getPathname()); - } - } - } - } - } - - /** - * Get helper name used to render captcha - * - * @return string - */ - public function getHelperName() - { - return 'captcha/image'; - } -} diff --git a/library/Zend/Captcha/README.md b/library/Zend/Captcha/README.md deleted file mode 100755 index 1240158c5..000000000 --- a/library/Zend/Captcha/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Captcha Component from ZF2 -========================== - -This is the Captcha component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Captcha/ReCaptcha.php b/library/Zend/Captcha/ReCaptcha.php deleted file mode 100755 index 7e5c01934..000000000 --- a/library/Zend/Captcha/ReCaptcha.php +++ /dev/null @@ -1,247 +0,0 @@ - 'Missing captcha fields', - self::ERR_CAPTCHA => 'Failed to validate captcha', - self::BAD_CAPTCHA => 'Captcha value is wrong: %value%', - ); - - /** - * Retrieve ReCaptcha Private key - * - * @return string - */ - public function getPrivkey() - { - return $this->getService()->getPrivateKey(); - } - - /** - * Retrieve ReCaptcha Public key - * - * @return string - */ - public function getPubkey() - { - return $this->getService()->getPublicKey(); - } - - /** - * Set ReCaptcha Private key - * - * @param string $privkey - * @return ReCaptcha - */ - public function setPrivkey($privkey) - { - $this->getService()->setPrivateKey($privkey); - return $this; - } - - /** - * Set ReCaptcha public key - * - * @param string $pubkey - * @return ReCaptcha - */ - public function setPubkey($pubkey) - { - $this->getService()->setPublicKey($pubkey); - return $this; - } - - /** - * Constructor - * - * @param null|array|Traversable $options - */ - public function __construct($options = null) - { - $this->setService(new ReCaptchaService()); - $this->serviceParams = $this->getService()->getParams(); - $this->serviceOptions = $this->getService()->getOptions(); - - parent::__construct($options); - - if (!empty($options)) { - if (array_key_exists('private_key', $options)) { - $this->getService()->setPrivateKey($options['private_key']); - } - if (array_key_exists('public_key', $options)) { - $this->getService()->setPublicKey($options['public_key']); - } - $this->setOptions($options); - } - } - - /** - * Set service object - * - * @param ReCaptchaService $service - * @return ReCaptcha - */ - public function setService(ReCaptchaService $service) - { - $this->service = $service; - return $this; - } - - /** - * Retrieve ReCaptcha service object - * - * @return ReCaptchaService - */ - public function getService() - { - return $this->service; - } - - /** - * Set option - * - * If option is a service parameter, proxies to the service. The same - * goes for any service options (distinct from service params) - * - * @param string $key - * @param mixed $value - * @return ReCaptcha - */ - public function setOption($key, $value) - { - $service = $this->getService(); - if (isset($this->serviceParams[$key])) { - $service->setParam($key, $value); - return $this; - } - if (isset($this->serviceOptions[$key])) { - $service->setOption($key, $value); - return $this; - } - return parent::setOption($key, $value); - } - - /** - * Generate captcha - * - * @see AbstractAdapter::generate() - * @return string - */ - public function generate() - { - return ""; - } - - /** - * Validate captcha - * - * @see \Zend\Validator\ValidatorInterface::isValid() - * @param mixed $value - * @param mixed $context - * @return bool - */ - public function isValid($value, $context = null) - { - if (!is_array($value) && !is_array($context)) { - $this->error(self::MISSING_VALUE); - return false; - } - - if (!is_array($value) && is_array($context)) { - $value = $context; - } - - if (empty($value[$this->CHALLENGE]) || empty($value[$this->RESPONSE])) { - $this->error(self::MISSING_VALUE); - return false; - } - - $service = $this->getService(); - - $res = $service->verify($value[$this->CHALLENGE], $value[$this->RESPONSE]); - - if (!$res) { - $this->error(self::ERR_CAPTCHA); - return false; - } - - if (!$res->isValid()) { - $this->error(self::BAD_CAPTCHA, $res->getErrorCode()); - $service->setParam('error', $res->getErrorCode()); - return false; - } - - return true; - } - - /** - * Get helper name used to render captcha - * - * @return string - */ - public function getHelperName() - { - return "captcha/recaptcha"; - } -} diff --git a/library/Zend/Captcha/composer.json b/library/Zend/Captcha/composer.json deleted file mode 100755 index fec1684fe..000000000 --- a/library/Zend/Captcha/composer.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "zendframework/zend-captcha", - "description": " ", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "captcha" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Captcha\\": "" - } - }, - "target-dir": "Zend/Captcha", - "require": { - "php": ">=5.3.23", - "zendframework/zend-math": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-session": "self.version", - "zendframework/zend-text": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zendservice-recaptcha": "*" - }, - "suggest": { - "zendframework/zend-resources": "Translations of captcha messages", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-text": "Zend\\Text component", - "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Code/Annotation/AnnotationCollection.php b/library/Zend/Code/Annotation/AnnotationCollection.php deleted file mode 100755 index 7b9aa51da..000000000 --- a/library/Zend/Code/Annotation/AnnotationCollection.php +++ /dev/null @@ -1,32 +0,0 @@ -setIdentifiers(array( - __CLASS__, - get_class($this), - )); - $this->events = $events; - - return $this; - } - - /** - * Retrieve event manager - * - * Lazy loads an instance if none registered. - * - * @return EventManagerInterface - */ - public function getEventManager() - { - if (null === $this->events) { - $this->setEventManager(new EventManager()); - } - - return $this->events; - } - - /** - * Attach a parser to listen to the createAnnotation event - * - * @param ParserInterface $parser - * @return AnnotationManager - */ - public function attach(ParserInterface $parser) - { - $this->getEventManager() - ->attach(self::EVENT_CREATE_ANNOTATION, array($parser, 'onCreateAnnotation')); - - return $this; - } - - /** - * Create Annotation - * - * @param string[] $annotationData - * @return false|\stdClass - */ - public function createAnnotation(array $annotationData) - { - $event = new Event(); - $event->setName(self::EVENT_CREATE_ANNOTATION); - $event->setTarget($this); - $event->setParams(array( - 'class' => $annotationData[0], - 'content' => $annotationData[1], - 'raw' => $annotationData[2], - )); - - $eventManager = $this->getEventManager(); - $results = $eventManager->trigger($event, function ($r) { - return (is_object($r)); - }); - - $annotation = $results->last(); - - return (is_object($annotation) ? $annotation : false); - } -} diff --git a/library/Zend/Code/Annotation/Parser/DoctrineAnnotationParser.php b/library/Zend/Code/Annotation/Parser/DoctrineAnnotationParser.php deleted file mode 100755 index 5168e3278..000000000 --- a/library/Zend/Code/Annotation/Parser/DoctrineAnnotationParser.php +++ /dev/null @@ -1,153 +0,0 @@ -docParser = $docParser; - return $this; - } - - /** - * Retrieve the DocParser instance - * - * If none is registered, lazy-loads a new instance. - * - * @return DocParser - */ - public function getDocParser() - { - if (!$this->docParser instanceof DocParser) { - $this->setDocParser(new DocParser()); - } - - return $this->docParser; - } - - /** - * Handle annotation creation - * - * @param EventInterface $e - * @return false|\stdClass - */ - public function onCreateAnnotation(EventInterface $e) - { - $annotationClass = $e->getParam('class', false); - if (!$annotationClass) { - return false; - } - - if (!isset($this->allowedAnnotations[$annotationClass])) { - return false; - } - - $annotationString = $e->getParam('raw', false); - if (!$annotationString) { - return false; - } - - // Annotation classes provided by the AnnotationScanner are already - // resolved to fully-qualified class names. Adding the global namespace - // prefix allows the Doctrine annotation parser to locate the annotation - // class correctly. - $annotationString = preg_replace('/^(@)/', '$1\\', $annotationString); - - $parser = $this->getDocParser(); - $annotations = $parser->parse($annotationString); - if (empty($annotations)) { - return false; - } - - $annotation = array_shift($annotations); - if (!is_object($annotation)) { - return false; - } - - return $annotation; - } - - /** - * Specify an allowed annotation class - * - * @param string $annotation - * @return DoctrineAnnotationParser - */ - public function registerAnnotation($annotation) - { - $this->allowedAnnotations[$annotation] = true; - return $this; - } - - /** - * Set many allowed annotations at once - * - * @param array|Traversable $annotations Array or traversable object of - * annotation class names - * @throws Exception\InvalidArgumentException - * @return DoctrineAnnotationParser - */ - public function registerAnnotations($annotations) - { - if (!is_array($annotations) && !$annotations instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects an array or Traversable; received "%s"', - __METHOD__, - (is_object($annotations) ? get_class($annotations) : gettype($annotations)) - )); - } - - foreach ($annotations as $annotation) { - $this->allowedAnnotations[$annotation] = true; - } - - return $this; - } -} diff --git a/library/Zend/Code/Annotation/Parser/GenericAnnotationParser.php b/library/Zend/Code/Annotation/Parser/GenericAnnotationParser.php deleted file mode 100755 index b3f756624..000000000 --- a/library/Zend/Code/Annotation/Parser/GenericAnnotationParser.php +++ /dev/null @@ -1,224 +0,0 @@ -getParam('class', false); - if (!$class || !$this->hasAnnotation($class)) { - return false; - } - - $content = $e->getParam('content', ''); - $content = trim($content, '()'); - - if ($this->hasAlias($class)) { - $class = $this->resolveAlias($class); - } - - $index = array_search($class, $this->annotationNames); - $annotation = $this->annotations[$index]; - - $newAnnotation = clone $annotation; - if ($content) { - $newAnnotation->initialize($content); - } - - return $newAnnotation; - } - - /** - * Register annotations - * - * @param string|AnnotationInterface $annotation String class name of an - * AnnotationInterface implementation, or actual instance - * @return GenericAnnotationParser - * @throws Exception\InvalidArgumentException - */ - public function registerAnnotation($annotation) - { - $class = false; - if (is_string($annotation) && class_exists($annotation)) { - $class = $annotation; - $annotation = new $annotation(); - } - - if (!$annotation instanceof AnnotationInterface) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects an instance of %s\AnnotationInterface; received "%s"', - __METHOD__, - __NAMESPACE__, - (is_object($annotation) ? get_class($annotation) : gettype($annotation)) - )); - } - - $class = $class ?: get_class($annotation); - - if (in_array($class, $this->annotationNames)) { - throw new Exception\InvalidArgumentException(sprintf( - 'An annotation for this class %s already exists', - $class - )); - } - - $this->annotations[] = $annotation; - $this->annotationNames[] = $class; - } - - /** - * Register many annotations at once - * - * @param array|Traversable $annotations - * @throws Exception\InvalidArgumentException - * @return GenericAnnotationParser - */ - public function registerAnnotations($annotations) - { - if (!is_array($annotations) && !$annotations instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects an array or Traversable; received "%s"', - __METHOD__, - (is_object($annotations) ? get_class($annotations) : gettype($annotations)) - )); - } - - foreach ($annotations as $annotation) { - $this->registerAnnotation($annotation); - } - - return $this; - } - - /** - * Checks if the manager has annotations for a class - * - * @param string $class - * @return bool - */ - public function hasAnnotation($class) - { - if (in_array($class, $this->annotationNames)) { - return true; - } - - if ($this->hasAlias($class)) { - return true; - } - - return false; - } - - /** - * Alias an annotation name - * - * @param string $alias - * @param string $class May be either a registered annotation name or another alias - * @throws Exception\InvalidArgumentException - * @return GenericAnnotationParser - */ - public function setAlias($alias, $class) - { - if (!in_array($class, $this->annotationNames) && !$this->hasAlias($class)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: Cannot alias "%s" to "%s", as class "%s" is not currently a registered annotation or alias', - __METHOD__, - $alias, - $class, - $class - )); - } - - $alias = $this->normalizeAlias($alias); - $this->aliases[$alias] = $class; - - return $this; - } - - /** - * Normalize an alias name - * - * @param string $alias - * @return string - */ - protected function normalizeAlias($alias) - { - return strtolower(str_replace(array('-', '_', ' ', '\\', '/'), '', $alias)); - } - - /** - * Do we have an alias by the provided name? - * - * @param string $alias - * @return bool - */ - protected function hasAlias($alias) - { - $alias = $this->normalizeAlias($alias); - - return (isset($this->aliases[$alias])); - } - - /** - * Resolve an alias to a class name - * - * @param string $alias - * @return string - */ - protected function resolveAlias($alias) - { - do { - $normalized = $this->normalizeAlias($alias); - $class = $this->aliases[$normalized]; - } while ($this->hasAlias($class)); - - return $class; - } -} diff --git a/library/Zend/Code/Annotation/Parser/ParserInterface.php b/library/Zend/Code/Annotation/Parser/ParserInterface.php deleted file mode 100755 index bb6746e80..000000000 --- a/library/Zend/Code/Annotation/Parser/ParserInterface.php +++ /dev/null @@ -1,39 +0,0 @@ -setOptions($options); - } - } - - /** - * @param bool $isSourceDirty - * @return AbstractGenerator - */ - public function setSourceDirty($isSourceDirty = true) - { - $this->isSourceDirty = (bool) $isSourceDirty; - return $this; - } - - /** - * @return bool - */ - public function isSourceDirty() - { - return $this->isSourceDirty; - } - - /** - * @param string $indentation - * @return AbstractGenerator - */ - public function setIndentation($indentation) - { - $this->indentation = (string) $indentation; - return $this; - } - - /** - * @return string - */ - public function getIndentation() - { - return $this->indentation; - } - - /** - * @param string $sourceContent - * @return AbstractGenerator - */ - public function setSourceContent($sourceContent) - { - $this->sourceContent = (string) $sourceContent; - return $this; - } - - /** - * @return string - */ - public function getSourceContent() - { - return $this->sourceContent; - } - - /** - * @param array|Traversable $options - * @throws Exception\InvalidArgumentException - * @return AbstractGenerator - */ - public function setOptions($options) - { - if (!is_array($options) && !$options instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects an array or Traversable object; received "%s"', - __METHOD__, - (is_object($options) ? get_class($options) : gettype($options)) - )); - } - - foreach ($options as $optionName => $optionValue) { - $methodName = 'set' . $optionName; - if (method_exists($this, $methodName)) { - $this->{$methodName}($optionValue); - } - } - - return $this; - } -} diff --git a/library/Zend/Code/Generator/AbstractMemberGenerator.php b/library/Zend/Code/Generator/AbstractMemberGenerator.php deleted file mode 100755 index dec0d8dc0..000000000 --- a/library/Zend/Code/Generator/AbstractMemberGenerator.php +++ /dev/null @@ -1,224 +0,0 @@ -flags = $flags; - - return $this; - } - - /** - * @param int $flag - * @return AbstractMemberGenerator - */ - public function addFlag($flag) - { - $this->setFlags($this->flags | $flag); - return $this; - } - - /** - * @param int $flag - * @return AbstractMemberGenerator - */ - public function removeFlag($flag) - { - $this->setFlags($this->flags & ~$flag); - return $this; - } - - /** - * @param bool $isAbstract - * @return AbstractMemberGenerator - */ - public function setAbstract($isAbstract) - { - return (($isAbstract) ? $this->addFlag(self::FLAG_ABSTRACT) : $this->removeFlag(self::FLAG_ABSTRACT)); - } - - /** - * @return bool - */ - public function isAbstract() - { - return (bool) ($this->flags & self::FLAG_ABSTRACT); - } - - /** - * @param bool $isFinal - * @return AbstractMemberGenerator - */ - public function setFinal($isFinal) - { - return (($isFinal) ? $this->addFlag(self::FLAG_FINAL) : $this->removeFlag(self::FLAG_FINAL)); - } - - /** - * @return bool - */ - public function isFinal() - { - return (bool) ($this->flags & self::FLAG_FINAL); - } - - /** - * @param bool $isStatic - * @return AbstractMemberGenerator - */ - public function setStatic($isStatic) - { - return (($isStatic) ? $this->addFlag(self::FLAG_STATIC) : $this->removeFlag(self::FLAG_STATIC)); - } - - /** - * @return bool - */ - public function isStatic() - { - return (bool) ($this->flags & self::FLAG_STATIC); // is FLAG_STATIC in flags - } - - /** - * @param string $visibility - * @return AbstractMemberGenerator - */ - public function setVisibility($visibility) - { - switch ($visibility) { - case self::VISIBILITY_PUBLIC: - $this->removeFlag(self::FLAG_PRIVATE | self::FLAG_PROTECTED); // remove both - $this->addFlag(self::FLAG_PUBLIC); - break; - case self::VISIBILITY_PROTECTED: - $this->removeFlag(self::FLAG_PUBLIC | self::FLAG_PRIVATE); // remove both - $this->addFlag(self::FLAG_PROTECTED); - break; - case self::VISIBILITY_PRIVATE: - $this->removeFlag(self::FLAG_PUBLIC | self::FLAG_PROTECTED); // remove both - $this->addFlag(self::FLAG_PRIVATE); - break; - } - - return $this; - } - - /** - * @return string - */ - public function getVisibility() - { - switch (true) { - case ($this->flags & self::FLAG_PROTECTED): - return self::VISIBILITY_PROTECTED; - case ($this->flags & self::FLAG_PRIVATE): - return self::VISIBILITY_PRIVATE; - default: - return self::VISIBILITY_PUBLIC; - } - } - - /** - * @param string $name - * @return AbstractMemberGenerator - */ - public function setName($name) - { - $this->name = (string) $name; - return $this; - } - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @param DocBlockGenerator|string $docBlock - * @throws Exception\InvalidArgumentException - * @return AbstractMemberGenerator - */ - public function setDocBlock($docBlock) - { - if (is_string($docBlock)) { - $docBlock = new DocBlockGenerator($docBlock); - } elseif (!$docBlock instanceof DocBlockGenerator) { - throw new Exception\InvalidArgumentException(sprintf( - '%s is expecting either a string, array or an instance of %s\DocBlockGenerator', - __METHOD__, - __NAMESPACE__ - )); - } - - $this->docBlock = $docBlock; - - return $this; - } - - /** - * @return DocBlockGenerator - */ - public function getDocBlock() - { - return $this->docBlock; - } -} diff --git a/library/Zend/Code/Generator/BodyGenerator.php b/library/Zend/Code/Generator/BodyGenerator.php deleted file mode 100755 index 4851e5ca4..000000000 --- a/library/Zend/Code/Generator/BodyGenerator.php +++ /dev/null @@ -1,44 +0,0 @@ -content = (string) $content; - return $this; - } - - /** - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * @return string - */ - public function generate() - { - return $this->getContent(); - } -} diff --git a/library/Zend/Code/Generator/ClassGenerator.php b/library/Zend/Code/Generator/ClassGenerator.php deleted file mode 100755 index e84558746..000000000 --- a/library/Zend/Code/Generator/ClassGenerator.php +++ /dev/null @@ -1,747 +0,0 @@ -getName()); - - $cg->setSourceContent($cg->getSourceContent()); - $cg->setSourceDirty(false); - - if ($classReflection->getDocComment() != '') { - $cg->setDocBlock(DocBlockGenerator::fromReflection($classReflection->getDocBlock())); - } - - $cg->setAbstract($classReflection->isAbstract()); - - // set the namespace - if ($classReflection->inNamespace()) { - $cg->setNamespaceName($classReflection->getNamespaceName()); - } - - /* @var \Zend\Code\Reflection\ClassReflection $parentClass */ - $parentClass = $classReflection->getParentClass(); - if ($parentClass) { - $cg->setExtendedClass($parentClass->getName()); - $interfaces = array_diff($classReflection->getInterfaces(), $parentClass->getInterfaces()); - } else { - $interfaces = $classReflection->getInterfaces(); - } - - $interfaceNames = array(); - foreach ($interfaces as $interface) { - /* @var \Zend\Code\Reflection\ClassReflection $interface */ - $interfaceNames[] = $interface->getName(); - } - - $cg->setImplementedInterfaces($interfaceNames); - - $properties = array(); - foreach ($classReflection->getProperties() as $reflectionProperty) { - if ($reflectionProperty->getDeclaringClass()->getName() == $classReflection->getName()) { - $properties[] = PropertyGenerator::fromReflection($reflectionProperty); - } - } - $cg->addProperties($properties); - - $methods = array(); - foreach ($classReflection->getMethods() as $reflectionMethod) { - $className = ($cg->getNamespaceName())? $cg->getNamespaceName() . "\\" . $cg->getName() : $cg->getName(); - if ($reflectionMethod->getDeclaringClass()->getName() == $className) { - $methods[] = MethodGenerator::fromReflection($reflectionMethod); - } - } - $cg->addMethods($methods); - - return $cg; - } - - /** - * Generate from array - * - * @configkey name string [required] Class Name - * @configkey filegenerator FileGenerator File generator that holds this class - * @configkey namespacename string The namespace for this class - * @configkey docblock string The docblock information - * @configkey flags int Flags, one of ClassGenerator::FLAG_ABSTRACT ClassGenerator::FLAG_FINAL - * @configkey extendedclass string Class which this class is extending - * @configkey implementedinterfaces - * @configkey properties - * @configkey methods - * - * @throws Exception\InvalidArgumentException - * @param array $array - * @return ClassGenerator - */ - public static function fromArray(array $array) - { - if (!isset($array['name'])) { - throw new Exception\InvalidArgumentException( - 'Class generator requires that a name is provided for this object' - ); - } - - $cg = new static($array['name']); - foreach ($array as $name => $value) { - // normalize key - switch (strtolower(str_replace(array('.', '-', '_'), '', $name))) { - case 'containingfile': - $cg->setContainingFileGenerator($value); - break; - case 'namespacename': - $cg->setNamespaceName($value); - break; - case 'docblock': - $docBlock = ($value instanceof DocBlockGenerator) ? $value : DocBlockGenerator::fromArray($value); - $cg->setDocBlock($docBlock); - break; - case 'flags': - $cg->setFlags($value); - break; - case 'extendedclass': - $cg->setExtendedClass($value); - break; - case 'implementedinterfaces': - $cg->setImplementedInterfaces($value); - break; - case 'properties': - $cg->addProperties($value); - break; - case 'methods': - $cg->addMethods($value); - break; - } - } - - return $cg; - } - - /** - * @param string $name - * @param string $namespaceName - * @param array|string $flags - * @param string $extends - * @param array $interfaces - * @param array $properties - * @param array $methods - * @param DocBlockGenerator $docBlock - */ - public function __construct( - $name = null, - $namespaceName = null, - $flags = null, - $extends = null, - $interfaces = array(), - $properties = array(), - $methods = array(), - $docBlock = null - ) { - if ($name !== null) { - $this->setName($name); - } - if ($namespaceName !== null) { - $this->setNamespaceName($namespaceName); - } - if ($flags !== null) { - $this->setFlags($flags); - } - if ($properties !== array()) { - $this->addProperties($properties); - } - if ($extends !== null) { - $this->setExtendedClass($extends); - } - if (is_array($interfaces)) { - $this->setImplementedInterfaces($interfaces); - } - if ($methods !== array()) { - $this->addMethods($methods); - } - if ($docBlock !== null) { - $this->setDocBlock($docBlock); - } - } - - /** - * @param string $name - * @return ClassGenerator - */ - public function setName($name) - { - if (strstr($name, '\\')) { - $namespace = substr($name, 0, strrpos($name, '\\')); - $name = substr($name, strrpos($name, '\\') + 1); - $this->setNamespaceName($namespace); - } - - $this->name = $name; - return $this; - } - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @param string $namespaceName - * @return ClassGenerator - */ - public function setNamespaceName($namespaceName) - { - $this->namespaceName = $namespaceName; - return $this; - } - - /** - * @return string - */ - public function getNamespaceName() - { - return $this->namespaceName; - } - - /** - * @param FileGenerator $fileGenerator - * @return ClassGenerator - */ - public function setContainingFileGenerator(FileGenerator $fileGenerator) - { - $this->containingFileGenerator = $fileGenerator; - return $this; - } - - /** - * @return FileGenerator - */ - public function getContainingFileGenerator() - { - return $this->containingFileGenerator; - } - - /** - * @param DocBlockGenerator $docBlock - * @return ClassGenerator - */ - public function setDocBlock(DocBlockGenerator $docBlock) - { - $this->docBlock = $docBlock; - return $this; - } - - /** - * @return DocBlockGenerator - */ - public function getDocBlock() - { - return $this->docBlock; - } - - /** - * @param array|string $flags - * @return ClassGenerator - */ - public function setFlags($flags) - { - if (is_array($flags)) { - $flagsArray = $flags; - $flags = 0x00; - foreach ($flagsArray as $flag) { - $flags |= $flag; - } - } - // check that visibility is one of three - $this->flags = $flags; - - return $this; - } - - /** - * @param string $flag - * @return ClassGenerator - */ - public function addFlag($flag) - { - $this->setFlags($this->flags | $flag); - return $this; - } - - /** - * @param string $flag - * @return ClassGenerator - */ - public function removeFlag($flag) - { - $this->setFlags($this->flags & ~$flag); - return $this; - } - - /** - * @param bool $isAbstract - * @return ClassGenerator - */ - public function setAbstract($isAbstract) - { - return (($isAbstract) ? $this->addFlag(self::FLAG_ABSTRACT) : $this->removeFlag(self::FLAG_ABSTRACT)); - } - - /** - * @return bool - */ - public function isAbstract() - { - return (bool) ($this->flags & self::FLAG_ABSTRACT); - } - - /** - * @param bool $isFinal - * @return ClassGenerator - */ - public function setFinal($isFinal) - { - return (($isFinal) ? $this->addFlag(self::FLAG_FINAL) : $this->removeFlag(self::FLAG_FINAL)); - } - - /** - * @return bool - */ - public function isFinal() - { - return ($this->flags & self::FLAG_FINAL); - } - - /** - * @param string $extendedClass - * @return ClassGenerator - */ - public function setExtendedClass($extendedClass) - { - $this->extendedClass = $extendedClass; - return $this; - } - - /** - * @return string - */ - public function getExtendedClass() - { - return $this->extendedClass; - } - - /** - * @param array $implementedInterfaces - * @return ClassGenerator - */ - public function setImplementedInterfaces(array $implementedInterfaces) - { - $this->implementedInterfaces = $implementedInterfaces; - return $this; - } - - /** - * @return array - */ - public function getImplementedInterfaces() - { - return $this->implementedInterfaces; - } - - /** - * @param array $properties - * @return ClassGenerator - */ - public function addProperties(array $properties) - { - foreach ($properties as $property) { - if ($property instanceof PropertyGenerator) { - $this->addPropertyFromGenerator($property); - } else { - if (is_string($property)) { - $this->addProperty($property); - } elseif (is_array($property)) { - call_user_func_array(array($this, 'addProperty'), $property); - } - } - } - - return $this; - } - - /** - * Add Property from scalars - * - * @param string $name - * @param string|array $defaultValue - * @param int $flags - * @throws Exception\InvalidArgumentException - * @return ClassGenerator - */ - public function addProperty($name, $defaultValue = null, $flags = PropertyGenerator::FLAG_PUBLIC) - { - if (!is_string($name)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects string for name', - __METHOD__ - )); - } - - return $this->addPropertyFromGenerator(new PropertyGenerator($name, $defaultValue, $flags)); - } - - /** - * Add property from PropertyGenerator - * - * @param PropertyGenerator $property - * @throws Exception\InvalidArgumentException - * @return ClassGenerator - */ - public function addPropertyFromGenerator(PropertyGenerator $property) - { - $propertyName = $property->getName(); - - if (isset($this->properties[$propertyName])) { - throw new Exception\InvalidArgumentException(sprintf( - 'A property by name %s already exists in this class.', - $propertyName - )); - } - - $this->properties[$propertyName] = $property; - return $this; - } - - /** - * Add a class to "use" classes - * - * @param string $use - * @param string|null $useAlias - * @return ClassGenerator - */ - public function addUse($use, $useAlias = null) - { - if (!empty($useAlias)) { - $use .= ' as ' . $useAlias; - } - - $this->uses[$use] = $use; - return $this; - } - - /** - * @return PropertyGenerator[] - */ - public function getProperties() - { - return $this->properties; - } - - /** - * @param string $propertyName - * @return PropertyGenerator|false - */ - public function getProperty($propertyName) - { - foreach ($this->getProperties() as $property) { - if ($property->getName() == $propertyName) { - return $property; - } - } - - return false; - } - - /** - * Returns the "use" classes - * - * @return array - */ - public function getUses() - { - return array_values($this->uses); - } - - /** - * @param string $propertyName - * @return bool - */ - public function hasProperty($propertyName) - { - return isset($this->properties[$propertyName]); - } - - /** - * @param array $methods - * @return ClassGenerator - */ - public function addMethods(array $methods) - { - foreach ($methods as $method) { - if ($method instanceof MethodGenerator) { - $this->addMethodFromGenerator($method); - } else { - if (is_string($method)) { - $this->addMethod($method); - } elseif (is_array($method)) { - call_user_func_array(array($this, 'addMethod'), $method); - } - } - } - - return $this; - } - - /** - * Add Method from scalars - * - * @param string $name - * @param array $parameters - * @param int $flags - * @param string $body - * @param string $docBlock - * @throws Exception\InvalidArgumentException - * @return ClassGenerator - */ - public function addMethod( - $name = null, - array $parameters = array(), - $flags = MethodGenerator::FLAG_PUBLIC, - $body = null, - $docBlock = null - ) { - if (!is_string($name)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects string for name', - __METHOD__ - )); - } - - return $this->addMethodFromGenerator(new MethodGenerator($name, $parameters, $flags, $body, $docBlock)); - } - - /** - * Add Method from MethodGenerator - * - * @param MethodGenerator $method - * @throws Exception\InvalidArgumentException - * @return ClassGenerator - */ - public function addMethodFromGenerator(MethodGenerator $method) - { - $methodName = $method->getName(); - - if ($this->hasMethod($methodName)) { - throw new Exception\InvalidArgumentException(sprintf( - 'A method by name %s already exists in this class.', - $methodName - )); - } - - $this->methods[strtolower($methodName)] = $method; - return $this; - } - - /** - * @return MethodGenerator[] - */ - public function getMethods() - { - return $this->methods; - } - - /** - * @param string $methodName - * @return MethodGenerator|false - */ - public function getMethod($methodName) - { - return $this->hasMethod($methodName) ? $this->methods[strtolower($methodName)] : false; - } - - /** - * @param string $methodName - * @return ClassGenerator - */ - public function removeMethod($methodName) - { - if ($this->hasMethod($methodName)) { - unset($this->methods[strtolower($methodName)]); - } - - return $this; - } - - /** - * @param string $methodName - * @return bool - */ - public function hasMethod($methodName) - { - return isset($this->methods[strtolower($methodName)]); - } - - /** - * @return bool - */ - public function isSourceDirty() - { - if (($docBlock = $this->getDocBlock()) && $docBlock->isSourceDirty()) { - return true; - } - - foreach ($this->getProperties() as $property) { - if ($property->isSourceDirty()) { - return true; - } - } - - foreach ($this->getMethods() as $method) { - if ($method->isSourceDirty()) { - return true; - } - } - - return parent::isSourceDirty(); - } - - /** - * @return string - */ - public function generate() - { - if (!$this->isSourceDirty()) { - $output = $this->getSourceContent(); - if (!empty($output)) { - return $output; - } - } - - $output = ''; - - if (null !== ($namespace = $this->getNamespaceName())) { - $output .= 'namespace ' . $namespace . ';' . self::LINE_FEED . self::LINE_FEED; - } - - $uses = $this->getUses(); - if (!empty($uses)) { - foreach ($uses as $use) { - $output .= 'use ' . $use . ';' . self::LINE_FEED; - } - $output .= self::LINE_FEED; - } - - if (null !== ($docBlock = $this->getDocBlock())) { - $docBlock->setIndentation(''); - $output .= $docBlock->generate(); - } - - if ($this->isAbstract()) { - $output .= 'abstract '; - } - - $output .= 'class ' . $this->getName(); - - if (!empty($this->extendedClass)) { - $output .= ' extends ' . $this->extendedClass; - } - - $implemented = $this->getImplementedInterfaces(); - if (!empty($implemented)) { - $output .= ' implements ' . implode(', ', $implemented); - } - - $output .= self::LINE_FEED . '{' . self::LINE_FEED . self::LINE_FEED; - - $properties = $this->getProperties(); - if (!empty($properties)) { - foreach ($properties as $property) { - $output .= $property->generate() . self::LINE_FEED . self::LINE_FEED; - } - } - - $methods = $this->getMethods(); - if (!empty($methods)) { - foreach ($methods as $method) { - $output .= $method->generate() . self::LINE_FEED; - } - } - - $output .= self::LINE_FEED . '}' . self::LINE_FEED; - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag.php b/library/Zend/Code/Generator/DocBlock/Tag.php deleted file mode 100755 index 58bd045e0..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag.php +++ /dev/null @@ -1,50 +0,0 @@ -initializeDefaultTags(); - return $tagManager->createTagFromReflection($reflectionTag); - } - - /** - * @param string $description - * @return Tag - * @deprecated Deprecated in 2.3. Use GenericTag::setContent() instead - */ - public function setDescription($description) - { - return $this->setContent($description); - } - - /** - * @return string - * @deprecated Deprecated in 2.3. Use GenericTag::getContent() instead - */ - public function getDescription() - { - return $this->getContent(); - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/AbstractTypeableTag.php b/library/Zend/Code/Generator/DocBlock/Tag/AbstractTypeableTag.php deleted file mode 100755 index 1ecf5dc07..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/AbstractTypeableTag.php +++ /dev/null @@ -1,96 +0,0 @@ -setTypes($types); - } - - if (!empty($description)) { - $this->setDescription($description); - } - } - - /** - * @param string $description - * @return ReturnTag - */ - public function setDescription($description) - { - $this->description = $description; - return $this; - } - - /** - * @return string - */ - public function getDescription() - { - return $this->description; - } - - /** - * Array of types or string with types delimited by pipe (|) - * e.g. array('int', 'null') or "int|null" - * - * @param array|string $types - * @return ReturnTag - */ - public function setTypes($types) - { - if (is_string($types)) { - $types = explode('|', $types); - } - $this->types = $types; - return $this; - } - - /** - * @return array - */ - public function getTypes() - { - return $this->types; - } - - /** - * @param string $delimiter - * @return string - */ - public function getTypesAsString($delimiter = '|') - { - return implode($delimiter, $this->types); - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/AuthorTag.php b/library/Zend/Code/Generator/DocBlock/Tag/AuthorTag.php deleted file mode 100755 index 333912dca..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/AuthorTag.php +++ /dev/null @@ -1,110 +0,0 @@ -setAuthorName($authorName); - } - - if (!empty($authorEmail)) { - $this->setAuthorEmail($authorEmail); - } - } - - /** - * @param ReflectionTagInterface $reflectionTag - * @return ReturnTag - * @deprecated Deprecated in 2.3. Use TagManager::createTagFromReflection() instead - */ - public static function fromReflection(ReflectionTagInterface $reflectionTag) - { - $tagManager = new TagManager(); - $tagManager->initializeDefaultTags(); - return $tagManager->createTagFromReflection($reflectionTag); - } - - /** - * @return string - */ - public function getName() - { - return 'author'; - } - - /** - * @param string $authorEmail - * @return AuthorTag - */ - public function setAuthorEmail($authorEmail) - { - $this->authorEmail = $authorEmail; - return $this; - } - - /** - * @return string - */ - public function getAuthorEmail() - { - return $this->authorEmail; - } - - /** - * @param string $authorName - * @return AuthorTag - */ - public function setAuthorName($authorName) - { - $this->authorName = $authorName; - return $this; - } - - /** - * @return string - */ - public function getAuthorName() - { - return $this->authorName; - } - - /** - * @return string - */ - public function generate() - { - $output = '@author' - . ((!empty($this->authorName)) ? ' ' . $this->authorName : '') - . ((!empty($this->authorEmail)) ? ' <' . $this->authorEmail . '>' : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/GenericTag.php b/library/Zend/Code/Generator/DocBlock/Tag/GenericTag.php deleted file mode 100755 index 4ff98d9f7..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/GenericTag.php +++ /dev/null @@ -1,88 +0,0 @@ -setName($name); - } - - if (!empty($content)) { - $this->setContent($content); - } - } - - /** - * @param string $name - * @return GenericTag - */ - public function setName($name) - { - $this->name = ltrim($name, '@'); - return $this; - } - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @param string $content - * @return GenericTag - */ - public function setContent($content) - { - $this->content = $content; - return $this; - } - - /** - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * @return string - */ - public function generate() - { - $output = '@' . $this->name - . ((!empty($this->content)) ? ' ' . $this->content : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/LicenseTag.php b/library/Zend/Code/Generator/DocBlock/Tag/LicenseTag.php deleted file mode 100755 index 91a974152..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/LicenseTag.php +++ /dev/null @@ -1,110 +0,0 @@ -setUrl($url); - } - - if (!empty($licenseName)) { - $this->setLicenseName($licenseName); - } - } - - /** - * @param ReflectionTagInterface $reflectionTag - * @return ReturnTag - * @deprecated Deprecated in 2.3. Use TagManager::createTagFromReflection() instead - */ - public static function fromReflection(ReflectionTagInterface $reflectionTag) - { - $tagManager = new TagManager(); - $tagManager->initializeDefaultTags(); - return $tagManager->createTagFromReflection($reflectionTag); - } - - /** - * @return string - */ - public function getName() - { - return 'license'; - } - - /** - * @param string $url - * @return LicenseTag - */ - public function setUrl($url) - { - $this->url = $url; - return $this; - } - - /** - * @return string - */ - public function getUrl() - { - return $this->url; - } - - /** - * @param string $name - * @return LicenseTag - */ - public function setLicenseName($name) - { - $this->licenseName = $name; - return $this; - } - - /** - * @return string - */ - public function getLicenseName() - { - return $this->licenseName; - } - - /** - * @return string - */ - public function generate() - { - $output = '@license' - . ((!empty($this->url)) ? ' ' . $this->url : '') - . ((!empty($this->licenseName)) ? ' ' . $this->licenseName : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/MethodTag.php b/library/Zend/Code/Generator/DocBlock/Tag/MethodTag.php deleted file mode 100755 index e3c84c4ca..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/MethodTag.php +++ /dev/null @@ -1,98 +0,0 @@ -setMethodName($methodName); - } - - $this->setIsStatic((bool) $isStatic); - - parent::__construct($types, $description); - } - - /** - * @return string - */ - public function getName() - { - return 'method'; - } - - /** - * @param boolean $isStatic - * @return MethodTag - */ - public function setIsStatic($isStatic) - { - $this->isStatic = $isStatic; - return $this; - } - - /** - * @return boolean - */ - public function isStatic() - { - return $this->isStatic; - } - - /** - * @param string $methodName - * @return MethodTag - */ - public function setMethodName($methodName) - { - $this->methodName = rtrim($methodName, ')('); - return $this; - } - - /** - * @return string - */ - public function getMethodName() - { - return $this->methodName; - } - - /** - * @return string - */ - public function generate() - { - $output = '@method' - . (($this->isStatic) ? ' static' : '') - . ((!empty($this->types)) ? ' ' . $this->getTypesAsString() : '') - . ((!empty($this->methodName)) ? ' ' . $this->methodName . '()' : '') - . ((!empty($this->description)) ? ' ' . $this->description : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/ParamTag.php b/library/Zend/Code/Generator/DocBlock/Tag/ParamTag.php deleted file mode 100755 index 75d8f86cb..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/ParamTag.php +++ /dev/null @@ -1,124 +0,0 @@ -setVariableName($variableName); - } - - parent::__construct($types, $description); - } - - /** - * @param ReflectionTagInterface $reflectionTag - * @return ReturnTag - * @deprecated Deprecated in 2.3. Use TagManager::createTagFromReflection() instead - */ - public static function fromReflection(ReflectionTagInterface $reflectionTag) - { - $tagManager = new TagManager(); - $tagManager->initializeDefaultTags(); - return $tagManager->createTagFromReflection($reflectionTag); - } - - /** - * @return string - */ - public function getName() - { - return 'param'; - } - - /** - * @param string $variableName - * @return ParamTag - */ - public function setVariableName($variableName) - { - $this->variableName = ltrim($variableName, '$'); - return $this; - } - - /** - * @return string - */ - public function getVariableName() - { - return $this->variableName; - } - - /** - * @param string $datatype - * @return ReturnTag - * @deprecated Deprecated in 2.3. Use setTypes() instead - */ - public function setDatatype($datatype) - { - return $this->setTypes($datatype); - } - - /** - * @return string - * @deprecated Deprecated in 2.3. Use getTypes() or getTypesAsString() instead - */ - public function getDatatype() - { - return $this->getTypesAsString(); - } - - /** - * @param string $paramName - * @return ParamTag - * @deprecated Deprecated in 2.3. Use setVariableName() instead - */ - public function setParamName($paramName) - { - return $this->setVariableName($paramName); - } - - /** - * @return string - * @deprecated Deprecated in 2.3. Use getVariableName() instead - */ - public function getParamName() - { - return $this->getVariableName(); - } - - /** - * @return string - */ - public function generate() - { - $output = '@param' - . ((!empty($this->types)) ? ' ' . $this->getTypesAsString() : '') - . ((!empty($this->variableName)) ? ' $' . $this->variableName : '') - . ((!empty($this->description)) ? ' ' . $this->description : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/PropertyTag.php b/library/Zend/Code/Generator/DocBlock/Tag/PropertyTag.php deleted file mode 100755 index 26699a897..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/PropertyTag.php +++ /dev/null @@ -1,71 +0,0 @@ -setPropertyName($propertyName); - } - - parent::__construct($types, $description); - } - - /** - * @return string - */ - public function getName() - { - return 'property'; - } - - /** - * @param string $propertyName - * @return self - */ - public function setPropertyName($propertyName) - { - $this->propertyName = ltrim($propertyName, '$'); - return $this; - } - - /** - * @return string - */ - public function getPropertyName() - { - return $this->propertyName; - } - - /** - * @return string - */ - public function generate() - { - $output = '@property' - . ((!empty($this->types)) ? ' ' . $this->getTypesAsString() : '') - . ((!empty($this->propertyName)) ? ' $' . $this->propertyName : '') - . ((!empty($this->description)) ? ' ' . $this->description : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/ReturnTag.php b/library/Zend/Code/Generator/DocBlock/Tag/ReturnTag.php deleted file mode 100755 index f3b356ebb..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/ReturnTag.php +++ /dev/null @@ -1,67 +0,0 @@ -initializeDefaultTags(); - return $tagManager->createTagFromReflection($reflectionTag); - } - - /** - * @return string - */ - public function getName() - { - return 'return'; - } - - /** - * @param string $datatype - * @return ReturnTag - * @deprecated Deprecated in 2.3. Use setTypes() instead - */ - public function setDatatype($datatype) - { - return $this->setTypes($datatype); - } - - /** - * @return string - * @deprecated Deprecated in 2.3. Use getTypes() or getTypesAsString() instead - */ - public function getDatatype() - { - return $this->getTypesAsString(); - } - - /** - * @return string - */ - public function generate() - { - $output = '@return ' - . $this->getTypesAsString() - . ((!empty($this->description)) ? ' ' . $this->description : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/Tag/TagInterface.php b/library/Zend/Code/Generator/DocBlock/Tag/TagInterface.php deleted file mode 100755 index 4d4ef3fcd..000000000 --- a/library/Zend/Code/Generator/DocBlock/Tag/TagInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -types)) ? ' ' . $this->getTypesAsString() : '') - . ((!empty($this->description)) ? ' ' . $this->description : ''); - - return $output; - } -} diff --git a/library/Zend/Code/Generator/DocBlock/TagManager.php b/library/Zend/Code/Generator/DocBlock/TagManager.php deleted file mode 100755 index 4ff3a2bc6..000000000 --- a/library/Zend/Code/Generator/DocBlock/TagManager.php +++ /dev/null @@ -1,69 +0,0 @@ -addPrototype(new Tag\ParamTag()); - $this->addPrototype(new Tag\ReturnTag()); - $this->addPrototype(new Tag\MethodTag()); - $this->addPrototype(new Tag\PropertyTag()); - $this->addPrototype(new Tag\AuthorTag()); - $this->addPrototype(new Tag\LicenseTag()); - $this->addPrototype(new Tag\ThrowsTag()); - $this->setGenericPrototype(new Tag\GenericTag()); - } - - /** - * @param ReflectionTagInterface $reflectionTag - * @return TagInterface - */ - public function createTagFromReflection(ReflectionTagInterface $reflectionTag) - { - $tagName = $reflectionTag->getName(); - - /* @var TagInterface $newTag */ - $newTag = $this->getClonedPrototype($tagName); - - // transport any properties via accessors and mutators from reflection to codegen object - $reflectionClass = new \ReflectionClass($reflectionTag); - foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - if (substr($method->getName(), 0, 3) == 'get') { - $propertyName = substr($method->getName(), 3); - if (method_exists($newTag, 'set' . $propertyName)) { - $newTag->{'set' . $propertyName}($reflectionTag->{'get' . $propertyName}()); - } - } elseif (substr($method->getName(), 0, 2) == 'is') { - $propertyName = ucfirst($method->getName()); - if (method_exists($newTag, 'set' . $propertyName)) { - $newTag->{'set' . $propertyName}($reflectionTag->{$method->getName()}()); - } - } - } - return $newTag; - } -} diff --git a/library/Zend/Code/Generator/DocBlockGenerator.php b/library/Zend/Code/Generator/DocBlockGenerator.php deleted file mode 100755 index e983fa6b1..000000000 --- a/library/Zend/Code/Generator/DocBlockGenerator.php +++ /dev/null @@ -1,274 +0,0 @@ -setSourceContent($reflectionDocBlock->getContents()); - $docBlock->setSourceDirty(false); - - $docBlock->setShortDescription($reflectionDocBlock->getShortDescription()); - $docBlock->setLongDescription($reflectionDocBlock->getLongDescription()); - - foreach ($reflectionDocBlock->getTags() as $tag) { - $docBlock->setTag(self::getTagManager()->createTagFromReflection($tag)); - } - - return $docBlock; - } - - /** - * Generate from array - * - * @configkey shortdescription string The short description for this doc block - * @configkey longdescription string The long description for this doc block - * @configkey tags array - * - * @throws Exception\InvalidArgumentException - * @param array $array - * @return DocBlockGenerator - */ - public static function fromArray(array $array) - { - $docBlock = new static(); - - foreach ($array as $name => $value) { - // normalize key - switch (strtolower(str_replace(array('.', '-', '_'), '', $name))) { - case 'shortdescription': - $docBlock->setShortDescription($value); - break; - case 'longdescription': - $docBlock->setLongDescription($value); - break; - case 'tags': - $docBlock->setTags($value); - break; - } - } - - return $docBlock; - } - - protected static function getTagManager() - { - if (!isset(static::$tagManager)) { - static::$tagManager = new TagManager(); - static::$tagManager->initializeDefaultTags(); - } - return static::$tagManager; - } - - /** - * @param string $shortDescription - * @param string $longDescription - * @param array $tags - */ - public function __construct($shortDescription = null, $longDescription = null, array $tags = array()) - { - if ($shortDescription) { - $this->setShortDescription($shortDescription); - } - if ($longDescription) { - $this->setLongDescription($longDescription); - } - if (is_array($tags) && $tags) { - $this->setTags($tags); - } - } - - /** - * @param string $shortDescription - * @return DocBlockGenerator - */ - public function setShortDescription($shortDescription) - { - $this->shortDescription = $shortDescription; - return $this; - } - - /** - * @return string - */ - public function getShortDescription() - { - return $this->shortDescription; - } - - /** - * @param string $longDescription - * @return DocBlockGenerator - */ - public function setLongDescription($longDescription) - { - $this->longDescription = $longDescription; - return $this; - } - - /** - * @return string - */ - public function getLongDescription() - { - return $this->longDescription; - } - - /** - * @param array $tags - * @return DocBlockGenerator - */ - public function setTags(array $tags) - { - foreach ($tags as $tag) { - $this->setTag($tag); - } - - return $this; - } - - /** - * @param array|TagInterface $tag - * @throws Exception\InvalidArgumentException - * @return DocBlockGenerator - */ - public function setTag($tag) - { - if (is_array($tag)) { - // use deprecated Tag class for backward compatiblity to old array-keys - $genericTag = new Tag(); - $genericTag->setOptions($tag); - $tag = $genericTag; - } elseif (!$tag instanceof TagInterface) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects either an array of method options or an instance of %s\DocBlock\Tag\TagInterface', - __METHOD__, - __NAMESPACE__ - )); - } - - $this->tags[] = $tag; - return $this; - } - - /** - * @return TagInterface[] - */ - public function getTags() - { - return $this->tags; - } - - /** - * @param bool $value - * @return DocBlockGenerator - */ - public function setWordWrap($value) - { - $this->wordwrap = (bool) $value; - return $this; - } - - /** - * @return bool - */ - public function getWordWrap() - { - return $this->wordwrap; - } - - /** - * @return string - */ - public function generate() - { - if (!$this->isSourceDirty()) { - return $this->docCommentize(trim($this->getSourceContent())); - } - - $output = ''; - if (null !== ($sd = $this->getShortDescription())) { - $output .= $sd . self::LINE_FEED . self::LINE_FEED; - } - if (null !== ($ld = $this->getLongDescription())) { - $output .= $ld . self::LINE_FEED . self::LINE_FEED; - } - - /* @var $tag GeneratorInterface */ - foreach ($this->getTags() as $tag) { - $output .= $tag->generate() . self::LINE_FEED; - } - - return $this->docCommentize(trim($output)); - } - - /** - * @param string $content - * @return string - */ - protected function docCommentize($content) - { - $indent = $this->getIndentation(); - $output = $indent . '/**' . self::LINE_FEED; - $content = $this->getWordWrap() == true ? wordwrap($content, 80, self::LINE_FEED) : $content; - $lines = explode(self::LINE_FEED, $content); - foreach ($lines as $line) { - $output .= $indent . ' *'; - if ($line) { - $output .= " $line"; - } - $output .= self::LINE_FEED; - } - $output .= $indent . ' */' . self::LINE_FEED; - - return $output; - } -} diff --git a/library/Zend/Code/Generator/Exception/ExceptionInterface.php b/library/Zend/Code/Generator/Exception/ExceptionInterface.php deleted file mode 100755 index d6abfd426..000000000 --- a/library/Zend/Code/Generator/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -setOptions($options); - } - } - - /** - * Use this if you intend on generating code generation objects based on the same file. - * This will keep previous changes to the file in tact during the same PHP process - * - * @param string $filePath - * @param bool $includeIfNotAlreadyIncluded - * @throws ReflectionException\InvalidArgumentException If file does not exists - * @throws ReflectionException\RuntimeException If file exists but is not included or required - * @return FileGenerator - */ - public static function fromReflectedFileName($filePath, $includeIfNotAlreadyIncluded = true) - { - $fileReflector = new FileReflection($filePath, $includeIfNotAlreadyIncluded); - $codeGenerator = static::fromReflection($fileReflector); - - return $codeGenerator; - } - - /** - * @param FileReflection $fileReflection - * @return FileGenerator - */ - public static function fromReflection(FileReflection $fileReflection) - { - $file = new static(); - - $file->setSourceContent($fileReflection->getContents()); - $file->setSourceDirty(false); - - $body = $fileReflection->getContents(); - - $uses = $fileReflection->getUses(); - - foreach ($fileReflection->getClasses() as $class) { - $phpClass = ClassGenerator::fromReflection($class); - $phpClass->setContainingFileGenerator($file); - - foreach ($uses as $fileUse) { - $phpClass->addUse($fileUse['use'], $fileUse['as']); - } - - $file->setClass($phpClass); - } - - $namespace = $fileReflection->getNamespace(); - - if ($namespace != '') { - $file->setNamespace($namespace); - } - - if ($uses) { - $file->setUses($uses); - } - - if (($fileReflection->getDocComment() != '')) { - $docBlock = $fileReflection->getDocBlock(); - $file->setDocBlock(DocBlockGenerator::fromReflection($docBlock)); - } - - return $file; - } - - /** - * @param array $values - * @return FileGenerator - */ - public static function fromArray(array $values) - { - $fileGenerator = new static; - foreach ($values as $name => $value) { - switch (strtolower(str_replace(array('.', '-', '_'), '', $name))) { - case 'filename': - $fileGenerator->setFilename($value); - continue; - case 'class': - $fileGenerator->setClass(($value instanceof ClassGenerator) ? $value : ClassGenerator::fromArray($value)); - continue; - case 'requiredfiles': - $fileGenerator->setRequiredFiles($value); - continue; - default: - if (property_exists($fileGenerator, $name)) { - $fileGenerator->{$name} = $value; - } elseif (method_exists($fileGenerator, 'set' . $name)) { - $fileGenerator->{'set' . $name}($value); - } - } - } - - return $fileGenerator; - } - - /** - * @param DocBlockGenerator|string $docBlock - * @throws Exception\InvalidArgumentException - * @return FileGenerator - */ - public function setDocBlock($docBlock) - { - if (is_string($docBlock)) { - $docBlock = array('shortDescription' => $docBlock); - } - - if (is_array($docBlock)) { - $docBlock = new DocBlockGenerator($docBlock); - } elseif (!$docBlock instanceof DocBlockGenerator) { - throw new Exception\InvalidArgumentException(sprintf( - '%s is expecting either a string, array or an instance of %s\DocBlockGenerator', - __METHOD__, - __NAMESPACE__ - )); - } - - $this->docBlock = $docBlock; - return $this; - } - - /** - * @return DocBlockGenerator - */ - public function getDocBlock() - { - return $this->docBlock; - } - - /** - * @param array $requiredFiles - * @return FileGenerator - */ - public function setRequiredFiles(array $requiredFiles) - { - $this->requiredFiles = $requiredFiles; - return $this; - } - - /** - * @return array - */ - public function getRequiredFiles() - { - return $this->requiredFiles; - } - - /** - * @return string - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * @param string $namespace - * @return FileGenerator - */ - public function setNamespace($namespace) - { - $this->namespace = (string) $namespace; - return $this; - } - - /** - * Returns an array with the first element the use statement, second is the as part. - * If $withResolvedAs is set to true, there will be a third element that is the - * "resolved" as statement, as the second part is not required in use statements - * - * @param bool $withResolvedAs - * @return array - */ - public function getUses($withResolvedAs = false) - { - $uses = $this->uses; - if ($withResolvedAs) { - for ($useIndex = 0, $count = count($uses); $useIndex < $count; $useIndex++) { - if ($uses[$useIndex][1] == '') { - if (($lastSeparator = strrpos($uses[$useIndex][0], '\\')) !== false) { - $uses[$useIndex][2] = substr($uses[$useIndex][0], $lastSeparator + 1); - } else { - $uses[$useIndex][2] = $uses[$useIndex][0]; - } - } else { - $uses[$useIndex][2] = $uses[$useIndex][1]; - } - } - } - - return $uses; - } - - /** - * @param array $uses - * @return FileGenerator - */ - public function setUses(array $uses) - { - foreach ($uses as $use) { - $use = (array) $use; - if (array_key_exists('use', $use) && array_key_exists('as', $use)) { - $import = $use['use']; - $alias = $use['as']; - } elseif (count($use) == 2) { - list($import, $alias) = $use; - } else { - $import = current($use); - $alias = null; - } - $this->setUse($import, $alias); - } - return $this; - } - - /** - * @param string $use - * @param null|string $as - * @return FileGenerator - */ - public function setUse($use, $as = null) - { - if (!in_array(array($use, $as), $this->uses)) { - $this->uses[] = array($use, $as); - } - return $this; - } - - /** - * @param array $classes - * @return FileGenerator - */ - public function setClasses(array $classes) - { - foreach ($classes as $class) { - $this->setClass($class); - } - - return $this; - } - - /** - * @param string $name - * @return ClassGenerator - */ - public function getClass($name = null) - { - if ($name == null) { - reset($this->classes); - - return current($this->classes); - } - - return $this->classes[(string) $name]; - } - - /** - * @param array|string|ClassGenerator $class - * @throws Exception\InvalidArgumentException - * @return FileGenerator - */ - public function setClass($class) - { - if (is_array($class)) { - $class = ClassGenerator::fromArray($class); - } elseif (is_string($class)) { - $class = new ClassGenerator($class); - } elseif (!$class instanceof ClassGenerator) { - throw new Exception\InvalidArgumentException(sprintf( - '%s is expecting either a string, array or an instance of %s\ClassGenerator', - __METHOD__, - __NAMESPACE__ - )); - } - - // @todo check for dup here - $className = $class->getName(); - $this->classes[$className] = $class; - - return $this; - } - - /** - * @param string $filename - * @return FileGenerator - */ - public function setFilename($filename) - { - $this->filename = (string) $filename; - return $this; - } - - /** - * @return string - */ - public function getFilename() - { - return $this->filename; - } - - /** - * @return ClassGenerator[] - */ - public function getClasses() - { - return $this->classes; - } - - /** - * @param string $body - * @return FileGenerator - */ - public function setBody($body) - { - $this->body = (string) $body; - return $this; - } - - /** - * @return string - */ - public function getBody() - { - return $this->body; - } - - /** - * @return bool - */ - public function isSourceDirty() - { - $docBlock = $this->getDocBlock(); - if ($docBlock && $docBlock->isSourceDirty()) { - return true; - } - - foreach ($this->classes as $class) { - if ($class->isSourceDirty()) { - return true; - } - } - - return parent::isSourceDirty(); - } - - /** - * @return string - */ - public function generate() - { - if ($this->isSourceDirty() === false) { - return $this->sourceContent; - } - - $output = ''; - - // @note body gets populated when FileGenerator created - // from a file. @see fromReflection and may also be set - // via FileGenerator::setBody - $body = $this->getBody(); - - // start with the body (if there), or open tag - if (preg_match('#(?:\s*)<\?php#', $body) == false) { - $output = 'getDocBlock())) { - $docBlock->setIndentation(''); - - if (preg_match('#/\* Zend_Code_Generator_FileGenerator-DocBlockMarker \*/#m', $output)) { - $output = preg_replace('#/\* Zend_Code_Generator_FileGenerator-DocBlockMarker \*/#m', $docBlock->generate(), $output, 1); - } else { - $output .= $docBlock->generate() . self::LINE_FEED; - } - } - - // newline - $output .= self::LINE_FEED; - - // namespace, if any - $namespace = $this->getNamespace(); - if ($namespace) { - $namespace = sprintf('namespace %s;%s', $namespace, str_repeat(self::LINE_FEED, 2)); - if (preg_match('#/\* Zend_Code_Generator_FileGenerator-NamespaceMarker \*/#m', $output)) { - $output = preg_replace('#/\* Zend_Code_Generator_FileGenerator-NamespaceMarker \*/#m', $namespace, - $output, 1); - } else { - $output .= $namespace; - } - } - - // process required files - // @todo marker replacement for required files - $requiredFiles = $this->getRequiredFiles(); - if (!empty($requiredFiles)) { - foreach ($requiredFiles as $requiredFile) { - $output .= 'require_once \'' . $requiredFile . '\';' . self::LINE_FEED; - } - - $output .= self::LINE_FEED; - } - - $classes = $this->getClasses(); - $classUses = array(); - //build uses array - foreach ($classes as $class) { - //check for duplicate use statements - $uses = $class->getUses(); - if (!empty($uses) && is_array($uses)) { - $classUses = array_merge($classUses, $uses); - } - } - - // process import statements - $uses = $this->getUses(); - if (!empty($uses)) { - $useOutput = ''; - - foreach ($uses as $use) { - list($import, $alias) = $use; - if (null === $alias) { - $tempOutput = sprintf('%s', $import); - } else { - $tempOutput = sprintf('%s as %s', $import, $alias); - } - - //don't duplicate use statements - if (!in_array($tempOutput, $classUses)) { - $useOutput .= "use ". $tempOutput .";"; - $useOutput .= self::LINE_FEED; - } - } - $useOutput .= self::LINE_FEED; - - if (preg_match('#/\* Zend_Code_Generator_FileGenerator-UseMarker \*/#m', $output)) { - $output = preg_replace('#/\* Zend_Code_Generator_FileGenerator-UseMarker \*/#m', $useOutput, - $output, 1); - } else { - $output .= $useOutput; - } - } - - // process classes - if (!empty($classes)) { - foreach ($classes as $class) { - $regex = str_replace('&', $class->getName(), '/\* Zend_Code_Generator_Php_File-ClassMarker: \{[A-Za-z0-9\\\]+?&\} \*/'); - if (preg_match('#' . $regex . '#m', $output)) { - $output = preg_replace('#' . $regex . '#', $class->generate(), $output, 1); - } else { - if ($namespace) { - $class->setNamespaceName(null); - } - $output .= $class->generate() . self::LINE_FEED; - } - } - } - - if (!empty($body)) { - // add an extra space between classes and - if (!empty($classes)) { - $output .= self::LINE_FEED; - } - - $output .= $body; - } - - return $output; - } - - /** - * @return FileGenerator - * @throws Exception\RuntimeException - */ - public function write() - { - if ($this->filename == '' || !is_writable(dirname($this->filename))) { - throw new Exception\RuntimeException('This code generator object is not writable.'); - } - file_put_contents($this->filename, $this->generate()); - - return $this; - } -} diff --git a/library/Zend/Code/Generator/FileGeneratorRegistry.php b/library/Zend/Code/Generator/FileGeneratorRegistry.php deleted file mode 100755 index 164cc5254..000000000 --- a/library/Zend/Code/Generator/FileGeneratorRegistry.php +++ /dev/null @@ -1,44 +0,0 @@ -getFilename(); - } - - if ($fileName == '') { - throw new RuntimeException('FileName does not exist.'); - } - - // cannot use realpath since the file might not exist, but we do need to have the index - // in the same DIRECTORY_SEPARATOR that realpath would use: - $fileName = str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, $fileName); - - static::$fileCodeGenerators[$fileName] = $fileCodeGenerator; - } -} diff --git a/library/Zend/Code/Generator/GeneratorInterface.php b/library/Zend/Code/Generator/GeneratorInterface.php deleted file mode 100755 index 77e1eb8c8..000000000 --- a/library/Zend/Code/Generator/GeneratorInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -setSourceContent($reflectionMethod->getContents(false)); - $method->setSourceDirty(false); - - if ($reflectionMethod->getDocComment() != '') { - $method->setDocBlock(DocBlockGenerator::fromReflection($reflectionMethod->getDocBlock())); - } - - $method->setFinal($reflectionMethod->isFinal()); - - if ($reflectionMethod->isPrivate()) { - $method->setVisibility(self::VISIBILITY_PRIVATE); - } elseif ($reflectionMethod->isProtected()) { - $method->setVisibility(self::VISIBILITY_PROTECTED); - } else { - $method->setVisibility(self::VISIBILITY_PUBLIC); - } - - $method->setStatic($reflectionMethod->isStatic()); - - $method->setName($reflectionMethod->getName()); - - foreach ($reflectionMethod->getParameters() as $reflectionParameter) { - $method->setParameter(ParameterGenerator::fromReflection($reflectionParameter)); - } - - $method->setBody($reflectionMethod->getBody()); - - return $method; - } - - /** - * Generate from array - * - * @configkey name string [required] Class Name - * @configkey docblock string The docblock information - * @configkey flags int Flags, one of MethodGenerator::FLAG_ABSTRACT MethodGenerator::FLAG_FINAL - * @configkey parameters string Class which this class is extending - * @configkey body string - * @configkey abstract bool - * @configkey final bool - * @configkey static bool - * @configkey visibility string - * - * @throws Exception\InvalidArgumentException - * @param array $array - * @return MethodGenerator - */ - public static function fromArray(array $array) - { - if (!isset($array['name'])) { - throw new Exception\InvalidArgumentException( - 'Method generator requires that a name is provided for this object' - ); - } - - $method = new static($array['name']); - foreach ($array as $name => $value) { - // normalize key - switch (strtolower(str_replace(array('.', '-', '_'), '', $name))) { - case 'docblock': - $docBlock = ($value instanceof DocBlockGenerator) ? $value : DocBlockGenerator::fromArray($value); - $method->setDocBlock($docBlock); - break; - case 'flags': - $method->setFlags($value); - break; - case 'parameters': - $method->setParameters($value); - break; - case 'body': - $method->setBody($value); - break; - case 'abstract': - $method->setAbstract($value); - break; - case 'final': - $method->setFinal($value); - break; - case 'static': - $method->setStatic($value); - break; - case 'visibility': - $method->setVisibility($value); - break; - } - } - - return $method; - } - - /** - * @param string $name - * @param array $parameters - * @param int $flags - * @param string $body - * @param DocBlockGenerator|string $docBlock - */ - public function __construct( - $name = null, - array $parameters = array(), - $flags = self::FLAG_PUBLIC, - $body = null, - $docBlock = null - ) { - if ($name) { - $this->setName($name); - } - if ($parameters) { - $this->setParameters($parameters); - } - if ($flags !== self::FLAG_PUBLIC) { - $this->setFlags($flags); - } - if ($body) { - $this->setBody($body); - } - if ($docBlock) { - $this->setDocBlock($docBlock); - } - } - - /** - * @param array $parameters - * @return MethodGenerator - */ - public function setParameters(array $parameters) - { - foreach ($parameters as $parameter) { - $this->setParameter($parameter); - } - - return $this; - } - - /** - * @param ParameterGenerator|string $parameter - * @throws Exception\InvalidArgumentException - * @return MethodGenerator - */ - public function setParameter($parameter) - { - if (is_string($parameter)) { - $parameter = new ParameterGenerator($parameter); - } elseif (!$parameter instanceof ParameterGenerator) { - throw new Exception\InvalidArgumentException(sprintf( - '%s is expecting either a string, array or an instance of %s\ParameterGenerator', - __METHOD__, - __NAMESPACE__ - )); - } - - $parameterName = $parameter->getName(); - - $this->parameters[$parameterName] = $parameter; - - return $this; - } - - /** - * @return ParameterGenerator[] - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * @param string $body - * @return MethodGenerator - */ - public function setBody($body) - { - $this->body = $body; - return $this; - } - - /** - * @return string - */ - public function getBody() - { - return $this->body; - } - - /** - * @return string - */ - public function generate() - { - $output = ''; - - $indent = $this->getIndentation(); - - if (($docBlock = $this->getDocBlock()) !== null) { - $docBlock->setIndentation($indent); - $output .= $docBlock->generate(); - } - - $output .= $indent; - - if ($this->isAbstract()) { - $output .= 'abstract '; - } else { - $output .= (($this->isFinal()) ? 'final ' : ''); - } - - $output .= $this->getVisibility() - . (($this->isStatic()) ? ' static' : '') - . ' function ' . $this->getName() . '('; - - $parameters = $this->getParameters(); - if (!empty($parameters)) { - foreach ($parameters as $parameter) { - $parameterOutput[] = $parameter->generate(); - } - - $output .= implode(', ', $parameterOutput); - } - - $output .= ')'; - - if ($this->isAbstract()) { - return $output . ';'; - } - - $output .= self::LINE_FEED . $indent . '{' . self::LINE_FEED; - - if ($this->body) { - $output .= preg_replace('#^((?![a-zA-Z0-9_-]+;).+?)$#m', $indent . $indent . '$1', trim($this->body)) - . self::LINE_FEED; - } - - $output .= $indent . '}' . self::LINE_FEED; - - return $output; - } - - public function __toString() - { - return $this->generate(); - } -} diff --git a/library/Zend/Code/Generator/ParameterGenerator.php b/library/Zend/Code/Generator/ParameterGenerator.php deleted file mode 100755 index 30fad22c0..000000000 --- a/library/Zend/Code/Generator/ParameterGenerator.php +++ /dev/null @@ -1,300 +0,0 @@ -setName($reflectionParameter->getName()); - - if ($reflectionParameter->isArray()) { - $param->setType('array'); - } elseif (method_exists($reflectionParameter, 'isCallable') && $reflectionParameter->isCallable()) { - $param->setType('callable'); - } else { - $typeClass = $reflectionParameter->getClass(); - if ($typeClass) { - $parameterType = $typeClass->getName(); - $currentNamespace = $reflectionParameter->getDeclaringClass()->getNamespaceName(); - - if (!empty($currentNamespace) && substr($parameterType, 0, strlen($currentNamespace)) == $currentNamespace) { - $parameterType = substr($parameterType, strlen($currentNamespace) + 1); - } else { - $parameterType = '\\' . trim($parameterType, '\\'); - } - - $param->setType($parameterType); - } - } - - $param->setPosition($reflectionParameter->getPosition()); - - if ($reflectionParameter->isOptional()) { - $param->setDefaultValue($reflectionParameter->getDefaultValue()); - } - $param->setPassedByReference($reflectionParameter->isPassedByReference()); - - return $param; - } - - /** - * Generate from array - * - * @configkey name string [required] Class Name - * @configkey type string - * @configkey defaultvalue null|bool|string|int|float|array|ValueGenerator - * @configkey passedbyreference bool - * @configkey position int - * @configkey sourcedirty bool - * @configkey indentation string - * @configkey sourcecontent string - * - * @throws Exception\InvalidArgumentException - * @param array $array - * @return ParameterGenerator - */ - public static function fromArray(array $array) - { - if (!isset($array['name'])) { - throw new Exception\InvalidArgumentException( - 'Paramerer generator requires that a name is provided for this object' - ); - } - - $param = new static($array['name']); - foreach ($array as $name => $value) { - // normalize key - switch (strtolower(str_replace(array('.', '-', '_'), '', $name))) { - case 'type': - $param->setType($value); - break; - case 'defaultvalue': - $param->setDefaultValue($value); - break; - case 'passedbyreference': - $param->setPassedByReference($value); - break; - case 'position': - $param->setPosition($value); - break; - case 'sourcedirty': - $param->setSourceDirty($value); - break; - case 'indentation': - $param->setIndentation($value); - break; - case 'sourcecontent': - $param->setSourceContent($value); - break; - } - } - - return $param; - } - - /** - * @param string $name - * @param string $type - * @param mixed $defaultValue - * @param int $position - * @param bool $passByReference - */ - public function __construct( - $name = null, - $type = null, - $defaultValue = null, - $position = null, - $passByReference = false - ) { - if (null !== $name) { - $this->setName($name); - } - if (null !== $type) { - $this->setType($type); - } - if (null !== $defaultValue) { - $this->setDefaultValue($defaultValue); - } - if (null !== $position) { - $this->setPosition($position); - } - if (false !== $passByReference) { - $this->setPassedByReference(true); - } - } - - /** - * @param string $type - * @return ParameterGenerator - */ - public function setType($type) - { - $this->type = (string) $type; - return $this; - } - - /** - * @return string - */ - public function getType() - { - return $this->type; - } - - /** - * @param string $name - * @return ParameterGenerator - */ - public function setName($name) - { - $this->name = (string) $name; - return $this; - } - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Set the default value of the parameter. - * - * Certain variables are difficult to express - * - * @param null|bool|string|int|float|array|ValueGenerator $defaultValue - * @return ParameterGenerator - */ - public function setDefaultValue($defaultValue) - { - if (!($defaultValue instanceof ValueGenerator)) { - $defaultValue = new ValueGenerator($defaultValue); - } - $this->defaultValue = $defaultValue; - - return $this; - } - - /** - * @return string - */ - public function getDefaultValue() - { - return $this->defaultValue; - } - - /** - * @param int $position - * @return ParameterGenerator - */ - public function setPosition($position) - { - $this->position = (int) $position; - return $this; - } - - /** - * @return int - */ - public function getPosition() - { - return $this->position; - } - - /** - * @return bool - */ - public function getPassedByReference() - { - return $this->passedByReference; - } - - /** - * @param bool $passedByReference - * @return ParameterGenerator - */ - public function setPassedByReference($passedByReference) - { - $this->passedByReference = (bool) $passedByReference; - return $this; - } - - /** - * @return string - */ - public function generate() - { - $output = ''; - - if ($this->type && !in_array($this->type, static::$simple)) { - $output .= $this->type . ' '; - } - - if (true === $this->passedByReference) { - $output .= '&'; - } - - $output .= '$' . $this->name; - - if ($this->defaultValue !== null) { - $output .= ' = '; - if (is_string($this->defaultValue)) { - $output .= ValueGenerator::escape($this->defaultValue); - } elseif ($this->defaultValue instanceof ValueGenerator) { - $this->defaultValue->setOutputMode(ValueGenerator::OUTPUT_SINGLE_LINE); - $output .= $this->defaultValue; - } else { - $output .= $this->defaultValue; - } - } - - return $output; - } -} diff --git a/library/Zend/Code/Generator/PropertyGenerator.php b/library/Zend/Code/Generator/PropertyGenerator.php deleted file mode 100755 index 36735ad37..000000000 --- a/library/Zend/Code/Generator/PropertyGenerator.php +++ /dev/null @@ -1,226 +0,0 @@ -setName($reflectionProperty->getName()); - - $allDefaultProperties = $reflectionProperty->getDeclaringClass()->getDefaultProperties(); - - $property->setDefaultValue($allDefaultProperties[$reflectionProperty->getName()]); - - if ($reflectionProperty->getDocComment() != '') { - $property->setDocBlock(DocBlockGenerator::fromReflection($reflectionProperty->getDocBlock())); - } - - if ($reflectionProperty->isStatic()) { - $property->setStatic(true); - } - - if ($reflectionProperty->isPrivate()) { - $property->setVisibility(self::VISIBILITY_PRIVATE); - } elseif ($reflectionProperty->isProtected()) { - $property->setVisibility(self::VISIBILITY_PROTECTED); - } else { - $property->setVisibility(self::VISIBILITY_PUBLIC); - } - - $property->setSourceDirty(false); - - return $property; - } - - /** - * Generate from array - * - * @configkey name string [required] Class Name - * @configkey const bool - * @configkey defaultvalue null|bool|string|int|float|array|ValueGenerator - * @configkey flags int - * @configkey abstract bool - * @configkey final bool - * @configkey static bool - * @configkey visibility string - * - * @throws Exception\InvalidArgumentException - * @param array $array - * @return PropertyGenerator - */ - public static function fromArray(array $array) - { - if (!isset($array['name'])) { - throw new Exception\InvalidArgumentException( - 'Property generator requires that a name is provided for this object' - ); - } - - $property = new static($array['name']); - foreach ($array as $name => $value) { - // normalize key - switch (strtolower(str_replace(array('.', '-', '_'), '', $name))) { - case 'const': - $property->setConst($value); - break; - case 'defaultvalue': - $property->setDefaultValue($value); - break; - case 'docblock': - $docBlock = ($value instanceof DocBlockGenerator) ? $value : DocBlockGenerator::fromArray($value); - $property->setDocBlock($docBlock); - break; - case 'flags': - $property->setFlags($value); - break; - case 'abstract': - $property->setAbstract($value); - break; - case 'final': - $property->setFinal($value); - break; - case 'static': - $property->setStatic($value); - break; - case 'visibility': - $property->setVisibility($value); - break; - } - } - - return $property; - } - - /** - * @param string $name - * @param PropertyValueGenerator|string|array $defaultValue - * @param int $flags - */ - public function __construct($name = null, $defaultValue = null, $flags = self::FLAG_PUBLIC) - { - if (null !== $name) { - $this->setName($name); - } - if (null !== $defaultValue) { - $this->setDefaultValue($defaultValue); - } - if ($flags !== self::FLAG_PUBLIC) { - $this->setFlags($flags); - } - } - - /** - * @param bool $const - * @return PropertyGenerator - */ - public function setConst($const) - { - if ($const) { - $this->removeFlag(self::FLAG_PUBLIC | self::FLAG_PRIVATE | self::FLAG_PROTECTED); - $this->setFlags(self::FLAG_CONSTANT); - } else { - $this->removeFlag(self::FLAG_CONSTANT); - } - - return $this; - } - - /** - * @return bool - */ - public function isConst() - { - return (bool) ($this->flags & self::FLAG_CONSTANT); - } - - /** - * @param PropertyValueGenerator|mixed $defaultValue - * @param string $defaultValueType - * @param string $defaultValueOutputMode - * - * @return PropertyGenerator - */ - public function setDefaultValue($defaultValue, $defaultValueType = PropertyValueGenerator::TYPE_AUTO, $defaultValueOutputMode = PropertyValueGenerator::OUTPUT_MULTIPLE_LINE) - { - if (!($defaultValue instanceof PropertyValueGenerator)) { - $defaultValue = new PropertyValueGenerator($defaultValue, $defaultValueType, $defaultValueOutputMode); - } - - $this->defaultValue = $defaultValue; - - return $this; - } - - /** - * @return PropertyValueGenerator - */ - public function getDefaultValue() - { - return $this->defaultValue; - } - - /** - * @throws Exception\RuntimeException - * @return string - */ - public function generate() - { - $name = $this->getName(); - $defaultValue = $this->getDefaultValue(); - - $output = ''; - - if (($docBlock = $this->getDocBlock()) !== null) { - $docBlock->setIndentation(' '); - $output .= $docBlock->generate(); - } - - if ($this->isConst()) { - if ($defaultValue != null && !$defaultValue->isValidConstantType()) { - throw new Exception\RuntimeException(sprintf( - 'The property %s is said to be ' - . 'constant but does not have a valid constant value.', - $this->name - )); - } - $output .= $this->indentation . 'const ' . $name . ' = ' - . (($defaultValue !== null) ? $defaultValue->generate() : 'null;'); - } else { - $output .= $this->indentation - . $this->getVisibility() - . (($this->isStatic()) ? ' static' : '') - . ' $' . $name . ' = ' - . (($defaultValue !== null) ? $defaultValue->generate() : 'null;'); - } - - return $output; - } -} diff --git a/library/Zend/Code/Generator/PropertyValueGenerator.php b/library/Zend/Code/Generator/PropertyValueGenerator.php deleted file mode 100755 index f36fc8c1f..000000000 --- a/library/Zend/Code/Generator/PropertyValueGenerator.php +++ /dev/null @@ -1,23 +0,0 @@ -setValue($value); - } - if ($type !== self::TYPE_AUTO) { - $this->setType($type); - } - if ($outputMode !== self::OUTPUT_MULTIPLE_LINE) { - $this->setOutputMode($outputMode); - } - if ($constants !== null) { - $this->constants = $constants; - } else { - $this->constants = new ArrayObject(); - } - } - - /** - * Init constant list by defined and magic constants - */ - public function initEnvironmentConstants() - { - $constants = array( - '__DIR__', - '__FILE__', - '__LINE__', - '__CLASS__', - '__TRAIT__', - '__METHOD__', - '__FUNCTION__', - '__NAMESPACE__', - '::' - ); - $constants = array_merge($constants, array_keys(get_defined_constants()), $this->constants->getArrayCopy()); - $this->constants->exchangeArray($constants); - } - - /** - * Add constant to list - * - * @param string $constant - * - * @return $this - */ - public function addConstant($constant) - { - $this->constants->append($constant); - - return $this; - } - - /** - * Delete constant from constant list - * - * @param string $constant - * - * @return bool - */ - public function deleteConstant($constant) - { - if (($index = array_search($constant, $this->constants->getArrayCopy())) !== false) { - $this->constants->offsetUnset($index); - } - - return $index !== false; - } - - /** - * Return constant list - * - * @return ArrayObject - */ - public function getConstants() - { - return $this->constants; - } - - /** - * @return bool - */ - public function isValidConstantType() - { - if ($this->type == self::TYPE_AUTO) { - $type = $this->getAutoDeterminedType($this->value); - } else { - $type = $this->type; - } - - // valid types for constants - $scalarTypes = array( - self::TYPE_BOOLEAN, - self::TYPE_BOOL, - self::TYPE_NUMBER, - self::TYPE_INTEGER, - self::TYPE_INT, - self::TYPE_FLOAT, - self::TYPE_DOUBLE, - self::TYPE_STRING, - self::TYPE_CONSTANT, - self::TYPE_NULL - ); - - return in_array($type, $scalarTypes); - } - - /** - * @param mixed $value - * @return ValueGenerator - */ - public function setValue($value) - { - $this->value = $value; - return $this; - } - - /** - * @return mixed - */ - public function getValue() - { - return $this->value; - } - - /** - * @param string $type - * @return ValueGenerator - */ - public function setType($type) - { - $this->type = (string) $type; - return $this; - } - - /** - * @return string - */ - public function getType() - { - return $this->type; - } - - /** - * @param int $arrayDepth - * @return ValueGenerator - */ - public function setArrayDepth($arrayDepth) - { - $this->arrayDepth = (int) $arrayDepth; - return $this; - } - - /** - * @return int - */ - public function getArrayDepth() - { - return $this->arrayDepth; - } - - /** - * @param string $type - * @return string - */ - protected function getValidatedType($type) - { - $types = array( - self::TYPE_AUTO, - self::TYPE_BOOLEAN, - self::TYPE_BOOL, - self::TYPE_NUMBER, - self::TYPE_INTEGER, - self::TYPE_INT, - self::TYPE_FLOAT, - self::TYPE_DOUBLE, - self::TYPE_STRING, - self::TYPE_ARRAY, - self::TYPE_CONSTANT, - self::TYPE_NULL, - self::TYPE_OBJECT, - self::TYPE_OTHER - ); - - if (in_array($type, $types)) { - return $type; - } - - return self::TYPE_AUTO; - } - - /** - * @param mixed $value - * @return string - */ - public function getAutoDeterminedType($value) - { - switch (gettype($value)) { - case 'boolean': - return self::TYPE_BOOLEAN; - case 'string': - foreach ($this->constants as $constant) { - if (strpos($value, $constant) !== false) { - return self::TYPE_CONSTANT; - } - } - return self::TYPE_STRING; - case 'double': - case 'float': - case 'integer': - return self::TYPE_NUMBER; - case 'array': - return self::TYPE_ARRAY; - case 'NULL': - return self::TYPE_NULL; - case 'object': - case 'resource': - case 'unknown type': - default: - return self::TYPE_OTHER; - } - } - - /** - * @throws Exception\RuntimeException - * @return string - */ - public function generate() - { - $type = $this->type; - - if ($type != self::TYPE_AUTO) { - $type = $this->getValidatedType($type); - } - - $value = $this->value; - - if ($type == self::TYPE_AUTO) { - $type = $this->getAutoDeterminedType($value); - } - - if ($type == self::TYPE_ARRAY) { - foreach ($value as &$curValue) { - if ($curValue instanceof self) { - continue; - } - $curValue = new self($curValue, self::TYPE_AUTO, self::OUTPUT_MULTIPLE_LINE, $this->getConstants()); - } - } - - $output = ''; - - switch ($type) { - case self::TYPE_BOOLEAN: - case self::TYPE_BOOL: - $output .= ($value ? 'true' : 'false'); - break; - case self::TYPE_STRING: - $output .= self::escape($value); - break; - case self::TYPE_NULL: - $output .= 'null'; - break; - case self::TYPE_NUMBER: - case self::TYPE_INTEGER: - case self::TYPE_INT: - case self::TYPE_FLOAT: - case self::TYPE_DOUBLE: - case self::TYPE_CONSTANT: - $output .= $value; - break; - case self::TYPE_ARRAY: - $output .= 'array('; - if ($this->outputMode == self::OUTPUT_MULTIPLE_LINE) { - $output .= self::LINE_FEED . str_repeat($this->indentation, $this->arrayDepth + 1); - } - $outputParts = array(); - $noKeyIndex = 0; - foreach ($value as $n => $v) { - /* @var $v ValueGenerator */ - $v->setArrayDepth($this->arrayDepth + 1); - $partV = $v->generate(); - $short = false; - if (is_int($n)) { - if ($n === $noKeyIndex) { - $short = true; - $noKeyIndex++; - } else { - $noKeyIndex = max($n + 1, $noKeyIndex); - } - } - - if ($short) { - $outputParts[] = $partV; - } else { - $outputParts[] = (is_int($n) ? $n : self::escape($n)) . ' => ' . $partV; - } - } - $padding = ($this->outputMode == self::OUTPUT_MULTIPLE_LINE) - ? self::LINE_FEED . str_repeat($this->indentation, $this->arrayDepth + 1) - : ' '; - $output .= implode(',' . $padding, $outputParts); - if ($this->outputMode == self::OUTPUT_MULTIPLE_LINE) { - $output .= self::LINE_FEED . str_repeat($this->indentation, $this->arrayDepth); - } - $output .= ')'; - break; - case self::TYPE_OTHER: - default: - throw new Exception\RuntimeException( - sprintf('Type "%s" is unknown or cannot be used as property default value.', get_class($value)) - ); - } - - return $output; - } - - /** - * Quotes value for PHP code. - * - * @param string $input Raw string. - * @param bool $quote Whether add surrounding quotes or not. - * @return string PHP-ready code. - */ - public static function escape($input, $quote = true) - { - $output = addcslashes($input, "\\'"); - - // adds quoting strings - if ($quote) { - $output = "'" . $output . "'"; - } - - return $output; - } - - /** - * @param string $outputMode - * @return ValueGenerator - */ - public function setOutputMode($outputMode) - { - $this->outputMode = (string) $outputMode; - return $this; - } - - /** - * @return string - */ - public function getOutputMode() - { - return $this->outputMode; - } - - public function __toString() - { - return $this->generate(); - } -} diff --git a/library/Zend/Code/Generic/Prototype/PrototypeClassFactory.php b/library/Zend/Code/Generic/Prototype/PrototypeClassFactory.php deleted file mode 100755 index 7c3a9bf1b..000000000 --- a/library/Zend/Code/Generic/Prototype/PrototypeClassFactory.php +++ /dev/null @@ -1,121 +0,0 @@ -addPrototype($prototype); - } - - if ($genericPrototype) { - $this->setGenericPrototype($genericPrototype); - } - } - - /** - * @param PrototypeInterface $prototype - * @throws Exception\InvalidArgumentException - */ - public function addPrototype(PrototypeInterface $prototype) - { - $prototypeName = $this->normalizeName($prototype->getName()); - - if (isset($this->prototypes[$prototypeName])) { - throw new Exception\InvalidArgumentException('A prototype with this name already exists in this manager'); - } - - $this->prototypes[$prototypeName] = $prototype; - } - - /** - * @param PrototypeGenericInterface $prototype - * @throws Exception\InvalidArgumentException - */ - public function setGenericPrototype(PrototypeGenericInterface $prototype) - { - if (isset($this->genericPrototype)) { - throw new Exception\InvalidArgumentException('A default prototype is already set'); - } - - $this->genericPrototype = $prototype; - } - - /** - * @param string $name - * @return string - */ - protected function normalizeName($name) - { - return str_replace(array('-', '_'), '', $name); - } - - /** - * @param string $name - * @return bool - */ - public function hasPrototype($name) - { - $name = $this->normalizeName($name); - return isset($this->prototypes[$name]); - } - - /** - * @param string $prototypeName - * @return PrototypeInterface - * @throws Exception\RuntimeException - */ - public function getClonedPrototype($prototypeName) - { - $prototypeName = $this->normalizeName($prototypeName); - - if (!$this->hasPrototype($prototypeName) && !isset($this->genericPrototype)) { - throw new Exception\RuntimeException('This tag name is not supported by this tag manager'); - } - - if (!$this->hasPrototype($prototypeName)) { - $newPrototype = clone $this->genericPrototype; - $newPrototype->setName($prototypeName); - } else { - $newPrototype = clone $this->prototypes[$prototypeName]; - } - - return $newPrototype; - } -} diff --git a/library/Zend/Code/Generic/Prototype/PrototypeGenericInterface.php b/library/Zend/Code/Generic/Prototype/PrototypeGenericInterface.php deleted file mode 100755 index 3a5e44a88..000000000 --- a/library/Zend/Code/Generic/Prototype/PrototypeGenericInterface.php +++ /dev/null @@ -1,18 +0,0 @@ -setNamespace($namespace); - } - if ($uses) { - $this->setUses($uses); - } - } - - /** - * @param string $namespace - * @return NameInformation - */ - public function setNamespace($namespace) - { - $this->namespace = (string) $namespace; - return $this; - } - - /** - * @return string - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * @return bool - */ - public function hasNamespace() - { - return ($this->namespace != null); - } - - /** - * @param array $uses - * @return NameInformation - */ - public function setUses(array $uses) - { - $this->uses = array(); - $this->addUses($uses); - - return $this; - } - - /** - * @param array $uses - * @return NameInformation - */ - public function addUses(array $uses) - { - foreach ($uses as $use => $as) { - if (is_int($use)) { - $this->addUse($as); - } elseif (is_string($use)) { - $this->addUse($use, $as); - } - } - - return $this; - } - - /** - * @param array|string $use - * @param string $as - */ - public function addUse($use, $as = null) - { - if (is_array($use) && array_key_exists('use', $use) && array_key_exists('as', $use)) { - $uses = $use; - $use = $uses['use']; - $as = $uses['as']; - } - - $use = trim($use, '\\'); - if ($as === null) { - $as = trim($use, '\\'); - $nsSeparatorPosition = strrpos($as, '\\'); - if ($nsSeparatorPosition !== false && $nsSeparatorPosition !== 0 && $nsSeparatorPosition != strlen($as)) { - $as = substr($as, $nsSeparatorPosition + 1); - } - } - - $this->uses[$use] = $as; - } - - /** - * @return array - */ - public function getUses() - { - return $this->uses; - } - - /** - * @param string $name - * @return string - */ - public function resolveName($name) - { - if ($this->namespace && !$this->uses && strlen($name) > 0 && $name{0} != '\\') { - return $this->namespace . '\\' . $name; - } - - if (!$this->uses || strlen($name) <= 0 || $name{0} == '\\') { - return ltrim($name, '\\'); - } - - if ($this->namespace || $this->uses) { - $firstPart = $name; - if (($firstPartEnd = strpos($firstPart, '\\')) !== false) { - $firstPart = substr($firstPart, 0, $firstPartEnd); - } else { - $firstPartEnd = strlen($firstPart); - } - if (($fqns = array_search($firstPart, $this->uses)) !== false) { - return substr_replace($name, $fqns, 0, $firstPartEnd); - } - if ($this->namespace) { - return $this->namespace . '\\' . $name; - } - } - - return $name; - } -} diff --git a/library/Zend/Code/README.md b/library/Zend/Code/README.md deleted file mode 100755 index 640084b57..000000000 --- a/library/Zend/Code/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Code Component from ZF2 -======================= - -This is the Code component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Code/Reflection/ClassReflection.php b/library/Zend/Code/Reflection/ClassReflection.php deleted file mode 100755 index 86d1f14cb..000000000 --- a/library/Zend/Code/Reflection/ClassReflection.php +++ /dev/null @@ -1,257 +0,0 @@ -getFileName()); - - return $instance; - } - - /** - * Return the classes DocBlock reflection object - * - * @return DocBlockReflection - * @throws Exception\ExceptionInterface for missing DocBock or invalid reflection class - */ - public function getDocBlock() - { - if (isset($this->docBlock)) { - return $this->docBlock; - } - - if ('' == $this->getDocComment()) { - return false; - } - - $this->docBlock = new DocBlockReflection($this); - - return $this->docBlock; - } - - /** - * @param AnnotationManager $annotationManager - * @return AnnotationCollection - */ - public function getAnnotations(AnnotationManager $annotationManager) - { - $docComment = $this->getDocComment(); - - if ($docComment == '') { - return false; - } - - if ($this->annotations) { - return $this->annotations; - } - - $fileScanner = $this->createFileScanner($this->getFileName()); - $nameInformation = $fileScanner->getClassNameInformation($this->getName()); - - if (!$nameInformation) { - return false; - } - - $this->annotations = new AnnotationScanner($annotationManager, $docComment, $nameInformation); - - return $this->annotations; - } - - /** - * Return the start line of the class - * - * @param bool $includeDocComment - * @return int - */ - public function getStartLine($includeDocComment = false) - { - if ($includeDocComment && $this->getDocComment() != '') { - return $this->getDocBlock()->getStartLine(); - } - - return parent::getStartLine(); - } - - /** - * Return the contents of the class - * - * @param bool $includeDocBlock - * @return string - */ - public function getContents($includeDocBlock = true) - { - $fileName = $this->getFileName(); - - if (false === $fileName || ! file_exists($fileName)) { - return ''; - } - - $filelines = file($fileName); - $startnum = $this->getStartLine($includeDocBlock); - $endnum = $this->getEndLine() - $this->getStartLine(); - - // Ensure we get between the open and close braces - $lines = array_slice($filelines, $startnum, $endnum); - array_unshift($lines, $filelines[$startnum-1]); - - return strstr(implode('', $lines), '{'); - } - - /** - * Get all reflection objects of implemented interfaces - * - * @return ClassReflection[] - */ - public function getInterfaces() - { - $phpReflections = parent::getInterfaces(); - $zendReflections = array(); - while ($phpReflections && ($phpReflection = array_shift($phpReflections))) { - $instance = new ClassReflection($phpReflection->getName()); - $zendReflections[] = $instance; - unset($phpReflection); - } - unset($phpReflections); - - return $zendReflections; - } - - /** - * Return method reflection by name - * - * @param string $name - * @return MethodReflection - */ - public function getMethod($name) - { - $method = new MethodReflection($this->getName(), parent::getMethod($name)->getName()); - - return $method; - } - - /** - * Get reflection objects of all methods - * - * @param int $filter - * @return MethodReflection[] - */ - public function getMethods($filter = -1) - { - $methods = array(); - foreach (parent::getMethods($filter) as $method) { - $instance = new MethodReflection($this->getName(), $method->getName()); - $methods[] = $instance; - } - - return $methods; - } - - /** - * Get parent reflection class of reflected class - * - * @return ClassReflection|bool - */ - public function getParentClass() - { - $phpReflection = parent::getParentClass(); - if ($phpReflection) { - $zendReflection = new ClassReflection($phpReflection->getName()); - unset($phpReflection); - - return $zendReflection; - } - - return false; - } - - /** - * Return reflection property of this class by name - * - * @param string $name - * @return PropertyReflection - */ - public function getProperty($name) - { - $phpReflection = parent::getProperty($name); - $zendReflection = new PropertyReflection($this->getName(), $phpReflection->getName()); - unset($phpReflection); - - return $zendReflection; - } - - /** - * Return reflection properties of this class - * - * @param int $filter - * @return PropertyReflection[] - */ - public function getProperties($filter = -1) - { - $phpReflections = parent::getProperties($filter); - $zendReflections = array(); - while ($phpReflections && ($phpReflection = array_shift($phpReflections))) { - $instance = new PropertyReflection($this->getName(), $phpReflection->getName()); - $zendReflections[] = $instance; - unset($phpReflection); - } - unset($phpReflections); - - return $zendReflections; - } - - public function toString() - { - return parent::__toString(); - } - - public function __toString() - { - return parent::__toString(); - } - - /** - * Creates a new FileScanner instance. - * - * By having this as a seperate method it allows the method to be overridden - * if a different FileScanner is needed. - * - * @param string $filename - * - * @return FileScanner - */ - protected function createFileScanner($filename) - { - return new FileScanner($filename); - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/AuthorTag.php b/library/Zend/Code/Reflection/DocBlock/Tag/AuthorTag.php deleted file mode 100755 index 9afdee087..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/AuthorTag.php +++ /dev/null @@ -1,74 +0,0 @@ -]*)\>)?(.*)$/u', $tagDocblockLine, $match)) { - return; - } - - if ($match[1] !== '') { - $this->authorName = rtrim($match[1]); - } - - if (isset($match[3]) && $match[3] !== '') { - $this->authorEmail = $match[3]; - } - } - - /** - * @return null|string - */ - public function getAuthorName() - { - return $this->authorName; - } - - /** - * @return null|string - */ - public function getAuthorEmail() - { - return $this->authorEmail; - } - - public function __toString() - { - return 'DocBlock Tag [ * @' . $this->getName() . ' ]' . PHP_EOL; - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/GenericTag.php b/library/Zend/Code/Reflection/DocBlock/Tag/GenericTag.php deleted file mode 100755 index 9f3481085..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/GenericTag.php +++ /dev/null @@ -1,109 +0,0 @@ -contentSplitCharacter = $contentSplitCharacter; - } - - /** - * @param string $tagDocBlockLine - * @return void - */ - public function initialize($tagDocBlockLine) - { - $this->parse($tagDocBlockLine); - } - - /** - * Get annotation tag name - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @param string $name - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * @param int $position - * @return string - */ - public function returnValue($position) - { - return $this->values[$position]; - } - - /** - * Serialize to string - * - * Required by Reflector - * - * @todo What should this do? - * @return string - */ - public function __toString() - { - return 'DocBlock Tag [ * @' . $this->name . ' ]' . PHP_EOL; - } - - /** - * @param string $docBlockLine - */ - protected function parse($docBlockLine) - { - $this->content = trim($docBlockLine); - $this->values = explode($this->contentSplitCharacter, $docBlockLine); - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/LicenseTag.php b/library/Zend/Code/Reflection/DocBlock/Tag/LicenseTag.php deleted file mode 100755 index d1148ef62..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/LicenseTag.php +++ /dev/null @@ -1,74 +0,0 @@ -url = trim($match[1]); - } - - if (isset($match[2]) && $match[2] !== '') { - $this->licenseName = $match[2]; - } - } - - /** - * @return null|string - */ - public function getUrl() - { - return $this->url; - } - - /** - * @return null|string - */ - public function getLicenseName() - { - return $this->licenseName; - } - - public function __toString() - { - return 'DocBlock Tag [ * @' . $this->getName() . ' ]' . PHP_EOL; - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/MethodTag.php b/library/Zend/Code/Reflection/DocBlock/Tag/MethodTag.php deleted file mode 100755 index 50738bfea..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/MethodTag.php +++ /dev/null @@ -1,122 +0,0 @@ -isStatic = true; - } - - if ($match[2] !== '') { - $this->types = explode('|', rtrim($match[2])); - } - - $this->methodName = $match[3]; - - if ($match[4] !== '') { - $this->description = $match[4]; - } - } - - /** - * Get return value type - * - * @return null|string - * @deprecated 2.0.4 use getTypes instead - */ - public function getReturnType() - { - if (empty($this->types)) { - return null; - } - - return $this->types[0]; - } - - public function getTypes() - { - return $this->types; - } - - /** - * @return string - */ - public function getMethodName() - { - return $this->methodName; - } - - /** - * @return null|string - */ - public function getDescription() - { - return $this->description; - } - - /** - * @return bool - */ - public function isStatic() - { - return $this->isStatic; - } - - public function __toString() - { - return 'DocBlock Tag [ * @' . $this->getName() . ' ]' . PHP_EOL; - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/ParamTag.php b/library/Zend/Code/Reflection/DocBlock/Tag/ParamTag.php deleted file mode 100755 index b11a16e4e..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/ParamTag.php +++ /dev/null @@ -1,98 +0,0 @@ -types = explode('|', $matches[1]); - - if (isset($matches[2])) { - $this->variableName = $matches[2]; - } - - if (isset($matches[3])) { - $this->description = trim(preg_replace('#\s+#', ' ', $matches[3])); - } - } - - /** - * Get parameter variable type - * - * @return string - * @deprecated 2.0.4 use getTypes instead - */ - public function getType() - { - if (empty($this->types)) { - return ''; - } - - return $this->types[0]; - } - - public function getTypes() - { - return $this->types; - } - - /** - * Get parameter name - * - * @return string - */ - public function getVariableName() - { - return $this->variableName; - } - - /** - * @return string - */ - public function getDescription() - { - return $this->description; - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/PhpDocTypedTagInterface.php b/library/Zend/Code/Reflection/DocBlock/Tag/PhpDocTypedTagInterface.php deleted file mode 100755 index 01bea4b9d..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/PhpDocTypedTagInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -types = explode('|', rtrim($match[1])); - } - - if ($match[2] !== '') { - $this->propertyName = $match[2]; - } - - if ($match[3] !== '') { - $this->description = $match[3]; - } - } - - /** - * @return null|string - * @deprecated 2.0.4 use getTypes instead - */ - public function getType() - { - if (empty($this->types)) { - return null; - } - - return $this->types[0]; - } - - public function getTypes() - { - return $this->types; - } - - /** - * @return null|string - */ - public function getPropertyName() - { - return $this->propertyName; - } - - /** - * @return null|string - */ - public function getDescription() - { - return $this->description; - } - - public function __toString() - { - return 'DocBlock Tag [ * @' . $this->getName() . ' ]' . PHP_EOL; - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/ReturnTag.php b/library/Zend/Code/Reflection/DocBlock/Tag/ReturnTag.php deleted file mode 100755 index f43d7e2e3..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/ReturnTag.php +++ /dev/null @@ -1,75 +0,0 @@ -types = explode('|', $matches[1]); - - if (isset($matches[2])) { - $this->description = trim(preg_replace('#\s+#', ' ', $matches[2])); - } - } - - /** - * @return string - * @deprecated 2.0.4 use getTypes instead - */ - public function getType() - { - if (empty($this->types)) { - return ''; - } - - return $this->types[0]; - } - - public function getTypes() - { - return $this->types; - } - - /** - * @return string - */ - public function getDescription() - { - return $this->description; - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/Tag/TagInterface.php b/library/Zend/Code/Reflection/DocBlock/Tag/TagInterface.php deleted file mode 100755 index f34e154f6..000000000 --- a/library/Zend/Code/Reflection/DocBlock/Tag/TagInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -types = explode('|', $matches[1]); - - if (isset($matches[2])) { - $this->description = $matches[2]; - } - } - - /** - * Get return variable type - * - * @return string - * @deprecated 2.0.4 use getTypes instead - */ - public function getType() - { - return implode('|', $this->getTypes()); - } - - /** - * @return array - */ - public function getTypes() - { - return $this->types; - } - - /** - * @return string - */ - public function getDescription() - { - return $this->description; - } -} diff --git a/library/Zend/Code/Reflection/DocBlock/TagManager.php b/library/Zend/Code/Reflection/DocBlock/TagManager.php deleted file mode 100755 index 4d8f0da85..000000000 --- a/library/Zend/Code/Reflection/DocBlock/TagManager.php +++ /dev/null @@ -1,48 +0,0 @@ -addPrototype(new Tag\ParamTag()); - $this->addPrototype(new Tag\ReturnTag()); - $this->addPrototype(new Tag\MethodTag()); - $this->addPrototype(new Tag\PropertyTag()); - $this->addPrototype(new Tag\AuthorTag()); - $this->addPrototype(new Tag\LicenseTag()); - $this->addPrototype(new Tag\ThrowsTag()); - $this->setGenericPrototype(new Tag\GenericTag()); - } - - /** - * @param string $tagName - * @param string $content - * @return TagInterface - */ - public function createTag($tagName, $content = null) - { - /* @var TagInterface $newTag */ - $newTag = $this->getClonedPrototype($tagName); - - if ($content) { - $newTag->initialize($content); - } - - return $newTag; - } -} diff --git a/library/Zend/Code/Reflection/DocBlockReflection.php b/library/Zend/Code/Reflection/DocBlockReflection.php deleted file mode 100755 index a49021364..000000000 --- a/library/Zend/Code/Reflection/DocBlockReflection.php +++ /dev/null @@ -1,293 +0,0 @@ -initializeDefaultTags(); - } - $this->tagManager = $tagManager; - - if ($commentOrReflector instanceof Reflector) { - $this->reflector = $commentOrReflector; - if (!method_exists($commentOrReflector, 'getDocComment')) { - throw new Exception\InvalidArgumentException('Reflector must contain method "getDocComment"'); - } - /* @var MethodReflection $commentOrReflector */ - $this->docComment = $commentOrReflector->getDocComment(); - - // determine line numbers - $lineCount = substr_count($this->docComment, "\n"); - $this->startLine = $this->reflector->getStartLine() - $lineCount - 1; - $this->endLine = $this->reflector->getStartLine() - 1; - } elseif (is_string($commentOrReflector)) { - $this->docComment = $commentOrReflector; - } else { - throw new Exception\InvalidArgumentException(sprintf( - '%s must have a (string) DocComment or a Reflector in the constructor', - get_class($this) - )); - } - - if ($this->docComment == '') { - throw new Exception\InvalidArgumentException('DocComment cannot be empty'); - } - - $this->reflect(); - } - - /** - * Retrieve contents of DocBlock - * - * @return string - */ - public function getContents() - { - $this->reflect(); - - return $this->cleanDocComment; - } - - /** - * Get start line (position) of DocBlock - * - * @return int - */ - public function getStartLine() - { - $this->reflect(); - - return $this->startLine; - } - - /** - * Get last line (position) of DocBlock - * - * @return int - */ - public function getEndLine() - { - $this->reflect(); - - return $this->endLine; - } - - /** - * Get DocBlock short description - * - * @return string - */ - public function getShortDescription() - { - $this->reflect(); - - return $this->shortDescription; - } - - /** - * Get DocBlock long description - * - * @return string - */ - public function getLongDescription() - { - $this->reflect(); - - return $this->longDescription; - } - - /** - * Does the DocBlock contain the given annotation tag? - * - * @param string $name - * @return bool - */ - public function hasTag($name) - { - $this->reflect(); - foreach ($this->tags as $tag) { - if ($tag->getName() == $name) { - return true; - } - } - - return false; - } - - /** - * Retrieve the given DocBlock tag - * - * @param string $name - * @return DocBlockTagInterface|false - */ - public function getTag($name) - { - $this->reflect(); - foreach ($this->tags as $tag) { - if ($tag->getName() == $name) { - return $tag; - } - } - - return false; - } - - /** - * Get all DocBlock annotation tags - * - * @param string $filter - * @return DocBlockTagInterface[] - */ - public function getTags($filter = null) - { - $this->reflect(); - if ($filter === null || !is_string($filter)) { - return $this->tags; - } - - $returnTags = array(); - foreach ($this->tags as $tag) { - if ($tag->getName() == $filter) { - $returnTags[] = $tag; - } - } - - return $returnTags; - } - - /** - * Parse the DocBlock - * - * @return void - */ - protected function reflect() - { - if ($this->isReflected) { - return; - } - - $docComment = $this->docComment; // localize variable - - // create a clean docComment - $this->cleanDocComment = preg_replace("#[ \t]*(?:/\*\*|\*/|\*)[ ]{0,1}(.*)?#", '$1', $docComment); - $this->cleanDocComment = ltrim($this->cleanDocComment, "\r\n"); // @todo should be changed to remove first and last empty line - - $scanner = new DocBlockScanner($docComment); - $this->shortDescription = ltrim($scanner->getShortDescription()); - $this->longDescription = ltrim($scanner->getLongDescription()); - - foreach ($scanner->getTags() as $tag) { - $this->tags[] = $this->tagManager->createTag(ltrim($tag['name'], '@'), ltrim($tag['value'])); - } - - $this->isReflected = true; - } - - public function toString() - { - $str = "DocBlock [ /* DocBlock */ ] {" . PHP_EOL . PHP_EOL; - $str .= " - Tags [" . count($this->tags) . "] {" . PHP_EOL; - - foreach ($this->tags as $tag) { - $str .= " " . $tag; - } - - $str .= " }" . PHP_EOL; - $str .= "}" . PHP_EOL; - - return $str; - } - - /** - * Serialize to string - * - * Required by the Reflector interface - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } -} diff --git a/library/Zend/Code/Reflection/Exception/BadMethodCallException.php b/library/Zend/Code/Reflection/Exception/BadMethodCallException.php deleted file mode 100755 index 6eeb226fb..000000000 --- a/library/Zend/Code/Reflection/Exception/BadMethodCallException.php +++ /dev/null @@ -1,17 +0,0 @@ -filePath = $fileRealPath; - $this->reflect(); - } - - /** - * Required by the Reflector interface. - * - * @todo What should this do? - * @return null - */ - public static function export() - { - return null; - } - - /** - * Return the file name of the reflected file - * - * @return string - */ - public function getFileName() - { - // @todo get file name from path - return $this->filePath; - } - - /** - * Get the start line - Always 1, staying consistent with the Reflection API - * - * @return int - */ - public function getStartLine() - { - return $this->startLine; - } - - /** - * Get the end line / number of lines - * - * @return int - */ - public function getEndLine() - { - return $this->endLine; - } - - /** - * @return string - */ - public function getDocComment() - { - return $this->docComment; - } - - /** - * @return DocBlockReflection - */ - public function getDocBlock() - { - if (!($docComment = $this->getDocComment())) { - return false; - } - - $instance = new DocBlockReflection($docComment); - - return $instance; - } - - /** - * @return array - */ - public function getNamespaces() - { - return $this->namespaces; - } - - /** - * @return string - */ - public function getNamespace() - { - if (count($this->namespaces) == 0) { - return null; - } - - return $this->namespaces[0]; - } - - /** - * @return array - */ - public function getUses() - { - return $this->uses; - } - - /** - * Return the reflection classes of the classes found inside this file - * - * @return ClassReflection[] - */ - public function getClasses() - { - $classes = array(); - foreach ($this->classes as $class) { - $classes[] = new ClassReflection($class); - } - - return $classes; - } - - /** - * Return the reflection functions of the functions found inside this file - * - * @return FunctionReflection[] - */ - public function getFunctions() - { - $functions = array(); - foreach ($this->functions as $function) { - $functions[] = new FunctionReflection($function); - } - - return $functions; - } - - /** - * Retrieve the reflection class of a given class found in this file - * - * @param null|string $name - * @return ClassReflection - * @throws Exception\InvalidArgumentException for invalid class name or invalid reflection class - */ - public function getClass($name = null) - { - if (null === $name) { - reset($this->classes); - $selected = current($this->classes); - - return new ClassReflection($selected); - } - - if (in_array($name, $this->classes)) { - return new ClassReflection($name); - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Class by name %s not found.', - $name - )); - } - - /** - * Return the full contents of file - * - * @return string - */ - public function getContents() - { - return file_get_contents($this->filePath); - } - - public function toString() - { - return ''; // @todo - } - - /** - * Serialize to string - * - * Required by the Reflector interface - * - * @todo What should this serialization look like? - * @return string - */ - public function __toString() - { - return ''; - } - - /** - * This method does the work of "reflecting" the file - * - * Uses Zend\Code\Scanner\FileScanner to gather file information - * - * @return void - */ - protected function reflect() - { - $scanner = new CachingFileScanner($this->filePath); - $this->docComment = $scanner->getDocComment(); - $this->requiredFiles = $scanner->getIncludes(); - $this->classes = $scanner->getClassNames(); - $this->namespaces = $scanner->getNamespaces(); - $this->uses = $scanner->getUses(); - } - - /** - * Validate / check a file level DocBlock - * - * @param array $tokens Array of tokenizer tokens - * @return void - */ - protected function checkFileDocBlock($tokens) - { - foreach ($tokens as $token) { - $type = $token[0]; - $value = $token[1]; - $lineNum = $token[2]; - if (($type == T_OPEN_TAG) || ($type == T_WHITESPACE)) { - continue; - } elseif ($type == T_DOC_COMMENT) { - $this->docComment = $value; - $this->startLine = $lineNum + substr_count($value, "\n") + 1; - - return; - } else { - // Only whitespace is allowed before file DocBlocks - return; - } - } - } -} diff --git a/library/Zend/Code/Reflection/FunctionReflection.php b/library/Zend/Code/Reflection/FunctionReflection.php deleted file mode 100755 index c752f1eca..000000000 --- a/library/Zend/Code/Reflection/FunctionReflection.php +++ /dev/null @@ -1,266 +0,0 @@ -getDocComment())) { - throw new Exception\InvalidArgumentException(sprintf( - '%s does not have a DocBlock', - $this->getName() - )); - } - - $instance = new DocBlockReflection($comment); - - return $instance; - } - - /** - * Get start line (position) of function - * - * @param bool $includeDocComment - * @return int - */ - public function getStartLine($includeDocComment = false) - { - if ($includeDocComment) { - if ($this->getDocComment() != '') { - return $this->getDocBlock()->getStartLine(); - } - } - - return parent::getStartLine(); - } - - /** - * Get contents of function - * - * @param bool $includeDocBlock - * @return string - */ - public function getContents($includeDocBlock = true) - { - $fileName = $this->getFileName(); - if (false === $fileName) { - return ''; - } - - $startLine = $this->getStartLine(); - $endLine = $this->getEndLine(); - - // eval'd protect - if (preg_match('#\((\d+)\) : eval\(\)\'d code$#', $fileName, $matches)) { - $fileName = preg_replace('#\(\d+\) : eval\(\)\'d code$#', '', $fileName); - $startLine = $endLine = $matches[1]; - } - - $lines = array_slice( - file($fileName, FILE_IGNORE_NEW_LINES), - $startLine - 1, - ($endLine - ($startLine - 1)), - true - ); - - $functionLine = implode("\n", $lines); - - $content = ''; - if ($this->isClosure()) { - preg_match('#function\s*\([^\)]*\)\s*(use\s*\([^\)]+\))?\s*\{(.*\;)?\s*\}#s', $functionLine, $matches); - if (isset($matches[0])) { - $content = $matches[0]; - } - } else { - $name = substr($this->getName(), strrpos($this->getName(), '\\')+1); - preg_match('#function\s+' . preg_quote($name) . '\s*\([^\)]*\)\s*{([^{}]+({[^}]+})*[^}]+)?}#', $functionLine, $matches); - if (isset($matches[0])) { - $content = $matches[0]; - } - } - - $docComment = $this->getDocComment(); - - return $includeDocBlock && $docComment ? $docComment . "\n" . $content : $content; - } - - /** - * Get method prototype - * - * @return array - */ - public function getPrototype($format = FunctionReflection::PROTOTYPE_AS_ARRAY) - { - $returnType = 'mixed'; - $docBlock = $this->getDocBlock(); - if ($docBlock) { - $return = $docBlock->getTag('return'); - $returnTypes = $return->getTypes(); - $returnType = count($returnTypes) > 1 ? implode('|', $returnTypes) : $returnTypes[0]; - } - - $prototype = array( - 'namespace' => $this->getNamespaceName(), - 'name' => substr($this->getName(), strlen($this->getNamespaceName()) + 1), - 'return' => $returnType, - 'arguments' => array(), - ); - - $parameters = $this->getParameters(); - foreach ($parameters as $parameter) { - $prototype['arguments'][$parameter->getName()] = array( - 'type' => $parameter->getType(), - 'required' => !$parameter->isOptional(), - 'by_ref' => $parameter->isPassedByReference(), - 'default' => $parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : null, - ); - } - - if ($format == FunctionReflection::PROTOTYPE_AS_STRING) { - $line = $prototype['return'] . ' ' . $prototype['name'] . '('; - $args = array(); - foreach ($prototype['arguments'] as $name => $argument) { - $argsLine = ($argument['type'] ? $argument['type'] . ' ' : '') . ($argument['by_ref'] ? '&' : '') . '$' . $name; - if (!$argument['required']) { - $argsLine .= ' = ' . var_export($argument['default'], true); - } - $args[] = $argsLine; - } - $line .= implode(', ', $args); - $line .= ')'; - - return $line; - } - - return $prototype; - } - - /** - * Get function parameters - * - * @return ParameterReflection[] - */ - public function getParameters() - { - $phpReflections = parent::getParameters(); - $zendReflections = array(); - while ($phpReflections && ($phpReflection = array_shift($phpReflections))) { - $instance = new ParameterReflection($this->getName(), $phpReflection->getName()); - $zendReflections[] = $instance; - unset($phpReflection); - } - unset($phpReflections); - - return $zendReflections; - } - - /** - * Get return type tag - * - * @throws Exception\InvalidArgumentException - * @return DocBlockReflection - */ - public function getReturn() - { - $docBlock = $this->getDocBlock(); - if (!$docBlock->hasTag('return')) { - throw new Exception\InvalidArgumentException( - 'Function does not specify an @return annotation tag; cannot determine return type' - ); - } - - $tag = $docBlock->getTag('return'); - - return new DocBlockReflection('@return ' . $tag->getDescription()); - } - - /** - * Get method body - * - * @return string|bool - */ - public function getBody() - { - $fileName = $this->getFileName(); - if (false === $fileName) { - throw new Exception\InvalidArgumentException( - 'Cannot determine internals functions body' - ); - } - - $startLine = $this->getStartLine(); - $endLine = $this->getEndLine(); - - // eval'd protect - if (preg_match('#\((\d+)\) : eval\(\)\'d code$#', $fileName, $matches)) { - $fileName = preg_replace('#\(\d+\) : eval\(\)\'d code$#', '', $fileName); - $startLine = $endLine = $matches[1]; - } - - $lines = array_slice( - file($fileName, FILE_IGNORE_NEW_LINES), - $startLine - 1, - ($endLine - ($startLine - 1)), - true - ); - - $functionLine = implode("\n", $lines); - - $body = false; - if ($this->isClosure()) { - preg_match('#function\s*\([^\)]*\)\s*(use\s*\([^\)]+\))?\s*\{(.*\;)\s*\}#s', $functionLine, $matches); - if (isset($matches[2])) { - $body = $matches[2]; - } - } else { - $name = substr($this->getName(), strrpos($this->getName(), '\\')+1); - preg_match('#function\s+' . $name . '\s*\([^\)]*\)\s*{([^{}]+({[^}]+})*[^}]+)}#', $functionLine, $matches); - if (isset($matches[1])) { - $body = $matches[1]; - } - } - - return $body; - } - - public function toString() - { - return $this->__toString(); - } - - /** - * Required due to bug in php - * - * @return string - */ - public function __toString() - { - return parent::__toString(); - } -} diff --git a/library/Zend/Code/Reflection/MethodReflection.php b/library/Zend/Code/Reflection/MethodReflection.php deleted file mode 100755 index 10a9b8ab4..000000000 --- a/library/Zend/Code/Reflection/MethodReflection.php +++ /dev/null @@ -1,487 +0,0 @@ -getDocComment()) { - return false; - } - - $instance = new DocBlockReflection($this); - - return $instance; - } - - /** - * @param AnnotationManager $annotationManager - * @return AnnotationScanner - */ - public function getAnnotations(AnnotationManager $annotationManager) - { - if (($docComment = $this->getDocComment()) == '') { - return false; - } - - if ($this->annotations) { - return $this->annotations; - } - - $cachingFileScanner = $this->createFileScanner($this->getFileName()); - $nameInformation = $cachingFileScanner->getClassNameInformation($this->getDeclaringClass()->getName()); - - if (!$nameInformation) { - return false; - } - - $this->annotations = new AnnotationScanner($annotationManager, $docComment, $nameInformation); - - return $this->annotations; - } - - /** - * Get start line (position) of method - * - * @param bool $includeDocComment - * @return int - */ - public function getStartLine($includeDocComment = false) - { - if ($includeDocComment) { - if ($this->getDocComment() != '') { - return $this->getDocBlock()->getStartLine(); - } - } - - return parent::getStartLine(); - } - - /** - * Get reflection of declaring class - * - * @return ClassReflection - */ - public function getDeclaringClass() - { - $phpReflection = parent::getDeclaringClass(); - $zendReflection = new ClassReflection($phpReflection->getName()); - unset($phpReflection); - - return $zendReflection; - } - - /** - * Get method prototype - * - * @return array - */ - public function getPrototype($format = MethodReflection::PROTOTYPE_AS_ARRAY) - { - $returnType = 'mixed'; - $docBlock = $this->getDocBlock(); - if ($docBlock) { - $return = $docBlock->getTag('return'); - $returnTypes = $return->getTypes(); - $returnType = count($returnTypes) > 1 ? implode('|', $returnTypes) : $returnTypes[0]; - } - - $declaringClass = $this->getDeclaringClass(); - $prototype = array( - 'namespace' => $declaringClass->getNamespaceName(), - 'class' => substr($declaringClass->getName(), strlen($declaringClass->getNamespaceName()) + 1), - 'name' => $this->getName(), - 'visibility' => ($this->isPublic() ? 'public' : ($this->isPrivate() ? 'private' : 'protected')), - 'return' => $returnType, - 'arguments' => array(), - ); - - $parameters = $this->getParameters(); - foreach ($parameters as $parameter) { - $prototype['arguments'][$parameter->getName()] = array( - 'type' => $parameter->getType(), - 'required' => !$parameter->isOptional(), - 'by_ref' => $parameter->isPassedByReference(), - 'default' => $parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : null, - ); - } - - if ($format == MethodReflection::PROTOTYPE_AS_STRING) { - $line = $prototype['visibility'] . ' ' . $prototype['return'] . ' ' . $prototype['name'] . '('; - $args = array(); - foreach ($prototype['arguments'] as $name => $argument) { - $argsLine = ($argument['type'] ? $argument['type'] . ' ' : '') . ($argument['by_ref'] ? '&' : '') . '$' . $name; - if (!$argument['required']) { - $argsLine .= ' = ' . var_export($argument['default'], true); - } - $args[] = $argsLine; - } - $line .= implode(', ', $args); - $line .= ')'; - - return $line; - } - - return $prototype; - } - - /** - * Get all method parameter reflection objects - * - * @return ParameterReflection[] - */ - public function getParameters() - { - $phpReflections = parent::getParameters(); - $zendReflections = array(); - while ($phpReflections && ($phpReflection = array_shift($phpReflections))) { - $instance = new ParameterReflection( - array($this->getDeclaringClass()->getName(), $this->getName()), - $phpReflection->getName() - ); - $zendReflections[] = $instance; - unset($phpReflection); - } - unset($phpReflections); - - return $zendReflections; - } - - /** - * Get method contents - * - * @param bool $includeDocBlock - * @return string|bool - */ - public function getContents($includeDocBlock = true) - { - $docComment = $this->getDocComment(); - $content = ($includeDocBlock && !empty($docComment)) ? $docComment . "\n" : ''; - $content .= $this->extractMethodContents(); - - return $content; - } - - /** - * Get method body - * - * @return string|bool - */ - public function getBody() - { - return $this->extractMethodContents(true); - } - - /** - * Tokenize method string and return concatenated body - * - * @param bool $bodyOnly - * @return string - */ - protected function extractMethodContents($bodyOnly=false) - { - $fileName = $this->getDeclaringClass()->getFileName(); - - if ((class_exists($this->class) && false === $fileName) || ! file_exists($fileName)) { - return ''; - } - - $lines = array_slice( - file($fileName, FILE_IGNORE_NEW_LINES), - $this->getStartLine() - 1, - ($this->getEndLine() - ($this->getStartLine() - 1)), - true - ); - - $functionLine = implode("\n", $lines); - $tokens = token_get_all(" $token) { - $tokenType = (is_array($token)) ? token_name($token[0]) : $token; - $tokenValue = (is_array($token)) ? $token[1] : $token; - - switch ($tokenType) { - case "T_FINAL": - case "T_ABSTRACT": - case "T_PUBLIC": - case "T_PROTECTED": - case "T_PRIVATE": - case "T_STATIC": - case "T_FUNCTION": - // check to see if we have a valid function - // then check if we are inside function and have a closure - if ($this->isValidFunction($tokens, $key, $this->getName())) { - if ($bodyOnly === false) { - //if first instance of tokenType grab prefixed whitespace - //and append to body - if ($capture === false) { - $body .= $this->extractPrefixedWhitespace($tokens, $key); - } - $body .= $tokenValue; - } - - $capture = true; - } else { - //closure test - if ($firstBrace && $tokenType == "T_FUNCTION") { - $body .= $tokenValue; - continue; - } - $capture = false; - continue; - } - break; - - case "{": - if ($capture === false) { - continue; - } - - if ($firstBrace === false) { - $firstBrace = true; - if ($bodyOnly === true) { - continue; - } - } - - $body .= $tokenValue; - break; - - case "}": - if ($capture === false) { - continue; - } - - //check to see if this is the last brace - if ($this->isEndingBrace($tokens, $key)) { - //capture the end brace if not bodyOnly - if ($bodyOnly === false) { - $body .= $tokenValue; - } - - break 2; - } - - $body .= $tokenValue; - break; - - default: - if ($capture === false) { - continue; - } - - // if returning body only wait for first brace before capturing - if ($bodyOnly === true && $firstBrace !== true) { - continue; - } - - $body .= $tokenValue; - break; - } - } - - //remove ending whitespace and return - return rtrim($body); - } - - /** - * Take current position and find any whitespace - * - * @param $haystack - * @param $position - * @return string - */ - protected function extractPrefixedWhitespace($haystack, $position) - { - $content = ''; - $count = count($haystack); - if ($position+1 == $count) { - return $content; - } - - for ($i = $position-1;$i >= 0;$i--) { - $tokenType = (is_array($haystack[$i])) ? token_name($haystack[$i][0]) : $haystack[$i]; - $tokenValue = (is_array($haystack[$i])) ? $haystack[$i][1] : $haystack[$i]; - - //search only for whitespace - if ($tokenType == "T_WHITESPACE") { - $content .= $tokenValue; - } else { - break; - } - } - - return $content; - } - - /** - * Test for ending brace - * - * @param $haystack - * @param $position - * @return bool - */ - protected function isEndingBrace($haystack, $position) - { - $count = count($haystack); - - //advance one position - $position = $position+1; - - if ($position == $count) { - return true; - } - - for ($i = $position;$i < $count; $i++) { - $tokenType = (is_array($haystack[$i])) ? token_name($haystack[$i][0]) : $haystack[$i]; - switch ($tokenType) { - case "T_FINAL": - case "T_ABSTRACT": - case "T_PUBLIC": - case "T_PROTECTED": - case "T_PRIVATE": - case "T_STATIC": - return true; - - case "T_FUNCTION": - // If a function is encountered and that function is not a closure - // then return true. otherwise the function is a closure, return false - if ($this->isValidFunction($haystack, $i)) { - return true; - } - return false; - - case "}": - case ";"; - case "T_BREAK": - case "T_CATCH": - case "T_DO": - case "T_ECHO": - case "T_ELSE": - case "T_ELSEIF": - case "T_EVAL": - case "T_EXIT": - case "T_FINALLY": - case "T_FOR": - case "T_FOREACH": - case "T_GOTO": - case "T_IF": - case "T_INCLUDE": - case "T_INCLUDE_ONCE": - case "T_PRINT": - case "T_STRING": - case "T_STRING_VARNAME": - case "T_THROW": - case "T_USE": - case "T_VARIABLE": - case "T_WHILE": - case "T_YIELD": - - return false; - } - } - } - - /** - * Test to see if current position is valid function or - * closure. Returns true if it's a function and NOT a closure - * - * @param $haystack - * @param $position - * @return bool - */ - protected function isValidFunction($haystack, $position, $functionName = null) - { - $isValid = false; - $count = count($haystack); - for ($i = $position+1;$i < $count; $i++) { - $tokenType = (is_array($haystack[$i])) ? token_name($haystack[$i][0]) : $haystack[$i]; - $tokenValue = (is_array($haystack[$i])) ? $haystack[$i][1] : $haystack[$i]; - - //check for occurance of ( or - if ($tokenType == "T_STRING") { - //check to see if function name is passed, if so validate against that - if ($functionName !== null && $tokenValue != $functionName) { - $isValid = false; - break; - } - - $isValid = true; - break; - } elseif ($tokenValue == "(") { - break; - } - } - - return $isValid; - } - - public function toString() - { - return parent::__toString(); - } - - public function __toString() - { - return parent::__toString(); - } - - /** - * Creates a new FileScanner instance. - * - * By having this as a seperate method it allows the method to be overridden - * if a different FileScanner is needed. - * - * @param string $filename - * - * @return CachingFileScanner - */ - protected function createFileScanner($filename) - { - return new CachingFileScanner($filename); - } -} diff --git a/library/Zend/Code/Reflection/ParameterReflection.php b/library/Zend/Code/Reflection/ParameterReflection.php deleted file mode 100755 index e6239abce..000000000 --- a/library/Zend/Code/Reflection/ParameterReflection.php +++ /dev/null @@ -1,110 +0,0 @@ -getName()); - unset($phpReflection); - - return $zendReflection; - } - - /** - * Get class reflection object - * - * @return ClassReflection - */ - public function getClass() - { - $phpReflection = parent::getClass(); - if ($phpReflection == null) { - return null; - } - - $zendReflection = new ClassReflection($phpReflection->getName()); - unset($phpReflection); - - return $zendReflection; - } - - /** - * Get declaring function reflection object - * - * @return FunctionReflection|MethodReflection - */ - public function getDeclaringFunction() - { - $phpReflection = parent::getDeclaringFunction(); - if ($phpReflection instanceof \ReflectionMethod) { - $zendReflection = new MethodReflection($this->getDeclaringClass()->getName(), $phpReflection->getName()); - } else { - $zendReflection = new FunctionReflection($phpReflection->getName()); - } - unset($phpReflection); - - return $zendReflection; - } - - /** - * Get parameter type - * - * @return string - */ - public function getType() - { - if ($this->isArray()) { - return 'array'; - } elseif (method_exists($this, 'isCallable') && $this->isCallable()) { - return 'callable'; - } - - if (($class = $this->getClass()) instanceof \ReflectionClass) { - return $class->getName(); - } - - $docBlock = $this->getDeclaringFunction()->getDocBlock(); - if (!$docBlock instanceof DocBlockReflection) { - return null; - } - - $params = $docBlock->getTags('param'); - if (isset($params[$this->getPosition()])) { - return $params[$this->getPosition()]->getType(); - } - - return null; - } - - public function toString() - { - return parent::__toString(); - } - - public function __toString() - { - return parent::__toString(); - } -} diff --git a/library/Zend/Code/Reflection/PropertyReflection.php b/library/Zend/Code/Reflection/PropertyReflection.php deleted file mode 100755 index c9b5a8d25..000000000 --- a/library/Zend/Code/Reflection/PropertyReflection.php +++ /dev/null @@ -1,111 +0,0 @@ -getName()); - unset($phpReflection); - - return $zendReflection; - } - - /** - * Get DocBlock comment - * - * @return string|false False if no DocBlock defined - */ - public function getDocComment() - { - return parent::getDocComment(); - } - - /** - * @return false|DocBlockReflection - */ - public function getDocBlock() - { - if (!($docComment = $this->getDocComment())) { - return false; - } - - $docBlockReflection = new DocBlockReflection($docComment); - - return $docBlockReflection; - } - - /** - * @param AnnotationManager $annotationManager - * @return AnnotationScanner - */ - public function getAnnotations(AnnotationManager $annotationManager) - { - if (null !== $this->annotations) { - return $this->annotations; - } - - if (($docComment = $this->getDocComment()) == '') { - return false; - } - - $class = $this->getDeclaringClass(); - $cachingFileScanner = $this->createFileScanner($class->getFileName()); - $nameInformation = $cachingFileScanner->getClassNameInformation($class->getName()); - - if (!$nameInformation) { - return false; - } - - $this->annotations = new AnnotationScanner($annotationManager, $docComment, $nameInformation); - - return $this->annotations; - } - - public function toString() - { - return $this->__toString(); - } - - /** - * Creates a new FileScanner instance. - * - * By having this as a seperate method it allows the method to be overridden - * if a different FileScanner is needed. - * - * @param string $filename - * - * @return CachingFileScanner - */ - protected function createFileScanner($filename) - { - return new CachingFileScanner($filename); - } -} diff --git a/library/Zend/Code/Reflection/ReflectionInterface.php b/library/Zend/Code/Reflection/ReflectionInterface.php deleted file mode 100755 index ed5ffd46c..000000000 --- a/library/Zend/Code/Reflection/ReflectionInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -directories as $scanner) { - $classes += $scanner->getClasses(); - } - if ($returnScannerClass) { - foreach ($classes as $index => $class) { - $classes[$index] = $this->getClass($class, $returnScannerClass, $returnDerivedScannerClass); - } - } - - return $classes; - } - - /** - * @param string $class - * @return bool - */ - public function hasClass($class) - { - foreach ($this->directories as $scanner) { - if ($scanner->hasClass($class)) { - break; - } else { - unset($scanner); - } - } - - return (isset($scanner)); - } - - /** - * @param string $class - * @param bool $returnScannerClass - * @param bool $returnDerivedScannerClass - * @return ClassScanner|DerivedClassScanner - * @throws Exception\RuntimeException - */ - public function getClass($class, $returnScannerClass = true, $returnDerivedScannerClass = false) - { - foreach ($this->directories as $scanner) { - if ($scanner->hasClass($class)) { - break; - } else { - unset($scanner); - } - } - - if (!isset($scanner)) { - throw new Exception\RuntimeException('Class by that name was not found.'); - } - - $classScanner = $scanner->getClass($class); - - return new DerivedClassScanner($classScanner, $this); - } - - /** - * @param bool $returnScannerClass - */ - public function getFunctions($returnScannerClass = false) - { - $this->scan(); - - if (!$returnScannerClass) { - $functions = array(); - foreach ($this->infos as $info) { - if ($info['type'] == 'function') { - $functions[] = $info['name']; - } - } - - return $functions; - } - $scannerClass = new FunctionScanner(); - // @todo - } -} diff --git a/library/Zend/Code/Scanner/AnnotationScanner.php b/library/Zend/Code/Scanner/AnnotationScanner.php deleted file mode 100755 index 76e8144c0..000000000 --- a/library/Zend/Code/Scanner/AnnotationScanner.php +++ /dev/null @@ -1,338 +0,0 @@ -annotationManager = $annotationManager; - $this->docComment = $docComment; - $this->nameInformation = $nameInformation; - $this->scan($this->tokenize()); - } - - /** - * @param NameInformation $nameInformation - */ - public function setNameInformation(NameInformation $nameInformation) - { - $this->nameInformation = $nameInformation; - } - - /** - * @param array $tokens - */ - protected function scan(array $tokens) - { - $annotations = array(); - $annotationIndex = -1; - $contentEnd = false; - - reset($tokens); - - SCANNER_TOP: - $token = current($tokens); - - switch ($token[0]) { - - case 'ANNOTATION_CLASS': - - $contentEnd = false; - $annotationIndex++; - $class = substr($token[1], 1); - $class = $this->nameInformation->resolveName($class); - $annotations[$annotationIndex] = array($class, null); - goto SCANNER_CONTINUE; - // goto no break needed - - case 'ANNOTATION_CONTENT_START': - - $annotations[$annotationIndex][1] = ''; - //fall-through - - case 'ANNOTATION_CONTENT_END': - case 'ANNOTATION_CONTENT': - case 'ANNOTATION_WHITESPACE': - case 'ANNOTATION_NEWLINE': - - if (!$contentEnd && isset($annotations[$annotationIndex]) && is_string($annotations[$annotationIndex][1])) { - $annotations[$annotationIndex][1] .= $token[1]; - } - - if ($token[0] === 'ANNOTATION_CONTENT_END') { - $contentEnd = true; - } - - goto SCANNER_CONTINUE; - } - - SCANNER_CONTINUE: - if (next($tokens) === false) { - goto SCANNER_END; - } - goto SCANNER_TOP; - - SCANNER_END: - - foreach ($annotations as $annotation) { - $annotation[] = '@' . $annotation[0] . $annotation[1]; - $annotationObject = $this->annotationManager->createAnnotation($annotation); - if ($annotationObject) { - $this->append($annotationObject); - } - } - } - - /** - * @return array - */ - protected function tokenize() - { - static $CONTEXT_DOCBLOCK = 0x01; - static $CONTEXT_ASTERISK = 0x02; - static $CONTEXT_CLASS = 0x04; - static $CONTEXT_CONTENT = 0x08; - - $context = 0x00; - $stream = $this->docComment; - $streamIndex = null; - $tokens = array(); - $tokenIndex = null; - $currentChar = null; - $currentWord = null; - $currentLine = null; - - $annotationParentCount = 0; - - $MACRO_STREAM_ADVANCE_CHAR = function ($positionsForward = 1) use (&$stream, &$streamIndex, &$currentChar, &$currentWord, &$currentLine) { - $positionsForward = ($positionsForward > 0) ? $positionsForward : 1; - $streamIndex = ($streamIndex === null) ? 0 : $streamIndex + $positionsForward; - if (!isset($stream[$streamIndex])) { - $currentChar = false; - - return false; - } - $currentChar = $stream[$streamIndex]; - $matches = array(); - $currentLine = (preg_match('#(.*)\n#', $stream, $matches, null, $streamIndex) === 1) ? $matches[1] : substr($stream, $streamIndex); - if ($currentChar === ' ') { - $currentWord = (preg_match('#( +)#', $currentLine, $matches) === 1) ? $matches[1] : $currentLine; - } else { - $currentWord = (($matches = strpos($currentLine, ' ')) !== false) ? substr($currentLine, 0, $matches) : $currentLine; - } - - return $currentChar; - }; - $MACRO_STREAM_ADVANCE_WORD = function () use (&$currentWord, &$MACRO_STREAM_ADVANCE_CHAR) { - return $MACRO_STREAM_ADVANCE_CHAR(strlen($currentWord)); - }; - $MACRO_STREAM_ADVANCE_LINE = function () use (&$currentLine, &$MACRO_STREAM_ADVANCE_CHAR) { - return $MACRO_STREAM_ADVANCE_CHAR(strlen($currentLine)); - }; - $MACRO_TOKEN_ADVANCE = function () use (&$tokenIndex, &$tokens) { - $tokenIndex = ($tokenIndex === null) ? 0 : $tokenIndex + 1; - $tokens[$tokenIndex] = array('ANNOTATION_UNKNOWN', ''); - }; - $MACRO_TOKEN_SET_TYPE = function ($type) use (&$tokenIndex, &$tokens) { - $tokens[$tokenIndex][0] = $type; - }; - $MACRO_TOKEN_APPEND_CHAR = function () use (&$currentChar, &$tokens, &$tokenIndex) { - $tokens[$tokenIndex][1] .= $currentChar; - }; - $MACRO_TOKEN_APPEND_WORD = function () use (&$currentWord, &$tokens, &$tokenIndex) { - $tokens[$tokenIndex][1] .= $currentWord; - }; - $MACRO_TOKEN_APPEND_LINE = function () use (&$currentLine, &$tokens, &$tokenIndex) { - $tokens[$tokenIndex][1] .= $currentLine; - }; - $MACRO_HAS_CONTEXT = function ($which) use (&$context) { - return (($context & $which) === $which); - }; - - $MACRO_STREAM_ADVANCE_CHAR(); - $MACRO_TOKEN_ADVANCE(); - - TOKENIZER_TOP: - - if ($context === 0x00 && $currentChar === '/' && $currentWord === '/**') { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_COMMENTSTART'); - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - $context |= $CONTEXT_DOCBLOCK; - $context |= $CONTEXT_ASTERISK; - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($MACRO_HAS_CONTEXT($CONTEXT_CLASS)) { - if (in_array($currentChar, array(' ', '(', "\n"))) { - $context &= ~$CONTEXT_CLASS; - $MACRO_TOKEN_ADVANCE(); - } else { - $MACRO_TOKEN_APPEND_CHAR(); - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - } - - if ($currentChar === "\n") { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_NEWLINE'); - $MACRO_TOKEN_APPEND_CHAR(); - $MACRO_TOKEN_ADVANCE(); - $context &= ~$CONTEXT_ASTERISK; - $context &= ~$CONTEXT_CLASS; - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === ' ') { - $MACRO_TOKEN_SET_TYPE(($MACRO_HAS_CONTEXT($CONTEXT_ASTERISK)) ? 'ANNOTATION_WHITESPACE' : 'ANNOTATION_WHITESPACE_INDENT'); - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($MACRO_HAS_CONTEXT($CONTEXT_CONTENT) && $MACRO_HAS_CONTEXT($CONTEXT_ASTERISK)) { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_CONTENT'); - $annotationParentCount += substr_count($currentWord, '('); - $annotationParentCount -= substr_count($currentWord, ')'); - - if ($annotationParentCount === 0) { - $context &= ~$CONTEXT_CONTENT; - $MACRO_TOKEN_SET_TYPE('ANNOTATION_CONTENT_END'); - } - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === '(' && $tokens[$tokenIndex - 1][0] === 'ANNOTATION_CLASS') { - $context |= $CONTEXT_CONTENT; - $annotationParentCount = 1; - $MACRO_TOKEN_SET_TYPE('ANNOTATION_CONTENT_START'); - $MACRO_TOKEN_APPEND_CHAR(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($MACRO_HAS_CONTEXT($CONTEXT_DOCBLOCK) && $currentWord === '*/') { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_COMMENTEND'); - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - $context &= ~$CONTEXT_DOCBLOCK; - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === '*') { - if ($MACRO_HAS_CONTEXT($CONTEXT_DOCBLOCK) && ($MACRO_HAS_CONTEXT($CONTEXT_ASTERISK))) { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_IGNORE'); - } else { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_ASTERISK'); - $context |= $CONTEXT_ASTERISK; - } - $MACRO_TOKEN_APPEND_CHAR(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === '@') { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_CLASS'); - $context |= $CONTEXT_CLASS; - $MACRO_TOKEN_APPEND_CHAR(); - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - TOKENIZER_CONTINUE: - - if ($context && $CONTEXT_CONTENT) { - $MACRO_TOKEN_APPEND_CHAR(); - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - } else { - $MACRO_TOKEN_SET_TYPE('ANNOTATION_IGNORE'); - $MACRO_TOKEN_APPEND_LINE(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_LINE() === false) { - goto TOKENIZER_END; - } - } - goto TOKENIZER_TOP; - - TOKENIZER_END: - - array_pop($tokens); - - return $tokens; - } -} diff --git a/library/Zend/Code/Scanner/CachingFileScanner.php b/library/Zend/Code/Scanner/CachingFileScanner.php deleted file mode 100755 index cb7286704..000000000 --- a/library/Zend/Code/Scanner/CachingFileScanner.php +++ /dev/null @@ -1,160 +0,0 @@ -fileScanner = static::$cache[$cacheId]; - } else { - $this->fileScanner = new FileScanner($file, $annotationManager); - static::$cache[$cacheId] = $this->fileScanner; - } - } - - /** - * @return void - */ - public static function clearCache() - { - static::$cache = array(); - } - - /** - * @return AnnotationManager - */ - public function getAnnotationManager() - { - return $this->fileScanner->getAnnotationManager(); - } - - /** - * @return array|null|string - */ - public function getFile() - { - return $this->fileScanner->getFile(); - } - - /** - * @return null|string - */ - public function getDocComment() - { - return $this->fileScanner->getDocComment(); - } - - /** - * @return array - */ - public function getNamespaces() - { - return $this->fileScanner->getNamespaces(); - } - - /** - * @param null|string $namespace - * @return array|null - */ - public function getUses($namespace = null) - { - return $this->fileScanner->getUses($namespace); - } - - /** - * @return array - */ - public function getIncludes() - { - return $this->fileScanner->getIncludes(); - } - - /** - * @return array - */ - public function getClassNames() - { - return $this->fileScanner->getClassNames(); - } - - /** - * @return array - */ - public function getClasses() - { - return $this->fileScanner->getClasses(); - } - - /** - * @param int|string $className - * @return ClassScanner - */ - public function getClass($className) - { - return $this->fileScanner->getClass($className); - } - - /** - * @param string $className - * @return bool|null|NameInformation - */ - public function getClassNameInformation($className) - { - return $this->fileScanner->getClassNameInformation($className); - } - - /** - * @return array - */ - public function getFunctionNames() - { - return $this->fileScanner->getFunctionNames(); - } - - /** - * @return array - */ - public function getFunctions() - { - return $this->fileScanner->getFunctions(); - } -} diff --git a/library/Zend/Code/Scanner/ClassScanner.php b/library/Zend/Code/Scanner/ClassScanner.php deleted file mode 100755 index 2efc5539c..000000000 --- a/library/Zend/Code/Scanner/ClassScanner.php +++ /dev/null @@ -1,972 +0,0 @@ -tokens = $classTokens; - $this->nameInformation = $nameInformation; - } - - /** - * Get annotations - * - * @param Annotation\AnnotationManager $annotationManager - * @return Annotation\AnnotationCollection - */ - public function getAnnotations(Annotation\AnnotationManager $annotationManager) - { - if (($docComment = $this->getDocComment()) == '') { - return false; - } - - return new AnnotationScanner($annotationManager, $docComment, $this->nameInformation); - } - - /** - * Return documentation comment - * - * @return null|string - */ - public function getDocComment() - { - $this->scan(); - - return $this->docComment; - } - - /** - * Return documentation block - * - * @return false|DocBlockScanner - */ - public function getDocBlock() - { - if (!$docComment = $this->getDocComment()) { - return false; - } - - return new DocBlockScanner($docComment); - } - - /** - * Return a name of class - * - * @return null|string - */ - public function getName() - { - $this->scan(); - return $this->name; - } - - /** - * Return short name of class - * - * @return null|string - */ - public function getShortName() - { - $this->scan(); - return $this->shortName; - } - - /** - * Return number of first line - * - * @return int|null - */ - public function getLineStart() - { - $this->scan(); - return $this->lineStart; - } - - /** - * Return number of last line - * - * @return int|null - */ - public function getLineEnd() - { - $this->scan(); - return $this->lineEnd; - } - - /** - * Verify if class is final - * - * @return bool - */ - public function isFinal() - { - $this->scan(); - return $this->isFinal; - } - - /** - * Verify if class is instantiable - * - * @return bool - */ - public function isInstantiable() - { - $this->scan(); - return (!$this->isAbstract && !$this->isInterface); - } - - /** - * Verify if class is an abstract class - * - * @return bool - */ - public function isAbstract() - { - $this->scan(); - return $this->isAbstract; - } - - /** - * Verify if class is an interface - * - * @return bool - */ - public function isInterface() - { - $this->scan(); - return $this->isInterface; - } - - /** - * Verify if class has parent - * - * @return bool - */ - public function hasParentClass() - { - $this->scan(); - return ($this->parentClass != null); - } - - /** - * Return a name of parent class - * - * @return null|string - */ - public function getParentClass() - { - $this->scan(); - return $this->parentClass; - } - - /** - * Return a list of interface names - * - * @return array - */ - public function getInterfaces() - { - $this->scan(); - return $this->interfaces; - } - - /** - * Return a list of constant names - * - * @return array - */ - public function getConstantNames() - { - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'constant') { - continue; - } - - $return[] = $info['name']; - } - - return $return; - } - - /** - * Return a list of constants - * - * @param bool $namesOnly Set false to return instances of ConstantScanner - * @return array|ConstantScanner[] - */ - public function getConstants($namesOnly = true) - { - if (true === $namesOnly) { - trigger_error('Use method getConstantNames() instead', E_USER_DEPRECATED); - return $this->getConstantNames(); - } - - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'constant') { - continue; - } - - $return[] = $this->getConstant($info['name']); - } - - return $return; - } - - /** - * Return a single constant by given name or index of info - * - * @param string|int $constantNameOrInfoIndex - * @throws Exception\InvalidArgumentException - * @return bool|ConstantScanner - */ - public function getConstant($constantNameOrInfoIndex) - { - $this->scan(); - - if (is_int($constantNameOrInfoIndex)) { - $info = $this->infos[$constantNameOrInfoIndex]; - if ($info['type'] != 'constant') { - throw new Exception\InvalidArgumentException('Index of info offset is not about a constant'); - } - } elseif (is_string($constantNameOrInfoIndex)) { - $constantFound = false; - foreach ($this->infos as $info) { - if ($info['type'] === 'constant' && $info['name'] === $constantNameOrInfoIndex) { - $constantFound = true; - break; - } - } - if (!$constantFound) { - return false; - } - } else { - throw new Exception\InvalidArgumentException('Invalid constant name of info index type. Must be of type int or string'); - } - if (!isset($info)) { - return false; - } - $p = new ConstantScanner( - array_slice($this->tokens, $info['tokenStart'], $info['tokenEnd'] - $info['tokenStart'] + 1), - $this->nameInformation - ); - $p->setClass($this->name); - $p->setScannerClass($this); - return $p; - } - - /** - * Verify if class has constant - * - * @param string $name - * @return bool - */ - public function hasConstant($name) - { - $this->scan(); - - foreach ($this->infos as $info) { - if ($info['type'] === 'constant' && $info['name'] === $name) { - return true; - } - } - - return false; - } - - /** - * Return a list of property names - * - * @return array - */ - public function getPropertyNames() - { - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'property') { - continue; - } - - $return[] = $info['name']; - } - - return $return; - } - - /** - * Return a list of properties - * - * @return PropertyScanner - */ - public function getProperties() - { - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'property') { - continue; - } - - $return[] = $this->getProperty($info['name']); - } - - return $return; - } - - /** - * Return a single property by given name or index of info - * - * @param string|int $propertyNameOrInfoIndex - * @throws Exception\InvalidArgumentException - * @return bool|PropertyScanner - */ - public function getProperty($propertyNameOrInfoIndex) - { - $this->scan(); - - if (is_int($propertyNameOrInfoIndex)) { - $info = $this->infos[$propertyNameOrInfoIndex]; - if ($info['type'] != 'property') { - throw new Exception\InvalidArgumentException('Index of info offset is not about a property'); - } - } elseif (is_string($propertyNameOrInfoIndex)) { - $propertyFound = false; - foreach ($this->infos as $info) { - if ($info['type'] === 'property' && $info['name'] === $propertyNameOrInfoIndex) { - $propertyFound = true; - break; - } - } - if (!$propertyFound) { - return false; - } - } else { - throw new Exception\InvalidArgumentException('Invalid property name of info index type. Must be of type int or string'); - } - if (!isset($info)) { - return false; - } - $p = new PropertyScanner( - array_slice($this->tokens, $info['tokenStart'], $info['tokenEnd'] - $info['tokenStart'] + 1), - $this->nameInformation - ); - $p->setClass($this->name); - $p->setScannerClass($this); - return $p; - } - - /** - * Verify if class has property - * - * @param string $name - * @return bool - */ - public function hasProperty($name) - { - $this->scan(); - - foreach ($this->infos as $info) { - if ($info['type'] === 'property' && $info['name'] === $name) { - return true; - } - } - - return false; - } - - /** - * Return a list of method names - * - * @return array - */ - public function getMethodNames() - { - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'method') { - continue; - } - - $return[] = $info['name']; - } - - return $return; - } - - /** - * Return a list of methods - * - * @return MethodScanner[] - */ - public function getMethods() - { - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'method') { - continue; - } - - $return[] = $this->getMethod($info['name']); - } - - return $return; - } - - /** - * Return a single method by given name or index of info - * - * @param string|int $methodNameOrInfoIndex - * @throws Exception\InvalidArgumentException - * @return MethodScanner - */ - public function getMethod($methodNameOrInfoIndex) - { - $this->scan(); - - if (is_int($methodNameOrInfoIndex)) { - $info = $this->infos[$methodNameOrInfoIndex]; - if ($info['type'] != 'method') { - throw new Exception\InvalidArgumentException('Index of info offset is not about a method'); - } - } elseif (is_string($methodNameOrInfoIndex)) { - $methodFound = false; - foreach ($this->infos as $info) { - if ($info['type'] === 'method' && $info['name'] === $methodNameOrInfoIndex) { - $methodFound = true; - break; - } - } - if (!$methodFound) { - return false; - } - } - if (!isset($info)) { - // @todo find a way to test this - die('Massive Failure, test this'); - } - - $m = new MethodScanner( - array_slice($this->tokens, $info['tokenStart'], $info['tokenEnd'] - $info['tokenStart'] + 1), - $this->nameInformation - ); - $m->setClass($this->name); - $m->setScannerClass($this); - - return $m; - } - - /** - * Verify if class has method by given name - * - * @param string $name - * @return bool - */ - public function hasMethod($name) - { - $this->scan(); - - foreach ($this->infos as $info) { - if ($info['type'] === 'method' && $info['name'] === $name) { - return true; - } - } - - return false; - } - - public static function export() - { - // @todo - } - - public function __toString() - { - // @todo - } - - /** - * Scan tokens - * - * @return void - * @throws Exception\RuntimeException - */ - protected function scan() - { - if ($this->isScanned) { - return; - } - - if (!$this->tokens) { - throw new Exception\RuntimeException('No tokens were provided'); - } - - /** - * Variables & Setup - */ - - $tokens = &$this->tokens; // localize - $infos = &$this->infos; // localize - $tokenIndex = null; - $token = null; - $tokenType = null; - $tokenContent = null; - $tokenLine = null; - $namespace = null; - $infoIndex = 0; - $braceCount = 0; - - /* - * MACRO creation - */ - $MACRO_TOKEN_ADVANCE = function () use (&$tokens, &$tokenIndex, &$token, &$tokenType, &$tokenContent, &$tokenLine) { - static $lastTokenArray = null; - $tokenIndex = ($tokenIndex === null) ? 0 : $tokenIndex + 1; - if (!isset($tokens[$tokenIndex])) { - $token = false; - $tokenContent = false; - $tokenType = false; - $tokenLine = false; - - return false; - } - $token = $tokens[$tokenIndex]; - - if (is_string($token)) { - $tokenType = null; - $tokenContent = $token; - $tokenLine = $tokenLine + substr_count( - $lastTokenArray[1], - "\n" - ); // adjust token line by last known newline count - } else { - $lastTokenArray = $token; - list($tokenType, $tokenContent, $tokenLine) = $token; - } - - return $tokenIndex; - }; - $MACRO_INFO_ADVANCE = function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { - $infos[$infoIndex]['tokenEnd'] = $tokenIndex; - $infos[$infoIndex]['lineEnd'] = $tokenLine; - $infoIndex++; - - return $infoIndex; - }; - - /** - * START FINITE STATE MACHINE FOR SCANNING TOKENS - */ - - // Initialize token - $MACRO_TOKEN_ADVANCE(); - - SCANNER_TOP: - - switch ($tokenType) { - - case T_DOC_COMMENT: - - $this->docComment = $tokenContent; - goto SCANNER_CONTINUE; - //goto no break needed - - case T_FINAL: - case T_ABSTRACT: - case T_CLASS: - case T_INTERFACE: - - // CLASS INFORMATION - - $classContext = null; - $classInterfaceIndex = 0; - - SCANNER_CLASS_INFO_TOP: - - if (is_string($tokens[$tokenIndex + 1]) && $tokens[$tokenIndex + 1] === '{') { - goto SCANNER_CLASS_INFO_END; - } - - $this->lineStart = $tokenLine; - - switch ($tokenType) { - - case T_FINAL: - $this->isFinal = true; - goto SCANNER_CLASS_INFO_CONTINUE; - //goto no break needed - - case T_ABSTRACT: - $this->isAbstract = true; - goto SCANNER_CLASS_INFO_CONTINUE; - //goto no break needed - - case T_INTERFACE: - $this->isInterface = true; - //fall-through - case T_CLASS: - $this->shortName = $tokens[$tokenIndex + 2][1]; - if ($this->nameInformation && $this->nameInformation->hasNamespace()) { - $this->name = $this->nameInformation->getNamespace() . '\\' . $this->shortName; - } else { - $this->name = $this->shortName; - } - goto SCANNER_CLASS_INFO_CONTINUE; - //goto no break needed - - case T_NS_SEPARATOR: - case T_STRING: - switch ($classContext) { - case T_EXTENDS: - $this->shortParentClass .= $tokenContent; - break; - case T_IMPLEMENTS: - $this->shortInterfaces[$classInterfaceIndex] .= $tokenContent; - break; - } - goto SCANNER_CLASS_INFO_CONTINUE; - //goto no break needed - - case T_EXTENDS: - case T_IMPLEMENTS: - $classContext = $tokenType; - if (($this->isInterface && $classContext === T_EXTENDS) || $classContext === T_IMPLEMENTS) { - $this->shortInterfaces[$classInterfaceIndex] = ''; - } elseif (!$this->isInterface && $classContext === T_EXTENDS) { - $this->shortParentClass = ''; - } - goto SCANNER_CLASS_INFO_CONTINUE; - //goto no break needed - - case null: - if ($classContext == T_IMPLEMENTS && $tokenContent == ',') { - $classInterfaceIndex++; - $this->shortInterfaces[$classInterfaceIndex] = ''; - } - - } - - SCANNER_CLASS_INFO_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_CLASS_INFO_TOP; - - SCANNER_CLASS_INFO_END: - - goto SCANNER_CONTINUE; - - } - - if ($tokenType === null && $tokenContent === '{' && $braceCount === 0) { - $braceCount++; - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - - SCANNER_CLASS_BODY_TOP: - - if ($braceCount === 0) { - goto SCANNER_CLASS_BODY_END; - } - - switch ($tokenType) { - - case T_CONST: - - $infos[$infoIndex] = array( - 'type' => 'constant', - 'tokenStart' => $tokenIndex, - 'tokenEnd' => null, - 'lineStart' => $tokenLine, - 'lineEnd' => null, - 'name' => null, - 'value' => null, - ); - - SCANNER_CLASS_BODY_CONST_TOP: - - if ($tokenContent === ';') { - goto SCANNER_CLASS_BODY_CONST_END; - } - - if ($tokenType === T_STRING && null === $infos[$infoIndex]['name']) { - $infos[$infoIndex]['name'] = $tokenContent; - } - - SCANNER_CLASS_BODY_CONST_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_CLASS_BODY_CONST_TOP; - - SCANNER_CLASS_BODY_CONST_END: - - $MACRO_INFO_ADVANCE(); - goto SCANNER_CLASS_BODY_CONTINUE; - //goto no break needed - - case T_DOC_COMMENT: - case T_PUBLIC: - case T_PROTECTED: - case T_PRIVATE: - case T_ABSTRACT: - case T_FINAL: - case T_VAR: - case T_FUNCTION: - - $infos[$infoIndex] = array( - 'type' => null, - 'tokenStart' => $tokenIndex, - 'tokenEnd' => null, - 'lineStart' => $tokenLine, - 'lineEnd' => null, - 'name' => null, - ); - - $memberContext = null; - $methodBodyStarted = false; - - SCANNER_CLASS_BODY_MEMBER_TOP: - - if ($memberContext === 'method') { - switch ($tokenContent) { - case '{': - $methodBodyStarted = true; - $braceCount++; - goto SCANNER_CLASS_BODY_MEMBER_CONTINUE; - //goto no break needed - case '}': - $braceCount--; - goto SCANNER_CLASS_BODY_MEMBER_CONTINUE; - - case ';': - $infos[$infoIndex]['tokenEnd'] = $tokenIndex; - goto SCANNER_CLASS_BODY_MEMBER_CONTINUE; - } - } - - if ($memberContext !== null) { - if ( - ($memberContext === 'property' && $tokenContent === ';') - || ($memberContext === 'method' && $methodBodyStarted && $braceCount === 1) - || ($memberContext === 'method' && $this->isInterface && $tokenContent === ';') - ) { - goto SCANNER_CLASS_BODY_MEMBER_END; - } - } - - switch ($tokenType) { - - case T_CONST: - $memberContext = 'constant'; - $infos[$infoIndex]['type'] = 'constant'; - goto SCANNER_CLASS_BODY_CONST_CONTINUE; - //goto no break needed - - case T_VARIABLE: - if ($memberContext === null) { - $memberContext = 'property'; - $infos[$infoIndex]['type'] = 'property'; - $infos[$infoIndex]['name'] = ltrim($tokenContent, '$'); - } - goto SCANNER_CLASS_BODY_MEMBER_CONTINUE; - //goto no break needed - - case T_FUNCTION: - $memberContext = 'method'; - $infos[$infoIndex]['type'] = 'method'; - goto SCANNER_CLASS_BODY_MEMBER_CONTINUE; - //goto no break needed - - case T_STRING: - if ($memberContext === 'method' && null === $infos[$infoIndex]['name']) { - $infos[$infoIndex]['name'] = $tokenContent; - } - goto SCANNER_CLASS_BODY_MEMBER_CONTINUE; - //goto no break needed - } - - SCANNER_CLASS_BODY_MEMBER_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_CLASS_BODY_MEMBER_TOP; - - SCANNER_CLASS_BODY_MEMBER_END: - - $memberContext = null; - $MACRO_INFO_ADVANCE(); - goto SCANNER_CLASS_BODY_CONTINUE; - //goto no break needed - - case null: // no type, is a string - - switch ($tokenContent) { - case '{': - $braceCount++; - goto SCANNER_CLASS_BODY_CONTINUE; - //fall-through - case '}': - $braceCount--; - goto SCANNER_CLASS_BODY_CONTINUE; - } - } - - SCANNER_CLASS_BODY_CONTINUE: - - if ($braceCount === 0 || $MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_CONTINUE; - } - goto SCANNER_CLASS_BODY_TOP; - - SCANNER_CLASS_BODY_END: - - goto SCANNER_CONTINUE; - } - - SCANNER_CONTINUE: - - if ($tokenContent === '}') { - $this->lineEnd = $tokenLine; - } - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_TOP; - - SCANNER_END: - - // process short names - if ($this->nameInformation) { - if ($this->shortParentClass) { - $this->parentClass = $this->nameInformation->resolveName($this->shortParentClass); - } - if ($this->shortInterfaces) { - foreach ($this->shortInterfaces as $siIndex => $si) { - $this->interfaces[$siIndex] = $this->nameInformation->resolveName($si); - } - } - } else { - $this->parentClass = $this->shortParentClass; - $this->interfaces = $this->shortInterfaces; - } - - $this->isScanned = true; - - return; - } -} diff --git a/library/Zend/Code/Scanner/ConstantScanner.php b/library/Zend/Code/Scanner/ConstantScanner.php deleted file mode 100755 index c37c7a22c..000000000 --- a/library/Zend/Code/Scanner/ConstantScanner.php +++ /dev/null @@ -1,236 +0,0 @@ -tokens = $constantTokens; - $this->nameInformation = $nameInformation; - } - - /** - * @param string $class - */ - public function setClass($class) - { - $this->class = $class; - } - - /** - * @param ClassScanner $scannerClass - */ - public function setScannerClass(ClassScanner $scannerClass) - { - $this->scannerClass = $scannerClass; - } - - /** - * @return ClassScanner - */ - public function getClassScanner() - { - return $this->scannerClass; - } - - /** - * @return string - */ - public function getName() - { - $this->scan(); - return $this->name; - } - - /** - * @return string - */ - public function getValue() - { - $this->scan(); - return $this->value; - } - - /** - * @return string - */ - public function getDocComment() - { - $this->scan(); - return $this->docComment; - } - - /** - * @param Annotation\AnnotationManager $annotationManager - * @return AnnotationScanner - */ - public function getAnnotations(Annotation\AnnotationManager $annotationManager) - { - if (($docComment = $this->getDocComment()) == '') { - return false; - } - - return new AnnotationScanner($annotationManager, $docComment, $this->nameInformation); - } - - /** - * @return string - */ - public function __toString() - { - $this->scan(); - return var_export($this, true); - } - - /** - * Scan tokens - * - * @throws Exception\RuntimeException - */ - protected function scan() - { - if ($this->isScanned) { - return; - } - - if (!$this->tokens) { - throw new Exception\RuntimeException('No tokens were provided'); - } - - /** - * Variables & Setup - */ - $tokens = &$this->tokens; - - reset($tokens); - - SCANNER_TOP: - - $token = current($tokens); - - if (!is_string($token)) { - list($tokenType, $tokenContent, $tokenLine) = $token; - - switch ($tokenType) { - case T_DOC_COMMENT: - if ($this->docComment === null && $this->name === null) { - $this->docComment = $tokenContent; - } - goto SCANNER_CONTINUE; - // fall-through - - case T_STRING: - $string = (is_string($token)) ? $token : $tokenContent; - - if (null === $this->name) { - $this->name = $string; - } else { - if ('self' == strtolower($string)) { - list($tokenNextType, $tokenNextContent, $tokenNextLine) = next($tokens); - - if ('::' == $tokenNextContent) { - list($tokenNextType, $tokenNextContent, $tokenNextLine) = next($tokens); - - if ($this->getClassScanner()->getConstant($tokenNextContent)) { - $this->value = $this->getClassScanner()->getConstant($tokenNextContent)->getValue(); - } - } - } - } - - goto SCANNER_CONTINUE; - // fall-through - - case T_CONSTANT_ENCAPSED_STRING: - case T_DNUMBER: - case T_LNUMBER: - $string = (is_string($token)) ? $token : $tokenContent; - - if (substr($string, 0, 1) === '"' || substr($string, 0, 1) === "'") { - $this->value = substr($string, 1, -1); // Remove quotes - } else { - $this->value = $string; - } - goto SCANNER_CONTINUE; - // fall-trough - - default: - goto SCANNER_CONTINUE; - } - } - - SCANNER_CONTINUE: - - if (next($this->tokens) === false) { - goto SCANNER_END; - } - goto SCANNER_TOP; - - SCANNER_END: - - $this->isScanned = true; - } -} diff --git a/library/Zend/Code/Scanner/DerivedClassScanner.php b/library/Zend/Code/Scanner/DerivedClassScanner.php deleted file mode 100755 index 6c8463ede..000000000 --- a/library/Zend/Code/Scanner/DerivedClassScanner.php +++ /dev/null @@ -1,381 +0,0 @@ -classScanner = $classScanner; - $this->directoryScanner = $directoryScanner; - - $currentScannerClass = $classScanner; - - while ($currentScannerClass && $currentScannerClass->hasParentClass()) { - $currentParentClassName = $currentScannerClass->getParentClass(); - if ($directoryScanner->hasClass($currentParentClassName)) { - $currentParentClass = $directoryScanner->getClass($currentParentClassName); - $this->parentClassScanners[$currentParentClassName] = $currentParentClass; - $currentScannerClass = $currentParentClass; - } else { - $currentScannerClass = false; - } - } - - foreach ($interfaces = $this->classScanner->getInterfaces() as $iName) { - if ($directoryScanner->hasClass($iName)) { - $this->interfaceClassScanners[$iName] = $directoryScanner->getClass($iName); - } - } - } - - /** - * @return null|string - */ - public function getName() - { - return $this->classScanner->getName(); - } - - /** - * @return null|string - */ - public function getShortName() - { - return $this->classScanner->getShortName(); - } - - /** - * @return bool - */ - public function isInstantiable() - { - return $this->classScanner->isInstantiable(); - } - - /** - * @return bool - */ - public function isFinal() - { - return $this->classScanner->isFinal(); - } - - /** - * @return bool - */ - public function isAbstract() - { - return $this->classScanner->isAbstract(); - } - - /** - * @return bool - */ - public function isInterface() - { - return $this->classScanner->isInterface(); - } - - /** - * @return array - */ - public function getParentClasses() - { - return array_keys($this->parentClassScanners); - } - - /** - * @return bool - */ - public function hasParentClass() - { - return ($this->classScanner->getParentClass() != null); - } - - /** - * @return null|string - */ - public function getParentClass() - { - return $this->classScanner->getParentClass(); - } - - /** - * @param bool $returnClassScanners - * @return array - */ - public function getInterfaces($returnClassScanners = false) - { - if ($returnClassScanners) { - return $this->interfaceClassScanners; - } - - $interfaces = $this->classScanner->getInterfaces(); - foreach ($this->parentClassScanners as $pClassScanner) { - $interfaces = array_merge($interfaces, $pClassScanner->getInterfaces()); - } - - return $interfaces; - } - - /** - * Return a list of constant names - * - * @return array - */ - public function getConstantNames() - { - $constants = $this->classScanner->getConstantNames(); - foreach ($this->parentClassScanners as $pClassScanner) { - $constants = array_merge($constants, $pClassScanner->getConstantNames()); - } - - return $constants; - } - - /** - * Return a list of constants - * - * @param bool $namesOnly Set false to return instances of ConstantScanner - * @return array|ConstantScanner[] - */ - public function getConstants($namesOnly = true) - { - if (true === $namesOnly) { - trigger_error('Use method getConstantNames() instead', E_USER_DEPRECATED); - return $this->getConstantNames(); - } - - $constants = $this->classScanner->getConstants(); - foreach ($this->parentClassScanners as $pClassScanner) { - $constants = array_merge($constants, $pClassScanner->getConstants($namesOnly)); - } - - return $constants; - } - - /** - * Return a single constant by given name or index of info - * - * @param string|int $constantNameOrInfoIndex - * @throws Exception\InvalidArgumentException - * @return bool|ConstantScanner - */ - public function getConstant($constantNameOrInfoIndex) - { - if ($this->classScanner->hasConstant($constantNameOrInfoIndex)) { - return $this->classScanner->getConstant($constantNameOrInfoIndex); - } - - foreach ($this->parentClassScanners as $pClassScanner) { - if ($pClassScanner->hasConstant($constantNameOrInfoIndex)) { - return $pClassScanner->getConstant($constantNameOrInfoIndex); - } - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Constant %s not found in %s', - $constantNameOrInfoIndex, - $this->classScanner->getName() - )); - } - - /** - * Verify if class or parent class has constant - * - * @param string $name - * @return bool - */ - public function hasConstant($name) - { - if ($this->classScanner->hasConstant($name)) { - return true; - } - foreach ($this->parentClassScanners as $pClassScanner) { - if ($pClassScanner->hasConstant($name)) { - return true; - } - } - - return false; - } - - /** - * Return a list of property names - * - * @return array - */ - public function getPropertyNames() - { - $properties = $this->classScanner->getPropertyNames(); - foreach ($this->parentClassScanners as $pClassScanner) { - $properties = array_merge($properties, $pClassScanner->getPropertyNames()); - } - - return $properties; - } - - /** - * @param bool $returnScannerProperty - * @return array - */ - public function getProperties($returnScannerProperty = false) - { - $properties = $this->classScanner->getProperties($returnScannerProperty); - foreach ($this->parentClassScanners as $pClassScanner) { - $properties = array_merge($properties, $pClassScanner->getProperties($returnScannerProperty)); - } - - return $properties; - } - - /** - * Return a single property by given name or index of info - * - * @param string|int $propertyNameOrInfoIndex - * @throws Exception\InvalidArgumentException - * @return bool|PropertyScanner - */ - public function getProperty($propertyNameOrInfoIndex) - { - if ($this->classScanner->hasProperty($propertyNameOrInfoIndex)) { - return $this->classScanner->getProperty($propertyNameOrInfoIndex); - } - - foreach ($this->parentClassScanners as $pClassScanner) { - if ($pClassScanner->hasProperty($propertyNameOrInfoIndex)) { - return $pClassScanner->getProperty($propertyNameOrInfoIndex); - } - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Property %s not found in %s', - $propertyNameOrInfoIndex, - $this->classScanner->getName() - )); - } - - /** - * Verify if class or parent class has property - * - * @param string $name - * @return bool - */ - public function hasProperty($name) - { - if ($this->classScanner->hasProperty($name)) { - return true; - } - foreach ($this->parentClassScanners as $pClassScanner) { - if ($pClassScanner->hasProperty($name)) { - return true; - } - } - - return false; - } - - /** - * @return array - */ - public function getMethodNames() - { - $methods = $this->classScanner->getMethodNames(); - foreach ($this->parentClassScanners as $pClassScanner) { - $methods = array_merge($methods, $pClassScanner->getMethodNames()); - } - - return $methods; - } - - /** - * @return MethodScanner[] - */ - public function getMethods() - { - $methods = $this->classScanner->getMethods(); - foreach ($this->parentClassScanners as $pClassScanner) { - $methods = array_merge($methods, $pClassScanner->getMethods()); - } - - return $methods; - } - - /** - * @param int|string $methodNameOrInfoIndex - * @return MethodScanner - * @throws Exception\InvalidArgumentException - */ - public function getMethod($methodNameOrInfoIndex) - { - if ($this->classScanner->hasMethod($methodNameOrInfoIndex)) { - return $this->classScanner->getMethod($methodNameOrInfoIndex); - } - - foreach ($this->parentClassScanners as $pClassScanner) { - if ($pClassScanner->hasMethod($methodNameOrInfoIndex)) { - return $pClassScanner->getMethod($methodNameOrInfoIndex); - } - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Method %s not found in %s', - $methodNameOrInfoIndex, - $this->classScanner->getName() - )); - } - - /** - * Verify if class or parent class has method by given name - * - * @param string $name - * @return bool - */ - public function hasMethod($name) - { - if ($this->classScanner->hasMethod($name)) { - return true; - } - foreach ($this->parentClassScanners as $pClassScanner) { - if ($pClassScanner->hasMethod($name)) { - return true; - } - } - - return false; - } -} diff --git a/library/Zend/Code/Scanner/DirectoryScanner.php b/library/Zend/Code/Scanner/DirectoryScanner.php deleted file mode 100755 index b1a0223da..000000000 --- a/library/Zend/Code/Scanner/DirectoryScanner.php +++ /dev/null @@ -1,272 +0,0 @@ -addDirectory($directory); - } elseif (is_array($directory)) { - foreach ($directory as $d) { - $this->addDirectory($d); - } - } - } - } - - /** - * @param DirectoryScanner|string $directory - * @return void - * @throws Exception\InvalidArgumentException - */ - public function addDirectory($directory) - { - if ($directory instanceof DirectoryScanner) { - $this->directories[] = $directory; - } elseif (is_string($directory)) { - $realDir = realpath($directory); - if (!$realDir || !is_dir($realDir)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Directory "%s" does not exist', - $realDir - )); - } - $this->directories[] = $realDir; - } else { - throw new Exception\InvalidArgumentException( - 'The argument provided was neither a DirectoryScanner or directory path' - ); - } - } - - /** - * @param DirectoryScanner $directoryScanner - * @return void - */ - public function addDirectoryScanner(DirectoryScanner $directoryScanner) - { - $this->addDirectory($directoryScanner); - } - - /** - * @param FileScanner $fileScanner - * @return void - */ - public function addFileScanner(FileScanner $fileScanner) - { - $this->fileScanners[] = $fileScanner; - } - - /** - * @return void - */ - protected function scan() - { - if ($this->isScanned) { - return; - } - - // iterate directories creating file scanners - foreach ($this->directories as $directory) { - if ($directory instanceof DirectoryScanner) { - $directory->scan(); - if ($directory->fileScanners) { - $this->fileScanners = array_merge($this->fileScanners, $directory->fileScanners); - } - } else { - $rdi = new RecursiveDirectoryIterator($directory); - foreach (new RecursiveIteratorIterator($rdi) as $item) { - if ($item->isFile() && pathinfo($item->getRealPath(), PATHINFO_EXTENSION) == 'php') { - $this->fileScanners[] = new FileScanner($item->getRealPath()); - } - } - } - } - - $this->isScanned = true; - } - - /** - * @todo implement method - */ - public function getNamespaces() - { - // @todo - } - - /** - * @param bool $returnFileScanners - * @return array - */ - public function getFiles($returnFileScanners = false) - { - $this->scan(); - - $return = array(); - foreach ($this->fileScanners as $fileScanner) { - $return[] = ($returnFileScanners) ? $fileScanner : $fileScanner->getFile(); - } - - return $return; - } - - /** - * @return array - */ - public function getClassNames() - { - $this->scan(); - - if ($this->classToFileScanner === null) { - $this->createClassToFileScannerCache(); - } - - return array_keys($this->classToFileScanner); - } - - /** - * @param bool $returnDerivedScannerClass - * @return array - */ - public function getClasses($returnDerivedScannerClass = false) - { - $this->scan(); - - if ($this->classToFileScanner === null) { - $this->createClassToFileScannerCache(); - } - - $returnClasses = array(); - foreach ($this->classToFileScanner as $className => $fsIndex) { - $classScanner = $this->fileScanners[$fsIndex]->getClass($className); - if ($returnDerivedScannerClass) { - $classScanner = new DerivedClassScanner($classScanner, $this); - } - $returnClasses[] = $classScanner; - } - - return $returnClasses; - } - - /** - * @param string $class - * @return bool - */ - public function hasClass($class) - { - $this->scan(); - - if ($this->classToFileScanner === null) { - $this->createClassToFileScannerCache(); - } - - return (isset($this->classToFileScanner[$class])); - } - - /** - * @param string $class - * @param bool $returnDerivedScannerClass - * @return ClassScanner|DerivedClassScanner - * @throws Exception\InvalidArgumentException - */ - public function getClass($class, $returnDerivedScannerClass = false) - { - $this->scan(); - - if ($this->classToFileScanner === null) { - $this->createClassToFileScannerCache(); - } - - if (!isset($this->classToFileScanner[$class])) { - throw new Exception\InvalidArgumentException('Class not found.'); - } - - /** @var FileScanner $fs */ - $fs = $this->fileScanners[$this->classToFileScanner[$class]]; - $returnClass = $fs->getClass($class); - - if (($returnClass instanceof ClassScanner) && $returnDerivedScannerClass) { - return new DerivedClassScanner($returnClass, $this); - } - - return $returnClass; - } - - /** - * Create class to file scanner cache - * - * @return void - */ - protected function createClassToFileScannerCache() - { - if ($this->classToFileScanner !== null) { - return; - } - - $this->classToFileScanner = array(); - /** @var FileScanner $fileScanner */ - foreach ($this->fileScanners as $fsIndex => $fileScanner) { - $fsClasses = $fileScanner->getClassNames(); - foreach ($fsClasses as $fsClassName) { - $this->classToFileScanner[$fsClassName] = $fsIndex; - } - } - } - - /** - * Export - * - * @todo implement method - */ - public static function export() - { - // @todo - } - - /** - * __ToString - * - * @todo implement method - */ - public function __toString() - { - // @todo - } -} diff --git a/library/Zend/Code/Scanner/DocBlockScanner.php b/library/Zend/Code/Scanner/DocBlockScanner.php deleted file mode 100755 index 3bb28ece1..000000000 --- a/library/Zend/Code/Scanner/DocBlockScanner.php +++ /dev/null @@ -1,326 +0,0 @@ -docComment = $docComment; - $this->nameInformation = $nameInformation; - } - - /** - * @return string - */ - public function getShortDescription() - { - $this->scan(); - - return $this->shortDescription; - } - - /** - * @return string - */ - public function getLongDescription() - { - $this->scan(); - - return $this->longDescription; - } - - /** - * @return array - */ - public function getTags() - { - $this->scan(); - - return $this->tags; - } - - /** - * @return array - */ - public function getAnnotations() - { - $this->scan(); - - return $this->annotations; - } - - /** - * @return void - */ - protected function scan() - { - if ($this->isScanned) { - return; - } - - $mode = 1; - - $tokens = $this->tokenize(); - $tagIndex = null; - reset($tokens); - - SCANNER_TOP: - $token = current($tokens); - - switch ($token[0]) { - case 'DOCBLOCK_NEWLINE': - if ($this->shortDescription != '' && $tagIndex === null) { - $mode = 2; - } else { - $this->longDescription .= $token[1]; - } - goto SCANNER_CONTINUE; - //goto no break needed - - case 'DOCBLOCK_WHITESPACE': - case 'DOCBLOCK_TEXT': - if ($tagIndex !== null) { - $this->tags[$tagIndex]['value'] .= ($this->tags[$tagIndex]['value'] == '') ? $token[1] : ' ' . $token[1]; - goto SCANNER_CONTINUE; - } elseif ($mode <= 2) { - if ($mode == 1) { - $this->shortDescription .= $token[1]; - } else { - $this->longDescription .= $token[1]; - } - goto SCANNER_CONTINUE; - } - //gotos no break needed - case 'DOCBLOCK_TAG': - array_push($this->tags, array('name' => $token[1], - 'value' => '')); - end($this->tags); - $tagIndex = key($this->tags); - $mode = 3; - goto SCANNER_CONTINUE; - //goto no break needed - - case 'DOCBLOCK_COMMENTEND': - goto SCANNER_END; - - } - - SCANNER_CONTINUE: - if (next($tokens) === false) { - goto SCANNER_END; - } - goto SCANNER_TOP; - - SCANNER_END: - - $this->shortDescription = trim($this->shortDescription); - $this->longDescription = trim($this->longDescription); - $this->isScanned = true; - } - - /** - * @return array - */ - protected function tokenize() - { - static $CONTEXT_INSIDE_DOCBLOCK = 0x01; - static $CONTEXT_INSIDE_ASTERISK = 0x02; - - $context = 0x00; - $stream = $this->docComment; - $streamIndex = null; - $tokens = array(); - $tokenIndex = null; - $currentChar = null; - $currentWord = null; - $currentLine = null; - - $MACRO_STREAM_ADVANCE_CHAR = function ($positionsForward = 1) use (&$stream, &$streamIndex, &$currentChar, &$currentWord, &$currentLine) { - $positionsForward = ($positionsForward > 0) ? $positionsForward : 1; - $streamIndex = ($streamIndex === null) ? 0 : $streamIndex + $positionsForward; - if (!isset($stream[$streamIndex])) { - $currentChar = false; - - return false; - } - $currentChar = $stream[$streamIndex]; - $matches = array(); - $currentLine = (preg_match('#(.*?)\r?\n#', $stream, $matches, null, $streamIndex) === 1) ? $matches[1] : substr($stream, $streamIndex); - if ($currentChar === ' ') { - $currentWord = (preg_match('#( +)#', $currentLine, $matches) === 1) ? $matches[1] : $currentLine; - } else { - $currentWord = (($matches = strpos($currentLine, ' ')) !== false) ? substr($currentLine, 0, $matches) : $currentLine; - } - - return $currentChar; - }; - $MACRO_STREAM_ADVANCE_WORD = function () use (&$currentWord, &$MACRO_STREAM_ADVANCE_CHAR) { - return $MACRO_STREAM_ADVANCE_CHAR(strlen($currentWord)); - }; - $MACRO_STREAM_ADVANCE_LINE = function () use (&$currentLine, &$MACRO_STREAM_ADVANCE_CHAR) { - return $MACRO_STREAM_ADVANCE_CHAR(strlen($currentLine)); - }; - $MACRO_TOKEN_ADVANCE = function () use (&$tokenIndex, &$tokens) { - $tokenIndex = ($tokenIndex === null) ? 0 : $tokenIndex + 1; - $tokens[$tokenIndex] = array('DOCBLOCK_UNKNOWN', ''); - }; - $MACRO_TOKEN_SET_TYPE = function ($type) use (&$tokenIndex, &$tokens) { - $tokens[$tokenIndex][0] = $type; - }; - $MACRO_TOKEN_APPEND_CHAR = function () use (&$currentChar, &$tokens, &$tokenIndex) { - $tokens[$tokenIndex][1] .= $currentChar; - }; - $MACRO_TOKEN_APPEND_WORD = function () use (&$currentWord, &$tokens, &$tokenIndex) { - $tokens[$tokenIndex][1] .= $currentWord; - }; - $MACRO_TOKEN_APPEND_WORD_PARTIAL = function ($length) use (&$currentWord, &$tokens, &$tokenIndex) { - $tokens[$tokenIndex][1] .= substr($currentWord, 0, $length); - }; - $MACRO_TOKEN_APPEND_LINE = function () use (&$currentLine, &$tokens, &$tokenIndex) { - $tokens[$tokenIndex][1] .= $currentLine; - }; - - $MACRO_STREAM_ADVANCE_CHAR(); - $MACRO_TOKEN_ADVANCE(); - - TOKENIZER_TOP: - - if ($context === 0x00 && $currentChar === '/' && $currentWord === '/**') { - $MACRO_TOKEN_SET_TYPE('DOCBLOCK_COMMENTSTART'); - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - $context |= $CONTEXT_INSIDE_DOCBLOCK; - $context |= $CONTEXT_INSIDE_ASTERISK; - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($context & $CONTEXT_INSIDE_DOCBLOCK && $currentWord === '*/') { - $MACRO_TOKEN_SET_TYPE('DOCBLOCK_COMMENTEND'); - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - $context &= ~$CONTEXT_INSIDE_DOCBLOCK; - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === ' ' || $currentChar === "\t") { - $MACRO_TOKEN_SET_TYPE(($context & $CONTEXT_INSIDE_ASTERISK) ? 'DOCBLOCK_WHITESPACE' : 'DOCBLOCK_WHITESPACE_INDENT'); - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === '*') { - if (($context & $CONTEXT_INSIDE_DOCBLOCK) && ($context & $CONTEXT_INSIDE_ASTERISK)) { - $MACRO_TOKEN_SET_TYPE('DOCBLOCK_TEXT'); - } else { - $MACRO_TOKEN_SET_TYPE('DOCBLOCK_ASTERISK'); - $context |= $CONTEXT_INSIDE_ASTERISK; - } - $MACRO_TOKEN_APPEND_CHAR(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === '@') { - $MACRO_TOKEN_SET_TYPE('DOCBLOCK_TAG'); - $MACRO_TOKEN_APPEND_WORD(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_WORD() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - if ($currentChar === "\n") { - $MACRO_TOKEN_SET_TYPE('DOCBLOCK_NEWLINE'); - $MACRO_TOKEN_APPEND_CHAR(); - $MACRO_TOKEN_ADVANCE(); - $context &= ~$CONTEXT_INSIDE_ASTERISK; - if ($MACRO_STREAM_ADVANCE_CHAR() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - } - - $MACRO_TOKEN_SET_TYPE('DOCBLOCK_TEXT'); - $MACRO_TOKEN_APPEND_LINE(); - $MACRO_TOKEN_ADVANCE(); - if ($MACRO_STREAM_ADVANCE_LINE() === false) { - goto TOKENIZER_END; - } - goto TOKENIZER_TOP; - - TOKENIZER_END: - - array_pop($tokens); - - return $tokens; - } -} diff --git a/library/Zend/Code/Scanner/FileScanner.php b/library/Zend/Code/Scanner/FileScanner.php deleted file mode 100755 index 64700f611..000000000 --- a/library/Zend/Code/Scanner/FileScanner.php +++ /dev/null @@ -1,46 +0,0 @@ -file = $file; - if (!file_exists($file)) { - throw new Exception\InvalidArgumentException(sprintf( - 'File "%s" not found', - $file - )); - } - parent::__construct(token_get_all(file_get_contents($file)), $annotationManager); - } - - /** - * @return string - */ - public function getFile() - { - return $this->file; - } -} diff --git a/library/Zend/Code/Scanner/FunctionScanner.php b/library/Zend/Code/Scanner/FunctionScanner.php deleted file mode 100755 index dbb082b23..000000000 --- a/library/Zend/Code/Scanner/FunctionScanner.php +++ /dev/null @@ -1,16 +0,0 @@ -tokens = $methodTokens; - $this->nameInformation = $nameInformation; - } - - /** - * @param string $class - * @return MethodScanner - */ - public function setClass($class) - { - $this->class = (string) $class; - return $this; - } - - /** - * @param ClassScanner $scannerClass - * @return MethodScanner - */ - public function setScannerClass(ClassScanner $scannerClass) - { - $this->scannerClass = $scannerClass; - return $this; - } - - /** - * @return MethodScanner - */ - public function getClassScanner() - { - return $this->scannerClass; - } - - /** - * @return string - */ - public function getName() - { - $this->scan(); - - return $this->name; - } - - /** - * @return int - */ - public function getLineStart() - { - $this->scan(); - - return $this->lineStart; - } - - /** - * @return int - */ - public function getLineEnd() - { - $this->scan(); - - return $this->lineEnd; - } - - /** - * @return string - */ - public function getDocComment() - { - $this->scan(); - - return $this->docComment; - } - - /** - * @param AnnotationManager $annotationManager - * @return AnnotationScanner - */ - public function getAnnotations(AnnotationManager $annotationManager) - { - if (($docComment = $this->getDocComment()) == '') { - return false; - } - - return new AnnotationScanner($annotationManager, $docComment, $this->nameInformation); - } - - /** - * @return bool - */ - public function isFinal() - { - $this->scan(); - - return $this->isFinal; - } - - /** - * @return bool - */ - public function isAbstract() - { - $this->scan(); - - return $this->isAbstract; - } - - /** - * @return bool - */ - public function isPublic() - { - $this->scan(); - - return $this->isPublic; - } - - /** - * @return bool - */ - public function isProtected() - { - $this->scan(); - - return $this->isProtected; - } - - /** - * @return bool - */ - public function isPrivate() - { - $this->scan(); - - return $this->isPrivate; - } - - /** - * @return bool - */ - public function isStatic() - { - $this->scan(); - - return $this->isStatic; - } - - /** - * @return int - */ - public function getNumberOfParameters() - { - return count($this->getParameters()); - } - - /** - * @param bool $returnScanner - * @return array - */ - public function getParameters($returnScanner = false) - { - $this->scan(); - - $return = array(); - - foreach ($this->infos as $info) { - if ($info['type'] != 'parameter') { - continue; - } - - if (!$returnScanner) { - $return[] = $info['name']; - } else { - $return[] = $this->getParameter($info['name']); - } - } - - return $return; - } - - /** - * @param int|string $parameterNameOrInfoIndex - * @return ParameterScanner - * @throws Exception\InvalidArgumentException - */ - public function getParameter($parameterNameOrInfoIndex) - { - $this->scan(); - - if (is_int($parameterNameOrInfoIndex)) { - $info = $this->infos[$parameterNameOrInfoIndex]; - if ($info['type'] != 'parameter') { - throw new Exception\InvalidArgumentException('Index of info offset is not about a parameter'); - } - } elseif (is_string($parameterNameOrInfoIndex)) { - foreach ($this->infos as $info) { - if ($info['type'] === 'parameter' && $info['name'] === $parameterNameOrInfoIndex) { - break; - } - unset($info); - } - if (!isset($info)) { - throw new Exception\InvalidArgumentException('Index of info offset is not about a parameter'); - } - } - - $p = new ParameterScanner( - array_slice($this->tokens, $info['tokenStart'], $info['tokenEnd'] - $info['tokenStart']), - $this->nameInformation - ); - $p->setDeclaringFunction($this->name); - $p->setDeclaringScannerFunction($this); - $p->setDeclaringClass($this->class); - $p->setDeclaringScannerClass($this->scannerClass); - $p->setPosition($info['position']); - - return $p; - } - - /** - * @return string - */ - public function getBody() - { - $this->scan(); - - return $this->body; - } - - public static function export() - { - // @todo - } - - public function __toString() - { - $this->scan(); - - return var_export($this, true); - } - - protected function scan() - { - if ($this->isScanned) { - return; - } - - if (!$this->tokens) { - throw new Exception\RuntimeException('No tokens were provided'); - } - - /** - * Variables & Setup - */ - - $tokens = &$this->tokens; // localize - $infos = &$this->infos; // localize - $tokenIndex = null; - $token = null; - $tokenType = null; - $tokenContent = null; - $tokenLine = null; - $infoIndex = 0; - $parentCount = 0; - - /* - * MACRO creation - */ - $MACRO_TOKEN_ADVANCE = function () use (&$tokens, &$tokenIndex, &$token, &$tokenType, &$tokenContent, &$tokenLine) { - static $lastTokenArray = null; - $tokenIndex = ($tokenIndex === null) ? 0 : $tokenIndex + 1; - if (!isset($tokens[$tokenIndex])) { - $token = false; - $tokenContent = false; - $tokenType = false; - $tokenLine = false; - - return false; - } - $token = $tokens[$tokenIndex]; - if (is_string($token)) { - $tokenType = null; - $tokenContent = $token; - $tokenLine = $tokenLine + substr_count( - $lastTokenArray[1], - "\n" - ); // adjust token line by last known newline count - } else { - list($tokenType, $tokenContent, $tokenLine) = $token; - } - - return $tokenIndex; - }; - $MACRO_INFO_START = function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { - $infos[$infoIndex] = array( - 'type' => 'parameter', - 'tokenStart' => $tokenIndex, - 'tokenEnd' => null, - 'lineStart' => $tokenLine, - 'lineEnd' => $tokenLine, - 'name' => null, - 'position' => $infoIndex + 1, // position is +1 of infoIndex - ); - }; - $MACRO_INFO_ADVANCE = function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { - $infos[$infoIndex]['tokenEnd'] = $tokenIndex; - $infos[$infoIndex]['lineEnd'] = $tokenLine; - $infoIndex++; - - return $infoIndex; - }; - - /** - * START FINITE STATE MACHINE FOR SCANNING TOKENS - */ - - // Initialize token - $MACRO_TOKEN_ADVANCE(); - - SCANNER_TOP: - - $this->lineStart = ($this->lineStart) ? : $tokenLine; - - switch ($tokenType) { - case T_DOC_COMMENT: - $this->lineStart = null; - if ($this->docComment === null && $this->name === null) { - $this->docComment = $tokenContent; - } - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case T_FINAL: - $this->isFinal = true; - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case T_ABSTRACT: - $this->isAbstract = true; - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case T_PUBLIC: - // use defaults - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case T_PROTECTED: - $this->isProtected = true; - $this->isPublic = false; - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case T_PRIVATE: - $this->isPrivate = true; - $this->isPublic = false; - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case T_STATIC: - $this->isStatic = true; - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case T_VARIABLE: - case T_STRING: - - if ($tokenType === T_STRING && $parentCount === 0) { - $this->name = $tokenContent; - } - - if ($parentCount === 1) { - if (!isset($infos[$infoIndex])) { - $MACRO_INFO_START(); - } - if ($tokenType === T_VARIABLE) { - $infos[$infoIndex]['name'] = ltrim($tokenContent, '$'); - } - } - - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - - case null: - - switch ($tokenContent) { - case '&': - if (!isset($infos[$infoIndex])) { - $MACRO_INFO_START(); - } - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - case '(': - $parentCount++; - goto SCANNER_CONTINUE_SIGNATURE; - //goto (no break needed); - case ')': - $parentCount--; - if ($parentCount > 0) { - goto SCANNER_CONTINUE_SIGNATURE; - } - if ($parentCount === 0) { - if ($infos) { - $MACRO_INFO_ADVANCE(); - } - $context = 'body'; - } - goto SCANNER_CONTINUE_BODY; - //goto (no break needed); - case ',': - if ($parentCount === 1) { - $MACRO_INFO_ADVANCE(); - } - goto SCANNER_CONTINUE_SIGNATURE; - } - } - - SCANNER_CONTINUE_SIGNATURE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_TOP; - - SCANNER_CONTINUE_BODY: - - $braceCount = 0; - while ($MACRO_TOKEN_ADVANCE() !== false) { - if ($tokenContent == '}') { - $braceCount--; - } - if ($braceCount > 0) { - $this->body .= $tokenContent; - } - if ($tokenContent == '{') { - $braceCount++; - } - $this->lineEnd = $tokenLine; - } - - SCANNER_END: - - $this->isScanned = true; - - return; - } -} diff --git a/library/Zend/Code/Scanner/ParameterScanner.php b/library/Zend/Code/Scanner/ParameterScanner.php deleted file mode 100755 index ef15a16c8..000000000 --- a/library/Zend/Code/Scanner/ParameterScanner.php +++ /dev/null @@ -1,352 +0,0 @@ -tokens = $parameterTokens; - $this->nameInformation = $nameInformation; - } - - /** - * Set declaring class - * - * @param string $class - * @return void - */ - public function setDeclaringClass($class) - { - $this->declaringClass = (string) $class; - } - - /** - * Set declaring scanner class - * - * @param ClassScanner $scannerClass - * @return void - */ - public function setDeclaringScannerClass(ClassScanner $scannerClass) - { - $this->declaringScannerClass = $scannerClass; - } - - /** - * Set declaring function - * - * @param string $function - * @return void - */ - public function setDeclaringFunction($function) - { - $this->declaringFunction = $function; - } - - /** - * Set declaring scanner function - * - * @param MethodScanner $scannerFunction - * @return void - */ - public function setDeclaringScannerFunction(MethodScanner $scannerFunction) - { - $this->declaringScannerFunction = $scannerFunction; - } - - /** - * Set position - * - * @param int $position - * @return void - */ - public function setPosition($position) - { - $this->position = $position; - } - - /** - * Scan - * - * @return void - */ - protected function scan() - { - if ($this->isScanned) { - return; - } - - $tokens = &$this->tokens; - - reset($tokens); - - SCANNER_TOP: - - $token = current($tokens); - - if (is_string($token)) { - // check pass by ref - if ($token === '&') { - $this->isPassedByReference = true; - goto SCANNER_CONTINUE; - } - if ($token === '=') { - $this->isOptional = true; - $this->isDefaultValueAvailable = true; - goto SCANNER_CONTINUE; - } - } else { - if ($this->name === null && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR)) { - $this->class .= $token[1]; - goto SCANNER_CONTINUE; - } - if ($token[0] === T_VARIABLE) { - $this->name = ltrim($token[1], '$'); - goto SCANNER_CONTINUE; - } - } - - if ($this->name !== null) { - $this->defaultValue .= trim((is_string($token)) ? $token : $token[1]); - } - - SCANNER_CONTINUE: - - if (next($this->tokens) === false) { - goto SCANNER_END; - } - goto SCANNER_TOP; - - SCANNER_END: - - if ($this->class && $this->nameInformation) { - $this->class = $this->nameInformation->resolveName($this->class); - } - - $this->isScanned = true; - } - - /** - * Get declaring scanner class - * - * @return ClassScanner - */ - public function getDeclaringScannerClass() - { - return $this->declaringScannerClass; - } - - /** - * Get declaring class - * - * @return string - */ - public function getDeclaringClass() - { - return $this->declaringClass; - } - - /** - * Get declaring scanner function - * - * @return MethodScanner - */ - public function getDeclaringScannerFunction() - { - return $this->declaringScannerFunction; - } - - /** - * Get declaring function - * - * @return string - */ - public function getDeclaringFunction() - { - return $this->declaringFunction; - } - - /** - * Get default value - * - * @return string - */ - public function getDefaultValue() - { - $this->scan(); - - return $this->defaultValue; - } - - /** - * Get class - * - * @return string - */ - public function getClass() - { - $this->scan(); - - return $this->class; - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - $this->scan(); - - return $this->name; - } - - /** - * Get position - * - * @return int - */ - public function getPosition() - { - $this->scan(); - - return $this->position; - } - - /** - * Check if is array - * - * @return bool - */ - public function isArray() - { - $this->scan(); - - return $this->isArray; - } - - /** - * Check if default value is available - * - * @return bool - */ - public function isDefaultValueAvailable() - { - $this->scan(); - - return $this->isDefaultValueAvailable; - } - - /** - * Check if is optional - * - * @return bool - */ - public function isOptional() - { - $this->scan(); - - return $this->isOptional; - } - - /** - * Check if is passed by reference - * - * @return bool - */ - public function isPassedByReference() - { - $this->scan(); - - return $this->isPassedByReference; - } -} diff --git a/library/Zend/Code/Scanner/PropertyScanner.php b/library/Zend/Code/Scanner/PropertyScanner.php deleted file mode 100755 index ce38b1585..000000000 --- a/library/Zend/Code/Scanner/PropertyScanner.php +++ /dev/null @@ -1,316 +0,0 @@ -tokens = $propertyTokens; - $this->nameInformation = $nameInformation; - } - - /** - * @param string $class - */ - public function setClass($class) - { - $this->class = $class; - } - - /** - * @param ClassScanner $scannerClass - */ - public function setScannerClass(ClassScanner $scannerClass) - { - $this->scannerClass = $scannerClass; - } - - /** - * @return ClassScanner - */ - public function getClassScanner() - { - return $this->scannerClass; - } - - /** - * @return string - */ - public function getName() - { - $this->scan(); - return $this->name; - } - - /** - * @return string - */ - public function getValueType() - { - return $this->valueType; - } - - /** - * @return bool - */ - public function isPublic() - { - $this->scan(); - return $this->isPublic; - } - - /** - * @return bool - */ - public function isPrivate() - { - $this->scan(); - return $this->isPrivate; - } - - /** - * @return bool - */ - public function isProtected() - { - $this->scan(); - return $this->isProtected; - } - - /** - * @return bool - */ - public function isStatic() - { - $this->scan(); - return $this->isStatic; - } - - /** - * @return string - */ - public function getValue() - { - $this->scan(); - return $this->value; - } - - /** - * @return string - */ - public function getDocComment() - { - $this->scan(); - return $this->docComment; - } - - /** - * @param Annotation\AnnotationManager $annotationManager - * @return AnnotationScanner - */ - public function getAnnotations(Annotation\AnnotationManager $annotationManager) - { - if (($docComment = $this->getDocComment()) == '') { - return false; - } - - return new AnnotationScanner($annotationManager, $docComment, $this->nameInformation); - } - - /** - * @return string - */ - public function __toString() - { - $this->scan(); - return var_export($this, true); - } - - /** - * Scan tokens - * - * @throws \Zend\Code\Exception\RuntimeException - */ - protected function scan() - { - if ($this->isScanned) { - return; - } - - if (!$this->tokens) { - throw new Exception\RuntimeException('No tokens were provided'); - } - - /** - * Variables & Setup - */ - $value = ''; - $concatenateValue = false; - - $tokens = &$this->tokens; - reset($tokens); - - foreach ($tokens as $token) { - $tempValue = $token; - if (!is_string($token)) { - list($tokenType, $tokenContent, $tokenLine) = $token; - - switch ($tokenType) { - case T_DOC_COMMENT: - if ($this->docComment === null && $this->name === null) { - $this->docComment = $tokenContent; - } - break; - - case T_VARIABLE: - $this->name = ltrim($tokenContent, '$'); - break; - - case T_PUBLIC: - // use defaults - break; - - case T_PROTECTED: - $this->isProtected = true; - $this->isPublic = false; - break; - - case T_PRIVATE: - $this->isPrivate = true; - $this->isPublic = false; - break; - - case T_STATIC: - $this->isStatic = true; - break; - default: - $tempValue = trim($tokenContent); - break; - } - } - - //end value concatenation - if (!is_array($token) && trim($token) == ";") { - $concatenateValue = false; - } - - if (true === $concatenateValue) { - $value .= $tempValue; - } - - //start value concatenation - if (!is_array($token) && trim($token) == "=") { - $concatenateValue = true; - } - } - - $this->valueType = self::T_UNKNOWN; - if ($value == "false" || $value == "true") { - $this->valueType = self::T_BOOLEAN; - } elseif (is_numeric($value)) { - $this->valueType = self::T_INTEGER; - } elseif (0 === strpos($value, 'array') || 0 === strpos($value, "[")) { - $this->valueType = self::T_ARRAY; - } elseif (substr($value, 0, 1) === '"' || substr($value, 0, 1) === "'") { - $value = substr($value, 1, -1); // Remove quotes - $this->valueType = self::T_STRING; - } - - $this->value = empty($value) ? null : $value; - $this->isScanned = true; - } -} diff --git a/library/Zend/Code/Scanner/ScannerInterface.php b/library/Zend/Code/Scanner/ScannerInterface.php deleted file mode 100755 index 8acb04ecd..000000000 --- a/library/Zend/Code/Scanner/ScannerInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -tokens = $tokens; - $this->annotationManager = $annotationManager; - } - - /** - * @return AnnotationManager - */ - public function getAnnotationManager() - { - return $this->annotationManager; - } - - /** - * Get doc comment - * - * @todo Assignment of $this->docComment should probably be done in scan() - * and then $this->getDocComment() just retrieves it. - * - * @return string - */ - public function getDocComment() - { - foreach ($this->tokens as $token) { - $type = $token[0]; - $value = $token[1]; - if (($type == T_OPEN_TAG) || ($type == T_WHITESPACE)) { - continue; - } elseif ($type == T_DOC_COMMENT) { - $this->docComment = $value; - - return $this->docComment; - } else { - // Only whitespace is allowed before file docblocks - return; - } - } - } - - /** - * @return array - */ - public function getNamespaces() - { - $this->scan(); - - $namespaces = array(); - foreach ($this->infos as $info) { - if ($info['type'] == 'namespace') { - $namespaces[] = $info['namespace']; - } - } - - return $namespaces; - } - - /** - * @param null|string $namespace - * @return array|null - */ - public function getUses($namespace = null) - { - $this->scan(); - - return $this->getUsesNoScan($namespace); - } - - /** - * @return array - */ - public function getIncludes() - { - $this->scan(); - // @todo Implement getIncludes() in TokenArrayScanner - } - - /** - * @return array - */ - public function getClassNames() - { - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'class') { - continue; - } - - $return[] = $info['name']; - } - - return $return; - } - - /** - * @return ClassScanner[] - */ - public function getClasses() - { - $this->scan(); - - $return = array(); - foreach ($this->infos as $info) { - if ($info['type'] != 'class') { - continue; - } - - $return[] = $this->getClass($info['name']); - } - - return $return; - } - - /** - * Return the class object from this scanner - * - * @param string|int $name - * @throws Exception\InvalidArgumentException - * @return ClassScanner - */ - public function getClass($name) - { - $this->scan(); - - if (is_int($name)) { - $info = $this->infos[$name]; - if ($info['type'] != 'class') { - throw new Exception\InvalidArgumentException('Index of info offset is not about a class'); - } - } elseif (is_string($name)) { - $classFound = false; - foreach ($this->infos as $info) { - if ($info['type'] === 'class' && $info['name'] === $name) { - $classFound = true; - break; - } - } - - if (!$classFound) { - return false; - } - } - - return new ClassScanner( - array_slice( - $this->tokens, - $info['tokenStart'], - ($info['tokenEnd'] - $info['tokenStart'] + 1) - ), // zero indexed array - new NameInformation($info['namespace'], $info['uses']) - ); - } - - /** - * @param string $className - * @return bool|null|NameInformation - */ - public function getClassNameInformation($className) - { - $this->scan(); - - $classFound = false; - foreach ($this->infos as $info) { - if ($info['type'] === 'class' && $info['name'] === $className) { - $classFound = true; - break; - } - } - - if (!$classFound) { - return false; - } - - if (!isset($info)) { - return null; - } - - return new NameInformation($info['namespace'], $info['uses']); - } - - /** - * @return array - */ - public function getFunctionNames() - { - $this->scan(); - $functionNames = array(); - foreach ($this->infos as $info) { - if ($info['type'] == 'function') { - $functionNames[] = $info['name']; - } - } - - return $functionNames; - } - - /** - * @return array - */ - public function getFunctions() - { - $this->scan(); - - $functions = array(); - foreach ($this->infos as $info) { - if ($info['type'] == 'function') { - // @todo $functions[] = new FunctionScanner($info['name']); - } - } - - return $functions; - } - - /** - * Export - * - * @param $tokens - */ - public static function export($tokens) - { - // @todo - } - - public function __toString() - { - // @todo - } - - /** - * Scan - * - * @todo: $this->docComment should be assigned for valid docblock during - * the scan instead of $this->getDocComment() (starting with - * T_DOC_COMMENT case) - * - * @throws Exception\RuntimeException - */ - protected function scan() - { - if ($this->isScanned) { - return; - } - - if (!$this->tokens) { - throw new Exception\RuntimeException('No tokens were provided'); - } - - /** - * Define PHP 5.4 'trait' token constant. - */ - if (!defined('T_TRAIT')) { - define('T_TRAIT', 42001); - } - - /** - * Variables & Setup - */ - - $tokens = &$this->tokens; // localize - $infos = &$this->infos; // localize - $tokenIndex = null; - $token = null; - $tokenType = null; - $tokenContent = null; - $tokenLine = null; - $namespace = null; - $docCommentIndex = false; - $infoIndex = 0; - - /* - * MACRO creation - */ - $MACRO_TOKEN_ADVANCE = function () use (&$tokens, &$tokenIndex, &$token, &$tokenType, &$tokenContent, &$tokenLine) { - $tokenIndex = ($tokenIndex === null) ? 0 : $tokenIndex + 1; - if (!isset($tokens[$tokenIndex])) { - $token = false; - $tokenContent = false; - $tokenType = false; - $tokenLine = false; - - return false; - } - if (is_string($tokens[$tokenIndex]) && $tokens[$tokenIndex] === '"') { - do { - $tokenIndex++; - } while (!(is_string($tokens[$tokenIndex]) && $tokens[$tokenIndex] === '"')); - } - $token = $tokens[$tokenIndex]; - if (is_array($token)) { - list($tokenType, $tokenContent, $tokenLine) = $token; - } else { - $tokenType = null; - $tokenContent = $token; - } - - return $tokenIndex; - }; - $MACRO_TOKEN_LOGICAL_START_INDEX = function () use (&$tokenIndex, &$docCommentIndex) { - return ($docCommentIndex === false) ? $tokenIndex : $docCommentIndex; - }; - $MACRO_DOC_COMMENT_START = function () use (&$tokenIndex, &$docCommentIndex) { - $docCommentIndex = $tokenIndex; - - return $docCommentIndex; - }; - $MACRO_DOC_COMMENT_VALIDATE = function () use (&$tokenType, &$docCommentIndex) { - static $validTrailingTokens = null; - if ($validTrailingTokens === null) { - $validTrailingTokens = array(T_WHITESPACE, T_FINAL, T_ABSTRACT, T_INTERFACE, T_CLASS, T_FUNCTION); - } - if ($docCommentIndex !== false && !in_array($tokenType, $validTrailingTokens)) { - $docCommentIndex = false; - } - - return $docCommentIndex; - }; - $MACRO_INFO_ADVANCE = function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { - $infos[$infoIndex]['tokenEnd'] = $tokenIndex; - $infos[$infoIndex]['lineEnd'] = $tokenLine; - $infoIndex++; - - return $infoIndex; - }; - - /** - * START FINITE STATE MACHINE FOR SCANNING TOKENS - */ - - // Initialize token - $MACRO_TOKEN_ADVANCE(); - - SCANNER_TOP: - - if ($token === false) { - goto SCANNER_END; - } - - // Validate current doc comment index - $MACRO_DOC_COMMENT_VALIDATE(); - - switch ($tokenType) { - - case T_DOC_COMMENT: - - $MACRO_DOC_COMMENT_START(); - goto SCANNER_CONTINUE; - //goto no break needed - - case T_NAMESPACE: - - $infos[$infoIndex] = array( - 'type' => 'namespace', - 'tokenStart' => $MACRO_TOKEN_LOGICAL_START_INDEX(), - 'tokenEnd' => null, - 'lineStart' => $token[2], - 'lineEnd' => null, - 'namespace' => null, - ); - - // start processing with next token - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - - SCANNER_NAMESPACE_TOP: - - if ($tokenType === null && $tokenContent === ';' || $tokenContent === '{') { - goto SCANNER_NAMESPACE_END; - } - - if ($tokenType === T_WHITESPACE) { - goto SCANNER_NAMESPACE_CONTINUE; - } - - if ($tokenType === T_NS_SEPARATOR || $tokenType === T_STRING) { - $infos[$infoIndex]['namespace'] .= $tokenContent; - } - - SCANNER_NAMESPACE_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_NAMESPACE_TOP; - - SCANNER_NAMESPACE_END: - - $namespace = $infos[$infoIndex]['namespace']; - - $MACRO_INFO_ADVANCE(); - goto SCANNER_CONTINUE; - //goto no break needed - - case T_USE: - - $infos[$infoIndex] = array( - 'type' => 'use', - 'tokenStart' => $MACRO_TOKEN_LOGICAL_START_INDEX(), - 'tokenEnd' => null, - 'lineStart' => $tokens[$tokenIndex][2], - 'lineEnd' => null, - 'namespace' => $namespace, - 'statements' => array(0 => array('use' => null, - 'as' => null)), - ); - - $useStatementIndex = 0; - $useAsContext = false; - - // start processing with next token - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - - SCANNER_USE_TOP: - - if ($tokenType === null) { - if ($tokenContent === ';') { - goto SCANNER_USE_END; - } elseif ($tokenContent === ',') { - $useAsContext = false; - $useStatementIndex++; - $infos[$infoIndex]['statements'][$useStatementIndex] = array('use' => null, - 'as' => null); - } - } - - // ANALYZE - if ($tokenType !== null) { - if ($tokenType == T_AS) { - $useAsContext = true; - goto SCANNER_USE_CONTINUE; - } - - if ($tokenType == T_NS_SEPARATOR || $tokenType == T_STRING) { - if ($useAsContext == false) { - $infos[$infoIndex]['statements'][$useStatementIndex]['use'] .= $tokenContent; - } else { - $infos[$infoIndex]['statements'][$useStatementIndex]['as'] = $tokenContent; - } - } - } - - SCANNER_USE_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_USE_TOP; - - SCANNER_USE_END: - - $MACRO_INFO_ADVANCE(); - goto SCANNER_CONTINUE; - //goto no break needed - - case T_INCLUDE: - case T_INCLUDE_ONCE: - case T_REQUIRE: - case T_REQUIRE_ONCE: - - // Static for performance - static $includeTypes = array( - T_INCLUDE => 'include', - T_INCLUDE_ONCE => 'include_once', - T_REQUIRE => 'require', - T_REQUIRE_ONCE => 'require_once' - ); - - $infos[$infoIndex] = array( - 'type' => 'include', - 'tokenStart' => $MACRO_TOKEN_LOGICAL_START_INDEX(), - 'tokenEnd' => null, - 'lineStart' => $tokens[$tokenIndex][2], - 'lineEnd' => null, - 'includeType' => $includeTypes[$tokens[$tokenIndex][0]], - 'path' => '', - ); - - // start processing with next token - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - - SCANNER_INCLUDE_TOP: - - if ($tokenType === null && $tokenContent === ';') { - goto SCANNER_INCLUDE_END; - } - - $infos[$infoIndex]['path'] .= $tokenContent; - - SCANNER_INCLUDE_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_INCLUDE_TOP; - - SCANNER_INCLUDE_END: - - $MACRO_INFO_ADVANCE(); - goto SCANNER_CONTINUE; - //goto no break needed - - case T_FUNCTION: - case T_FINAL: - case T_ABSTRACT: - case T_CLASS: - case T_INTERFACE: - case T_TRAIT: - - $infos[$infoIndex] = array( - 'type' => ($tokenType === T_FUNCTION) ? 'function' : 'class', - 'tokenStart' => $MACRO_TOKEN_LOGICAL_START_INDEX(), - 'tokenEnd' => null, - 'lineStart' => $tokens[$tokenIndex][2], - 'lineEnd' => null, - 'namespace' => $namespace, - 'uses' => $this->getUsesNoScan($namespace), - 'name' => null, - 'shortName' => null, - ); - - $classBraceCount = 0; - - // start processing with current token - - SCANNER_CLASS_TOP: - - // process the name - if ($infos[$infoIndex]['shortName'] == '' - && (($tokenType === T_CLASS || $tokenType === T_INTERFACE || $tokenType === T_TRAIT) && $infos[$infoIndex]['type'] === 'class' - || ($tokenType === T_FUNCTION && $infos[$infoIndex]['type'] === 'function')) - ) { - $infos[$infoIndex]['shortName'] = $tokens[$tokenIndex + 2][1]; - $infos[$infoIndex]['name'] = (($namespace != null) ? $namespace . '\\' : '') . $infos[$infoIndex]['shortName']; - } - - if ($tokenType === null) { - if ($tokenContent == '{') { - $classBraceCount++; - } - if ($tokenContent == '}') { - $classBraceCount--; - if ($classBraceCount === 0) { - goto SCANNER_CLASS_END; - } - } - } - - SCANNER_CLASS_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_CLASS_TOP; - - SCANNER_CLASS_END: - - $MACRO_INFO_ADVANCE(); - goto SCANNER_CONTINUE; - - } - - SCANNER_CONTINUE: - - if ($MACRO_TOKEN_ADVANCE() === false) { - goto SCANNER_END; - } - goto SCANNER_TOP; - - SCANNER_END: - - /** - * END FINITE STATE MACHINE FOR SCANNING TOKENS - */ - - $this->isScanned = true; - } - - /** - * Check for namespace - * - * @param string $namespace - * @return bool - */ - public function hasNamespace($namespace) - { - $this->scan(); - - foreach ($this->infos as $info) { - if ($info['type'] == 'namespace' && $info['namespace'] == $namespace) { - return true; - } - } - return false; - } - - /** - * @param string $namespace - * @return null|array - * @throws Exception\InvalidArgumentException - */ - protected function getUsesNoScan($namespace) - { - $namespaces = array(); - foreach ($this->infos as $info) { - if ($info['type'] == 'namespace') { - $namespaces[] = $info['namespace']; - } - } - - if ($namespace === null) { - $namespace = array_shift($namespaces); - } elseif (!is_string($namespace)) { - throw new Exception\InvalidArgumentException('Invalid namespace provided'); - } elseif (!in_array($namespace, $namespaces)) { - return null; - } - - $uses = array(); - foreach ($this->infos as $info) { - if ($info['type'] !== 'use') { - continue; - } - foreach ($info['statements'] as $statement) { - if ($info['namespace'] == $namespace) { - $uses[] = $statement; - } - } - } - - return $uses; - } -} diff --git a/library/Zend/Code/Scanner/Util.php b/library/Zend/Code/Scanner/Util.php deleted file mode 100755 index e54ae0b88..000000000 --- a/library/Zend/Code/Scanner/Util.php +++ /dev/null @@ -1,74 +0,0 @@ -namespace && !$data->uses && strlen($value) > 0 && $value{0} != '\\') { - $value = $data->namespace . '\\' . $value; - - return; - } - - if (!$data->uses || strlen($value) <= 0 || $value{0} == '\\') { - $value = ltrim($value, '\\'); - - return; - } - - if ($data->namespace || $data->uses) { - $firstPart = $value; - if (($firstPartEnd = strpos($firstPart, '\\')) !== false) { - $firstPart = substr($firstPart, 0, $firstPartEnd); - } else { - $firstPartEnd = strlen($firstPart); - } - - if (array_key_exists($firstPart, $data->uses)) { - $value = substr_replace($value, $data->uses[$firstPart], 0, $firstPartEnd); - - return; - } - - if ($data->namespace) { - $value = $data->namespace . '\\' . $value; - - return; - } - } - } -} diff --git a/library/Zend/Code/Scanner/ValueScanner.php b/library/Zend/Code/Scanner/ValueScanner.php deleted file mode 100755 index d0826cc24..000000000 --- a/library/Zend/Code/Scanner/ValueScanner.php +++ /dev/null @@ -1,15 +0,0 @@ -=5.3.23", - "zendframework/zend-eventmanager": "self.version" - }, - "require-dev": { - "doctrine/common": ">=2.1", - "zendframework/zend-stdlib": "self.version" - }, - "suggest": { - "doctrine/common": "Doctrine\\Common >=2.1 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Config/AbstractConfigFactory.php b/library/Zend/Config/AbstractConfigFactory.php deleted file mode 100755 index 20f04be02..000000000 --- a/library/Zend/Config/AbstractConfigFactory.php +++ /dev/null @@ -1,172 +0,0 @@ -configs[$requestedName])) { - return true; - } - - if (!$serviceLocator->has('Config')) { - return false; - } - - $key = $this->match($requestedName); - if (null === $key) { - return false; - } - - $config = $serviceLocator->get('Config'); - return isset($config[$key]); - } - - /** - * Create service with name - * - * @param ServiceManager\ServiceLocatorInterface $serviceLocator - * @param string $name - * @param string $requestedName - * @return string|mixed|array - */ - public function createServiceWithName(ServiceManager\ServiceLocatorInterface $serviceLocator, $name, $requestedName) - { - if (isset($this->configs[$requestedName])) { - return $this->configs[$requestedName]; - } - - $key = $this->match($requestedName); - if (isset($this->configs[$key])) { - $this->configs[$requestedName] = $this->configs[$key]; - return $this->configs[$key]; - } - - $config = $serviceLocator->get('Config'); - $this->configs[$requestedName] = $this->configs[$key] = $config[$key]; - return $config; - } - - /** - * @param string $pattern - * @return self - * @throws Exception\InvalidArgumentException - */ - public function addPattern($pattern) - { - if (!is_string($pattern)) { - throw new Exception\InvalidArgumentException('pattern must be string'); - } - - $patterns = $this->getPatterns(); - array_unshift($patterns, $pattern); - $this->setPatterns($patterns); - return $this; - } - - /** - * @param array|Traversable $patterns - * @return self - * @throws Exception\InvalidArgumentException - */ - public function addPatterns($patterns) - { - if ($patterns instanceof Traversable) { - $patterns = iterator_to_array($patterns); - } - - if (!is_array($patterns)) { - throw new Exception\InvalidArgumentException("patterns must be array or Traversable"); - } - - foreach ($patterns as $pattern) { - $this->addPattern($pattern); - } - - return $this; - } - - /** - * @param array|Traversable $patterns - * @return self - * @throws \InvalidArgumentException - */ - public function setPatterns($patterns) - { - if ($patterns instanceof Traversable) { - $patterns = iterator_to_array($patterns); - } - - if (!is_array($patterns)) { - throw new \InvalidArgumentException("patterns must be array or Traversable"); - } - - $this->patterns = $patterns; - return $this; - } - - /** - * @return array - */ - public function getPatterns() - { - if (null === $this->patterns) { - $this->setPatterns($this->defaultPatterns); - } - return $this->patterns; - } - - /** - * @param string $requestedName - * @return null|string - */ - protected function match($requestedName) - { - foreach ($this->getPatterns() as $pattern) { - if (preg_match($pattern, $requestedName, $matches)) { - return $matches[1]; - } - } - return null; - } -} diff --git a/library/Zend/Config/CONTRIBUTING.md b/library/Zend/Config/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Config/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Config/Config.php b/library/Zend/Config/Config.php deleted file mode 100755 index 17b679782..000000000 --- a/library/Zend/Config/Config.php +++ /dev/null @@ -1,400 +0,0 @@ -allowModifications = (bool) $allowModifications; - - foreach ($array as $key => $value) { - if (is_array($value)) { - $this->data[$key] = new static($value, $this->allowModifications); - } else { - $this->data[$key] = $value; - } - - $this->count++; - } - } - - /** - * Retrieve a value and return $default if there is no element set. - * - * @param string $name - * @param mixed $default - * @return mixed - */ - public function get($name, $default = null) - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - return $default; - } - - /** - * Magic function so that $obj->value will work. - * - * @param string $name - * @return mixed - */ - public function __get($name) - { - return $this->get($name); - } - - /** - * Set a value in the config. - * - * Only allow setting of a property if $allowModifications was set to true - * on construction. Otherwise, throw an exception. - * - * @param string $name - * @param mixed $value - * @return void - * @throws Exception\RuntimeException - */ - public function __set($name, $value) - { - if ($this->allowModifications) { - if (is_array($value)) { - $value = new static($value, true); - } - - if (null === $name) { - $this->data[] = $value; - } else { - $this->data[$name] = $value; - } - - $this->count++; - } else { - throw new Exception\RuntimeException('Config is read only'); - } - } - - /** - * Deep clone of this instance to ensure that nested Zend\Configs are also - * cloned. - * - * @return void - */ - public function __clone() - { - $array = array(); - - foreach ($this->data as $key => $value) { - if ($value instanceof self) { - $array[$key] = clone $value; - } else { - $array[$key] = $value; - } - } - - $this->data = $array; - } - - /** - * Return an associative array of the stored data. - * - * @return array - */ - public function toArray() - { - $array = array(); - $data = $this->data; - - /** @var self $value */ - foreach ($data as $key => $value) { - if ($value instanceof self) { - $array[$key] = $value->toArray(); - } else { - $array[$key] = $value; - } - } - - return $array; - } - - /** - * isset() overloading - * - * @param string $name - * @return bool - */ - public function __isset($name) - { - return isset($this->data[$name]); - } - - /** - * unset() overloading - * - * @param string $name - * @return void - * @throws Exception\InvalidArgumentException - */ - public function __unset($name) - { - if (!$this->allowModifications) { - throw new Exception\InvalidArgumentException('Config is read only'); - } elseif (isset($this->data[$name])) { - unset($this->data[$name]); - $this->count--; - $this->skipNextIteration = true; - } - } - - /** - * count(): defined by Countable interface. - * - * @see Countable::count() - * @return int - */ - public function count() - { - return $this->count; - } - - /** - * current(): defined by Iterator interface. - * - * @see Iterator::current() - * @return mixed - */ - public function current() - { - $this->skipNextIteration = false; - return current($this->data); - } - - /** - * key(): defined by Iterator interface. - * - * @see Iterator::key() - * @return mixed - */ - public function key() - { - return key($this->data); - } - - /** - * next(): defined by Iterator interface. - * - * @see Iterator::next() - * @return void - */ - public function next() - { - if ($this->skipNextIteration) { - $this->skipNextIteration = false; - return; - } - - next($this->data); - } - - /** - * rewind(): defined by Iterator interface. - * - * @see Iterator::rewind() - * @return void - */ - public function rewind() - { - $this->skipNextIteration = false; - reset($this->data); - } - - /** - * valid(): defined by Iterator interface. - * - * @see Iterator::valid() - * @return bool - */ - public function valid() - { - return ($this->key() !== null); - } - - /** - * offsetExists(): defined by ArrayAccess interface. - * - * @see ArrayAccess::offsetExists() - * @param mixed $offset - * @return bool - */ - public function offsetExists($offset) - { - return $this->__isset($offset); - } - - /** - * offsetGet(): defined by ArrayAccess interface. - * - * @see ArrayAccess::offsetGet() - * @param mixed $offset - * @return mixed - */ - public function offsetGet($offset) - { - return $this->__get($offset); - } - - /** - * offsetSet(): defined by ArrayAccess interface. - * - * @see ArrayAccess::offsetSet() - * @param mixed $offset - * @param mixed $value - * @return void - */ - public function offsetSet($offset, $value) - { - $this->__set($offset, $value); - } - - /** - * offsetUnset(): defined by ArrayAccess interface. - * - * @see ArrayAccess::offsetUnset() - * @param mixed $offset - * @return void - */ - public function offsetUnset($offset) - { - $this->__unset($offset); - } - - /** - * Merge another Config with this one. - * - * For duplicate keys, the following will be performed: - * - Nested Configs will be recursively merged. - * - Items in $merge with INTEGER keys will be appended. - * - Items in $merge with STRING keys will overwrite current values. - * - * @param Config $merge - * @return Config - */ - public function merge(Config $merge) - { - /** @var Config $value */ - foreach ($merge as $key => $value) { - if (array_key_exists($key, $this->data)) { - if (is_int($key)) { - $this->data[] = $value; - } elseif ($value instanceof self && $this->data[$key] instanceof self) { - $this->data[$key]->merge($value); - } else { - if ($value instanceof self) { - $this->data[$key] = new static($value->toArray(), $this->allowModifications); - } else { - $this->data[$key] = $value; - } - } - } else { - if ($value instanceof self) { - $this->data[$key] = new static($value->toArray(), $this->allowModifications); - } else { - $this->data[$key] = $value; - } - - $this->count++; - } - } - - return $this; - } - - /** - * Prevent any more modifications being made to this instance. - * - * Useful after merge() has been used to merge multiple Config objects - * into one object which should then not be modified again. - * - * @return void - */ - public function setReadOnly() - { - $this->allowModifications = false; - - /** @var Config $value */ - foreach ($this->data as $value) { - if ($value instanceof self) { - $value->setReadOnly(); - } - } - } - - /** - * Returns whether this Config object is read only or not. - * - * @return bool - */ - public function isReadOnly() - { - return !$this->allowModifications; - } -} diff --git a/library/Zend/Config/Exception/ExceptionInterface.php b/library/Zend/Config/Exception/ExceptionInterface.php deleted file mode 100755 index d6e0240f1..000000000 --- a/library/Zend/Config/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ - 'ini', - 'json' => 'json', - 'xml' => 'xml', - 'yaml' => 'yaml', - ); - - /** - * Register config file extensions for writing - * key is extension, value is writer instance or plugin name - * - * @var array - */ - protected static $writerExtensions = array( - 'php' => 'php', - 'ini' => 'ini', - 'json' => 'json', - 'xml' => 'xml', - 'yaml' => 'yaml', - ); - - /** - * Read a config from a file. - * - * @param string $filename - * @param bool $returnConfigObject - * @param bool $useIncludePath - * @return array|Config - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public static function fromFile($filename, $returnConfigObject = false, $useIncludePath = false) - { - $filepath = $filename; - if (!file_exists($filename)) { - if (!$useIncludePath) { - throw new Exception\RuntimeException(sprintf( - 'Filename "%s" cannot be found relative to the working directory', - $filename - )); - } - - $fromIncludePath = stream_resolve_include_path($filename); - if (!$fromIncludePath) { - throw new Exception\RuntimeException(sprintf( - 'Filename "%s" cannot be found relative to the working directory or the include_path ("%s")', - $filename, - get_include_path() - )); - } - $filepath = $fromIncludePath; - } - - $pathinfo = pathinfo($filepath); - - if (!isset($pathinfo['extension'])) { - throw new Exception\RuntimeException(sprintf( - 'Filename "%s" is missing an extension and cannot be auto-detected', - $filename - )); - } - - $extension = strtolower($pathinfo['extension']); - - if ($extension === 'php') { - if (!is_file($filepath) || !is_readable($filepath)) { - throw new Exception\RuntimeException(sprintf( - "File '%s' doesn't exist or not readable", - $filename - )); - } - - $config = include $filepath; - } elseif (isset(static::$extensions[$extension])) { - $reader = static::$extensions[$extension]; - if (!$reader instanceof Reader\ReaderInterface) { - $reader = static::getReaderPluginManager()->get($reader); - static::$extensions[$extension] = $reader; - } - - /** @var Reader\ReaderInterface $reader */ - $config = $reader->fromFile($filepath); - } else { - throw new Exception\RuntimeException(sprintf( - 'Unsupported config file extension: .%s', - $pathinfo['extension'] - )); - } - - return ($returnConfigObject) ? new Config($config) : $config; - } - - /** - * Read configuration from multiple files and merge them. - * - * @param array $files - * @param bool $returnConfigObject - * @param bool $useIncludePath - * @return array|Config - */ - public static function fromFiles(array $files, $returnConfigObject = false, $useIncludePath = false) - { - $config = array(); - - foreach ($files as $file) { - $config = ArrayUtils::merge($config, static::fromFile($file, false, $useIncludePath)); - } - - return ($returnConfigObject) ? new Config($config) : $config; - } - - /** - * Writes a config to a file - * - * @param string $filename - * @param array|Config $config - * @return bool TRUE on success | FALSE on failure - * @throws Exception\RuntimeException - * @throws Exception\InvalidArgumentException - */ - public static function toFile($filename, $config) - { - if ( - (is_object($config) && !($config instanceof Config)) || - (!is_object($config) && !is_array($config)) - ) { - throw new Exception\InvalidArgumentException( - __METHOD__." \$config should be an array or instance of Zend\\Config\\Config" - ); - } - - $extension = substr(strrchr($filename, '.'), 1); - $directory = dirname($filename); - - if (!is_dir($directory)) { - throw new Exception\RuntimeException( - "Directory '{$directory}' does not exists!" - ); - } - - if (!is_writable($directory)) { - throw new Exception\RuntimeException( - "Cannot write in directory '{$directory}'" - ); - } - - if (!isset(static::$writerExtensions[$extension])) { - throw new Exception\RuntimeException( - "Unsupported config file extension: '.{$extension}' for writing." - ); - } - - $writer = static::$writerExtensions[$extension]; - if (($writer instanceof Writer\AbstractWriter) === false) { - $writer = self::getWriterPluginManager()->get($writer); - static::$writerExtensions[$extension] = $writer; - } - - if (is_object($config)) { - $config = $config->toArray(); - } - - $content = $writer->processConfig($config); - - return (bool) (file_put_contents($filename, $content) !== false); - } - - /** - * Set reader plugin manager - * - * @param ReaderPluginManager $readers - * @return void - */ - public static function setReaderPluginManager(ReaderPluginManager $readers) - { - static::$readers = $readers; - } - - /** - * Get the reader plugin manager - * - * @return ReaderPluginManager - */ - public static function getReaderPluginManager() - { - if (static::$readers === null) { - static::$readers = new ReaderPluginManager(); - } - return static::$readers; - } - - /** - * Set writer plugin manager - * - * @param WriterPluginManager $writers - * @return void - */ - public static function setWriterPluginManager(WriterPluginManager $writers) - { - static::$writers = $writers; - } - - /** - * Get the writer plugin manager - * - * @return WriterPluginManager - */ - public static function getWriterPluginManager() - { - if (static::$writers === null) { - static::$writers = new WriterPluginManager(); - } - - return static::$writers; - } - - /** - * Set config reader for file extension - * - * @param string $extension - * @param string|Reader\ReaderInterface $reader - * @throws Exception\InvalidArgumentException - * @return void - */ - public static function registerReader($extension, $reader) - { - $extension = strtolower($extension); - - if (!is_string($reader) && !$reader instanceof Reader\ReaderInterface) { - throw new Exception\InvalidArgumentException(sprintf( - 'Reader should be plugin name, class name or ' . - 'instance of %s\Reader\ReaderInterface; received "%s"', - __NAMESPACE__, - (is_object($reader) ? get_class($reader) : gettype($reader)) - )); - } - - static::$extensions[$extension] = $reader; - } - - /** - * Set config writer for file extension - * - * @param string $extension - * @param string|Writer\AbstractWriter $writer - * @throws Exception\InvalidArgumentException - * @return void - */ - public static function registerWriter($extension, $writer) - { - $extension = strtolower($extension); - - if (!is_string($writer) && !$writer instanceof Writer\AbstractWriter) { - throw new Exception\InvalidArgumentException(sprintf( - 'Writer should be plugin name, class name or ' . - 'instance of %s\Writer\AbstractWriter; received "%s"', - __NAMESPACE__, - (is_object($writer) ? get_class($writer) : gettype($writer)) - )); - } - - static::$writerExtensions[$extension] = $writer; - } -} diff --git a/library/Zend/Config/Processor/Constant.php b/library/Zend/Config/Processor/Constant.php deleted file mode 100755 index 28f76b9a7..000000000 --- a/library/Zend/Config/Processor/Constant.php +++ /dev/null @@ -1,83 +0,0 @@ -setUserOnly($userOnly); - $this->setPrefix($prefix); - $this->setSuffix($suffix); - - $this->loadConstants(); - } - - /** - * @return bool - */ - public function getUserOnly() - { - return $this->userOnly; - } - - /** - * Should we use only user-defined constants? - * - * @param bool $userOnly - * @return Constant - */ - public function setUserOnly($userOnly) - { - $this->userOnly = (bool) $userOnly; - return $this; - } - - /** - * Load all currently defined constants into parser. - * - * @return void - */ - public function loadConstants() - { - if ($this->userOnly) { - $constants = get_defined_constants(true); - $constants = isset($constants['user']) ? $constants['user'] : array(); - $this->setTokens($constants); - } else { - $this->setTokens(get_defined_constants()); - } - } - - /** - * Get current token registry. - * @return array - */ - public function getTokens() - { - return $this->tokens; - } -} diff --git a/library/Zend/Config/Processor/Filter.php b/library/Zend/Config/Processor/Filter.php deleted file mode 100755 index 99909f289..000000000 --- a/library/Zend/Config/Processor/Filter.php +++ /dev/null @@ -1,88 +0,0 @@ -setFilter($filter); - } - - /** - * @param ZendFilter $filter - * @return Filter - */ - public function setFilter(ZendFilter $filter) - { - $this->filter = $filter; - return $this; - } - - /** - * @return ZendFilter - */ - public function getFilter() - { - return $this->filter; - } - - /** - * Process - * - * @param Config $config - * @return Config - * @throws Exception\InvalidArgumentException - */ - public function process(Config $config) - { - if ($config->isReadOnly()) { - throw new Exception\InvalidArgumentException('Cannot process config because it is read-only'); - } - - /** - * Walk through config and replace values - */ - foreach ($config as $key => $val) { - if ($val instanceof Config) { - $this->process($val); - } else { - $config->$key = $this->filter->filter($val); - } - } - - return $config; - } - - /** - * Process a single value - * - * @param mixed $value - * @return mixed - */ - public function processValue($value) - { - return $this->filter->filter($value); - } -} diff --git a/library/Zend/Config/Processor/ProcessorInterface.php b/library/Zend/Config/Processor/ProcessorInterface.php deleted file mode 100755 index 6aa28e91c..000000000 --- a/library/Zend/Config/Processor/ProcessorInterface.php +++ /dev/null @@ -1,31 +0,0 @@ -isReadOnly()) { - throw new Exception\InvalidArgumentException('Cannot process config because it is read-only'); - } - - foreach ($this as $parser) { - /** @var $parser ProcessorInterface */ - $parser->process($config); - } - } - - /** - * Process a single value - * - * @param mixed $value - * @return mixed - */ - public function processValue($value) - { - foreach ($this as $parser) { - /** @var $parser ProcessorInterface */ - $value = $parser->processValue($value); - } - - return $value; - } -} diff --git a/library/Zend/Config/Processor/Token.php b/library/Zend/Config/Processor/Token.php deleted file mode 100755 index 2af2e1b3f..000000000 --- a/library/Zend/Config/Processor/Token.php +++ /dev/null @@ -1,274 +0,0 @@ - value - * to replace it with - * @param string $prefix - * @param string $suffix - * @internal param array $options - * @return Token - */ - public function __construct($tokens = array(), $prefix = '', $suffix = '') - { - $this->setTokens($tokens); - $this->setPrefix($prefix); - $this->setSuffix($suffix); - } - - /** - * @param string $prefix - * @return Token - */ - public function setPrefix($prefix) - { - // reset map - $this->map = null; - $this->prefix = $prefix; - return $this; - } - - /** - * @return string - */ - public function getPrefix() - { - return $this->prefix; - } - - /** - * @param string $suffix - * @return Token - */ - public function setSuffix($suffix) - { - // reset map - $this->map = null; - $this->suffix = $suffix; - - return $this; - } - - /** - * @return string - */ - public function getSuffix() - { - return $this->suffix; - } - - /** - * Set token registry. - * - * @param array|Config|Traversable $tokens Associative array of TOKEN => value - * to replace it with - * @return Token - * @throws Exception\InvalidArgumentException - */ - public function setTokens($tokens) - { - if (is_array($tokens)) { - $this->tokens = $tokens; - } elseif ($tokens instanceof Config) { - $this->tokens = $tokens->toArray(); - } elseif ($tokens instanceof Traversable) { - $this->tokens = array(); - foreach ($tokens as $key => $val) { - $this->tokens[$key] = $val; - } - } else { - throw new Exception\InvalidArgumentException('Cannot use ' . gettype($tokens) . ' as token registry.'); - } - - // reset map - $this->map = null; - - return $this; - } - - /** - * Get current token registry. - * - * @return array - */ - public function getTokens() - { - return $this->tokens; - } - - /** - * Add new token. - * - * @param string $token - * @param mixed $value - * @return Token - * @throws Exception\InvalidArgumentException - */ - public function addToken($token, $value) - { - if (!is_scalar($token)) { - throw new Exception\InvalidArgumentException('Cannot use ' . gettype($token) . ' as token name.'); - } - $this->tokens[$token] = $value; - - // reset map - $this->map = null; - - return $this; - } - - /** - * Add new token. - * - * @param string $token - * @param mixed $value - * @return Token - */ - public function setToken($token, $value) - { - return $this->addToken($token, $value); - } - - /** - * Build replacement map - * - * @return array - */ - protected function buildMap() - { - if (null === $this->map) { - if (!$this->suffix && !$this->prefix) { - $this->map = $this->tokens; - } else { - $this->map = array(); - - foreach ($this->tokens as $token => $value) { - $this->map[$this->prefix . $token . $this->suffix] = $value; - } - } - - foreach (array_keys($this->map) as $key) { - if (empty($key)) { - unset($this->map[$key]); - } - } - } - - return $this->map; - } - - /** - * Process - * - * @param Config $config - * @return Config - * @throws Exception\InvalidArgumentException - */ - public function process(Config $config) - { - return $this->doProcess($config, $this->buildMap()); - } - - /** - * Process a single value - * - * @param $value - * @return mixed - */ - public function processValue($value) - { - return $this->doProcess($value, $this->buildMap()); - } - - /** - * Applies replacement map to the given value by modifying the value itself - * - * @param mixed $value - * @param array $replacements - * - * @return mixed - * - * @throws Exception\InvalidArgumentException if the provided value is a read-only {@see Config} - */ - private function doProcess($value, array $replacements) - { - if ($value instanceof Config) { - if ($value->isReadOnly()) { - throw new Exception\InvalidArgumentException('Cannot process config because it is read-only'); - } - - foreach ($value as $key => $val) { - $value->$key = $this->doProcess($val, $replacements); - } - - return $value; - } - - if ($value instanceof Traversable || is_array($value)) { - foreach ($value as & $val) { - $val = $this->doProcess($val, $replacements); - } - - return $value; - } - - if (!is_string($value) && (is_bool($value) || is_numeric($value))) { - $stringVal = (string) $value; - $changedVal = strtr($value, $this->map); - - // replace the value only if a string replacement occurred - if ($changedVal !== $stringVal) { - return $changedVal; - } - - return $value; - } - - return strtr((string) $value, $this->map); - } -} diff --git a/library/Zend/Config/Processor/Translator.php b/library/Zend/Config/Processor/Translator.php deleted file mode 100755 index 48c0985de..000000000 --- a/library/Zend/Config/Processor/Translator.php +++ /dev/null @@ -1,139 +0,0 @@ -setTranslator($translator); - $this->setTextDomain($textDomain); - $this->setLocale($locale); - } - - /** - * @param ZendTranslator $translator - * @return Translator - */ - public function setTranslator(ZendTranslator $translator) - { - $this->translator = $translator; - return $this; - } - - /** - * @return ZendTranslator - */ - public function getTranslator() - { - return $this->translator; - } - - /** - * @param string|null $locale - * @return Translator - */ - public function setLocale($locale) - { - $this->locale = $locale; - return $this; - } - - /** - * @return string|null - */ - public function getLocale() - { - return $this->locale; - } - - /** - * @param string $textDomain - * @return Translator - */ - public function setTextDomain($textDomain) - { - $this->textDomain = $textDomain; - return $this; - } - - /** - * @return string - */ - public function getTextDomain() - { - return $this->textDomain; - } - - /** - * Process - * - * @param Config $config - * @return Config - * @throws Exception\InvalidArgumentException - */ - public function process(Config $config) - { - if ($config->isReadOnly()) { - throw new Exception\InvalidArgumentException('Cannot process config because it is read-only'); - } - - /** - * Walk through config and replace values - */ - foreach ($config as $key => $val) { - if ($val instanceof Config) { - $this->process($val); - } else { - $config->{$key} = $this->translator->translate($val, $this->textDomain, $this->locale); - } - } - - return $config; - } - - /** - * Process a single value - * - * @param $value - * @return string - */ - public function processValue($value) - { - return $this->translator->translate($value, $this->textDomain, $this->locale); - } -} diff --git a/library/Zend/Config/README.md b/library/Zend/Config/README.md deleted file mode 100755 index 650ba568d..000000000 --- a/library/Zend/Config/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Config Component from ZF2 -========================= - -This is the Config component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Config/Reader/Ini.php b/library/Zend/Config/Reader/Ini.php deleted file mode 100755 index 343668549..000000000 --- a/library/Zend/Config/Reader/Ini.php +++ /dev/null @@ -1,225 +0,0 @@ -nestSeparator = $separator; - return $this; - } - - /** - * Get nest separator. - * - * @return string - */ - public function getNestSeparator() - { - return $this->nestSeparator; - } - - /** - * fromFile(): defined by Reader interface. - * - * @see ReaderInterface::fromFile() - * @param string $filename - * @return array - * @throws Exception\RuntimeException - */ - public function fromFile($filename) - { - if (!is_file($filename) || !is_readable($filename)) { - throw new Exception\RuntimeException(sprintf( - "File '%s' doesn't exist or not readable", - $filename - )); - } - - $this->directory = dirname($filename); - - set_error_handler( - function ($error, $message = '', $file = '', $line = 0) use ($filename) { - throw new Exception\RuntimeException( - sprintf('Error reading INI file "%s": %s', $filename, $message), - $error - ); - }, - E_WARNING - ); - $ini = parse_ini_file($filename, true); - restore_error_handler(); - - return $this->process($ini); - } - - /** - * fromString(): defined by Reader interface. - * - * @param string $string - * @return array|bool - * @throws Exception\RuntimeException - */ - public function fromString($string) - { - if (empty($string)) { - return array(); - } - $this->directory = null; - - set_error_handler( - function ($error, $message = '', $file = '', $line = 0) { - throw new Exception\RuntimeException( - sprintf('Error reading INI string: %s', $message), - $error - ); - }, - E_WARNING - ); - $ini = parse_ini_string($string, true); - restore_error_handler(); - - return $this->process($ini); - } - - /** - * Process data from the parsed ini file. - * - * @param array $data - * @return array - */ - protected function process(array $data) - { - $config = array(); - - foreach ($data as $section => $value) { - if (is_array($value)) { - if (strpos($section, $this->nestSeparator) !== false) { - $sections = explode($this->nestSeparator, $section); - $config = array_merge_recursive($config, $this->buildNestedSection($sections, $value)); - } else { - $config[$section] = $this->processSection($value); - } - } else { - $this->processKey($section, $value, $config); - } - } - - return $config; - } - - /** - * Process a nested section - * - * @param array $sections - * @param mixed $value - * @return array - */ - private function buildNestedSection($sections, $value) - { - if (count($sections) == 0) { - return $this->processSection($value); - } - - $nestedSection = array(); - - $first = array_shift($sections); - $nestedSection[$first] = $this->buildNestedSection($sections, $value); - - return $nestedSection; - } - - /** - * Process a section. - * - * @param array $section - * @return array - */ - protected function processSection(array $section) - { - $config = array(); - - foreach ($section as $key => $value) { - $this->processKey($key, $value, $config); - } - - return $config; - } - - /** - * Process a key. - * - * @param string $key - * @param string $value - * @param array $config - * @return array - * @throws Exception\RuntimeException - */ - protected function processKey($key, $value, array &$config) - { - if (strpos($key, $this->nestSeparator) !== false) { - $pieces = explode($this->nestSeparator, $key, 2); - - if (!strlen($pieces[0]) || !strlen($pieces[1])) { - throw new Exception\RuntimeException(sprintf('Invalid key "%s"', $key)); - } elseif (!isset($config[$pieces[0]])) { - if ($pieces[0] === '0' && !empty($config)) { - $config = array($pieces[0] => $config); - } else { - $config[$pieces[0]] = array(); - } - } elseif (!is_array($config[$pieces[0]])) { - throw new Exception\RuntimeException( - sprintf('Cannot create sub-key for "%s", as key already exists', $pieces[0]) - ); - } - - $this->processKey($pieces[1], $value, $config[$pieces[0]]); - } else { - if ($key === '@include') { - if ($this->directory === null) { - throw new Exception\RuntimeException('Cannot process @include statement for a string config'); - } - - $reader = clone $this; - $include = $reader->fromFile($this->directory . '/' . $value); - $config = array_replace_recursive($config, $include); - } else { - $config[$key] = $value; - } - } - } -} diff --git a/library/Zend/Config/Reader/JavaProperties.php b/library/Zend/Config/Reader/JavaProperties.php deleted file mode 100755 index 965bd3c80..000000000 --- a/library/Zend/Config/Reader/JavaProperties.php +++ /dev/null @@ -1,138 +0,0 @@ -directory = dirname($filename); - - $config = $this->parse(file_get_contents($filename)); - - return $this->process($config); - } - - /** - * fromString(): defined by Reader interface. - * - * @see ReaderInterface::fromString() - * @param string $string - * @return array - * @throws Exception\RuntimeException if an @include key is found - */ - public function fromString($string) - { - if (empty($string)) { - return array(); - } - - $this->directory = null; - - $config = $this->parse($string); - - return $this->process($config); - } - - /** - * Process the array for @include - * - * @param array $data - * @return array - * @throws Exception\RuntimeException if an @include key is found - */ - protected function process(array $data) - { - foreach ($data as $key => $value) { - if (trim($key) === '@include') { - if ($this->directory === null) { - throw new Exception\RuntimeException('Cannot process @include statement for a string'); - } - $reader = clone $this; - unset($data[$key]); - $data = array_replace_recursive($data, $reader->fromFile($this->directory . '/' . $value)); - } - } - return $data; - } - - /** - * Parse Java-style properties string - * - * @todo Support use of the equals sign "key=value" as key-value delimiter - * @todo Ignore whitespace that precedes text past the first line of multiline values - * - * @param string $string - * @return array - */ - protected function parse($string) - { - $result = array(); - $lines = explode("\n", $string); - $key = ""; - $isWaitingOtherLine = false; - foreach ($lines as $i => $line) { - // Ignore empty lines and commented lines - if (empty($line) - || (!$isWaitingOtherLine && strpos($line, "#") === 0) - || (!$isWaitingOtherLine && strpos($line, "!") === 0)) { - continue; - } - - // Add a new key-value pair or append value to a previous pair - if (!$isWaitingOtherLine) { - $key = substr($line, 0, strpos($line, ':')); - $value = substr($line, strpos($line, ':') + 1, strlen($line)); - } else { - $value .= $line; - } - - // Check if ends with single '\' (indicating another line is expected) - if (strrpos($value, "\\") === strlen($value) - strlen("\\")) { - $value = substr($value, 0, strlen($value) - 1); - $isWaitingOtherLine = true; - } else { - $isWaitingOtherLine = false; - } - - $result[$key] = stripslashes($value); - unset($lines[$i]); - } - - return $result; - } -} diff --git a/library/Zend/Config/Reader/Json.php b/library/Zend/Config/Reader/Json.php deleted file mode 100755 index 407e2aafa..000000000 --- a/library/Zend/Config/Reader/Json.php +++ /dev/null @@ -1,105 +0,0 @@ -directory = dirname($filename); - - try { - $config = JsonFormat::decode(file_get_contents($filename), JsonFormat::TYPE_ARRAY); - } catch (JsonException\RuntimeException $e) { - throw new Exception\RuntimeException($e->getMessage()); - } - - return $this->process($config); - } - - /** - * fromString(): defined by Reader interface. - * - * @see ReaderInterface::fromString() - * @param string $string - * @return array|bool - * @throws Exception\RuntimeException - */ - public function fromString($string) - { - if (empty($string)) { - return array(); - } - - $this->directory = null; - - try { - $config = JsonFormat::decode($string, JsonFormat::TYPE_ARRAY); - } catch (JsonException\RuntimeException $e) { - throw new Exception\RuntimeException($e->getMessage()); - } - - return $this->process($config); - } - - /** - * Process the array for @include - * - * @param array $data - * @return array - * @throws Exception\RuntimeException - */ - protected function process(array $data) - { - foreach ($data as $key => $value) { - if (is_array($value)) { - $data[$key] = $this->process($value); - } - if (trim($key) === '@include') { - if ($this->directory === null) { - throw new Exception\RuntimeException('Cannot process @include statement for a JSON string'); - } - $reader = clone $this; - unset($data[$key]); - $data = array_replace_recursive($data, $reader->fromFile($this->directory . '/' . $value)); - } - } - return $data; - } -} diff --git a/library/Zend/Config/Reader/ReaderInterface.php b/library/Zend/Config/Reader/ReaderInterface.php deleted file mode 100755 index 0393fe052..000000000 --- a/library/Zend/Config/Reader/ReaderInterface.php +++ /dev/null @@ -1,29 +0,0 @@ -reader = new XMLReader(); - $this->reader->open($filename, null, LIBXML_XINCLUDE); - - $this->directory = dirname($filename); - - set_error_handler( - function ($error, $message = '', $file = '', $line = 0) use ($filename) { - throw new Exception\RuntimeException( - sprintf('Error reading XML file "%s": %s', $filename, $message), - $error - ); - }, - E_WARNING - ); - $return = $this->process(); - restore_error_handler(); - - return $return; - } - - /** - * fromString(): defined by Reader interface. - * - * @see ReaderInterface::fromString() - * @param string $string - * @return array|bool - * @throws Exception\RuntimeException - */ - public function fromString($string) - { - if (empty($string)) { - return array(); - } - $this->reader = new XMLReader(); - - $this->reader->xml($string, null, LIBXML_XINCLUDE); - - $this->directory = null; - - set_error_handler( - function ($error, $message = '', $file = '', $line = 0) { - throw new Exception\RuntimeException( - sprintf('Error reading XML string: %s', $message), - $error - ); - }, - E_WARNING - ); - $return = $this->process(); - restore_error_handler(); - - return $return; - } - - /** - * Process data from the created XMLReader. - * - * @return array - */ - protected function process() - { - return $this->processNextElement(); - } - - /** - * Process the next inner element. - * - * @return mixed - */ - protected function processNextElement() - { - $children = array(); - $text = ''; - - while ($this->reader->read()) { - if ($this->reader->nodeType === XMLReader::ELEMENT) { - if ($this->reader->depth === 0) { - return $this->processNextElement(); - } - - $attributes = $this->getAttributes(); - $name = $this->reader->name; - - if ($this->reader->isEmptyElement) { - $child = array(); - } else { - $child = $this->processNextElement(); - } - - if ($attributes) { - if (is_string($child)) { - $child = array('_' => $child); - } - - if (! is_array($child) ) { - $child = array(); - } - - $child = array_merge($child, $attributes); - } - - if (isset($children[$name])) { - if (!is_array($children[$name]) || !array_key_exists(0, $children[$name])) { - $children[$name] = array($children[$name]); - } - - $children[$name][] = $child; - } else { - $children[$name] = $child; - } - } elseif ($this->reader->nodeType === XMLReader::END_ELEMENT) { - break; - } elseif (in_array($this->reader->nodeType, $this->textNodes)) { - $text .= $this->reader->value; - } - } - - return $children ?: $text; - } - - /** - * Get all attributes on the current node. - * - * @return array - */ - protected function getAttributes() - { - $attributes = array(); - - if ($this->reader->hasAttributes) { - while ($this->reader->moveToNextAttribute()) { - $attributes[$this->reader->localName] = $this->reader->value; - } - - $this->reader->moveToElement(); - } - - return $attributes; - } -} diff --git a/library/Zend/Config/Reader/Yaml.php b/library/Zend/Config/Reader/Yaml.php deleted file mode 100755 index 709b8b8a6..000000000 --- a/library/Zend/Config/Reader/Yaml.php +++ /dev/null @@ -1,159 +0,0 @@ -setYamlDecoder($yamlDecoder); - } else { - if (function_exists('yaml_parse')) { - $this->setYamlDecoder('yaml_parse'); - } - } - } - - /** - * Set callback for decoding YAML - * - * @param string|callable $yamlDecoder the decoder to set - * @return Yaml - * @throws Exception\RuntimeException - */ - public function setYamlDecoder($yamlDecoder) - { - if (!is_callable($yamlDecoder)) { - throw new Exception\RuntimeException( - 'Invalid parameter to setYamlDecoder() - must be callable' - ); - } - $this->yamlDecoder = $yamlDecoder; - return $this; - } - - /** - * Get callback for decoding YAML - * - * @return callable - */ - public function getYamlDecoder() - { - return $this->yamlDecoder; - } - - /** - * fromFile(): defined by Reader interface. - * - * @see ReaderInterface::fromFile() - * @param string $filename - * @return array - * @throws Exception\RuntimeException - */ - public function fromFile($filename) - { - if (!is_file($filename) || !is_readable($filename)) { - throw new Exception\RuntimeException(sprintf( - "File '%s' doesn't exist or not readable", - $filename - )); - } - - if (null === $this->getYamlDecoder()) { - throw new Exception\RuntimeException("You didn't specify a Yaml callback decoder"); - } - - $this->directory = dirname($filename); - - $config = call_user_func($this->getYamlDecoder(), file_get_contents($filename)); - if (null === $config) { - throw new Exception\RuntimeException("Error parsing YAML data"); - } - - return $this->process($config); - } - - /** - * fromString(): defined by Reader interface. - * - * @see ReaderInterface::fromString() - * @param string $string - * @return array|bool - * @throws Exception\RuntimeException - */ - public function fromString($string) - { - if (null === $this->getYamlDecoder()) { - throw new Exception\RuntimeException("You didn't specify a Yaml callback decoder"); - } - if (empty($string)) { - return array(); - } - - $this->directory = null; - - $config = call_user_func($this->getYamlDecoder(), $string); - if (null === $config) { - throw new Exception\RuntimeException("Error parsing YAML data"); - } - - return $this->process($config); - } - - /** - * Process the array for @include - * - * @param array $data - * @return array - * @throws Exception\RuntimeException - */ - protected function process(array $data) - { - foreach ($data as $key => $value) { - if (is_array($value)) { - $data[$key] = $this->process($value); - } - if (trim($key) === '@include') { - if ($this->directory === null) { - throw new Exception\RuntimeException('Cannot process @include statement for a json string'); - } - $reader = clone $this; - unset($data[$key]); - $data = array_replace_recursive($data, $reader->fromFile($this->directory . '/' . $value)); - } - } - return $data; - } -} diff --git a/library/Zend/Config/ReaderPluginManager.php b/library/Zend/Config/ReaderPluginManager.php deleted file mode 100755 index 3e74a5640..000000000 --- a/library/Zend/Config/ReaderPluginManager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Zend\Config\Reader\Ini', - 'json' => 'Zend\Config\Reader\Json', - 'xml' => 'Zend\Config\Reader\Xml', - 'yaml' => 'Zend\Config\Reader\Yaml', - ); - - /** - * Validate the plugin - * Checks that the reader loaded is an instance of Reader\ReaderInterface. - * - * @param Reader\ReaderInterface $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Reader\ReaderInterface) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Reader\ReaderInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Config/Writer/AbstractWriter.php b/library/Zend/Config/Writer/AbstractWriter.php deleted file mode 100755 index a02111f7d..000000000 --- a/library/Zend/Config/Writer/AbstractWriter.php +++ /dev/null @@ -1,84 +0,0 @@ -toString($config), $flags); - } catch (\Exception $e) { - restore_error_handler(); - throw $e; - } - - restore_error_handler(); - } - - /** - * toString(): defined by Writer interface. - * - * @see WriterInterface::toString() - * @param mixed $config - * @return string - * @throws Exception\InvalidArgumentException - */ - public function toString($config) - { - if ($config instanceof Traversable) { - $config = ArrayUtils::iteratorToArray($config); - } elseif (!is_array($config)) { - throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable config'); - } - - return $this->processConfig($config); - } - - /** - * @param array $config - * @return string - */ - abstract protected function processConfig(array $config); -} diff --git a/library/Zend/Config/Writer/Ini.php b/library/Zend/Config/Writer/Ini.php deleted file mode 100755 index 9244f73e6..000000000 --- a/library/Zend/Config/Writer/Ini.php +++ /dev/null @@ -1,183 +0,0 @@ -nestSeparator = $separator; - return $this; - } - - /** - * Get nest separator. - * - * @return string - */ - public function getNestSeparator() - { - return $this->nestSeparator; - } - - /** - * Set if rendering should occur without sections or not. - * - * If set to true, the INI file is rendered without sections completely - * into the global namespace of the INI file. - * - * @param bool $withoutSections - * @return Ini - */ - public function setRenderWithoutSectionsFlags($withoutSections) - { - $this->renderWithoutSections = (bool) $withoutSections; - return $this; - } - - /** - * Return whether the writer should render without sections. - * - * @return bool - */ - public function shouldRenderWithoutSections() - { - return $this->renderWithoutSections; - } - - /** - * processConfig(): defined by AbstractWriter. - * - * @param array $config - * @return string - */ - public function processConfig(array $config) - { - $iniString = ''; - - if ($this->shouldRenderWithoutSections()) { - $iniString .= $this->addBranch($config); - } else { - $config = $this->sortRootElements($config); - - foreach ($config as $sectionName => $data) { - if (!is_array($data)) { - $iniString .= $sectionName - . ' = ' - . $this->prepareValue($data) - . "\n"; - } else { - $iniString .= '[' . $sectionName . ']' . "\n" - . $this->addBranch($data) - . "\n"; - } - } - } - - return $iniString; - } - - /** - * Add a branch to an INI string recursively. - * - * @param array $config - * @param array $parents - * @return string - */ - protected function addBranch(array $config, $parents = array()) - { - $iniString = ''; - - foreach ($config as $key => $value) { - $group = array_merge($parents, array($key)); - - if (is_array($value)) { - $iniString .= $this->addBranch($value, $group); - } else { - $iniString .= implode($this->nestSeparator, $group) - . ' = ' - . $this->prepareValue($value) - . "\n"; - } - } - - return $iniString; - } - - /** - * Prepare a value for INI. - * - * @param mixed $value - * @return string - * @throws Exception\RuntimeException - */ - protected function prepareValue($value) - { - if (is_int($value) || is_float($value)) { - return $value; - } elseif (is_bool($value)) { - return ($value ? 'true' : 'false'); - } elseif (false === strpos($value, '"')) { - return '"' . $value . '"'; - } else { - throw new Exception\RuntimeException('Value can not contain double quotes'); - } - } - - /** - * Root elements that are not assigned to any section needs to be on the - * top of config. - * - * @param array $config - * @return array - */ - protected function sortRootElements(array $config) - { - $sections = array(); - - // Remove sections from config array. - foreach ($config as $key => $value) { - if (is_array($value)) { - $sections[$key] = $value; - unset($config[$key]); - } - } - - // Read sections to the end. - foreach ($sections as $key => $value) { - $config[$key] = $value; - } - - return $config; - } -} diff --git a/library/Zend/Config/Writer/Json.php b/library/Zend/Config/Writer/Json.php deleted file mode 100755 index 04548495b..000000000 --- a/library/Zend/Config/Writer/Json.php +++ /dev/null @@ -1,26 +0,0 @@ - $this->useBracketArraySyntax ? '[' : 'array(', - 'close' => $this->useBracketArraySyntax ? ']' : ')' - ); - - return "processIndented($config, $arraySyntax) . - $arraySyntax['close'] . ";\n"; - } - - /** - * Sets whether or not to use the PHP 5.4+ "[]" array syntax. - * - * @param bool $value - * @return self - */ - public function setUseBracketArraySyntax($value) - { - $this->useBracketArraySyntax = $value; - return $this; - } - - /** - * toFile(): defined by Writer interface. - * - * @see WriterInterface::toFile() - * @param string $filename - * @param mixed $config - * @param bool $exclusiveLock - * @return void - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public function toFile($filename, $config, $exclusiveLock = true) - { - if (empty($filename)) { - throw new Exception\InvalidArgumentException('No file name specified'); - } - - $flags = 0; - if ($exclusiveLock) { - $flags |= LOCK_EX; - } - - set_error_handler( - function ($error, $message = '', $file = '', $line = 0) use ($filename) { - throw new Exception\RuntimeException( - sprintf('Error writing to "%s": %s', $filename, $message), - $error - ); - }, - E_WARNING - ); - - try { - // for Windows, paths are escaped. - $dirname = str_replace('\\', '\\\\', dirname($filename)); - - $string = $this->toString($config); - $string = str_replace("'" . $dirname, "__DIR__ . '", $string); - - file_put_contents($filename, $string, $flags); - } catch (\Exception $e) { - restore_error_handler(); - throw $e; - } - - restore_error_handler(); - } - - /** - * Recursively processes a PHP config array structure into a readable format. - * - * @param array $config - * @param array $arraySyntax - * @param int $indentLevel - * @return string - */ - protected function processIndented(array $config, array $arraySyntax, &$indentLevel = 1) - { - $arrayString = ""; - - foreach ($config as $key => $value) { - $arrayString .= str_repeat(self::INDENT_STRING, $indentLevel); - $arrayString .= (is_int($key) ? $key : "'" . addslashes($key) . "'") . ' => '; - - if (is_array($value)) { - if ($value === array()) { - $arrayString .= $arraySyntax['open'] . $arraySyntax['close'] . ",\n"; - } else { - $indentLevel++; - $arrayString .= $arraySyntax['open'] . "\n" - . $this->processIndented($value, $arraySyntax, $indentLevel) - . str_repeat(self::INDENT_STRING, --$indentLevel) . $arraySyntax['close'] . ",\n"; - } - } elseif (is_object($value) || is_string($value)) { - $arrayString .= var_export($value, true) . ",\n"; - } elseif (is_bool($value)) { - $arrayString .= ($value ? 'true' : 'false') . ",\n"; - } elseif ($value === null) { - $arrayString .= "null,\n"; - } else { - $arrayString .= $value . ",\n"; - } - } - - return $arrayString; - } -} diff --git a/library/Zend/Config/Writer/WriterInterface.php b/library/Zend/Config/Writer/WriterInterface.php deleted file mode 100755 index afbecd104..000000000 --- a/library/Zend/Config/Writer/WriterInterface.php +++ /dev/null @@ -1,31 +0,0 @@ -openMemory(); - $writer->setIndent(true); - $writer->setIndentString(str_repeat(' ', 4)); - - $writer->startDocument('1.0', 'UTF-8'); - $writer->startElement('zend-config'); - - foreach ($config as $sectionName => $data) { - if (!is_array($data)) { - $writer->writeElement($sectionName, (string) $data); - } else { - $this->addBranch($sectionName, $data, $writer); - } - } - - $writer->endElement(); - $writer->endDocument(); - - return $writer->outputMemory(); - } - - /** - * Add a branch to an XML object recursively. - * - * @param string $branchName - * @param array $config - * @param XMLWriter $writer - * @return void - * @throws Exception\RuntimeException - */ - protected function addBranch($branchName, array $config, XMLWriter $writer) - { - $branchType = null; - - foreach ($config as $key => $value) { - if ($branchType === null) { - if (is_numeric($key)) { - $branchType = 'numeric'; - } else { - $writer->startElement($branchName); - $branchType = 'string'; - } - } elseif ($branchType !== (is_numeric($key) ? 'numeric' : 'string')) { - throw new Exception\RuntimeException('Mixing of string and numeric keys is not allowed'); - } - - if ($branchType === 'numeric') { - if (is_array($value)) { - $this->addBranch($value, $value, $writer); - } else { - $writer->writeElement($branchName, (string) $value); - } - } else { - if (is_array($value)) { - $this->addBranch($key, $value, $writer); - } else { - $writer->writeElement($key, (string) $value); - } - } - } - - if ($branchType === 'string') { - $writer->endElement(); - } - } -} diff --git a/library/Zend/Config/Writer/Yaml.php b/library/Zend/Config/Writer/Yaml.php deleted file mode 100755 index f741ad677..000000000 --- a/library/Zend/Config/Writer/Yaml.php +++ /dev/null @@ -1,85 +0,0 @@ -setYamlEncoder($yamlEncoder); - } else { - if (function_exists('yaml_emit')) { - $this->setYamlEncoder('yaml_emit'); - } - } - } - - /** - * Get callback for decoding YAML - * - * @return callable - */ - public function getYamlEncoder() - { - return $this->yamlEncoder; - } - - /** - * Set callback for decoding YAML - * - * @param callable $yamlEncoder the decoder to set - * @return Yaml - * @throws Exception\InvalidArgumentException - */ - public function setYamlEncoder($yamlEncoder) - { - if (!is_callable($yamlEncoder)) { - throw new Exception\InvalidArgumentException('Invalid parameter to setYamlEncoder() - must be callable'); - } - $this->yamlEncoder = $yamlEncoder; - return $this; - } - - /** - * processConfig(): defined by AbstractWriter. - * - * @param array $config - * @return string - * @throws Exception\RuntimeException - */ - public function processConfig(array $config) - { - if (null === $this->getYamlEncoder()) { - throw new Exception\RuntimeException("You didn't specify a Yaml callback encoder"); - } - - $config = call_user_func($this->getYamlEncoder(), $config); - if (null === $config) { - throw new Exception\RuntimeException("Error generating YAML data"); - } - - return $config; - } -} diff --git a/library/Zend/Config/WriterPluginManager.php b/library/Zend/Config/WriterPluginManager.php deleted file mode 100755 index c70e4415c..000000000 --- a/library/Zend/Config/WriterPluginManager.php +++ /dev/null @@ -1,36 +0,0 @@ - 'Zend\Config\Writer\Ini', - 'json' => 'Zend\Config\Writer\Json', - 'php' => 'Zend\Config\Writer\PhpArray', - 'yaml' => 'Zend\Config\Writer\Yaml', - 'xml' => 'Zend\Config\Writer\Xml', - ); - - public function validatePlugin($plugin) - { - if ($plugin instanceof Writer\AbstractWriter) { - return; - } - - $type = is_object($plugin) ? get_class($plugin) : gettype($plugin); - - throw new Exception\InvalidArgumentException( - "Plugin of type {$type} is invalid. Plugin must extend ". __NAMESPACE__ . '\Writer\AbstractWriter' - ); - } -} diff --git a/library/Zend/Config/composer.json b/library/Zend/Config/composer.json deleted file mode 100755 index 6ea7fa11e..000000000 --- a/library/Zend/Config/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "zendframework/zend-config", - "description": "provides a nested object property based user interface for accessing this configuration data within application code", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "config" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Config\\": "" - } - }, - "target-dir": "Zend/Config", - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", - "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Console/Adapter/AbstractAdapter.php b/library/Zend/Console/Adapter/AbstractAdapter.php deleted file mode 100755 index 49718034f..000000000 --- a/library/Zend/Console/Adapter/AbstractAdapter.php +++ /dev/null @@ -1,561 +0,0 @@ -encodeText($text); - - if ($color !== null || $bgColor !== null) { - echo $this->colorize($text, $color, $bgColor); - } else { - echo $text; - } - } - - /** - * Alias for write() - * - * @param string $text - * @param null|int $color - * @param null|int $bgColor - */ - public function writeText($text, $color = null, $bgColor = null) - { - return $this->write($text, $color, $bgColor); - } - - /** - * Write a single line of text to console and advance cursor to the next line. - * - * @param string $text - * @param null|int $color - * @param null|int $bgColor - */ - public function writeLine($text = "", $color = null, $bgColor = null) - { - $this->write($text . PHP_EOL, $color, $bgColor); - } - - /** - * Write a piece of text at the coordinates of $x and $y - * - * - * @param string $text Text to write - * @param int $x Console X coordinate (column) - * @param int $y Console Y coordinate (row) - * @param null|int $color - * @param null|int $bgColor - */ - public function writeAt($text, $x, $y, $color = null, $bgColor = null) - { - $this->setPos($x, $y); - $this->write($text, $color, $bgColor); - } - - /** - * Write a box at the specified coordinates. - * If X or Y coordinate value is negative, it will be calculated as the distance from far right or bottom edge - * of the console (respectively). - * - * @param int $x1 Top-left corner X coordinate (column) - * @param int $y1 Top-left corner Y coordinate (row) - * @param int $x2 Bottom-right corner X coordinate (column) - * @param int $y2 Bottom-right corner Y coordinate (row) - * @param int $lineStyle (optional) Box border style. - * @param int $fillStyle (optional) Box fill style or a single character to fill it with. - * @param int $color (optional) Foreground color - * @param int $bgColor (optional) Background color - * @param null|int $fillColor (optional) Foreground color of box fill - * @param null|int $fillBgColor (optional) Background color of box fill - * @throws Exception\BadMethodCallException if coordinates are invalid - */ - public function writeBox( - $x1, - $y1, - $x2, - $y2, - $lineStyle = self::LINE_SINGLE, - $fillStyle = self::FILL_NONE, - $color = null, - $bgColor = null, - $fillColor = null, - $fillBgColor = null - ) { - // Sanitize coordinates - $x1 = (int) $x1; - $y1 = (int) $y1; - $x2 = (int) $x2; - $y2 = (int) $y2; - - // Translate negative coordinates - if ($x2 < 0) { - $x2 = $this->getWidth() - $x2; - } - - if ($y2 < 0) { - $y2 = $this->getHeight() - $y2; - } - - // Validate coordinates - if ($x1 < 0 - || $y1 < 0 - || $x2 < $x1 - || $y2 < $y1 - ) { - throw new Exception\BadMethodCallException('Supplied X,Y coordinates are invalid.'); - } - - // Determine charset and dimensions - $charset = $this->getCharset(); - $width = $x2 - $x1 + 1; - $height = $y2 - $y1 + 1; - - if ($width <= 2) { - $lineStyle = static::LINE_NONE; - } - - // Activate line drawing - $this->write($charset::ACTIVATE); - - // Draw horizontal lines - if ($lineStyle !== static::LINE_NONE) { - switch ($lineStyle) { - case static::LINE_SINGLE: - $lineChar = $charset::LINE_SINGLE_EW; - break; - - case static::LINE_DOUBLE: - $lineChar = $charset::LINE_DOUBLE_EW; - break; - - case static::LINE_BLOCK: - default: - $lineChar = $charset::LINE_BLOCK_EW; - break; - } - - $this->setPos($x1 + 1, $y1); - $this->write(str_repeat($lineChar, $width - 2), $color, $bgColor); - $this->setPos($x1 + 1, $y2); - $this->write(str_repeat($lineChar, $width - 2), $color, $bgColor); - } - - // Draw vertical lines and fill - if (is_numeric($fillStyle) - && $fillStyle !== static::FILL_NONE) { - switch ($fillStyle) { - case static::FILL_SHADE_LIGHT: - $fillChar = $charset::SHADE_LIGHT; - break; - case static::FILL_SHADE_MEDIUM: - $fillChar = $charset::SHADE_MEDIUM; - break; - case static::FILL_SHADE_DARK: - $fillChar = $charset::SHADE_DARK; - break; - case static::FILL_BLOCK: - default: - $fillChar = $charset::BLOCK; - break; - } - } elseif ($fillStyle) { - $fillChar = StringUtils::getWrapper()->substr($fillStyle, 0, 1); - } else { - $fillChar = ' '; - } - - if ($lineStyle === static::LINE_NONE) { - for ($y = $y1; $y <= $y2; $y++) { - $this->setPos($x1, $y); - $this->write(str_repeat($fillChar, $width), $fillColor, $fillBgColor); - } - } else { - switch ($lineStyle) { - case static::LINE_DOUBLE: - $lineChar = $charset::LINE_DOUBLE_NS; - break; - case static::LINE_BLOCK: - $lineChar = $charset::LINE_BLOCK_NS; - break; - case static::LINE_SINGLE: - default: - $lineChar = $charset::LINE_SINGLE_NS; - break; - } - - for ($y = $y1 + 1; $y < $y2; $y++) { - $this->setPos($x1, $y); - $this->write($lineChar, $color, $bgColor); - $this->write(str_repeat($fillChar, $width - 2), $fillColor, $fillBgColor); - $this->write($lineChar, $color, $bgColor); - } - } - - // Draw corners - if ($lineStyle !== static::LINE_NONE) { - if ($color !== null) { - $this->setColor($color); - } - if ($bgColor !== null) { - $this->setBgColor($bgColor); - } - if ($lineStyle === static::LINE_SINGLE) { - $this->writeAt($charset::LINE_SINGLE_NW, $x1, $y1); - $this->writeAt($charset::LINE_SINGLE_NE, $x2, $y1); - $this->writeAt($charset::LINE_SINGLE_SE, $x2, $y2); - $this->writeAt($charset::LINE_SINGLE_SW, $x1, $y2); - } elseif ($lineStyle === static::LINE_DOUBLE) { - $this->writeAt($charset::LINE_DOUBLE_NW, $x1, $y1); - $this->writeAt($charset::LINE_DOUBLE_NE, $x2, $y1); - $this->writeAt($charset::LINE_DOUBLE_SE, $x2, $y2); - $this->writeAt($charset::LINE_DOUBLE_SW, $x1, $y2); - } elseif ($lineStyle === static::LINE_BLOCK) { - $this->writeAt($charset::LINE_BLOCK_NW, $x1, $y1); - $this->writeAt($charset::LINE_BLOCK_NE, $x2, $y1); - $this->writeAt($charset::LINE_BLOCK_SE, $x2, $y2); - $this->writeAt($charset::LINE_BLOCK_SW, $x1, $y2); - } - } - - // Deactivate line drawing and reset colors - $this->write($charset::DEACTIVATE); - $this->resetColor(); - } - - /** - * Write a block of text at the given coordinates, matching the supplied width and height. - * In case a line of text does not fit desired width, it will be wrapped to the next line. - * In case the whole text does not fit in desired height, it will be truncated. - * - * @param string $text Text to write - * @param int $width Maximum block width. Negative value means distance from right edge. - * @param int|null $height Maximum block height. Negative value means distance from bottom edge. - * @param int $x Block X coordinate (column) - * @param int $y Block Y coordinate (row) - * @param null|int $color (optional) Text color - * @param null|int $bgColor (optional) Text background color - * @throws Exception\InvalidArgumentException - */ - public function writeTextBlock( - $text, - $width, - $height = null, - $x = 0, - $y = 0, - $color = null, - $bgColor = null - ) { - if ($x < 0 || $y < 0) { - throw new Exception\InvalidArgumentException('Supplied X,Y coordinates are invalid.'); - } - - if ($width < 1) { - throw new Exception\InvalidArgumentException('Invalid width supplied.'); - } - - if (null !== $height && $height < 1) { - throw new Exception\InvalidArgumentException('Invalid height supplied.'); - } - - // ensure the text is not wider than the width - if (strlen($text) <= $width) { - // just write the line at the spec'd position - $this->setPos($x, $y); - $this->write($text, $color, $bgColor); - return; - } - - $text = wordwrap($text, $width, PHP_EOL, true); - - // convert to array of lines - $lines = explode(PHP_EOL, $text); - - // truncate if height was specified - if (null !== $height && count($lines) > $height) { - $lines = array_slice($lines, 0, $height); - } - - // write each line - $curY = $y; - foreach ($lines as $line) { - $this->setPos($x, $curY); - $this->write($line, $color, $bgColor); - $curY++;//next line - } - } - - /** - * Determine and return current console width. - * - * @return int - */ - public function getWidth() - { - return 80; - } - - /** - * Determine and return current console height. - * - * @return int - */ - public function getHeight() - { - return 25; - } - - /** - * Determine and return current console width and height. - * - * @return int[] array($width, $height) - */ - public function getSize() - { - return array( - $this->getWidth(), - $this->getHeight(), - ); - } - - /** - * Check if console is UTF-8 compatible - * - * @return bool - */ - public function isUtf8() - { - return true; - } - - /** - * Set cursor position - * - * @param int $x - * @param int $y - */ - public function setPos($x, $y) - { - } - - /** - * Show console cursor - */ - public function showCursor() - { - } - - /** - * Hide console cursor - */ - public function hideCursor() - { - } - - /** - * Return current console window title. - * - * @return string - */ - public function getTitle() - { - return ''; - } - - /** - * Prepare a string that will be rendered in color. - * - * @param string $string - * @param int $color - * @param null|int $bgColor - * @return string - */ - public function colorize($string, $color = null, $bgColor = null) - { - return $string; - } - - /** - * Change current drawing color. - * - * @param int $color - */ - public function setColor($color) - { - } - - /** - * Change current drawing background color - * - * @param int $color - */ - public function setBgColor($color) - { - } - - /** - * Reset color to console default. - */ - public function resetColor() - { - } - - /** - * Set Console charset to use. - * - * @param Charset\CharsetInterface $charset - */ - public function setCharset(Charset\CharsetInterface $charset) - { - $this->charset = $charset; - } - - /** - * Get charset currently in use by this adapter. - * - * @return Charset\CharsetInterface $charset - */ - public function getCharset() - { - if ($this->charset === null) { - $this->charset = $this->getDefaultCharset(); - } - - return $this->charset; - } - - /** - * @return Charset\Utf8 - */ - public function getDefaultCharset() - { - return new Charset\Utf8; - } - - /** - * Clear console screen - */ - public function clear() - { - echo "\f"; - } - - /** - * Clear line at cursor position - */ - public function clearLine() - { - echo "\r" . str_repeat(" ", $this->getWidth()) . "\r"; - } - - /** - * Clear console screen - */ - public function clearScreen() - { - return $this->clear(); - } - - /** - * Read a single line from the console input - * - * @param int $maxLength Maximum response length - * @return string - */ - public function readLine($maxLength = 2048) - { - $f = fopen('php://stdin', 'r'); - $line = stream_get_line($f, $maxLength, PHP_EOL); - fclose($f); - return rtrim($line, "\n\r"); - } - - /** - * Read a single character from the console input - * - * @param string|null $mask A list of allowed chars - * @return string - */ - public function readChar($mask = null) - { - $f = fopen('php://stdin', 'r'); - do { - $char = fread($f, 1); - } while ("" === $char || ($mask !== null && false === strstr($mask, $char))); - fclose($f); - return $char; - } - - /** - * Encode a text to match console encoding - * - * @param string $text - * @return string the encoding text - */ - public function encodeText($text) - { - if ($this->isUtf8()) { - if (StringUtils::isValidUtf8($text)) { - return $text; - } - - return utf8_encode($text); - } - - if (StringUtils::isValidUtf8($text)) { - return utf8_decode($text); - } - - return $text; - } -} diff --git a/library/Zend/Console/Adapter/AdapterInterface.php b/library/Zend/Console/Adapter/AdapterInterface.php deleted file mode 100755 index 45407b80a..000000000 --- a/library/Zend/Console/Adapter/AdapterInterface.php +++ /dev/null @@ -1,264 +0,0 @@ - array( - Color::NORMAL => '22;39', - Color::RESET => '22;39', - - Color::BLACK => '0;30', - Color::RED => '0;31', - Color::GREEN => '0;32', - Color::YELLOW => '0;33', - Color::BLUE => '0;34', - Color::MAGENTA => '0;35', - Color::CYAN => '0;36', - Color::WHITE => '0;37', - - Color::GRAY => '1;30', - Color::LIGHT_RED => '1;31', - Color::LIGHT_GREEN => '1;32', - Color::LIGHT_YELLOW => '1;33', - Color::LIGHT_BLUE => '1;34', - Color::LIGHT_MAGENTA => '1;35', - Color::LIGHT_CYAN => '1;36', - Color::LIGHT_WHITE => '1;37', - ), - 'bg' => array( - Color::NORMAL => '0;49', - Color::RESET => '0;49', - - Color::BLACK => '40', - Color::RED => '41', - Color::GREEN => '42', - Color::YELLOW => '43', - Color::BLUE => '44', - Color::MAGENTA => '45', - Color::CYAN => '46', - Color::WHITE => '47', - - Color::GRAY => '40', - Color::LIGHT_RED => '41', - Color::LIGHT_GREEN => '42', - Color::LIGHT_YELLOW => '43', - Color::LIGHT_BLUE => '44', - Color::LIGHT_MAGENTA => '45', - Color::LIGHT_CYAN => '46', - Color::LIGHT_WHITE => '47', - ), - ); - - /** - * Last fetched TTY mode - * - * @var string|null - */ - protected $lastTTYMode = null; - - /** - * Write a single line of text to console and advance cursor to the next line. - * - * This override works around a bug in some terminals that cause the background color - * to fill the next line after EOL. To remedy this, we are sending the colored string with - * appropriate color reset sequences before sending EOL character. - * - * @link https://github.com/zendframework/zf2/issues/4167 - * @param string $text - * @param null|int $color - * @param null|int $bgColor - */ - public function writeLine($text = "", $color = null, $bgColor = null) - { - $this->write($text, $color, $bgColor); - $this->write(PHP_EOL); - } - - /** - * Determine and return current console width. - * - * @return int - */ - public function getWidth() - { - static $width; - if ($width > 0) { - return $width; - } - - /** - * Try to read env variable - */ - if (($result = getenv('COLUMNS')) !== false) { - return $width = (int) $result; - } - - /** - * Try to read console size from "tput" command - */ - $result = exec('tput cols', $output, $return); - if (!$return && is_numeric($result)) { - return $width = (int) $result; - } - - return $width = parent::getWidth(); - } - - /** - * Determine and return current console height. - * - * @return false|int - */ - public function getHeight() - { - static $height; - if ($height > 0) { - return $height; - } - - // Try to read env variable - if (($result = getenv('LINES')) !== false) { - return $height = (int) $result; - } - - // Try to read console size from "tput" command - $result = exec('tput lines', $output, $return); - if (!$return && is_numeric($result)) { - return $height = (int) $result; - } - - return $height = parent::getHeight(); - } - - /** - * Run a mode command and store results - * - * @return void - */ - protected function runModeCommand() - { - exec('mode', $output, $return); - if ($return || !count($output)) { - $this->modeResult = ''; - } else { - $this->modeResult = trim(implode('', $output)); - } - } - - /** - * Check if console is UTF-8 compatible - * - * @return bool - */ - public function isUtf8() - { - // Try to retrieve it from LANG env variable - if (($lang = getenv('LANG')) !== false) { - return stristr($lang, 'utf-8') || stristr($lang, 'utf8'); - } - - return false; - } - - /** - * Show console cursor - */ - public function showCursor() - { - echo "\x1b[?25h"; - } - - /** - * Hide console cursor - */ - public function hideCursor() - { - echo "\x1b[?25l"; - } - - /** - * Set cursor position - * @param int $x - * @param int $y - */ - public function setPos($x, $y) - { - echo "\x1b[" . $y . ';' . $x . 'f'; - } - - /** - * Prepare a string that will be rendered in color. - * - * @param string $string - * @param int $color - * @param null|int $bgColor - * @throws Exception\BadMethodCallException - * @return string - */ - public function colorize($string, $color = null, $bgColor = null) - { - $color = $this->getColorCode($color, 'fg'); - $bgColor = $this->getColorCode($bgColor, 'bg'); - return ($color !== null ? "\x1b[" . $color . 'm' : '') - . ($bgColor !== null ? "\x1b[" . $bgColor . 'm' : '') - . $string - . "\x1b[22;39m\x1b[0;49m"; - } - - /** - * Change current drawing color. - * - * @param int $color - * @throws Exception\BadMethodCallException - */ - public function setColor($color) - { - $color = $this->getColorCode($color, 'fg'); - echo "\x1b[" . $color . 'm'; - } - - /** - * Change current drawing background color - * - * @param int $bgColor - * @throws Exception\BadMethodCallException - */ - public function setBgColor($bgColor) - { - $bgColor = $this->getColorCode($bgColor, 'bg'); - echo "\x1b[" . ($bgColor) . 'm'; - } - - /** - * Reset color to console default. - */ - public function resetColor() - { - echo "\x1b[0;49m"; // reset bg color - echo "\x1b[22;39m"; // reset fg bold, bright and faint - echo "\x1b[25;39m"; // reset fg blink - echo "\x1b[24;39m"; // reset fg underline - } - - /** - * Set Console charset to use. - * - * @param Charset\CharsetInterface $charset - */ - public function setCharset(Charset\CharsetInterface $charset) - { - $this->charset = $charset; - } - - /** - * Get charset currently in use by this adapter. - * - * @return Charset\CharsetInterface $charset - */ - public function getCharset() - { - if ($this->charset === null) { - $this->charset = $this->getDefaultCharset(); - } - - return $this->charset; - } - - /** - * @return Charset\CharsetInterface - */ - public function getDefaultCharset() - { - if ($this->isUtf8()) { - return new Charset\Utf8; - } - return new Charset\DECSG(); - } - - /** - * Read a single character from the console input - * - * @param string|null $mask A list of allowed chars - * @return string - */ - public function readChar($mask = null) - { - $this->setTTYMode('-icanon -echo'); - - $stream = fopen('php://stdin', 'rb'); - do { - $char = fgetc($stream); - } while (strlen($char) !== 1 || ($mask !== null && false === strstr($mask, $char))); - fclose($stream); - - $this->restoreTTYMode(); - return $char; - } - - /** - * Reset color to console default. - */ - public function clear() - { - echo "\x1b[2J"; // reset bg color - $this->setPos(1, 1); // reset cursor position - } - - /** - * Restore TTY (Console) mode to previous value. - * - * @return void - */ - protected function restoreTTYMode() - { - if ($this->lastTTYMode === null) { - return; - } - - shell_exec('stty ' . escapeshellarg($this->lastTTYMode)); - } - - /** - * Change TTY (Console) mode - * - * @link http://en.wikipedia.org/wiki/Stty - * @param string $mode - */ - protected function setTTYMode($mode) - { - // Store last mode - $this->lastTTYMode = trim(`stty -g`); - - // Set new mode - shell_exec('stty '.escapeshellcmd($mode)); - } - - /** - * Get the final color code and throw exception on error - * - * @param null|int|Xterm256 $color - * @param string $type (optional) Foreground 'fg' or background 'bg'. - * @throws Exception\BadMethodCallException - * @return string - */ - protected function getColorCode($color, $type = 'fg') - { - if ($color instanceof Xterm256) { - $r = new ReflectionClass($color); - $code = $r->getStaticPropertyValue('color'); - if ($type == 'fg') { - $code = sprintf($code, $color::FOREGROUND); - } else { - $code = sprintf($code, $color::BACKGROUND); - } - return $code; - } - - if ($color !== null) { - if (!isset(static::$ansiColorMap[$type][$color])) { - throw new Exception\BadMethodCallException(sprintf( - 'Unknown color "%s". Please use one of the Zend\Console\ColorInterface constants ' - . 'or use Zend\Console\Color\Xterm256::calculate', - $color - )); - } - - return static::$ansiColorMap[$type][$color]; - } - - return null; - } -} diff --git a/library/Zend/Console/Adapter/Virtual.php b/library/Zend/Console/Adapter/Virtual.php deleted file mode 100755 index f1b1eb95e..000000000 --- a/library/Zend/Console/Adapter/Virtual.php +++ /dev/null @@ -1,176 +0,0 @@ - 0) { - return $width; - } - - // Try to read console size from "mode" command - if ($this->modeResult === null) { - $this->runProbeCommand(); - } - - if (preg_match('/Columns\:\s+(\d+)/', $this->modeResult, $matches)) { - $width = $matches[1]; - } else { - $width = parent::getWidth(); - } - - return $width; - } - - /** - * Determine and return current console height. - * - * @return false|int - */ - public function getHeight() - { - static $height; - if ($height > 0) { - return $height; - } - - // Try to read console size from "mode" command - if ($this->modeResult === null) { - $this->runProbeCommand(); - } - - if (preg_match('/Rows\:\s+(\d+)/', $this->modeResult, $matches)) { - $height = $matches[1]; - } else { - $height = parent::getHeight(); - } - - return $height; - } - - /** - * Run and store the results of mode command - * - * @return void - */ - protected function runProbeCommand() - { - exec('mode', $output, $return); - if ($return || !count($output)) { - $this->modeResult = ''; - } else { - $this->modeResult = trim(implode('', $output)); - } - } - - /** - * Check if console is UTF-8 compatible - * - * @return bool - */ - public function isUtf8() - { - // Try to read code page info from "mode" command - if ($this->modeResult === null) { - $this->runProbeCommand(); - } - - if (preg_match('/Code page\:\s+(\d+)/', $this->modeResult, $matches)) { - return (int) $matches[1] == 65001; - } - - return false; - } - - /** - * Return current console window title. - * - * @return string - */ - public function getTitle() - { - // Try to use powershell to retrieve console window title - exec('powershell -command "write $Host.UI.RawUI.WindowTitle"', $output, $result); - if ($result || !$output) { - return ''; - } - - return trim($output, "\r\n"); - } - - /** - * Set Console charset to use. - * - * @param Charset\CharsetInterface $charset - */ - public function setCharset(Charset\CharsetInterface $charset) - { - $this->charset = $charset; - } - - /** - * Get charset currently in use by this adapter. - * - * @return Charset\CharsetInterface $charset - */ - public function getCharset() - { - if ($this->charset === null) { - $this->charset = $this->getDefaultCharset(); - } - - return $this->charset; - } - - /** - * @return Charset\AsciiExtended - */ - public function getDefaultCharset() - { - return new Charset\AsciiExtended; - } - - /** - * Switch to UTF mode - * - * @return void - */ - protected function switchToUtf8() - { - shell_exec('mode con cp select=65001'); - } -} diff --git a/library/Zend/Console/Adapter/Windows.php b/library/Zend/Console/Adapter/Windows.php deleted file mode 100755 index c1bf8b734..000000000 --- a/library/Zend/Console/Adapter/Windows.php +++ /dev/null @@ -1,356 +0,0 @@ - 0) { - return $width; - } - - // Try to read console size from "mode" command - if ($this->probeResult === null) { - $this->runProbeCommand(); - } - - if (count($this->probeResult) && (int) $this->probeResult[0]) { - $width = (int) $this->probeResult[0]; - } else { - $width = parent::getWidth(); - } - - return $width; - } - - /** - * Determine and return current console height. - * - * @return int - */ - public function getHeight() - { - static $height; - if ($height > 0) { - return $height; - } - - // Try to read console size from "mode" command - if ($this->probeResult === null) { - $this->runProbeCommand(); - } - - if (count($this->probeResult) && (int) $this->probeResult[1]) { - $height = (int) $this->probeResult[1]; - } else { - $height = parent::getheight(); - } - - return $height; - } - - /** - * Probe for system capabilities and cache results - * - * Run a Windows Powershell command that determines parameters of console window. The command is fed through - * standard input (with echo) to prevent Powershell from creating a sub-thread and hanging PHP when run through - * a debugger/IDE. - * - * @return void - */ - protected function runProbeCommand() - { - exec( - 'echo $size = $Host.ui.rawui.windowsize; write $($size.width) $($size.height) | powershell -NonInteractive -NoProfile -NoLogo -OutputFormat Text -Command -', - $output, - $return - ); - if ($return || empty($output)) { - $this->probeResult = ''; - } else { - $this->probeResult = $output; - } - } - - /** - * Run and cache results of mode command - * - * @return void - */ - protected function runModeCommand() - { - exec('mode', $output, $return); - if ($return || !count($output)) { - $this->modeResult = ''; - } else { - $this->modeResult = trim(implode('', $output)); - } - } - - /** - * Check if console is UTF-8 compatible - * - * @return bool - */ - public function isUtf8() - { - // Try to read code page info from "mode" command - if ($this->modeResult === null) { - $this->runModeCommand(); - } - - if (preg_match('/Code page\:\s+(\d+)/', $this->modeResult, $matches)) { - return (int) $matches[1] == 65001; - } - - return false; - } - - /** - * Return current console window title. - * - * @return string - */ - public function getTitle() - { - // Try to use powershell to retrieve console window title - exec('powershell -command "write $Host.UI.RawUI.WindowTitle"', $output, $result); - if ($result || !$output) { - return ''; - } - - return trim($output, "\r\n"); - } - - /** - * Set Console charset to use. - * - * @param Charset\CharsetInterface $charset - */ - public function setCharset(Charset\CharsetInterface $charset) - { - $this->charset = $charset; - } - - /** - * Get charset currently in use by this adapter. - * - * @return Charset\CharsetInterface $charset - */ - public function getCharset() - { - if ($this->charset === null) { - $this->charset = $this->getDefaultCharset(); - } - - return $this->charset; - } - - /** - * @return Charset\AsciiExtended - */ - public function getDefaultCharset() - { - return new Charset\AsciiExtended; - } - - /** - * Switch to utf-8 encoding - * - * @return void - */ - protected function switchToUtf8() - { - shell_exec('mode con cp select=65001'); - } - - /** - * Clear console screen - */ - public function clear() - { - // Attempt to clear the screen using PowerShell command - exec("powershell -NonInteractive -NoProfile -NoLogo -OutputFormat Text -Command Clear-Host", $output, $return); - - if ($return) { - // Could not run powershell... fall back to filling the buffer with newlines - echo str_repeat("\r\n", $this->getHeight()); - } - } - - /** - * Clear line at cursor position - */ - public function clearLine() - { - echo "\r" . str_repeat(' ', $this->getWidth()) . "\r"; - } - - /** - * Read a single character from the console input - * - * @param string|null $mask A list of allowed chars - * @throws Exception\RuntimeException - * @return string - */ - public function readChar($mask = null) - { - // Decide if we can use `choice` tool - $useChoice = $mask !== null && preg_match('/^[a-zA-Z0-9]+$/D', $mask); - - if ($useChoice) { - // Use Windows 95+ "choice" command, which allows for reading a - // single character matching a mask, but is limited to lower ASCII - // range. - do { - exec('choice /n /cs /c:' . $mask, $output, $return); - if ($return == 255 || $return < 1 || $return > strlen($mask)) { - throw new Exception\RuntimeException('"choice" command failed to run. Are you using Windows XP or newer?'); - } - - // Fetch the char from mask - $char = substr($mask, $return - 1, 1); - } while ("" === $char || ($mask !== null && false === strstr($mask, $char))); - - return $char; - } - - // Try to use PowerShell, giving it console access. Because PowersShell - // interpreter can take a short while to load, we are emptying the - // whole keyboard buffer and picking the last key that has been pressed - // before or after PowerShell command has started. The ASCII code for - // that key is then converted to a character. - if ($mask === null) { - exec( - 'powershell -NonInteractive -NoProfile -NoLogo -OutputFormat Text -Command "' - . 'while ($Host.UI.RawUI.KeyAvailable) {$key = $Host.UI.RawUI.ReadKey(\'NoEcho,IncludeKeyDown\');}' - . 'write $key.VirtualKeyCode;' - . '"', - $result, - $return - ); - - // Retrieve char from the result. - $char = !empty($result) ? implode('', $result) : null; - - if (!empty($char) && !$return) { - // We have obtained an ASCII code, convert back to a char ... - $char = chr($char); - - // ... and return it... - return $char; - } - } else { - // Windows and DOS will return carriage-return char (ASCII 13) when - // the user presses [ENTER] key, but Console Adapter user might - // have provided a \n Newline (ASCII 10) in the mask, to allow [ENTER]. - // We are going to replace all CR with NL to conform. - $mask = strtr($mask, "\n", "\r"); - - // Prepare a list of ASCII codes from mask chars - $asciiMask = array_map(function ($char) { - return ord($char); - }, str_split($mask)); - $asciiMask = array_unique($asciiMask); - - // Char mask filtering is now handled by the PowerShell itself, - // because it's a much faster method than invoking PS interpreter - // after each mismatch. The command should return ASCII code of a - // matching key. - $result = $return = null; - - exec( - 'powershell -NonInteractive -NoProfile -NoLogo -OutputFormat Text -Command "' - . '[int[]] $mask = ' . join(',', $asciiMask) . ';' - . 'do {' - . '$key = $Host.UI.RawUI.ReadKey(\'NoEcho,IncludeKeyDown\').VirtualKeyCode;' - . '} while ( !($mask -contains $key) );' - . 'write $key;' - . '"', - $result, - $return - ); - - $char = !empty($result) ? trim(implode('', $result)) : null; - - if (!$return && $char && ($mask === null || in_array($char, $asciiMask))) { - // Normalize CR to LF - if ($char == 13) { - $char = 10; - } - - // Convert to a char - $char = chr($char); - - // ... and return it... - return $char; - } - } - - // Fall back to standard input, which on Windows does not allow reading - // a single character. This is a limitation of Windows streams - // implementation (not PHP) and this behavior cannot be changed with a - // command like "stty", known to POSIX systems. - $stream = fopen('php://stdin', 'rb'); - do { - $char = fgetc($stream); - $char = substr(trim($char), 0, 1); - } while (!$char || ($mask !== null && !stristr($mask, $char))); - fclose($stream); - - return $char; - } - - /** - * Read a single line from the console input. - * - * @param int $maxLength Maximum response length - * @return string - */ - public function readLine($maxLength = 2048) - { - $f = fopen('php://stdin', 'r'); - $line = rtrim(fread($f, $maxLength), "\r\n"); - fclose($f); - - return $line; - } -} diff --git a/library/Zend/Console/Adapter/WindowsAnsicon.php b/library/Zend/Console/Adapter/WindowsAnsicon.php deleted file mode 100755 index 3519a9e21..000000000 --- a/library/Zend/Console/Adapter/WindowsAnsicon.php +++ /dev/null @@ -1,302 +0,0 @@ - 0) { - return $width; - } - - // Try to read console size from ANSICON env var - if (preg_match('/\((\d+)x/', getenv('ANSICON'), $matches)) { - $width = $matches[1]; - } else { - $width = AbstractAdapter::getWidth(); - } - - return $width; - } - - /** - * Determine and return current console height. - * - * @return false|int - */ - public function getHeight() - { - static $height; - if ($height > 0) { - return $height; - } - - // Try to read console size from ANSICON env var - if (preg_match('/\(\d+x(\d+)/', getenv('ANSICON'), $matches)) { - $height = $matches[1]; - } else { - $height = AbstractAdapter::getHeight(); - } - return $height; - } - - /** - * Run and cache results of mode command - * - * @return void - */ - protected function runModeCommand() - { - exec('mode', $output, $return); - if ($return || !count($output)) { - $this->modeResult = ''; - } else { - $this->modeResult = trim(implode('', $output)); - } - } - - /** - * Check if console is UTF-8 compatible - * - * @return bool - */ - public function isUtf8() - { - // Try to read code page info from "mode" command - if ($this->modeResult === null) { - $this->runModeCommand(); - } - - if (preg_match('/Code page\:\s+(\d+)/', $this->modeResult, $matches)) { - return (int) $matches[1] == 65001; - } - - return false; - } - - /** - * Return current console window title. - * - * @return string - */ - public function getTitle() - { - // Try to use powershell to retrieve console window title - exec('powershell -command "write $Host.UI.RawUI.WindowTitle"', $output, $result); - if ($result || !$output) { - return ''; - } - - return trim($output, "\r\n"); - } - - /** - * Clear console screen - */ - public function clear() - { - echo chr(27) . '[1J' . chr(27) . '[u'; - } - - /** - * Clear line at cursor position - */ - public function clearLine() - { - echo chr(27) . '[1K'; - } - - /** - * Set Console charset to use. - * - * @param CharsetInterface $charset - */ - public function setCharset(CharsetInterface $charset) - { - $this->charset = $charset; - } - - /** - * Get charset currently in use by this adapter. - * - - * @return CharsetInterface $charset - */ - public function getCharset() - { - if ($this->charset === null) { - $this->charset = $this->getDefaultCharset(); - } - - return $this->charset; - } - - /** - * @return Charset\AsciiExtended - */ - public function getDefaultCharset() - { - return new Charset\AsciiExtended(); - } - - /** - * Read a single character from the console input - * - * @param string|null $mask A list of allowed chars - * @return string - * @throws Exception\RuntimeException - */ - public function readChar($mask = null) - { - // Decide if we can use `choice` tool - $useChoice = $mask !== null && preg_match('/^[a-zA-Z0-9]+$/D', $mask); - - if ($useChoice) { - // Use Windows 98+ "choice" command, which allows for reading a - // single character matching a mask, but is limited to lower ASCII - // range. - do { - exec('choice /n /cs /c:' . $mask, $output, $return); - if ($return == 255 || $return < 1 || $return > strlen($mask)) { - throw new Exception\RuntimeException('"choice" command failed to run. Are you using Windows XP or newer?'); - } - - // Fetch the char from mask - $char = substr($mask, $return - 1, 1); - } while ("" === $char || ($mask !== null && false === strstr($mask, $char))); - - return $char; - } - - // Try to use PowerShell, giving it console access. Because PowersShell - // interpreter can take a short while to load, we are emptying the - // whole keyboard buffer and picking the last key that has been pressed - // before or after PowerShell command has started. The ASCII code for - // that key is then converted to a character. - if ($mask === null) { - exec( - 'powershell -NonInteractive -NoProfile -NoLogo -OutputFormat Text -Command "' - . 'while ($Host.UI.RawUI.KeyAvailable) {$key = $Host.UI.RawUI.ReadKey(\'NoEcho,IncludeKeyDown\');}' - . 'write $key.VirtualKeyCode;' - . '"', - $result, - $return - ); - - // Retrieve char from the result. - $char = !empty($result) ? implode('', $result) : null; - - if (!empty($char) && !$return) { - // We have obtained an ASCII code, convert back to a char ... - $char = chr($char); - - // ... and return it... - return $char; - } - } else { - // Windows and DOS will return carriage-return char (ASCII 13) when - // the user presses [ENTER] key, but Console Adapter user might - // have provided a \n Newline (ASCII 10) in the mask, to allow - // [ENTER]. We are going to replace all CR with NL to conform. - $mask = strtr($mask, "\n", "\r"); - - // Prepare a list of ASCII codes from mask chars - $asciiMask = array_map(function ($char) { - return ord($char); - }, str_split($mask)); - $asciiMask = array_unique($asciiMask); - - // Char mask filtering is now handled by the PowerShell itself, - // because it's a much faster method than invoking PS interpreter - // after each mismatch. The command should return ASCII code of a - // matching key. - $result = $return = null; - exec( - 'powershell -NonInteractive -NoProfile -NoLogo -OutputFormat Text -Command "' - . '[int[]] $mask = '.join(',', $asciiMask).';' - . 'do {' - . '$key = $Host.UI.RawUI.ReadKey(\'NoEcho,IncludeKeyDown\').VirtualKeyCode;' - . '} while ( !($mask -contains $key) );' - . 'write $key;' - . '"', - $result, - $return - ); - - $char = !empty($result) ? trim(implode('', $result)) : null; - - if (!$return && $char && ($mask === null || in_array($char, $asciiMask))) { - // We have obtained an ASCII code, check if it is a carriage - // return and normalize it as needed - if ($char == 13) { - $char = 10; - } - - // Convert to a character - $char = chr($char); - - // ... and return it... - return $char; - } - } - - // Fall back to standard input, which on Windows does not allow reading - // a single character. This is a limitation of Windows streams - // implementation (not PHP) and this behavior cannot be changed with a - // command like "stty", known to POSIX systems. - $stream = fopen('php://stdin', 'rb'); - do { - $char = fgetc($stream); - $char = substr(trim($char), 0, 1); - } while (!$char || ($mask !== null && !stristr($mask, $char))); - fclose($stream); - - return $char; - } -} diff --git a/library/Zend/Console/CONTRIBUTING.md b/library/Zend/Console/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Console/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Console/Charset/Ascii.php b/library/Zend/Console/Charset/Ascii.php deleted file mode 100755 index 0cc326148..000000000 --- a/library/Zend/Console/Charset/Ascii.php +++ /dev/null @@ -1,48 +0,0 @@ - 0 ? (int) $val : 0; - }, $hex); - - $dhex = array_map('hexdec', $hex); - - if (array_fill(0, 3, $dhex[0]) === $dhex && (int) substr($dhex[0], -1) === 8) { - $x11 = 232 + (int) floor($dhex[0]/10); - return new static($x11); - } - - $x11 = $ahex[0] * 36 + $ahex[1] * 6 + $ahex[2] + 16; - - return new static($x11); - } -} diff --git a/library/Zend/Console/ColorInterface.php b/library/Zend/Console/ColorInterface.php deleted file mode 100755 index b2cc770b4..000000000 --- a/library/Zend/Console/ColorInterface.php +++ /dev/null @@ -1,34 +0,0 @@ -setCharset(new $className()); - } - - return static::$instance; - } - - /** - * Reset the console instance - */ - public static function resetInstance() - { - static::$instance = null; - } - - /** - * Check if currently running under MS Windows - * - * @see http://stackoverflow.com/questions/738823/possible-values-for-php-os - * @return bool - */ - public static function isWindows() - { - return - (defined('PHP_OS') && (substr_compare(PHP_OS, 'win', 0, 3, true) === 0)) || - (getenv('OS') != false && substr_compare(getenv('OS'), 'windows', 0, 7, true)) - ; - } - - /** - * Check if running under MS Windows Ansicon - * - * @return bool - */ - public static function isAnsicon() - { - return getenv('ANSICON') !== false; - } - - /** - * Check if running in a console environment (CLI) - * - * By default, returns value of PHP_SAPI global constant. If $isConsole is - * set, and a boolean value, that value will be returned. - * - * @return bool - */ - public static function isConsole() - { - if (null === static::$isConsole) { - static::$isConsole = (PHP_SAPI == 'cli'); - } - return static::$isConsole; - } - - /** - * Override the "is console environment" flag - * - * @param null|bool $flag - */ - public static function overrideIsConsole($flag) - { - if (null != $flag) { - $flag = (bool) $flag; - } - static::$isConsole = $flag; - } - - /** - * Try to detect best matching adapter - * @return string|null - */ - public static function detectBestAdapter() - { - // Check if we are in a console environment - if (!static::isConsole()) { - return null; - } - - // Check if we're on windows - if (static::isWindows()) { - if (static::isAnsicon()) { - $className = __NAMESPACE__ . '\Adapter\WindowsAnsicon'; - } else { - $className = __NAMESPACE__ . '\Adapter\Windows'; - } - - return $className; - } - - // Default is a Posix console - $className = __NAMESPACE__ . '\Adapter\Posix'; - return $className; - } - - /** - * Pass-thru static call to current AdapterInterface instance. - * - * @param $funcName - * @param $arguments - * @return mixed - */ - public static function __callStatic($funcName, $arguments) - { - $instance = static::getInstance(); - return call_user_func_array(array($instance, $funcName), $arguments); - } -} diff --git a/library/Zend/Console/Exception/BadMethodCallException.php b/library/Zend/Console/Exception/BadMethodCallException.php deleted file mode 100755 index aa650fc04..000000000 --- a/library/Zend/Console/Exception/BadMethodCallException.php +++ /dev/null @@ -1,14 +0,0 @@ -usage = $usage; - parent::__construct($message); - } - - /** - * Returns the usage - * - * @return string - */ - public function getUsageMessage() - { - return $this->usage; - } -} diff --git a/library/Zend/Console/Getopt.php b/library/Zend/Console/Getopt.php deleted file mode 100755 index 12493264a..000000000 --- a/library/Zend/Console/Getopt.php +++ /dev/null @@ -1,1056 +0,0 @@ - self::MODE_ZEND, - self::CONFIG_DASHDASH => true, - self::CONFIG_IGNORECASE => false, - self::CONFIG_PARSEALL => true, - self::CONFIG_CUMULATIVE_PARAMETERS => false, - self::CONFIG_CUMULATIVE_FLAGS => false, - self::CONFIG_PARAMETER_SEPARATOR => null, - self::CONFIG_FREEFORM_FLAGS => false, - self::CONFIG_NUMERIC_FLAGS => false - ); - - /** - * Stores the command-line arguments for the calling application. - * - * @var array - */ - protected $argv = array(); - - /** - * Stores the name of the calling application. - * - * @var string - */ - protected $progname = ''; - - /** - * Stores the list of legal options for this application. - * - * @var array - */ - protected $rules = array(); - - /** - * Stores alternate spellings of legal options. - * - * @var array - */ - protected $ruleMap = array(); - - /** - * Stores options given by the user in the current invocation - * of the application, as well as parameters given in options. - * - * @var array - */ - protected $options = array(); - - /** - * Stores the command-line arguments other than options. - * - * @var array - */ - protected $remainingArgs = array(); - - /** - * State of the options: parsed or not yet parsed? - * - * @var bool - */ - protected $parsed = false; - - /** - * A list of callbacks to call when a particular option is present. - * - * @var array - */ - protected $optionCallbacks = array(); - - /** - * The constructor takes one to three parameters. - * - * The first parameter is $rules, which may be a string for - * gnu-style format, or a structured array for Zend-style format. - * - * The second parameter is $argv, and it is optional. If not - * specified, $argv is inferred from the global argv. - * - * The third parameter is an array of configuration parameters - * to control the behavior of this instance of Getopt; it is optional. - * - * @param array $rules - * @param array $argv - * @param array $getoptConfig - * @throws Exception\InvalidArgumentException - */ - public function __construct($rules, $argv = null, $getoptConfig = array()) - { - if (!isset($_SERVER['argv'])) { - $errorDescription = (ini_get('register_argc_argv') == false) - ? "argv is not available, because ini option 'register_argc_argv' is set Off" - : '$_SERVER["argv"] is not set, but Zend\Console\Getopt cannot work without this information.'; - throw new Exception\InvalidArgumentException($errorDescription); - } - - $this->progname = $_SERVER['argv'][0]; - $this->setOptions($getoptConfig); - $this->addRules($rules); - if (!is_array($argv)) { - $argv = array_slice($_SERVER['argv'], 1); - } - if (isset($argv)) { - $this->addArguments((array) $argv); - } - } - - /** - * Return the state of the option seen on the command line of the - * current application invocation. This function returns true, or the - * parameter to the option, if any. If the option was not given, - * this function returns null. - * - * The magic __get method works in the context of naming the option - * as a virtual member of this class. - * - * @param string $key - * @return string - */ - public function __get($key) - { - return $this->getOption($key); - } - - /** - * Test whether a given option has been seen. - * - * @param string $key - * @return bool - */ - public function __isset($key) - { - $this->parse(); - if (isset($this->ruleMap[$key])) { - $key = $this->ruleMap[$key]; - return isset($this->options[$key]); - } - return false; - } - - /** - * Set the value for a given option. - * - * @param string $key - * @param string $value - */ - public function __set($key, $value) - { - $this->parse(); - if (isset($this->ruleMap[$key])) { - $key = $this->ruleMap[$key]; - $this->options[$key] = $value; - } - } - - /** - * Return the current set of options and parameters seen as a string. - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Unset an option. - * - * @param string $key - */ - public function __unset($key) - { - $this->parse(); - if (isset($this->ruleMap[$key])) { - $key = $this->ruleMap[$key]; - unset($this->options[$key]); - } - } - - /** - * Define additional command-line arguments. - * These are appended to those defined when the constructor was called. - * - * @param array $argv - * @throws Exception\InvalidArgumentException When not given an array as parameter - * @return self - */ - public function addArguments($argv) - { - if (!is_array($argv)) { - throw new Exception\InvalidArgumentException("Parameter #1 to addArguments should be an array"); - } - $this->argv = array_merge($this->argv, $argv); - $this->parsed = false; - return $this; - } - - /** - * Define full set of command-line arguments. - * These replace any currently defined. - * - * @param array $argv - * @throws Exception\InvalidArgumentException When not given an array as parameter - * @return self - */ - public function setArguments($argv) - { - if (!is_array($argv)) { - throw new Exception\InvalidArgumentException("Parameter #1 to setArguments should be an array"); - } - $this->argv = $argv; - $this->parsed = false; - return $this; - } - - /** - * Define multiple configuration options from an associative array. - * These are not program options, but properties to configure - * the behavior of Zend\Console\Getopt. - * - * @param array $getoptConfig - * @return self - */ - public function setOptions($getoptConfig) - { - if (isset($getoptConfig)) { - foreach ($getoptConfig as $key => $value) { - $this->setOption($key, $value); - } - } - return $this; - } - - /** - * Define one configuration option as a key/value pair. - * These are not program options, but properties to configure - * the behavior of Zend\Console\Getopt. - * - * @param string $configKey - * @param string $configValue - * @return self - */ - public function setOption($configKey, $configValue) - { - if ($configKey !== null) { - $this->getoptConfig[$configKey] = $configValue; - } - return $this; - } - - /** - * Define additional option rules. - * These are appended to the rules defined when the constructor was called. - * - * @param array $rules - * @return self - */ - public function addRules($rules) - { - $ruleMode = $this->getoptConfig['ruleMode']; - switch ($this->getoptConfig['ruleMode']) { - case self::MODE_ZEND: - if (is_array($rules)) { - $this->_addRulesModeZend($rules); - break; - } - // intentional fallthrough - case self::MODE_GNU: - $this->_addRulesModeGnu($rules); - break; - default: - /** - * Call addRulesModeFoo() for ruleMode 'foo'. - * The developer should subclass Getopt and - * provide this method. - */ - $method = '_addRulesMode' . ucfirst($ruleMode); - $this->$method($rules); - } - $this->parsed = false; - return $this; - } - - /** - * Return the current set of options and parameters seen as a string. - * - * @return string - */ - public function toString() - { - $this->parse(); - $s = array(); - foreach ($this->options as $flag => $value) { - $s[] = $flag . '=' . ($value === true ? 'true' : $value); - } - return implode(' ', $s); - } - - /** - * Return the current set of options and parameters seen - * as an array of canonical options and parameters. - * - * Clusters have been expanded, and option aliases - * have been mapped to their primary option names. - * - * @return array - */ - public function toArray() - { - $this->parse(); - $s = array(); - foreach ($this->options as $flag => $value) { - $s[] = $flag; - if ($value !== true) { - $s[] = $value; - } - } - return $s; - } - - /** - * Return the current set of options and parameters seen in Json format. - * - * @return string - */ - public function toJson() - { - $this->parse(); - $j = array(); - foreach ($this->options as $flag => $value) { - $j['options'][] = array( - 'option' => array( - 'flag' => $flag, - 'parameter' => $value - ) - ); - } - - $json = \Zend\Json\Json::encode($j); - return $json; - } - - /** - * Return the current set of options and parameters seen in XML format. - * - * @return string - */ - public function toXml() - { - $this->parse(); - $doc = new \DomDocument('1.0', 'utf-8'); - $optionsNode = $doc->createElement('options'); - $doc->appendChild($optionsNode); - foreach ($this->options as $flag => $value) { - $optionNode = $doc->createElement('option'); - $optionNode->setAttribute('flag', utf8_encode($flag)); - if ($value !== true) { - $optionNode->setAttribute('parameter', utf8_encode($value)); - } - $optionsNode->appendChild($optionNode); - } - $xml = $doc->saveXML(); - return $xml; - } - - /** - * Return a list of options that have been seen in the current argv. - * - * @return array - */ - public function getOptions() - { - $this->parse(); - return array_keys($this->options); - } - - /** - * Return the state of the option seen on the command line of the - * current application invocation. - * - * This function returns true, or the parameter value to the option, if any. - * If the option was not given, this function returns false. - * - * @param string $flag - * @return mixed - */ - public function getOption($flag) - { - $this->parse(); - if ($this->getoptConfig[self::CONFIG_IGNORECASE]) { - $flag = strtolower($flag); - } - if (isset($this->ruleMap[$flag])) { - $flag = $this->ruleMap[$flag]; - if (isset($this->options[$flag])) { - return $this->options[$flag]; - } - } - return null; - } - - /** - * Return the arguments from the command-line following all options found. - * - * @return array - */ - public function getRemainingArgs() - { - $this->parse(); - return $this->remainingArgs; - } - - public function getArguments() - { - $result = $this->getRemainingArgs(); - foreach ($this->getOptions() as $option) { - $result[$option] = $this->getOption($option); - } - return $result; - } - - /** - * Return a useful option reference, formatted for display in an - * error message. - * - * Note that this usage information is provided in most Exceptions - * generated by this class. - * - * @return string - */ - public function getUsageMessage() - { - $usage = "Usage: {$this->progname} [ options ]\n"; - $maxLen = 20; - $lines = array(); - foreach ($this->rules as $rule) { - if (isset($rule['isFreeformFlag'])) { - continue; - } - $flags = array(); - if (is_array($rule['alias'])) { - foreach ($rule['alias'] as $flag) { - $flags[] = (strlen($flag) == 1 ? '-' : '--') . $flag; - } - } - $linepart['name'] = implode('|', $flags); - if (isset($rule['param']) && $rule['param'] != 'none') { - $linepart['name'] .= ' '; - switch ($rule['param']) { - case 'optional': - $linepart['name'] .= "[ <{$rule['paramType']}> ]"; - break; - case 'required': - $linepart['name'] .= "<{$rule['paramType']}>"; - break; - } - } - if (strlen($linepart['name']) > $maxLen) { - $maxLen = strlen($linepart['name']); - } - $linepart['help'] = ''; - if (isset($rule['help'])) { - $linepart['help'] .= $rule['help']; - } - $lines[] = $linepart; - } - foreach ($lines as $linepart) { - $usage .= sprintf( - "%s %s\n", - str_pad($linepart['name'], $maxLen), - $linepart['help'] - ); - } - return $usage; - } - - /** - * Define aliases for options. - * - * The parameter $aliasMap is an associative array - * mapping option name (short or long) to an alias. - * - * @param array $aliasMap - * @throws Exception\ExceptionInterface - * @return self - */ - public function setAliases($aliasMap) - { - foreach ($aliasMap as $flag => $alias) { - if ($this->getoptConfig[self::CONFIG_IGNORECASE]) { - $flag = strtolower($flag); - $alias = strtolower($alias); - } - if (!isset($this->ruleMap[$flag])) { - continue; - } - $flag = $this->ruleMap[$flag]; - if (isset($this->rules[$alias]) || isset($this->ruleMap[$alias])) { - $o = (strlen($alias) == 1 ? '-' : '--') . $alias; - throw new Exception\InvalidArgumentException("Option \"$o\" is being defined more than once."); - } - $this->rules[$flag]['alias'][] = $alias; - $this->ruleMap[$alias] = $flag; - } - return $this; - } - - /** - * Define help messages for options. - * - * The parameter $helpMap is an associative array - * mapping option name (short or long) to the help string. - * - * @param array $helpMap - * @return self - */ - public function setHelp($helpMap) - { - foreach ($helpMap as $flag => $help) { - if (!isset($this->ruleMap[$flag])) { - continue; - } - $flag = $this->ruleMap[$flag]; - $this->rules[$flag]['help'] = $help; - } - return $this; - } - - /** - * Parse command-line arguments and find both long and short - * options. - * - * Also find option parameters, and remaining arguments after - * all options have been parsed. - * - * @return self - */ - public function parse() - { - if ($this->parsed === true) { - return $this; - } - - $argv = $this->argv; - $this->options = array(); - $this->remainingArgs = array(); - while (count($argv) > 0) { - if ($argv[0] == '--') { - array_shift($argv); - if ($this->getoptConfig[self::CONFIG_DASHDASH]) { - $this->remainingArgs = array_merge($this->remainingArgs, $argv); - break; - } - } - if (substr($argv[0], 0, 2) == '--') { - $this->_parseLongOption($argv); - } elseif (substr($argv[0], 0, 1) == '-' && ('-' != $argv[0] || count($argv) >1)) { - $this->_parseShortOptionCluster($argv); - } elseif ($this->getoptConfig[self::CONFIG_PARSEALL]) { - $this->remainingArgs[] = array_shift($argv); - } else { - /* - * We should put all other arguments in remainingArgs and stop parsing - * since CONFIG_PARSEALL is false. - */ - $this->remainingArgs = array_merge($this->remainingArgs, $argv); - break; - } - } - $this->parsed = true; - - //go through parsed args and process callbacks - $this->triggerCallbacks(); - - return $this; - } - - /** - * @param string $option The name of the property which, if present, will call the passed - * callback with the value of this parameter. - * @param callable $callback The callback that will be called for this option. The first - * parameter will be the value of getOption($option), the second - * parameter will be a reference to $this object. If the callback returns - * false then an Exception\RuntimeException will be thrown indicating that - * there is a parse issue with this option. - * - * @return self - */ - public function setOptionCallback($option, \Closure $callback) - { - $this->optionCallbacks[$option] = $callback; - - return $this; - } - - /** - * Triggers all the registered callbacks. - */ - protected function triggerCallbacks() - { - foreach ($this->optionCallbacks as $option => $callback) { - if (null === $this->getOption($option)) { - continue; - } - //make sure we've resolved the alias, if using one - if (isset($this->ruleMap[$option]) && $option = $this->ruleMap[$option]) { - if (false === $callback($this->getOption($option), $this)) { - throw new Exception\RuntimeException( - "The option $option is invalid. See usage.", - $this->getUsageMessage() - ); - } - } - } - } - - /** - * Parse command-line arguments for a single long option. - * A long option is preceded by a double '--' character. - * Long options may not be clustered. - * - * @param mixed &$argv - */ - protected function _parseLongOption(&$argv) - { - $optionWithParam = ltrim(array_shift($argv), '-'); - $l = explode('=', $optionWithParam, 2); - $flag = array_shift($l); - $param = array_shift($l); - if (isset($param)) { - array_unshift($argv, $param); - } - $this->_parseSingleOption($flag, $argv); - } - - /** - * Parse command-line arguments for short options. - * Short options are those preceded by a single '-' character. - * Short options may be clustered. - * - * @param mixed &$argv - */ - protected function _parseShortOptionCluster(&$argv) - { - $flagCluster = ltrim(array_shift($argv), '-'); - foreach (str_split($flagCluster) as $flag) { - $this->_parseSingleOption($flag, $argv); - } - } - - /** - * Parse command-line arguments for a single option. - * - * @param string $flag - * @param mixed $argv - * @throws Exception\ExceptionInterface - */ - protected function _parseSingleOption($flag, &$argv) - { - if ($this->getoptConfig[self::CONFIG_IGNORECASE]) { - $flag = strtolower($flag); - } - - // Check if this option is numeric one - if (preg_match('/^\d+$/', $flag)) { - return $this->_setNumericOptionValue($flag); - } - - if (!isset($this->ruleMap[$flag])) { - // Don't throw Exception for flag-like param in case when freeform flags are allowed - if (!$this->getoptConfig[self::CONFIG_FREEFORM_FLAGS]) { - throw new Exception\RuntimeException( - "Option \"$flag\" is not recognized.", - $this->getUsageMessage() - ); - } - - // Magic methods in future will use this mark as real flag value - $this->ruleMap[$flag] = $flag; - $realFlag = $flag; - $this->rules[$realFlag] = array( - 'param' => 'optional', - 'isFreeformFlag' => true - ); - } else { - $realFlag = $this->ruleMap[$flag]; - } - - switch ($this->rules[$realFlag]['param']) { - case 'required': - if (count($argv) > 0) { - $param = array_shift($argv); - $this->_checkParameterType($realFlag, $param); - } else { - throw new Exception\RuntimeException( - "Option \"$flag\" requires a parameter.", - $this->getUsageMessage() - ); - } - break; - case 'optional': - if (count($argv) > 0 && substr($argv[0], 0, 1) != '-') { - $param = array_shift($argv); - $this->_checkParameterType($realFlag, $param); - } else { - $param = true; - } - break; - default: - $param = true; - } - - $this->_setSingleOptionValue($realFlag, $param); - } - - /** - * Set given value as value of numeric option - * - * Throw runtime exception if this action is deny by configuration - * or no one numeric option handlers is defined - * - * @param int $value - * @throws Exception\RuntimeException - * @return void - */ - protected function _setNumericOptionValue($value) - { - if (!$this->getoptConfig[self::CONFIG_NUMERIC_FLAGS]) { - throw new Exception\RuntimeException("Using of numeric flags are deny by configuration"); - } - - if (empty($this->getoptConfig['numericFlagsOption'])) { - throw new Exception\RuntimeException("Any option for handling numeric flags are specified"); - } - - return $this->_setSingleOptionValue($this->getoptConfig['numericFlagsOption'], $value); - } - - /** - * Add relative to options' flag value - * - * If options list already has current flag as key - * and parser should follow cumulative params by configuration, - * we should to add new param to array, not to overwrite - * - * @param string $flag - * @param string $value - */ - protected function _setSingleOptionValue($flag, $value) - { - if (true === $value && $this->getoptConfig[self::CONFIG_CUMULATIVE_FLAGS]) { - // For boolean values we have to create new flag, or increase number of flags' usage count - return $this->_setBooleanFlagValue($flag); - } - - // Split multiple values, if necessary - // Filter empty values from splited array - $separator = $this->getoptConfig[self::CONFIG_PARAMETER_SEPARATOR]; - if (is_string($value) && !empty($separator) && is_string($separator) && substr_count($value, $separator)) { - $value = array_filter(explode($separator, $value)); - } - - if (!array_key_exists($flag, $this->options)) { - $this->options[$flag] = $value; - } elseif ($this->getoptConfig[self::CONFIG_CUMULATIVE_PARAMETERS]) { - $this->options[$flag] = (array) $this->options[$flag]; - array_push($this->options[$flag], $value); - } else { - $this->options[$flag] = $value; - } - } - - /** - * Set TRUE value to given flag, if this option does not exist yet - * In other case increase value to show count of flags' usage - * - * @param string $flag - */ - protected function _setBooleanFlagValue($flag) - { - $this->options[$flag] = array_key_exists($flag, $this->options) - ? (int) $this->options[$flag] + 1 - : true; - } - - /** - * Return true if the parameter is in a valid format for - * the option $flag. - * Throw an exception in most other cases. - * - * @param string $flag - * @param string $param - * @throws Exception\ExceptionInterface - * @return bool - */ - protected function _checkParameterType($flag, $param) - { - $type = 'string'; - if (isset($this->rules[$flag]['paramType'])) { - $type = $this->rules[$flag]['paramType']; - } - switch ($type) { - case 'word': - if (preg_match('/\W/', $param)) { - throw new Exception\RuntimeException( - "Option \"$flag\" requires a single-word parameter, but was given \"$param\".", - $this->getUsageMessage() - ); - } - break; - case 'integer': - if (preg_match('/\D/', $param)) { - throw new Exception\RuntimeException( - "Option \"$flag\" requires an integer parameter, but was given \"$param\".", - $this->getUsageMessage() - ); - } - break; - case 'string': - default: - break; - } - return true; - } - - /** - * Define legal options using the gnu-style format. - * - * @param string $rules - */ - protected function _addRulesModeGnu($rules) - { - $ruleArray = array(); - - /** - * Options may be single alphanumeric characters. - * Options may have a ':' which indicates a required string parameter. - * No long options or option aliases are supported in GNU style. - */ - preg_match_all('/([a-zA-Z0-9]:?)/', $rules, $ruleArray); - foreach ($ruleArray[1] as $rule) { - $r = array(); - $flag = substr($rule, 0, 1); - if ($this->getoptConfig[self::CONFIG_IGNORECASE]) { - $flag = strtolower($flag); - } - $r['alias'][] = $flag; - if (substr($rule, 1, 1) == ':') { - $r['param'] = 'required'; - $r['paramType'] = 'string'; - } else { - $r['param'] = 'none'; - } - $this->rules[$flag] = $r; - $this->ruleMap[$flag] = $flag; - } - } - - /** - * Define legal options using the Zend-style format. - * - * @param array $rules - * @throws Exception\ExceptionInterface - */ - protected function _addRulesModeZend($rules) - { - foreach ($rules as $ruleCode => $helpMessage) { - // this may have to translate the long parm type if there - // are any complaints that =string will not work (even though that use - // case is not documented) - if (in_array(substr($ruleCode, -2, 1), array('-', '='))) { - $flagList = substr($ruleCode, 0, -2); - $delimiter = substr($ruleCode, -2, 1); - $paramType = substr($ruleCode, -1); - } else { - $flagList = $ruleCode; - $delimiter = $paramType = null; - } - if ($this->getoptConfig[self::CONFIG_IGNORECASE]) { - $flagList = strtolower($flagList); - } - $flags = explode('|', $flagList); - $rule = array(); - $mainFlag = $flags[0]; - foreach ($flags as $flag) { - if (empty($flag)) { - throw new Exception\InvalidArgumentException("Blank flag not allowed in rule \"$ruleCode\"."); - } - if (strlen($flag) == 1) { - if (isset($this->ruleMap[$flag])) { - throw new Exception\InvalidArgumentException( - "Option \"-$flag\" is being defined more than once." - ); - } - $this->ruleMap[$flag] = $mainFlag; - $rule['alias'][] = $flag; - } else { - if (isset($this->rules[$flag]) || isset($this->ruleMap[$flag])) { - throw new Exception\InvalidArgumentException( - "Option \"--$flag\" is being defined more than once." - ); - } - $this->ruleMap[$flag] = $mainFlag; - $rule['alias'][] = $flag; - } - } - if (isset($delimiter)) { - switch ($delimiter) { - case self::PARAM_REQUIRED: - $rule['param'] = 'required'; - break; - case self::PARAM_OPTIONAL: - default: - $rule['param'] = 'optional'; - } - switch (substr($paramType, 0, 1)) { - case self::TYPE_WORD: - $rule['paramType'] = 'word'; - break; - case self::TYPE_INTEGER: - $rule['paramType'] = 'integer'; - break; - case self::TYPE_NUMERIC_FLAG: - $rule['paramType'] = 'numericFlag'; - $this->getoptConfig['numericFlagsOption'] = $mainFlag; - break; - case self::TYPE_STRING: - default: - $rule['paramType'] = 'string'; - } - } else { - $rule['param'] = 'none'; - } - $rule['help'] = $helpMessage; - $this->rules[$mainFlag] = $rule; - } - } -} diff --git a/library/Zend/Console/Prompt/AbstractPrompt.php b/library/Zend/Console/Prompt/AbstractPrompt.php deleted file mode 100755 index cd717cf35..000000000 --- a/library/Zend/Console/Prompt/AbstractPrompt.php +++ /dev/null @@ -1,85 +0,0 @@ -lastResponse; - } - - /** - * Return console adapter to use when showing prompt. - * - * @return ConsoleAdapter - */ - public function getConsole() - { - if (!$this->console) { - $this->console = Console::getInstance(); - } - - return $this->console; - } - - /** - * Set console adapter to use when showing prompt. - * - * @param ConsoleAdapter $adapter - */ - public function setConsole(ConsoleAdapter $adapter) - { - $this->console = $adapter; - } - - /** - * Create an instance of this prompt, show it and return response. - * - * This is a convenience method for creating statically creating prompts, i.e.: - * - * $name = Zend\Console\Prompt\Line::prompt("Enter your name: "); - * - * @return mixed - * @throws Exception\BadMethodCallException - */ - public static function prompt() - { - if (get_called_class() === __CLASS__) { - throw new Exception\BadMethodCallException( - 'Cannot call prompt() on AbstractPrompt class. Use one of the Zend\Console\Prompt\ subclasses.' - ); - } - - $refl = new ReflectionClass(get_called_class()); - $instance = $refl->newInstanceArgs(func_get_args()); - return $instance->show(); - } -} diff --git a/library/Zend/Console/Prompt/Char.php b/library/Zend/Console/Prompt/Char.php deleted file mode 100755 index b6c305145..000000000 --- a/library/Zend/Console/Prompt/Char.php +++ /dev/null @@ -1,186 +0,0 @@ -setPromptText($promptText); - $this->setAllowEmpty($allowEmpty); - $this->setIgnoreCase($ignoreCase); - - if (null != $allowedChars) { - if ($this->ignoreCase) { - $this->setAllowedChars(strtolower($allowedChars)); - } else { - $this->setAllowedChars($allowedChars); - } - } - - $this->setEcho($echo); - } - - /** - * Show the prompt to user and return a single char. - * - * @return string - */ - public function show() - { - $this->getConsole()->write($this->promptText); - $mask = $this->getAllowedChars(); - - /** - * Normalize the mask if case is irrelevant - */ - if ($this->ignoreCase) { - $mask = strtolower($mask); // lowercase all - $mask .= strtoupper($mask); // uppercase and append - $mask = str_split($mask); // convert to array - $mask = array_unique($mask); // remove duplicates - $mask = implode("", $mask); // convert back to string - } - - /** - * Read char from console - */ - $char = $this->getConsole()->readChar($mask); - - if ($this->echo) { - echo trim($char)."\n"; - } else { - if ($this->promptText) { - echo "\n"; // skip to next line but only if we had any prompt text - } - } - - return $this->lastResponse = $char; - } - - /** - * @param bool $allowEmpty - */ - public function setAllowEmpty($allowEmpty) - { - $this->allowEmpty = (bool) $allowEmpty; - } - - /** - * @return bool - */ - public function getAllowEmpty() - { - return $this->allowEmpty; - } - - /** - * @param string $promptText - */ - public function setPromptText($promptText) - { - $this->promptText = $promptText; - } - - /** - * @return string - */ - public function getPromptText() - { - return $this->promptText; - } - - /** - * @param string $allowedChars - */ - public function setAllowedChars($allowedChars) - { - $this->allowedChars = $allowedChars; - } - - /** - * @return string - */ - public function getAllowedChars() - { - return $this->allowedChars; - } - - /** - * @param bool $ignoreCase - */ - public function setIgnoreCase($ignoreCase) - { - $this->ignoreCase = (bool) $ignoreCase; - } - - /** - * @return bool - */ - public function getIgnoreCase() - { - return $this->ignoreCase; - } - - /** - * @param bool $echo - */ - public function setEcho($echo) - { - $this->echo = (bool) $echo; - } - - /** - * @return bool - */ - public function getEcho() - { - return $this->echo; - } -} diff --git a/library/Zend/Console/Prompt/Confirm.php b/library/Zend/Console/Prompt/Confirm.php deleted file mode 100755 index f660452be..000000000 --- a/library/Zend/Console/Prompt/Confirm.php +++ /dev/null @@ -1,113 +0,0 @@ -setPromptText($promptText); - } - - if ($yesChar !== null) { - $this->setYesChar($yesChar); - } - - if ($noChar !== null) { - $this->setNoChar($noChar); - } - } - - /** - * Show the confirmation message and return result. - * - * @return bool - */ - public function show() - { - $char = parent::show(); - if ($this->ignoreCase) { - $response = strtolower($char) === strtolower($this->yesChar); - } else { - $response = $char === $this->yesChar; - } - return $this->lastResponse = $response; - } - - /** - * @param string $noChar - */ - public function setNoChar($noChar) - { - $this->noChar = $noChar; - $this->setAllowedChars($this->yesChar . $this->noChar); - } - - /** - * @return string - */ - public function getNoChar() - { - return $this->noChar; - } - - /** - * @param string $yesChar - */ - public function setYesChar($yesChar) - { - $this->yesChar = $yesChar; - $this->setAllowedChars($this->yesChar . $this->noChar); - } - - /** - * @return string - */ - public function getYesChar() - { - return $this->yesChar; - } -} diff --git a/library/Zend/Console/Prompt/Line.php b/library/Zend/Console/Prompt/Line.php deleted file mode 100755 index 7a7427d7a..000000000 --- a/library/Zend/Console/Prompt/Line.php +++ /dev/null @@ -1,113 +0,0 @@ -setPromptText($promptText); - } - - if ($allowEmpty !== null) { - $this->setAllowEmpty($allowEmpty); - } - - if ($maxLength !== null) { - $this->setMaxLength($maxLength); - } - } - - /** - * Show the prompt to user and return the answer. - * - * @return string - */ - public function show() - { - do { - $this->getConsole()->write($this->promptText); - $line = $this->getConsole()->readLine($this->maxLength); - } while (!$this->allowEmpty && !$line); - - return $this->lastResponse = $line; - } - - /** - * @param bool $allowEmpty - */ - public function setAllowEmpty($allowEmpty) - { - $this->allowEmpty = $allowEmpty; - } - - /** - * @return bool - */ - public function getAllowEmpty() - { - return $this->allowEmpty; - } - - /** - * @param int $maxLength - */ - public function setMaxLength($maxLength) - { - $this->maxLength = $maxLength; - } - - /** - * @return int - */ - public function getMaxLength() - { - return $this->maxLength; - } - - /** - * @param string $promptText - */ - public function setPromptText($promptText) - { - $this->promptText = $promptText; - } - - /** - * @return string - */ - public function getPromptText() - { - return $this->promptText; - } -} diff --git a/library/Zend/Console/Prompt/Number.php b/library/Zend/Console/Prompt/Number.php deleted file mode 100755 index 8ce533005..000000000 --- a/library/Zend/Console/Prompt/Number.php +++ /dev/null @@ -1,208 +0,0 @@ -setPromptText($promptText); - } - - if ($allowEmpty !== null) { - $this->setAllowEmpty($allowEmpty); - } - - if ($min !== null) { - $this->setMin($min); - } - - if ($max !== null) { - $this->setMax($max); - } - - if ($allowFloat !== null) { - $this->setAllowFloat($allowFloat); - } - } - - /** - * Show the prompt to user and return the answer. - * - * @return mixed - */ - public function show() - { - /** - * Ask for a number and validate it. - */ - do { - $valid = true; - $number = parent::show(); - if ($number === "" && !$this->allowEmpty) { - $valid = false; - } elseif ($number === "") { - $number = null; - } elseif (!is_numeric($number)) { - $this->getConsole()->writeLine("$number is not a number\n"); - $valid = false; - } elseif (!$this->allowFloat && (round($number) != $number)) { - $this->getConsole()->writeLine("Please enter a non-floating number, i.e. " . round($number) . "\n"); - $valid = false; - } elseif ($this->max !== null && $number > $this->max) { - $this->getConsole()->writeLine("Please enter a number not greater than " . $this->max . "\n"); - $valid = false; - } elseif ($this->min !== null && $number < $this->min) { - $this->getConsole()->writeLine("Please enter a number not smaller than " . $this->min . "\n"); - $valid = false; - } - } while (!$valid); - - /** - * Cast proper type - */ - if ($number !== null) { - $number = $this->allowFloat ? (double) $number : (int) $number; - } - - return $this->lastResponse = $number; - } - - /** - * @param bool $allowEmpty - */ - public function setAllowEmpty($allowEmpty) - { - $this->allowEmpty = $allowEmpty; - } - - /** - * @return bool - */ - public function getAllowEmpty() - { - return $this->allowEmpty; - } - - /** - * @param int $maxLength - */ - public function setMaxLength($maxLength) - { - $this->maxLength = $maxLength; - } - - /** - * @return int - */ - public function getMaxLength() - { - return $this->maxLength; - } - - /** - * @param string $promptText - */ - public function setPromptText($promptText) - { - $this->promptText = $promptText; - } - - /** - * @return string - */ - public function getPromptText() - { - return $this->promptText; - } - - /** - * @param int $max - */ - public function setMax($max) - { - $this->max = $max; - } - - /** - * @return int - */ - public function getMax() - { - return $this->max; - } - - /** - * @param int $min - */ - public function setMin($min) - { - $this->min = $min; - } - - /** - * @return int - */ - public function getMin() - { - return $this->min; - } - - /** - * @param bool $allowFloat - */ - public function setAllowFloat($allowFloat) - { - $this->allowFloat = $allowFloat; - } - - /** - * @return bool - */ - public function getAllowFloat() - { - return $this->allowFloat; - } -} diff --git a/library/Zend/Console/Prompt/PromptInterface.php b/library/Zend/Console/Prompt/PromptInterface.php deleted file mode 100755 index da1b6215c..000000000 --- a/library/Zend/Console/Prompt/PromptInterface.php +++ /dev/null @@ -1,44 +0,0 @@ -setPromptText($promptText); - } - - if (!count($options)) { - throw new Exception\BadMethodCallException( - 'Cannot construct a "select" prompt without any options' - ); - } - - $this->setOptions($options); - - if ($allowEmpty !== null) { - $this->setAllowEmpty($allowEmpty); - } - - if ($echo !== null) { - $this->setEcho($echo); - } - } - - /** - * Show a list of options and prompt the user to select one of them. - * - * @return string Selected option - */ - public function show() - { - // Show prompt text and available options - $console = $this->getConsole(); - $console->writeLine($this->promptText); - foreach ($this->options as $k => $v) { - $console->writeLine(' ' . $k . ') ' . $v); - } - - // Prepare mask - $mask = implode("", array_keys($this->options)); - if ($this->allowEmpty) { - $mask .= "\r\n"; - } - - // Prepare other params for parent class - $this->setAllowedChars($mask); - $oldPrompt = $this->promptText; - $oldEcho = $this->echo; - $this->echo = false; - $this->promptText = null; - - // Retrieve a single character - $response = parent::show(); - - // Restore old params - $this->promptText = $oldPrompt; - $this->echo = $oldEcho; - - // Display selected option if echo is enabled - if ($this->echo) { - if (isset($this->options[$response])) { - $console->writeLine($this->options[$response]); - } else { - $console->writeLine(); - } - } - - $this->lastResponse = $response; - return $response; - } - - /** - * Set allowed options - * - * @param array|\Traversable $options - * @throws Exception\BadMethodCallException - */ - public function setOptions($options) - { - if (!is_array($options) && !$options instanceof \Traversable) { - throw new Exception\BadMethodCallException( - 'Please specify an array or Traversable object as options' - ); - } - - if (!is_array($options)) { - $this->options = array(); - foreach ($options as $k => $v) { - $this->options[$k] = $v; - } - } else { - $this->options = $options; - } - } - - /** - * @return array - */ - public function getOptions() - { - return $this->options; - } -} diff --git a/library/Zend/Console/README.md b/library/Zend/Console/README.md deleted file mode 100755 index eb8566c0f..000000000 --- a/library/Zend/Console/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Console Component from ZF2 -========================== - -This is the Console component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Console/Request.php b/library/Zend/Console/Request.php deleted file mode 100755 index 57b48bb2c..000000000 --- a/library/Zend/Console/Request.php +++ /dev/null @@ -1,197 +0,0 @@ - 0) { - $this->setScriptName(array_shift($args)); - } - - /** - * Store runtime params - */ - $this->params()->fromArray($args); - $this->setContent($args); - - /** - * Store environment data - */ - $this->env()->fromArray($env); - } - - /** - * Exchange parameters object - * - * @param \Zend\Stdlib\Parameters $params - * @return Request - */ - public function setParams(Parameters $params) - { - $this->params = $params; - $this->setContent($params); - return $this; - } - - /** - * Return the container responsible for parameters - * - * @return \Zend\Stdlib\Parameters - */ - public function getParams() - { - if ($this->params === null) { - $this->params = new Parameters(); - } - - return $this->params; - } - - /** - * Return a single parameter. - * Shortcut for $request->params()->get() - * - * @param string $name Parameter name - * @param string $default (optional) default value in case the parameter does not exist - * @return mixed - */ - public function getParam($name, $default = null) - { - return $this->params()->get($name, $default); - } - - /** - * Return the container responsible for parameters - * - * @return \Zend\Stdlib\Parameters - */ - public function params() - { - return $this->getParams(); - } - - /** - * Provide an alternate Parameter Container implementation for env parameters in this object, (this is NOT the - * primary API for value setting, for that see env()) - * - * @param \Zend\Stdlib\Parameters $env - * @return \Zend\Console\Request - */ - public function setEnv(Parameters $env) - { - $this->envParams = $env; - return $this; - } - - /** - * Return a single parameter container responsible for env parameters - * - * @param string $name Parameter name - * @param string $default (optional) default value in case the parameter does not exist - * @return \Zend\Stdlib\Parameters - */ - public function getEnv($name, $default = null) - { - return $this->env()->get($name, $default); - } - - /** - * Return the parameter container responsible for env parameters - * - * @return \Zend\Stdlib\Parameters - */ - public function env() - { - if ($this->envParams === null) { - $this->envParams = new Parameters(); - } - - return $this->envParams; - } - - /** - * @return string - */ - public function toString() - { - return trim(implode(' ', $this->params()->toArray())); - } - - /** - * Allow PHP casting of this object - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * @param string $scriptName - */ - public function setScriptName($scriptName) - { - $this->scriptName = $scriptName; - } - - /** - * @return string - */ - public function getScriptName() - { - return $this->scriptName; - } -} diff --git a/library/Zend/Console/Response.php b/library/Zend/Console/Response.php deleted file mode 100755 index 75a068614..000000000 --- a/library/Zend/Console/Response.php +++ /dev/null @@ -1,80 +0,0 @@ -contentSent; - } - - /** - * Set the error level that will be returned to shell. - * - * @param int $errorLevel - * @return Response - */ - public function setErrorLevel($errorLevel) - { - $this->setMetadata('errorLevel', $errorLevel); - return $this; - } - - /** - * Get response error level that will be returned to shell. - * - * @return int|0 - */ - public function getErrorLevel() - { - return $this->getMetadata('errorLevel', 0); - } - - /** - * Send content - * - * @return Response - * @deprecated - */ - public function sendContent() - { - if ($this->contentSent()) { - return $this; - } - echo $this->getContent(); - $this->contentSent = true; - return $this; - } - - /** - * @deprecated - */ - public function send() - { - $this->sendContent(); - $errorLevel = (int) $this->getMetadata('errorLevel', 0); - exit($errorLevel); - } -} diff --git a/library/Zend/Console/RouteMatcher/DefaultRouteMatcher.php b/library/Zend/Console/RouteMatcher/DefaultRouteMatcher.php deleted file mode 100755 index a5f8fae57..000000000 --- a/library/Zend/Console/RouteMatcher/DefaultRouteMatcher.php +++ /dev/null @@ -1,780 +0,0 @@ -defaults = $defaults; - $this->constraints = $constraints; - $this->aliases = $aliases; - - if ($filters !== null) { - foreach ($filters as $name => $filter) { - if (!$filter instanceof FilterInterface) { - throw new Exception\InvalidArgumentException('Cannot use ' . gettype($filters) . ' as filter for ' . __CLASS__); - } - $this->filters[$name] = $filter; - } - } - - if ($validators !== null) { - foreach ($validators as $name => $validator) { - if (!$validator instanceof ValidatorInterface) { - throw new Exception\InvalidArgumentException('Cannot use ' . gettype($validator) . ' as validator for ' . __CLASS__); - } - $this->validators[$name] = $validator; - } - } - - $this->parts = $this->parseDefinition($route); - } - - /** - * Parse a route definition. - * - * @param string $def - * @return array - * @throws Exception\InvalidArgumentException - */ - protected function parseDefinition($def) - { - $def = trim($def); - $pos = 0; - $length = strlen($def); - $parts = array(); - $unnamedGroupCounter = 1; - - while ($pos < $length) { - /** - * Optional value param, i.e. - * [SOMETHING] - */ - if (preg_match('/\G\[(?P[A-Z][A-Z0-9\_\-]*?)\](?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => strtolower($m['name']), - 'literal' => false, - 'required' => false, - 'positional' => true, - 'hasValue' => true, - ); - } - /** - * Mandatory value param, i.e. - * SOMETHING - */ - elseif (preg_match('/\G(?P[A-Z][A-Z0-9\_\-]*?)(?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => strtolower($m['name']), - 'literal' => false, - 'required' => true, - 'positional' => true, - 'hasValue' => true, - ); - } - /** - * Optional literal param, i.e. - * [something] - */ - elseif (preg_match('/\G\[ *?(?P[a-zA-Z][a-zA-Z0-9\_\-]*?) *?\](?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => $m['name'], - 'literal' => true, - 'required' => false, - 'positional' => true, - 'hasValue' => false, - ); - } - /** - * Optional value param, syntax 2, i.e. - * [] - */ - elseif (preg_match('/\G\[ *\<(?P[a-zA-Z][a-zA-Z0-9\_\-]*?)\> *\](?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => $m['name'], - 'literal' => false, - 'required' => false, - 'positional' => true, - 'hasValue' => true, - ); - } - /** - * Mandatory value param, i.e. - * - */ - elseif (preg_match('/\G\< *(?P[a-zA-Z][a-zA-Z0-9\_\-]*?) *\>(?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => $m['name'], - 'literal' => false, - 'required' => true, - 'positional' => true, - 'hasValue' => true, - ); - } - /** - * Mandatory literal param, i.e. - * something - */ - elseif (preg_match('/\G(?P[a-zA-Z][a-zA-Z0-9\_\-]*?)(?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => $m['name'], - 'literal' => true, - 'required' => true, - 'positional' => true, - 'hasValue' => false, - ); - } - /** - * Mandatory long param - * --param= - * --param=whatever - */ - elseif (preg_match('/\G--(?P[a-zA-Z0-9][a-zA-Z0-9\_\-]+)(?P=\S*?)?(?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => $m['name'], - 'short' => false, - 'literal' => false, - 'required' => true, - 'positional' => false, - 'hasValue' => !empty($m['hasValue']), - ); - } - /** - * Optional long flag - * [--param] - */ - elseif (preg_match( - '/\G\[ *?--(?P[a-zA-Z0-9][a-zA-Z0-9\_\-]+) *?\](?: +|$)/s', $def, $m, 0, $pos - )) { - $item = array( - 'name' => $m['name'], - 'short' => false, - 'literal' => false, - 'required' => false, - 'positional' => false, - 'hasValue' => false, - ); - } - /** - * Optional long param - * [--param=] - * [--param=whatever] - */ - elseif (preg_match( - '/\G\[ *?--(?P[a-zA-Z0-9][a-zA-Z0-9\_\-]+)(?P=\S*?)? *?\](?: +|$)/s', $def, $m, 0, $pos - )) { - $item = array( - 'name' => $m['name'], - 'short' => false, - 'literal' => false, - 'required' => false, - 'positional' => false, - 'hasValue' => !empty($m['hasValue']), - ); - } - /** - * Mandatory short param - * -a - * -a=i - * -a=s - * -a=w - */ - elseif (preg_match('/\G-(?P[a-zA-Z0-9])(?:=(?P[ns]))?(?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => $m['name'], - 'short' => true, - 'literal' => false, - 'required' => true, - 'positional' => false, - 'hasValue' => !empty($m['type']) ? $m['type'] : null, - ); - } - /** - * Optional short param - * [-a] - * [-a=n] - * [-a=s] - */ - elseif (preg_match('/\G\[ *?-(?P[a-zA-Z0-9])(?:=(?P[ns]))? *?\](?: +|$)/s', $def, $m, 0, $pos)) { - $item = array( - 'name' => $m['name'], - 'short' => true, - 'literal' => false, - 'required' => false, - 'positional' => false, - 'hasValue' => !empty($m['type']) ? $m['type'] : null, - ); - } - /** - * Optional literal param alternative - * [ something | somethingElse | anotherOne ] - * [ something | somethingElse | anotherOne ]:namedGroup - */ - elseif (preg_match('/ - \G - \[ - (?P - (?: - \ *? - (?P[a-zA-Z][a-zA-Z0-9_\-]*?) - \ *? - (?:\||(?=\])) - \ *? - )+ - ) - \] - (?:\:(?P[a-zA-Z0-9]+))? - (?:\ +|$) - /sx', $def, $m, 0, $pos - ) - ) { - // extract available options - $options = preg_split('/ *\| */', trim($m['options']), 0, PREG_SPLIT_NO_EMPTY); - - // remove dupes - array_unique($options); - - // prepare item - $item = array( - 'name' => isset($m['groupName']) ? $m['groupName'] : 'unnamedGroup' . $unnamedGroupCounter++, - 'literal' => true, - 'required' => false, - 'positional' => true, - 'alternatives' => $options, - 'hasValue' => false, - ); - } - - /** - * Required literal param alternative - * ( something | somethingElse | anotherOne ) - * ( something | somethingElse | anotherOne ):namedGroup - */ - elseif (preg_match('/ - \G - \( - (?P - (?: - \ *? - (?P[a-zA-Z][a-zA-Z0-9_\-]+) - \ *? - (?:\||(?=\))) - \ *? - )+ - ) - \) - (?:\:(?P[a-zA-Z0-9]+))? - (?:\ +|$) - /sx', $def, $m, 0, $pos - )) { - // extract available options - $options = preg_split('/ *\| */', trim($m['options']), 0, PREG_SPLIT_NO_EMPTY); - - // remove dupes - array_unique($options); - - // prepare item - $item = array( - 'name' => isset($m['groupName']) ? $m['groupName']:'unnamedGroupAt' . $unnamedGroupCounter++, - 'literal' => true, - 'required' => true, - 'positional' => true, - 'alternatives' => $options, - 'hasValue' => false, - ); - } - /** - * Required long/short flag alternative - * ( --something | --somethingElse | --anotherOne | -s | -a ) - * ( --something | --somethingElse | --anotherOne | -s | -a ):namedGroup - */ - elseif (preg_match('/ - \G - \( - (?P - (?: - \ *? - \-+(?P[a-zA-Z0-9][a-zA-Z0-9_\-]*?) - \ *? - (?:\||(?=\))) - \ *? - )+ - ) - \) - (?:\:(?P[a-zA-Z0-9]+))? - (?:\ +|$) - /sx', $def, $m, 0, $pos - )) { - // extract available options - $options = preg_split('/ *\| */', trim($m['options']), 0, PREG_SPLIT_NO_EMPTY); - - // remove dupes - array_unique($options); - - // remove prefix - array_walk($options, function (&$val, $key) { - $val = ltrim($val, '-'); - }); - - // prepare item - $item = array( - 'name' => isset($m['groupName']) ? $m['groupName']:'unnamedGroupAt' . $unnamedGroupCounter++, - 'literal' => false, - 'required' => true, - 'positional' => false, - 'alternatives' => $options, - 'hasValue' => false, - ); - } - /** - * Optional flag alternative - * [ --something | --somethingElse | --anotherOne | -s | -a ] - * [ --something | --somethingElse | --anotherOne | -s | -a ]:namedGroup - */ - elseif (preg_match('/ - \G - \[ - (?P - (?: - \ *? - \-+(?P[a-zA-Z0-9][a-zA-Z0-9_\-]*?) - \ *? - (?:\||(?=\])) - \ *? - )+ - ) - \] - (?:\:(?P[a-zA-Z0-9]+))? - (?:\ +|$) - /sx', $def, $m, 0, $pos - )) { - // extract available options - $options = preg_split('/ *\| */', trim($m['options']), 0, PREG_SPLIT_NO_EMPTY); - - // remove dupes - array_unique($options); - - // remove prefix - array_walk($options, function (&$val, $key) { - $val = ltrim($val, '-'); - }); - - // prepare item - $item = array( - 'name' => isset($m['groupName']) ? $m['groupName']:'unnamedGroupAt' . $unnamedGroupCounter++, - 'literal' => false, - 'required' => false, - 'positional' => false, - 'alternatives' => $options, - 'hasValue' => false, - ); - } else { - throw new Exception\InvalidArgumentException( - 'Cannot understand Console route at "' . substr($def, $pos) . '"' - ); - } - - $pos += strlen($m[0]); - $parts[] = $item; - } - - return $parts; - } - - /** - * Returns list of names representing single parameter - * - * @param string $name - * @return string - */ - private function getAliases($name) - { - $namesToMatch = array($name); - foreach ($this->aliases as $alias => $canonical) { - if ($name == $canonical) { - $namesToMatch[] = $alias; - } - } - return $namesToMatch; - } - - /** - * Returns canonical name of a parameter - * - * @param string $name - * @return string - */ - private function getCanonicalName($name) - { - if (isset($this->aliases[$name])) { - return $this->aliases[$name]; - } - return $name; - } - - /** - * Match parameters against route passed to constructor - * - * @param array $params - * @return array|null - */ - public function match($params) - { - $matches = array(); - - /* - * Extract positional and named parts - */ - $positional = $named = array(); - foreach ($this->parts as &$part) { - if ($part['positional']) { - $positional[] = &$part; - } else { - $named[] = &$part; - } - } - - /* - * Scan for named parts inside Console params - */ - foreach ($named as &$part) { - /* - * Prepare match regex - */ - if (isset($part['alternatives'])) { - // an alternative of flags - $regex = '/^\-+(?P'; - - $alternativeAliases = array(); - foreach ($part['alternatives'] as $alternative) { - $alternativeAliases[] = '(?:' . implode('|', $this->getAliases($alternative)) . ')'; - } - - $regex .= join('|', $alternativeAliases); - - if ($part['hasValue']) { - $regex .= ')(?:\=(?P.*?)$)?$/'; - } else { - $regex .= ')$/i'; - } - } else { - // a single named flag - $name = '(?:' . implode('|', $this->getAliases($part['name'])) . ')'; - - if ($part['short'] === true) { - // short variant - if ($part['hasValue']) { - $regex = '/^\-' . $name . '(?:\=(?P.*?)$)?$/i'; - } else { - $regex = '/^\-' . $name . '$/i'; - } - } elseif ($part['short'] === false) { - // long variant - if ($part['hasValue']) { - $regex = '/^\-{2,}' . $name . '(?:\=(?P.*?)$)?$/i'; - } else { - $regex = '/^\-{2,}' . $name . '$/i'; - } - } - } - - /* - * Look for param - */ - $value = $param = null; - for ($x = 0, $count = count($params); $x < $count; $x++) { - if (preg_match($regex, $params[$x], $m)) { - // found param - $param = $params[$x]; - - // prevent further scanning of this param - array_splice($params, $x, 1); - - if (isset($m['value'])) { - $value = $m['value']; - } - - if (isset($m['name'])) { - $matchedName = $this->getCanonicalName($m['name']); - } - - break; - } - } - - - if (!$param) { - /* - * Drop out if that was a mandatory param - */ - if ($part['required']) { - return null; - } - - /* - * Continue to next positional param - */ - else { - continue; - } - } - - - /* - * Value for flags is always boolean - */ - if ($param && !$part['hasValue']) { - $value = true; - } - - /* - * Try to retrieve value if it is expected - */ - if ((null === $value || "" === $value) && $part['hasValue']) { - if ($x < count($params)+1 && isset($params[$x])) { - // retrieve value from adjacent param - $value = $params[$x]; - - // prevent further scanning of this param - array_splice($params, $x, 1); - } else { - // there are no more params available - return null; - } - } - - /* - * Validate the value against constraints - */ - if ($part['hasValue'] && isset($this->constraints[$part['name']])) { - if ( - !preg_match($this->constraints[$part['name']], $value) - ) { - // constraint failed - return null; - } - } - - /* - * Store the value - */ - if ($part['hasValue']) { - $matches[$part['name']] = $value; - } else { - $matches[$part['name']] = true; - } - - /* - * If there are alternatives, fill them - */ - if (isset($part['alternatives'])) { - if ($part['hasValue']) { - foreach ($part['alternatives'] as $alt) { - if ($alt === $matchedName && !isset($matches[$alt])) { - $matches[$alt] = $value; - } elseif (!isset($matches[$alt])) { - $matches[$alt] = null; - } - } - } else { - foreach ($part['alternatives'] as $alt) { - if ($alt === $matchedName && !isset($matches[$alt])) { - $matches[$alt] = isset($this->defaults[$alt])? $this->defaults[$alt] : true; - } elseif (!isset($matches[$alt])) { - $matches[$alt] = false; - } - } - } - } - } - - /* - * Scan for left-out flags that should result in a mismatch - */ - foreach ($params as $param) { - if (preg_match('#^\-+#', $param)) { - return null; // there is an unrecognized flag - } - } - - /* - * Go through all positional params - */ - $argPos = 0; - foreach ($positional as &$part) { - /* - * Check if param exists - */ - if (!isset($params[$argPos])) { - if ($part['required']) { - // cannot find required positional param - return null; - } else { - // stop matching - break; - } - } - - $value = $params[$argPos]; - - /* - * Check if literal param matches - */ - if ($part['literal']) { - if ( - (isset($part['alternatives']) && !in_array($value, $part['alternatives'])) || - (!isset($part['alternatives']) && $value != $part['name']) - ) { - return null; - } - } - - /* - * Validate the value against constraints - */ - if ($part['hasValue'] && isset($this->constraints[$part['name']])) { - if ( - !preg_match($this->constraints[$part['name']], $value) - ) { - // constraint failed - return null; - } - } - - /* - * Store the value - */ - if ($part['hasValue']) { - $matches[$part['name']] = $value; - } elseif (isset($part['alternatives'])) { - // from all alternatives set matching parameter to TRUE and the rest to FALSE - foreach ($part['alternatives'] as $alt) { - if ($alt == $value) { - $matches[$alt] = isset($this->defaults[$alt])? $this->defaults[$alt] : true; - } else { - $matches[$alt] = false; - } - } - - // set alternatives group value - $matches[$part['name']] = $value; - } elseif (!$part['required']) { - // set optional parameter flag - $name = $part['name']; - $matches[$name] = isset($this->defaults[$name])? $this->defaults[$name] : true; - } - - /* - * Advance to next argument - */ - $argPos++; - } - - /* - * Check if we have consumed all positional parameters - */ - if ($argPos < count($params)) { - return null; // there are extraneous params that were not consumed - } - - /* - * Any optional flags that were not entered have value false - */ - foreach ($this->parts as &$part) { - if (!$part['required'] && !$part['hasValue']) { - if (!isset($matches[$part['name']])) { - $matches[$part['name']] = false; - } - // unset alternatives also should be false - if (isset($part['alternatives'])) { - foreach ($part['alternatives'] as $alt) { - if (!isset($matches[$alt])) { - $matches[$alt] = false; - } - } - } - } - } - - // run filters - foreach ($matches as $name => $value) { - if (isset($this->filters[$name])) { - $matches[$name] = $this->filters[$name]->filter($value); - } - } - - // run validators - $valid = true; - foreach ($matches as $name => $value) { - if (isset($this->validators[$name])) { - $valid &= $this->validators[$name]->isValid($value); - } - } - - if (!$valid) { - return null; - } - - return array_replace($this->defaults, $matches); - } -} diff --git a/library/Zend/Console/RouteMatcher/RouteMatcherInterface.php b/library/Zend/Console/RouteMatcher/RouteMatcherInterface.php deleted file mode 100755 index 62f463c33..000000000 --- a/library/Zend/Console/RouteMatcher/RouteMatcherInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Crypt/BlockCipher.php b/library/Zend/Crypt/BlockCipher.php deleted file mode 100755 index 9b2a713ec..000000000 --- a/library/Zend/Crypt/BlockCipher.php +++ /dev/null @@ -1,489 +0,0 @@ -cipher = $cipher; - } - - /** - * Factory. - * - * @param string $adapter - * @param array $options - * @return BlockCipher - */ - public static function factory($adapter, $options = array()) - { - $plugins = static::getSymmetricPluginManager(); - $adapter = $plugins->get($adapter, (array) $options); - - return new static($adapter); - } - - /** - * Returns the symmetric cipher plugin manager. If it doesn't exist it's created. - * - * @return SymmetricPluginManager - */ - public static function getSymmetricPluginManager() - { - if (static::$symmetricPlugins === null) { - static::setSymmetricPluginManager(new SymmetricPluginManager()); - } - - return static::$symmetricPlugins; - } - - /** - * Set the symmetric cipher plugin manager - * - * @param string|SymmetricPluginManager $plugins - * @throws Exception\InvalidArgumentException - */ - public static function setSymmetricPluginManager($plugins) - { - if (is_string($plugins)) { - if (!class_exists($plugins)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Unable to locate symmetric cipher plugins using class "%s"; class does not exist', - $plugins - )); - } - $plugins = new $plugins(); - } - if (!$plugins instanceof SymmetricPluginManager) { - throw new Exception\InvalidArgumentException(sprintf( - 'Expected an instance or extension of %s\SymmetricPluginManager; received "%s"', - __NAMESPACE__, - (is_object($plugins) ? get_class($plugins) : gettype($plugins)) - )); - } - static::$symmetricPlugins = $plugins; - } - - /** - * Set the symmetric cipher - * - * @param SymmetricInterface $cipher - * @return BlockCipher - */ - public function setCipher(SymmetricInterface $cipher) - { - $this->cipher = $cipher; - return $this; - } - - /** - * Get symmetric cipher - * - * @return SymmetricInterface - */ - public function getCipher() - { - return $this->cipher; - } - - /** - * Set the number of iterations for Pbkdf2 - * - * @param int $num - * @return BlockCipher - */ - public function setKeyIteration($num) - { - $this->keyIteration = (int) $num; - - return $this; - } - - /** - * Get the number of iterations for Pbkdf2 - * - * @return int - */ - public function getKeyIteration() - { - return $this->keyIteration; - } - - /** - * Set the salt (IV) - * - * @param string $salt - * @return BlockCipher - * @throws Exception\InvalidArgumentException - */ - public function setSalt($salt) - { - try { - $this->cipher->setSalt($salt); - } catch (Symmetric\Exception\InvalidArgumentException $e) { - throw new Exception\InvalidArgumentException("The salt is not valid: " . $e->getMessage()); - } - $this->saltSetted = true; - - return $this; - } - - /** - * Get the salt (IV) according to the size requested by the algorithm - * - * @return string - */ - public function getSalt() - { - return $this->cipher->getSalt(); - } - - /** - * Get the original salt value - * - * @return string - */ - public function getOriginalSalt() - { - return $this->cipher->getOriginalSalt(); - } - - /** - * Enable/disable the binary output - * - * @param bool $value - * @return BlockCipher - */ - public function setBinaryOutput($value) - { - $this->binaryOutput = (bool) $value; - - return $this; - } - - /** - * Get the value of binary output - * - * @return bool - */ - public function getBinaryOutput() - { - return $this->binaryOutput; - } - - /** - * Set the encryption/decryption key - * - * @param string $key - * @return BlockCipher - * @throws Exception\InvalidArgumentException - */ - public function setKey($key) - { - if (empty($key)) { - throw new Exception\InvalidArgumentException('The key cannot be empty'); - } - $this->key = $key; - - return $this; - } - - /** - * Get the key - * - * @return string - */ - public function getKey() - { - return $this->key; - } - - /** - * Set algorithm of the symmetric cipher - * - * @param string $algo - * @return BlockCipher - * @throws Exception\InvalidArgumentException - */ - public function setCipherAlgorithm($algo) - { - if (empty($this->cipher)) { - throw new Exception\InvalidArgumentException('No symmetric cipher specified'); - } - try { - $this->cipher->setAlgorithm($algo); - } catch (Symmetric\Exception\InvalidArgumentException $e) { - throw new Exception\InvalidArgumentException($e->getMessage()); - } - - return $this; - } - - /** - * Get the cipher algorithm - * - * @return string|bool - */ - public function getCipherAlgorithm() - { - if (!empty($this->cipher)) { - return $this->cipher->getAlgorithm(); - } - - return false; - } - - /** - * Get the supported algorithms of the symmetric cipher - * - * @return array - */ - public function getCipherSupportedAlgorithms() - { - if (!empty($this->cipher)) { - return $this->cipher->getSupportedAlgorithms(); - } - - return array(); - } - - /** - * Set the hash algorithm for HMAC authentication - * - * @param string $hash - * @return BlockCipher - * @throws Exception\InvalidArgumentException - */ - public function setHashAlgorithm($hash) - { - if (!Hash::isSupported($hash)) { - throw new Exception\InvalidArgumentException( - "The specified hash algorithm '{$hash}' is not supported by Zend\Crypt\Hash" - ); - } - $this->hash = $hash; - - return $this; - } - - /** - * Get the hash algorithm for HMAC authentication - * - * @return string - */ - public function getHashAlgorithm() - { - return $this->hash; - } - - /** - * Set the hash algorithm for the Pbkdf2 - * - * @param string $hash - * @return BlockCipher - * @throws Exception\InvalidArgumentException - */ - public function setPbkdf2HashAlgorithm($hash) - { - if (!Hash::isSupported($hash)) { - throw new Exception\InvalidArgumentException( - "The specified hash algorithm '{$hash}' is not supported by Zend\Crypt\Hash" - ); - } - $this->pbkdf2Hash = $hash; - - return $this; - } - - /** - * Get the Pbkdf2 hash algorithm - * - * @return string - */ - public function getPbkdf2HashAlgorithm() - { - return $this->pbkdf2Hash; - } - - /** - * Encrypt then authenticate using HMAC - * - * @param string $data - * @return string - * @throws Exception\InvalidArgumentException - */ - public function encrypt($data) - { - // 0 (as integer), 0.0 (as float) & '0' (as string) will return false, though these should be allowed - // Must be a string, integer, or float in order to encrypt - if ((is_string($data) && $data === '') - || is_array($data) - || is_object($data) - ) { - throw new Exception\InvalidArgumentException('The data to encrypt cannot be empty'); - } - - // Cast to string prior to encrypting - if (!is_string($data)) { - $data = (string) $data; - } - - if (empty($this->cipher)) { - throw new Exception\InvalidArgumentException('No symmetric cipher specified'); - } - if (empty($this->key)) { - throw new Exception\InvalidArgumentException('No key specified for the encryption'); - } - $keySize = $this->cipher->getKeySize(); - // generate a random salt (IV) if the salt has not been set - if (!$this->saltSetted) { - $this->cipher->setSalt(Rand::getBytes($this->cipher->getSaltSize(), true)); - } - // generate the encryption key and the HMAC key for the authentication - $hash = Pbkdf2::calc( - $this->getPbkdf2HashAlgorithm(), - $this->getKey(), - $this->getSalt(), - $this->keyIteration, - $keySize * 2 - ); - // set the encryption key - $this->cipher->setKey(substr($hash, 0, $keySize)); - // set the key for HMAC - $keyHmac = substr($hash, $keySize); - // encryption - $ciphertext = $this->cipher->encrypt($data); - // HMAC - $hmac = Hmac::compute($keyHmac, $this->hash, $this->cipher->getAlgorithm() . $ciphertext); - if (!$this->binaryOutput) { - $ciphertext = base64_encode($ciphertext); - } - - return $hmac . $ciphertext; - } - - /** - * Decrypt - * - * @param string $data - * @return string|bool - * @throws Exception\InvalidArgumentException - */ - public function decrypt($data) - { - if (!is_string($data)) { - throw new Exception\InvalidArgumentException('The data to decrypt must be a string'); - } - if ('' === $data) { - throw new Exception\InvalidArgumentException('The data to decrypt cannot be empty'); - } - if (empty($this->key)) { - throw new Exception\InvalidArgumentException('No key specified for the decryption'); - } - if (empty($this->cipher)) { - throw new Exception\InvalidArgumentException('No symmetric cipher specified'); - } - $hmacSize = Hmac::getOutputSize($this->hash); - $hmac = substr($data, 0, $hmacSize); - $ciphertext = substr($data, $hmacSize); - if (!$this->binaryOutput) { - $ciphertext = base64_decode($ciphertext); - } - $iv = substr($ciphertext, 0, $this->cipher->getSaltSize()); - $keySize = $this->cipher->getKeySize(); - // generate the encryption key and the HMAC key for the authentication - $hash = Pbkdf2::calc( - $this->getPbkdf2HashAlgorithm(), - $this->getKey(), - $iv, - $this->keyIteration, - $keySize * 2 - ); - // set the decryption key - $this->cipher->setKey(substr($hash, 0, $keySize)); - // set the key for HMAC - $keyHmac = substr($hash, $keySize); - $hmacNew = Hmac::compute($keyHmac, $this->hash, $this->cipher->getAlgorithm() . $ciphertext); - if (!Utils::compareStrings($hmacNew, $hmac)) { - return false; - } - - return $this->cipher->decrypt($ciphertext); - } -} diff --git a/library/Zend/Crypt/CONTRIBUTING.md b/library/Zend/Crypt/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Crypt/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Crypt/Exception/ExceptionInterface.php b/library/Zend/Crypt/Exception/ExceptionInterface.php deleted file mode 100755 index ef9374361..000000000 --- a/library/Zend/Crypt/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ - MHASH_MD2, - 'md4' => MHASH_MD4, - 'md5' => MHASH_MD5, - 'sha1' => MHASH_SHA1, - 'sha224' => MHASH_SHA224, - 'sha256' => MHASH_SHA256, - 'sha384' => MHASH_SHA384, - 'sha512' => MHASH_SHA512, - 'ripemd128' => MHASH_RIPEMD128, - 'ripemd256' => MHASH_RIPEMD256, - 'ripemd320' => MHASH_RIPEMD320, - 'haval128,3' => MHASH_HAVAL128, - 'haval160,3' => MHASH_HAVAL160, - 'haval192,3' => MHASH_HAVAL192, - 'haval224,3' => MHASH_HAVAL224, - 'haval256,3' => MHASH_HAVAL256, - 'tiger128,3' => MHASH_TIGER128, - 'riger160,3' => MHASH_TIGER160, - 'whirpool' => MHASH_WHIRLPOOL, - 'snefru256' => MHASH_SNEFRU256, - 'gost' => MHASH_GOST, - 'crc32' => MHASH_CRC32, - 'crc32b' => MHASH_CRC32B - ); - - /** - * Generate the new key - * - * @param string $hash The hash algorithm to be used by HMAC - * @param string $password The source password/key - * @param int $bytes The output size in bytes - * @param string $salt The salt of the algorithm - * @throws Exception\InvalidArgumentException - * @return string - */ - public static function calc($hash, $password, $salt, $bytes) - { - if (!in_array($hash, array_keys(static::$supportedMhashAlgos))) { - throw new Exception\InvalidArgumentException("The hash algorithm $hash is not supported by " . __CLASS__); - } - if (strlen($salt)<8) { - throw new Exception\InvalidArgumentException('The salt size must be at least of 8 bytes'); - } - return mhash_keygen_s2k(static::$supportedMhashAlgos[$hash], $password, $salt, $bytes); - } -} diff --git a/library/Zend/Crypt/Key/Derivation/Scrypt.php b/library/Zend/Crypt/Key/Derivation/Scrypt.php deleted file mode 100755 index da2a78367..000000000 --- a/library/Zend/Crypt/Key/Derivation/Scrypt.php +++ /dev/null @@ -1,340 +0,0 @@ - 0 and a power of 2"); - } - if ($n > PHP_INT_MAX / 128 / $r) { - throw new Exception\InvalidArgumentException("Parameter n is too large"); - } - if ($r > PHP_INT_MAX / 128 / $p) { - throw new Exception\InvalidArgumentException("Parameter r is too large"); - } - - if (extension_loaded('Scrypt')) { - if ($length < 16) { - throw new Exception\InvalidArgumentException("Key length is too low, must be greater or equal to 16"); - } - return self::hex2bin(scrypt($password, $salt, $n, $r, $p, $length)); - } - - $b = Pbkdf2::calc('sha256', $password, $salt, 1, $p * 128 * $r); - - $s = ''; - for ($i = 0; $i < $p; $i++) { - $s .= self::scryptROMix(substr($b, $i * 128 * $r, 128 * $r), $n, $r); - } - - return Pbkdf2::calc('sha256', $password, $s, 1, $length); - } - - /** - * scryptROMix - * - * @param string $b - * @param int $n - * @param int $r - * @return string - * @see https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01#section-4 - */ - protected static function scryptROMix($b, $n, $r) - { - $x = $b; - $v = array(); - for ($i = 0; $i < $n; $i++) { - $v[$i] = $x; - $x = self::scryptBlockMix($x, $r); - } - for ($i = 0; $i < $n; $i++) { - $j = self::integerify($x) % $n; - $t = $x ^ $v[$j]; - $x = self::scryptBlockMix($t, $r); - } - return $x; - } - - /** - * scryptBlockMix - * - * @param string $b - * @param int $r - * @return string - * @see https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01#section-3 - */ - protected static function scryptBlockMix($b, $r) - { - $x = substr($b, -64); - $even = ''; - $odd = ''; - $len = 2 * $r; - - for ($i = 0; $i < $len; $i++) { - if (PHP_INT_SIZE === 4) { - $x = self::salsa208Core32($x ^ substr($b, 64 * $i, 64)); - } else { - $x = self::salsa208Core64($x ^ substr($b, 64 * $i, 64)); - } - if ($i % 2 == 0) { - $even .= $x; - } else { - $odd .= $x; - } - } - return $even . $odd; - } - - /** - * Salsa 20/8 core (32 bit version) - * - * @param string $b - * @return string - * @see https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01#section-2 - * @see http://cr.yp.to/salsa20.html - */ - protected static function salsa208Core32($b) - { - $b32 = array(); - for ($i = 0; $i < 16; $i++) { - list(, $b32[$i]) = unpack("V", substr($b, $i * 4, 4)); - } - - $x = $b32; - for ($i = 0; $i < 8; $i += 2) { - $a = ($x[ 0] + $x[12]); - $x[ 4] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[ 4] + $x[ 0]); - $x[ 8] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[ 8] + $x[ 4]); - $x[12] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[12] + $x[ 8]); - $x[ 0] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - $a = ($x[ 5] + $x[ 1]); - $x[ 9] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[ 9] + $x[ 5]); - $x[13] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[13] + $x[ 9]); - $x[ 1] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[ 1] + $x[13]); - $x[ 5] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - $a = ($x[10] + $x[ 6]); - $x[14] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[14] + $x[10]); - $x[ 2] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[ 2] + $x[14]); - $x[ 6] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[ 6] + $x[ 2]); - $x[10] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - $a = ($x[15] + $x[11]); - $x[ 3] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[ 3] + $x[15]); - $x[ 7] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[ 7] + $x[ 3]); - $x[11] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[11] + $x[ 7]); - $x[15] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - $a = ($x[ 0] + $x[ 3]); - $x[ 1] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[ 1] + $x[ 0]); - $x[ 2] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[ 2] + $x[ 1]); - $x[ 3] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[ 3] + $x[ 2]); - $x[ 0] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - $a = ($x[ 5] + $x[ 4]); - $x[ 6] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[ 6] + $x[ 5]); - $x[ 7] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[ 7] + $x[ 6]); - $x[ 4] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[ 4] + $x[ 7]); - $x[ 5] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - $a = ($x[10] + $x[ 9]); - $x[11] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[11] + $x[10]); - $x[ 8] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[ 8] + $x[11]); - $x[ 9] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[ 9] + $x[ 8]); - $x[10] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - $a = ($x[15] + $x[14]); - $x[12] ^= ($a << 7) | ($a >> 25) & 0x7f; - $a = ($x[12] + $x[15]); - $x[13] ^= ($a << 9) | ($a >> 23) & 0x1ff; - $a = ($x[13] + $x[12]); - $x[14] ^= ($a << 13) | ($a >> 19) & 0x1fff; - $a = ($x[14] + $x[13]); - $x[15] ^= ($a << 18) | ($a >> 14) & 0x3ffff; - } - for ($i = 0; $i < 16; $i++) { - $b32[$i] = $b32[$i] + $x[$i]; - } - $result = ''; - for ($i = 0; $i < 16; $i++) { - $result .= pack("V", $b32[$i]); - } - - return $result; - } - - /** - * Salsa 20/8 core (64 bit version) - * - * @param string $b - * @return string - * @see https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01#section-2 - * @see http://cr.yp.to/salsa20.html - */ - protected static function salsa208Core64($b) - { - $b32 = array(); - for ($i = 0; $i < 16; $i++) { - list(, $b32[$i]) = unpack("V", substr($b, $i * 4, 4)); - } - - $x = $b32; - for ($i = 0; $i < 8; $i += 2) { - $a = ($x[ 0] + $x[12]) & 0xffffffff; - $x[ 4] ^= ($a << 7) | ($a >> 25); - $a = ($x[ 4] + $x[ 0]) & 0xffffffff; - $x[ 8] ^= ($a << 9) | ($a >> 23); - $a = ($x[ 8] + $x[ 4]) & 0xffffffff; - $x[12] ^= ($a << 13) | ($a >> 19); - $a = ($x[12] + $x[ 8]) & 0xffffffff; - $x[ 0] ^= ($a << 18) | ($a >> 14); - $a = ($x[ 5] + $x[ 1]) & 0xffffffff; - $x[ 9] ^= ($a << 7) | ($a >> 25); - $a = ($x[ 9] + $x[ 5]) & 0xffffffff; - $x[13] ^= ($a << 9) | ($a >> 23); - $a = ($x[13] + $x[ 9]) & 0xffffffff; - $x[ 1] ^= ($a << 13) | ($a >> 19); - $a = ($x[ 1] + $x[13]) & 0xffffffff; - $x[ 5] ^= ($a << 18) | ($a >> 14); - $a = ($x[10] + $x[ 6]) & 0xffffffff; - $x[14] ^= ($a << 7) | ($a >> 25); - $a = ($x[14] + $x[10]) & 0xffffffff; - $x[ 2] ^= ($a << 9) | ($a >> 23); - $a = ($x[ 2] + $x[14]) & 0xffffffff; - $x[ 6] ^= ($a << 13) | ($a >> 19); - $a = ($x[ 6] + $x[ 2]) & 0xffffffff; - $x[10] ^= ($a << 18) | ($a >> 14); - $a = ($x[15] + $x[11]) & 0xffffffff; - $x[ 3] ^= ($a << 7) | ($a >> 25); - $a = ($x[ 3] + $x[15]) & 0xffffffff; - $x[ 7] ^= ($a << 9) | ($a >> 23); - $a = ($x[ 7] + $x[ 3]) & 0xffffffff; - $x[11] ^= ($a << 13) | ($a >> 19); - $a = ($x[11] + $x[ 7]) & 0xffffffff; - $x[15] ^= ($a << 18) | ($a >> 14); - $a = ($x[ 0] + $x[ 3]) & 0xffffffff; - $x[ 1] ^= ($a << 7) | ($a >> 25); - $a = ($x[ 1] + $x[ 0]) & 0xffffffff; - $x[ 2] ^= ($a << 9) | ($a >> 23); - $a = ($x[ 2] + $x[ 1]) & 0xffffffff; - $x[ 3] ^= ($a << 13) | ($a >> 19); - $a = ($x[ 3] + $x[ 2]) & 0xffffffff; - $x[ 0] ^= ($a << 18) | ($a >> 14); - $a = ($x[ 5] + $x[ 4]) & 0xffffffff; - $x[ 6] ^= ($a << 7) | ($a >> 25); - $a = ($x[ 6] + $x[ 5]) & 0xffffffff; - $x[ 7] ^= ($a << 9) | ($a >> 23); - $a = ($x[ 7] + $x[ 6]) & 0xffffffff; - $x[ 4] ^= ($a << 13) | ($a >> 19); - $a = ($x[ 4] + $x[ 7]) & 0xffffffff; - $x[ 5] ^= ($a << 18) | ($a >> 14); - $a = ($x[10] + $x[ 9]) & 0xffffffff; - $x[11] ^= ($a << 7) | ($a >> 25); - $a = ($x[11] + $x[10]) & 0xffffffff; - $x[ 8] ^= ($a << 9) | ($a >> 23); - $a = ($x[ 8] + $x[11]) & 0xffffffff; - $x[ 9] ^= ($a << 13) | ($a >> 19); - $a = ($x[ 9] + $x[ 8]) & 0xffffffff; - $x[10] ^= ($a << 18) | ($a >> 14); - $a = ($x[15] + $x[14]) & 0xffffffff; - $x[12] ^= ($a << 7) | ($a >> 25); - $a = ($x[12] + $x[15]) & 0xffffffff; - $x[13] ^= ($a << 9) | ($a >> 23); - $a = ($x[13] + $x[12]) & 0xffffffff; - $x[14] ^= ($a << 13) | ($a >> 19); - $a = ($x[14] + $x[13]) & 0xffffffff; - $x[15] ^= ($a << 18) | ($a >> 14); - } - for ($i = 0; $i < 16; $i++) { - $b32[$i] = ($b32[$i] + $x[$i]) & 0xffffffff; - } - $result = ''; - for ($i = 0; $i < 16; $i++) { - $result .= pack("V", $b32[$i]); - } - - return $result; - } - - /** - * Integerify - * - * Integerify (B[0] ... B[2 * r - 1]) is defined as the result - * of interpreting B[2 * r - 1] as a little-endian integer. - * Each block B is a string of 64 bytes. - * - * @param string $b - * @return int - * @see https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01#section-4 - */ - protected static function integerify($b) - { - $v = 'v'; - if (PHP_INT_SIZE === 8) { - $v = 'V'; - } - list(,$n) = unpack($v, substr($b, -64)); - return $n; - } - - /** - * Convert hex string in a binary string - * - * @param string $hex - * @return string - */ - protected static function hex2bin($hex) - { - if (PHP_VERSION_ID >= 50400) { - return hex2bin($hex); - } - $len = strlen($hex); - $result = ''; - for ($i = 0; $i < $len; $i+=2) { - $result .= chr(hexdec($hex[$i] . $hex[$i+1])); - } - return $result; - } -} diff --git a/library/Zend/Crypt/Password/Apache.php b/library/Zend/Crypt/Password/Apache.php deleted file mode 100755 index d9359827a..000000000 --- a/library/Zend/Crypt/Password/Apache.php +++ /dev/null @@ -1,301 +0,0 @@ - $value) { - switch (strtolower($key)) { - case 'format': - $this->setFormat($value); - break; - case 'authname': - $this->setAuthName($value); - break; - case 'username': - $this->setUserName($value); - break; - } - } - } - - /** - * Generate the hash of a password - * - * @param string $password - * @throws Exception\RuntimeException - * @return string - */ - public function create($password) - { - if (empty($this->format)) { - throw new Exception\RuntimeException( - 'You must specify a password format' - ); - } - switch ($this->format) { - case 'crypt': - $hash = crypt($password, Rand::getString(2, self::ALPHA64)); - break; - case 'sha1': - $hash = '{SHA}' . base64_encode(sha1($password, true)); - break; - case 'md5': - $hash = $this->apr1Md5($password); - break; - case 'digest': - if (empty($this->userName) || empty($this->authName)) { - throw new Exception\RuntimeException( - 'You must specify UserName and AuthName (realm) to generate the digest' - ); - } - $hash = md5($this->userName . ':' . $this->authName . ':' .$password); - break; - } - - return $hash; - } - - /** - * Verify if a password is correct against a hash value - * - * @param string $password - * @param string $hash - * @return bool - */ - public function verify($password, $hash) - { - if (substr($hash, 0, 5) === '{SHA}') { - $hash2 = '{SHA}' . base64_encode(sha1($password, true)); - return ($hash === $hash2); - } - if (substr($hash, 0, 6) === '$apr1$') { - $token = explode('$', $hash); - if (empty($token[2])) { - throw new Exception\InvalidArgumentException( - 'The APR1 password format is not valid' - ); - } - $hash2 = $this->apr1Md5($password, $token[2]); - return ($hash === $hash2); - } - if (strlen($hash) > 13) { // digest - if (empty($this->userName) || empty($this->authName)) { - throw new Exception\RuntimeException( - 'You must specify UserName and AuthName (realm) to verify the digest' - ); - } - $hash2 = md5($this->userName . ':' . $this->authName . ':' .$password); - return ($hash === $hash2); - } - return (crypt($password, $hash) === $hash); - } - - /** - * Set the format of the password - * - * @param string $format - * @throws Exception\InvalidArgumentException - * @return Apache - */ - public function setFormat($format) - { - $format = strtolower($format); - if (!in_array($format, $this->supportedFormat)) { - throw new Exception\InvalidArgumentException(sprintf( - 'The format %s specified is not valid. The supported formats are: %s', - $format, - implode(',', $this->supportedFormat) - )); - } - $this->format = $format; - - return $this; - } - - /** - * Get the format of the password - * - * @return string - */ - public function getFormat() - { - return $this->format; - } - - /** - * Set the AuthName (for digest authentication) - * - * @param string $name - * @return Apache - */ - public function setAuthName($name) - { - $this->authName = $name; - - return $this; - } - - /** - * Get the AuthName (for digest authentication) - * - * @return string - */ - public function getAuthName() - { - return $this->authName; - } - - /** - * Set the username - * - * @param string $name - * @return Apache - */ - public function setUserName($name) - { - $this->userName = $name; - - return $this; - } - - /** - * Get the username - * - * @return string - */ - public function getUserName() - { - return $this->userName; - } - - /** - * Convert a binary string using the alphabet "./0-9A-Za-z" - * - * @param string $value - * @return string - */ - protected function toAlphabet64($value) - { - return strtr(strrev(substr(base64_encode($value), 2)), self::BASE64, self::ALPHA64); - } - - /** - * APR1 MD5 algorithm - * - * @param string $password - * @param null|string $salt - * @return string - */ - protected function apr1Md5($password, $salt = null) - { - if (null === $salt) { - $salt = Rand::getString(8, self::ALPHA64); - } else { - if (strlen($salt) !== 8) { - throw new Exception\InvalidArgumentException( - 'The salt value for APR1 algorithm must be 8 characters long' - ); - } - for ($i = 0; $i < 8; $i++) { - if (strpos(self::ALPHA64, $salt[$i]) === false) { - throw new Exception\InvalidArgumentException( - 'The salt value must be a string in the alphabet "./0-9A-Za-z"' - ); - } - } - } - $len = strlen($password); - $text = $password . '$apr1$' . $salt; - $bin = pack("H32", md5($password . $salt . $password)); - for ($i = $len; $i > 0; $i -= 16) { - $text .= substr($bin, 0, min(16, $i)); - } - for ($i = $len; $i > 0; $i >>= 1) { - $text .= ($i & 1) ? chr(0) : $password[0]; - } - $bin = pack("H32", md5($text)); - for ($i = 0; $i < 1000; $i++) { - $new = ($i & 1) ? $password : $bin; - if ($i % 3) { - $new .= $salt; - } - if ($i % 7) { - $new .= $password; - } - $new .= ($i & 1) ? $bin : $password; - $bin = pack("H32", md5($new)); - } - $tmp = ''; - for ($i = 0; $i < 5; $i++) { - $k = $i + 6; - $j = $i + 12; - if ($j == 16) { - $j = 5; - } - $tmp = $bin[$i] . $bin[$k] . $bin[$j] . $tmp; - } - $tmp = chr(0) . chr(0) . $bin[11] . $tmp; - - return '$apr1$' . $salt . '$' . $this->toAlphabet64($tmp); - } -} diff --git a/library/Zend/Crypt/Password/Bcrypt.php b/library/Zend/Crypt/Password/Bcrypt.php deleted file mode 100755 index b489ddd48..000000000 --- a/library/Zend/Crypt/Password/Bcrypt.php +++ /dev/null @@ -1,207 +0,0 @@ - $value) { - switch (strtolower($key)) { - case 'salt': - $this->setSalt($value); - break; - case 'cost': - $this->setCost($value); - break; - } - } - } - } - - /** - * Bcrypt - * - * @param string $password - * @throws Exception\RuntimeException - * @return string - */ - public function create($password) - { - if (empty($this->salt)) { - $salt = Rand::getBytes(self::MIN_SALT_SIZE); - } else { - $salt = $this->salt; - } - $salt64 = substr(str_replace('+', '.', base64_encode($salt)), 0, 22); - /** - * Check for security flaw in the bcrypt implementation used by crypt() - * @see http://php.net/security/crypt_blowfish.php - */ - if ((PHP_VERSION_ID >= 50307) && !$this->backwardCompatibility) { - $prefix = '$2y$'; - } else { - $prefix = '$2a$'; - // check if the password contains 8-bit character - if (preg_match('/[\x80-\xFF]/', $password)) { - throw new Exception\RuntimeException( - 'The bcrypt implementation used by PHP can contain a security flaw ' . - 'using password with 8-bit character. ' . - 'We suggest to upgrade to PHP 5.3.7+ or use passwords with only 7-bit characters' - ); - } - } - $hash = crypt($password, $prefix . $this->cost . '$' . $salt64); - if (strlen($hash) < 13) { - throw new Exception\RuntimeException('Error during the bcrypt generation'); - } - return $hash; - } - - /** - * Verify if a password is correct against a hash value - * - * @param string $password - * @param string $hash - * @throws Exception\RuntimeException when the hash is unable to be processed - * @return bool - */ - public function verify($password, $hash) - { - $result = crypt($password, $hash); - if ($result === $hash) { - return true; - } - return false; - } - - /** - * Set the cost parameter - * - * @param int|string $cost - * @throws Exception\InvalidArgumentException - * @return Bcrypt - */ - public function setCost($cost) - { - if (!empty($cost)) { - $cost = (int) $cost; - if ($cost < 4 || $cost > 31) { - throw new Exception\InvalidArgumentException( - 'The cost parameter of bcrypt must be in range 04-31' - ); - } - $this->cost = sprintf('%1$02d', $cost); - } - return $this; - } - - /** - * Get the cost parameter - * - * @return string - */ - public function getCost() - { - return $this->cost; - } - - /** - * Set the salt value - * - * @param string $salt - * @throws Exception\InvalidArgumentException - * @return Bcrypt - */ - public function setSalt($salt) - { - if (strlen($salt) < self::MIN_SALT_SIZE) { - throw new Exception\InvalidArgumentException( - 'The length of the salt must be at least ' . self::MIN_SALT_SIZE . ' bytes' - ); - } - $this->salt = $salt; - return $this; - } - - /** - * Get the salt value - * - * @return string - */ - public function getSalt() - { - return $this->salt; - } - - /** - * Set the backward compatibility $2a$ instead of $2y$ for PHP 5.3.7+ - * - * @param bool $value - * @return Bcrypt - */ - public function setBackwardCompatibility($value) - { - $this->backwardCompatibility = (bool) $value; - return $this; - } - - /** - * Get the backward compatibility - * - * @return bool - */ - public function getBackwardCompatibility() - { - return $this->backwardCompatibility; - } -} diff --git a/library/Zend/Crypt/Password/Exception/ExceptionInterface.php b/library/Zend/Crypt/Password/Exception/ExceptionInterface.php deleted file mode 100755 index 5c65fb781..000000000 --- a/library/Zend/Crypt/Password/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -setPrime($prime); - $this->setGenerator($generator); - if ($privateKey !== null) { - $this->setPrivateKey($privateKey, $privateKeyFormat); - } - - // set up BigInteger adapter - $this->math = Math\BigInteger\BigInteger::factory(); - } - - /** - * Set whether to use openssl extension - * - * @static - * @param bool $flag - */ - public static function useOpensslExtension($flag = true) - { - static::$useOpenssl = (bool) $flag; - } - - /** - * Generate own public key. If a private number has not already been set, - * one will be generated at this stage. - * - * @return DiffieHellman - * @throws \Zend\Crypt\Exception\RuntimeException - */ - public function generateKeys() - { - if (function_exists('openssl_dh_compute_key') && static::$useOpenssl !== false) { - $details = array( - 'p' => $this->convert($this->getPrime(), self::FORMAT_NUMBER, self::FORMAT_BINARY), - 'g' => $this->convert($this->getGenerator(), self::FORMAT_NUMBER, self::FORMAT_BINARY) - ); - if ($this->hasPrivateKey()) { - $details['priv_key'] = $this->convert( - $this->privateKey, - self::FORMAT_NUMBER, - self::FORMAT_BINARY - ); - $opensslKeyResource = openssl_pkey_new(array('dh' => $details)); - } else { - $opensslKeyResource = openssl_pkey_new(array( - 'dh' => $details, - 'private_key_bits' => self::DEFAULT_KEY_SIZE, - 'private_key_type' => OPENSSL_KEYTYPE_DH - )); - } - - if (false === $opensslKeyResource) { - throw new Exception\RuntimeException( - 'Can not generate new key; openssl ' . openssl_error_string() - ); - } - - $data = openssl_pkey_get_details($opensslKeyResource); - - $this->setPrivateKey($data['dh']['priv_key'], self::FORMAT_BINARY); - $this->setPublicKey($data['dh']['pub_key'], self::FORMAT_BINARY); - - $this->opensslKeyResource = $opensslKeyResource; - } else { - // Private key is lazy generated in the absence of ext/openssl - $publicKey = $this->math->powmod($this->getGenerator(), $this->getPrivateKey(), $this->getPrime()); - $this->setPublicKey($publicKey); - } - - return $this; - } - - /** - * Setter for the value of the public number - * - * @param string $number - * @param string $format - * @return DiffieHellman - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function setPublicKey($number, $format = self::FORMAT_NUMBER) - { - $number = $this->convert($number, $format, self::FORMAT_NUMBER); - if (!preg_match('/^\d+$/', $number)) { - throw new Exception\InvalidArgumentException('Invalid parameter; not a positive natural number'); - } - $this->publicKey = (string) $number; - - return $this; - } - - /** - * Returns own public key for communication to the second party to this transaction - * - * @param string $format - * @return string - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function getPublicKey($format = self::FORMAT_NUMBER) - { - if ($this->publicKey === null) { - throw new Exception\InvalidArgumentException( - 'A public key has not yet been generated using a prior call to generateKeys()' - ); - } - - return $this->convert($this->publicKey, self::FORMAT_NUMBER, $format); - } - - /** - * Compute the shared secret key based on the public key received from the - * the second party to this transaction. This should agree to the secret - * key the second party computes on our own public key. - * Once in agreement, the key is known to only to both parties. - * By default, the function expects the public key to be in binary form - * which is the typical format when being transmitted. - * - * If you need the binary form of the shared secret key, call - * getSharedSecretKey() with the optional parameter for Binary output. - * - * @param string $publicKey - * @param string $publicKeyFormat - * @param string $secretKeyFormat - * @return string - * @throws \Zend\Crypt\Exception\InvalidArgumentException - * @throws \Zend\Crypt\Exception\RuntimeException - */ - public function computeSecretKey( - $publicKey, - $publicKeyFormat = self::FORMAT_NUMBER, - $secretKeyFormat = self::FORMAT_NUMBER - ) { - if (function_exists('openssl_dh_compute_key') && static::$useOpenssl !== false) { - $publicKey = $this->convert($publicKey, $publicKeyFormat, self::FORMAT_BINARY); - $secretKey = openssl_dh_compute_key($publicKey, $this->opensslKeyResource); - if (false === $secretKey) { - throw new Exception\RuntimeException( - 'Can not compute key; openssl ' . openssl_error_string() - ); - } - $this->secretKey = $this->convert($secretKey, self::FORMAT_BINARY, self::FORMAT_NUMBER); - } else { - $publicKey = $this->convert($publicKey, $publicKeyFormat, self::FORMAT_NUMBER); - if (!preg_match('/^\d+$/', $publicKey)) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter; not a positive natural number' - ); - } - $this->secretKey = $this->math->powmod($publicKey, $this->getPrivateKey(), $this->getPrime()); - } - - return $this->getSharedSecretKey($secretKeyFormat); - } - - /** - * Return the computed shared secret key from the DiffieHellman transaction - * - * @param string $format - * @return string - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function getSharedSecretKey($format = self::FORMAT_NUMBER) - { - if (!isset($this->secretKey)) { - throw new Exception\InvalidArgumentException( - 'A secret key has not yet been computed; call computeSecretKey() first' - ); - } - - return $this->convert($this->secretKey, self::FORMAT_NUMBER, $format); - } - - /** - * Setter for the value of the prime number - * - * @param string $number - * @return DiffieHellman - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function setPrime($number) - { - if (!preg_match('/^\d+$/', $number) || $number < 11) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter; not a positive natural number or too small: ' . - 'should be a large natural number prime' - ); - } - $this->prime = (string) $number; - - return $this; - } - - /** - * Getter for the value of the prime number - * - * @param string $format - * @return string - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function getPrime($format = self::FORMAT_NUMBER) - { - if (!isset($this->prime)) { - throw new Exception\InvalidArgumentException('No prime number has been set'); - } - - return $this->convert($this->prime, self::FORMAT_NUMBER, $format); - } - - /** - * Setter for the value of the generator number - * - * @param string $number - * @return DiffieHellman - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function setGenerator($number) - { - if (!preg_match('/^\d+$/', $number) || $number < 2) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter; not a positive natural number greater than 1' - ); - } - $this->generator = (string) $number; - - return $this; - } - - /** - * Getter for the value of the generator number - * - * @param string $format - * @return string - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function getGenerator($format = self::FORMAT_NUMBER) - { - if (!isset($this->generator)) { - throw new Exception\InvalidArgumentException('No generator number has been set'); - } - - return $this->convert($this->generator, self::FORMAT_NUMBER, $format); - } - - /** - * Setter for the value of the private number - * - * @param string $number - * @param string $format - * @return DiffieHellman - * @throws \Zend\Crypt\Exception\InvalidArgumentException - */ - public function setPrivateKey($number, $format = self::FORMAT_NUMBER) - { - $number = $this->convert($number, $format, self::FORMAT_NUMBER); - if (!preg_match('/^\d+$/', $number)) { - throw new Exception\InvalidArgumentException('Invalid parameter; not a positive natural number'); - } - $this->privateKey = (string) $number; - - return $this; - } - - /** - * Getter for the value of the private number - * - * @param string $format - * @return string - */ - public function getPrivateKey($format = self::FORMAT_NUMBER) - { - if (!$this->hasPrivateKey()) { - $this->setPrivateKey($this->generatePrivateKey(), self::FORMAT_BINARY); - } - - return $this->convert($this->privateKey, self::FORMAT_NUMBER, $format); - } - - /** - * Check whether a private key currently exists. - * - * @return bool - */ - public function hasPrivateKey() - { - return isset($this->privateKey); - } - - /** - * Convert number between formats - * - * @param string $number - * @param string $inputFormat - * @param string $outputFormat - * @return string - */ - protected function convert($number, $inputFormat = self::FORMAT_NUMBER, $outputFormat = self::FORMAT_BINARY) - { - if ($inputFormat == $outputFormat) { - return $number; - } - - // convert to number - switch ($inputFormat) { - case self::FORMAT_BINARY: - case self::FORMAT_BTWOC: - $number = $this->math->binToInt($number); - break; - case self::FORMAT_NUMBER: - default: - // do nothing - break; - } - - // convert to output format - switch ($outputFormat) { - case self::FORMAT_BINARY: - return $this->math->intToBin($number); - break; - case self::FORMAT_BTWOC: - return $this->math->intToBin($number, true); - break; - case self::FORMAT_NUMBER: - default: - return $number; - break; - } - } - - /** - * In the event a private number/key has not been set by the user, - * or generated by ext/openssl, a best attempt will be made to - * generate a random key. Having a random number generator installed - * on linux/bsd is highly recommended! The alternative is not recommended - * for production unless without any other option. - * - * @return string - */ - protected function generatePrivateKey() - { - return Math\Rand::getBytes(strlen($this->getPrime()), true); - } -} diff --git a/library/Zend/Crypt/PublicKey/Rsa.php b/library/Zend/Crypt/PublicKey/Rsa.php deleted file mode 100755 index 44faaa7d7..000000000 --- a/library/Zend/Crypt/PublicKey/Rsa.php +++ /dev/null @@ -1,333 +0,0 @@ -setPrivateKey($privateKey); - } - if ($publicKey instanceof Rsa\PublicKey) { - $options->setPublicKey($publicKey); - } - - return new Rsa($options); - } - - /** - * Class constructor - * - * @param RsaOptions $options - * @throws Rsa\Exception\RuntimeException - */ - public function __construct(RsaOptions $options = null) - { - if (!extension_loaded('openssl')) { - throw new Exception\RuntimeException( - 'Zend\Crypt\PublicKey\Rsa requires openssl extension to be loaded' - ); - } - - if ($options === null) { - $this->options = new RsaOptions(); - } else { - $this->options = $options; - } - } - - /** - * Set options - * - * @param RsaOptions $options - * @return Rsa - */ - public function setOptions(RsaOptions $options) - { - $this->options = $options; - return $this; - } - - /** - * Get options - * - * @return RsaOptions - */ - public function getOptions() - { - return $this->options; - } - - /** - * Return last openssl error(s) - * - * @return string - */ - public function getOpensslErrorString() - { - $message = ''; - while (false !== ($error = openssl_error_string())) { - $message .= $error . "\n"; - } - return trim($message); - } - - /** - * Sign with private key - * - * @param string $data - * @param Rsa\PrivateKey $privateKey - * @return string - * @throws Rsa\Exception\RuntimeException - */ - public function sign($data, Rsa\PrivateKey $privateKey = null) - { - $signature = ''; - if (null === $privateKey) { - $privateKey = $this->options->getPrivateKey(); - } - - $result = openssl_sign( - $data, - $signature, - $privateKey->getOpensslKeyResource(), - $this->options->getOpensslSignatureAlgorithm() - ); - if (false === $result) { - throw new Exception\RuntimeException( - 'Can not generate signature; openssl ' . $this->getOpensslErrorString() - ); - } - - if ($this->options->getBinaryOutput()) { - return $signature; - } - - return base64_encode($signature); - } - - /** - * Verify signature with public key - * - * $signature can be encoded in base64 or not. $mode sets how the input must be processed: - * - MODE_AUTO: Check if the $signature is encoded in base64. Not recommended for performance. - * - MODE_BASE64: Decode $signature using base64 algorithm. - * - MODE_RAW: $signature is not encoded. - * - * @param string $data - * @param string $signature - * @param null|Rsa\PublicKey $publicKey - * @param int $mode Input encoding - * @return bool - * @throws Rsa\Exception\RuntimeException - * @see Rsa::MODE_AUTO - * @see Rsa::MODE_BASE64 - * @see Rsa::MODE_RAW - */ - public function verify( - $data, - $signature, - Rsa\PublicKey $publicKey = null, - $mode = self::MODE_AUTO - ) { - if (null === $publicKey) { - $publicKey = $this->options->getPublicKey(); - } - - switch ($mode) { - case self::MODE_AUTO: - // check if data is encoded in Base64 - $output = base64_decode($signature, true); - if ((false !== $output) && ($signature === base64_encode($output))) { - $signature = $output; - } - break; - case self::MODE_BASE64: - $signature = base64_decode($signature); - break; - case self::MODE_RAW: - default: - break; - } - - $result = openssl_verify( - $data, - $signature, - $publicKey->getOpensslKeyResource(), - $this->options->getOpensslSignatureAlgorithm() - ); - if (-1 === $result) { - throw new Exception\RuntimeException( - 'Can not verify signature; openssl ' . $this->getOpensslErrorString() - ); - } - - return ($result === 1); - } - - /** - * Encrypt with private/public key - * - * @param string $data - * @param Rsa\AbstractKey $key - * @return string - * @throws Rsa\Exception\InvalidArgumentException - */ - public function encrypt($data, Rsa\AbstractKey $key = null) - { - if (null === $key) { - $key = $this->options->getPublicKey(); - } - - if (null === $key) { - throw new Exception\InvalidArgumentException('No key specified for the decryption'); - } - - $encrypted = $key->encrypt($data); - - if ($this->options->getBinaryOutput()) { - return $encrypted; - } - - return base64_encode($encrypted); - } - - /** - * Decrypt with private/public key - * - * $data can be encoded in base64 or not. $mode sets how the input must be processed: - * - MODE_AUTO: Check if the $signature is encoded in base64. Not recommended for performance. - * - MODE_BASE64: Decode $data using base64 algorithm. - * - MODE_RAW: $data is not encoded. - * - * @param string $data - * @param Rsa\AbstractKey $key - * @param int $mode Input encoding - * @return string - * @throws Rsa\Exception\InvalidArgumentException - * @see Rsa::MODE_AUTO - * @see Rsa::MODE_BASE64 - * @see Rsa::MODE_RAW - */ - public function decrypt( - $data, - Rsa\AbstractKey $key = null, - $mode = self::MODE_AUTO - ) { - if (null === $key) { - $key = $this->options->getPrivateKey(); - } - - if (null === $key) { - throw new Exception\InvalidArgumentException('No key specified for the decryption'); - } - - switch ($mode) { - case self::MODE_AUTO: - // check if data is encoded in Base64 - $output = base64_decode($data, true); - if ((false !== $output) && ($data === base64_encode($output))) { - $data = $output; - } - break; - case self::MODE_BASE64: - $data = base64_decode($data); - break; - case self::MODE_RAW: - default: - break; - } - - return $key->decrypt($data); - } - - /** - * Generate new private/public key pair - * @see RsaOptions::generateKeys() - * - * @param array $opensslConfig - * @return Rsa - * @throws Rsa\Exception\RuntimeException - */ - public function generateKeys(array $opensslConfig = array()) - { - $this->options->generateKeys($opensslConfig); - return $this; - } -} diff --git a/library/Zend/Crypt/PublicKey/Rsa/AbstractKey.php b/library/Zend/Crypt/PublicKey/Rsa/AbstractKey.php deleted file mode 100755 index 5051c7716..000000000 --- a/library/Zend/Crypt/PublicKey/Rsa/AbstractKey.php +++ /dev/null @@ -1,90 +0,0 @@ -details['bits']; - } - - /** - * Retrieve openssl key resource - * - * @return resource - */ - public function getOpensslKeyResource() - { - return $this->opensslKeyResource; - } - - /** - * Encrypt using this key - * - * @abstract - * @param string $data - * @return string - */ - abstract public function encrypt($data); - - /** - * Decrypt using this key - * - * @abstract - * @param string $data - * @return string - */ - abstract public function decrypt($data); - - /** - * Get string representation of this key - * - * @abstract - * @return string - */ - abstract public function toString(); - - /** - * @return string - */ - public function __toString() - { - return $this->toString(); - } -} diff --git a/library/Zend/Crypt/PublicKey/Rsa/Exception/ExceptionInterface.php b/library/Zend/Crypt/PublicKey/Rsa/Exception/ExceptionInterface.php deleted file mode 100755 index ccaad1b39..000000000 --- a/library/Zend/Crypt/PublicKey/Rsa/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -pemString = $pemString; - $this->opensslKeyResource = $result; - $this->details = openssl_pkey_get_details($this->opensslKeyResource); - } - - /** - * Get the public key - * - * @return PublicKey - */ - public function getPublicKey() - { - if ($this->publicKey === null) { - $this->publicKey = new PublicKey($this->details['key']); - } - - return $this->publicKey; - } - - /** - * Encrypt using this key - * - * @param string $data - * @return string - * @throws Exception\RuntimeException - * @throws Exception\InvalidArgumentException - */ - public function encrypt($data) - { - if (empty($data)) { - throw new Exception\InvalidArgumentException('The data to encrypt cannot be empty'); - } - - $encrypted = ''; - $result = openssl_private_encrypt($data, $encrypted, $this->getOpensslKeyResource()); - if (false === $result) { - throw new Exception\RuntimeException( - 'Can not encrypt; openssl ' . openssl_error_string() - ); - } - - return $encrypted; - } - - /** - * Decrypt using this key - * - * @param string $data - * @return string - * @throws Exception\RuntimeException - * @throws Exception\InvalidArgumentException - */ - public function decrypt($data) - { - if (!is_string($data)) { - throw new Exception\InvalidArgumentException('The data to decrypt must be a string'); - } - if ('' === $data) { - throw new Exception\InvalidArgumentException('The data to decrypt cannot be empty'); - } - - $decrypted = ''; - $result = openssl_private_decrypt($data, $decrypted, $this->getOpensslKeyResource()); - if (false === $result) { - throw new Exception\RuntimeException( - 'Can not decrypt; openssl ' . openssl_error_string() - ); - } - - return $decrypted; - } - - /** - * @return string - */ - public function toString() - { - return $this->pemString; - } -} diff --git a/library/Zend/Crypt/PublicKey/Rsa/PublicKey.php b/library/Zend/Crypt/PublicKey/Rsa/PublicKey.php deleted file mode 100755 index d73078d28..000000000 --- a/library/Zend/Crypt/PublicKey/Rsa/PublicKey.php +++ /dev/null @@ -1,146 +0,0 @@ -certificateString = $pemStringOrCertificate; - } else { - $this->pemString = $pemStringOrCertificate; - } - - $this->opensslKeyResource = $result; - $this->details = openssl_pkey_get_details($this->opensslKeyResource); - } - - /** - * Encrypt using this key - * - * @param string $data - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - * @return string - */ - public function encrypt($data) - { - if (empty($data)) { - throw new Exception\InvalidArgumentException('The data to encrypt cannot be empty'); - } - - $encrypted = ''; - $result = openssl_public_encrypt($data, $encrypted, $this->getOpensslKeyResource()); - if (false === $result) { - throw new Exception\RuntimeException( - 'Can not encrypt; openssl ' . openssl_error_string() - ); - } - - return $encrypted; - } - - /** - * Decrypt using this key - * - * @param string $data - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - * @return string - */ - public function decrypt($data) - { - if (!is_string($data)) { - throw new Exception\InvalidArgumentException('The data to decrypt must be a string'); - } - if ('' === $data) { - throw new Exception\InvalidArgumentException('The data to decrypt cannot be empty'); - } - - $decrypted = ''; - $result = openssl_public_decrypt($data, $decrypted, $this->getOpensslKeyResource()); - if (false === $result) { - throw new Exception\RuntimeException( - 'Can not decrypt; openssl ' . openssl_error_string() - ); - } - - return $decrypted; - } - - /** - * Get certificate string - * - * @return string - */ - public function getCertificate() - { - return $this->certificateString; - } - - /** - * To string - * - * @return string - * @throws Exception\RuntimeException - */ - public function toString() - { - if (!empty($this->certificateString)) { - return $this->certificateString; - } elseif (!empty($this->pemString)) { - return $this->pemString; - } - throw new Exception\RuntimeException('No public key string representation is available'); - } -} diff --git a/library/Zend/Crypt/PublicKey/RsaOptions.php b/library/Zend/Crypt/PublicKey/RsaOptions.php deleted file mode 100755 index 54cd7c55b..000000000 --- a/library/Zend/Crypt/PublicKey/RsaOptions.php +++ /dev/null @@ -1,224 +0,0 @@ -privateKey = $key; - $this->publicKey = $this->privateKey->getPublicKey(); - return $this; - } - - /** - * Get private key - * - * @return null|Rsa\PrivateKey - */ - public function getPrivateKey() - { - return $this->privateKey; - } - - /** - * Set public key - * - * @param Rsa\PublicKey $key - * @return RsaOptions - */ - public function setPublicKey(Rsa\PublicKey $key) - { - $this->publicKey = $key; - return $this; - } - - /** - * Get public key - * - * @return null|Rsa\PublicKey - */ - public function getPublicKey() - { - return $this->publicKey; - } - - /** - * Set pass phrase - * - * @param string $phrase - * @return RsaOptions - */ - public function setPassPhrase($phrase) - { - $this->passPhrase = (string) $phrase; - return $this; - } - - /** - * Get pass phrase - * - * @return string - */ - public function getPassPhrase() - { - return $this->passPhrase; - } - - /** - * Set hash algorithm - * - * @param string $hash - * @return RsaOptions - * @throws Rsa\Exception\RuntimeException - * @throws Rsa\Exception\InvalidArgumentException - */ - public function setHashAlgorithm($hash) - { - $hashUpper = strtoupper($hash); - if (!defined('OPENSSL_ALGO_' . $hashUpper)) { - throw new Exception\InvalidArgumentException( - "Hash algorithm '{$hash}' is not supported" - ); - } - - $this->hashAlgorithm = strtolower($hash); - $this->opensslSignatureAlgorithm = constant('OPENSSL_ALGO_' . $hashUpper); - return $this; - } - - /** - * Get hash algorithm - * - * @return string - */ - public function getHashAlgorithm() - { - return $this->hashAlgorithm; - } - - public function getOpensslSignatureAlgorithm() - { - if (!isset($this->opensslSignatureAlgorithm)) { - $this->opensslSignatureAlgorithm = constant('OPENSSL_ALGO_' . strtoupper($this->hashAlgorithm)); - } - return $this->opensslSignatureAlgorithm; - } - - /** - * Enable/disable the binary output - * - * @param bool $value - * @return RsaOptions - */ - public function setBinaryOutput($value) - { - $this->binaryOutput = (bool) $value; - return $this; - } - - /** - * Get the value of binary output - * - * @return bool - */ - public function getBinaryOutput() - { - return $this->binaryOutput; - } - - /** - * Generate new private/public key pair - * - * @param array $opensslConfig - * @return RsaOptions - * @throws Rsa\Exception\RuntimeException - */ - public function generateKeys(array $opensslConfig = array()) - { - $opensslConfig = array_replace( - array( - 'private_key_type' => OPENSSL_KEYTYPE_RSA, - 'private_key_bits' => Rsa\PrivateKey::DEFAULT_KEY_SIZE, - 'digest_alg' => $this->getHashAlgorithm() - ), - $opensslConfig - ); - - // generate - $resource = openssl_pkey_new($opensslConfig); - if (false === $resource) { - throw new Exception\RuntimeException( - 'Can not generate keys; openssl ' . openssl_error_string() - ); - } - - // export key - $passPhrase = $this->getPassPhrase(); - $result = openssl_pkey_export($resource, $private, $passPhrase, $opensslConfig); - if (false === $result) { - throw new Exception\RuntimeException( - 'Can not export key; openssl ' . openssl_error_string() - ); - } - - $details = openssl_pkey_get_details($resource); - $this->privateKey = new Rsa\PrivateKey($private, $passPhrase); - $this->publicKey = new Rsa\PublicKey($details['key']); - - return $this; - } -} diff --git a/library/Zend/Crypt/README.md b/library/Zend/Crypt/README.md deleted file mode 100755 index 1e2e5af91..000000000 --- a/library/Zend/Crypt/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Crypt Component from ZF2 -======================== - -This is the Crypt component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Crypt/Symmetric/Exception/ExceptionInterface.php b/library/Zend/Crypt/Symmetric/Exception/ExceptionInterface.php deleted file mode 100755 index 7e62c51b2..000000000 --- a/library/Zend/Crypt/Symmetric/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ - 'rijndael-128', - 'blowfish' => 'blowfish', - 'des' => 'des', - '3des' => 'tripledes', - 'tripledes' => 'tripledes', - 'cast-128' => 'cast-128', - 'cast-256' => 'cast-256', - 'rijndael-128' => 'rijndael-128', - 'rijndael-192' => 'rijndael-192', - 'rijndael-256' => 'rijndael-256', - 'saferplus' => 'saferplus', - 'serpent' => 'serpent', - 'twofish' => 'twofish' - ); - - /** - * Supported encryption modes - * - * @var array - */ - protected $supportedModes = array( - 'cbc' => 'cbc', - 'cfb' => 'cfb', - 'ctr' => 'ctr', - 'ofb' => 'ofb', - 'nofb' => 'nofb', - 'ncfb' => 'ncfb' - ); - - /** - * Constructor - * - * @param array|Traversable $options - * @throws Exception\RuntimeException - * @throws Exception\InvalidArgumentException - */ - public function __construct($options = array()) - { - if (!extension_loaded('mcrypt')) { - throw new Exception\RuntimeException( - 'You cannot use ' . __CLASS__ . ' without the Mcrypt extension' - ); - } - if (!empty($options)) { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (!is_array($options)) { - throw new Exception\InvalidArgumentException( - 'The options parameter must be an array, a Zend\Config\Config object or a Traversable' - ); - } - foreach ($options as $key => $value) { - switch (strtolower($key)) { - case 'algo': - case 'algorithm': - $this->setAlgorithm($value); - break; - case 'mode': - $this->setMode($value); - break; - case 'key': - $this->setKey($value); - break; - case 'iv': - case 'salt': - $this->setSalt($value); - break; - case 'padding': - $plugins = static::getPaddingPluginManager(); - $padding = $plugins->get($value); - $this->padding = $padding; - break; - } - } - } - $this->setDefaultOptions($options); - } - - /** - * Set default options - * - * @param array $options - * @return void - */ - protected function setDefaultOptions($options = array()) - { - if (!isset($options['padding'])) { - $plugins = static::getPaddingPluginManager(); - $padding = $plugins->get(self::DEFAULT_PADDING); - $this->padding = $padding; - } - } - - /** - * Returns the padding plugin manager. If it doesn't exist it's created. - * - * @return PaddingPluginManager - */ - public static function getPaddingPluginManager() - { - if (static::$paddingPlugins === null) { - self::setPaddingPluginManager(new PaddingPluginManager()); - } - - return static::$paddingPlugins; - } - - /** - * Set the padding plugin manager - * - * @param string|PaddingPluginManager $plugins - * @throws Exception\InvalidArgumentException - * @return void - */ - public static function setPaddingPluginManager($plugins) - { - if (is_string($plugins)) { - if (!class_exists($plugins)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Unable to locate padding plugin manager via class "%s"; class does not exist', - $plugins - )); - } - $plugins = new $plugins(); - } - if (!$plugins instanceof PaddingPluginManager) { - throw new Exception\InvalidArgumentException(sprintf( - 'Padding plugins must extend %s\PaddingPluginManager; received "%s"', - __NAMESPACE__, - (is_object($plugins) ? get_class($plugins) : gettype($plugins)) - )); - } - static::$paddingPlugins = $plugins; - } - - /** - * Get the maximum key size for the selected cipher and mode of operation - * - * @return int - */ - public function getKeySize() - { - return mcrypt_get_key_size($this->supportedAlgos[$this->algo], $this->supportedModes[$this->mode]); - } - - /** - * Set the encryption key - * If the key is longer than maximum supported, it will be truncated by getKey(). - * - * @param string $key - * @throws Exception\InvalidArgumentException - * @return Mcrypt - */ - public function setKey($key) - { - $keyLen = strlen($key); - - if (!$keyLen) { - throw new Exception\InvalidArgumentException('The key cannot be empty'); - } - $keySizes = mcrypt_module_get_supported_key_sizes($this->supportedAlgos[$this->algo]); - $maxKey = $this->getKeySize(); - - /* - * blowfish has $keySizes empty, meaning it can have arbitrary key length. - * the others are more picky. - */ - if (!empty($keySizes) && $keyLen < $maxKey) { - if (!in_array($keyLen, $keySizes)) { - throw new Exception\InvalidArgumentException( - "The size of the key must be one of " . implode(", ", $keySizes) . " bytes or longer" - ); - } - } - $this->key = $key; - - return $this; - } - - /** - * Get the encryption key - * - * @return string - */ - public function getKey() - { - if (empty($this->key)) { - return null; - } - return substr($this->key, 0, $this->getKeySize()); - } - - /** - * Set the encryption algorithm (cipher) - * - * @param string $algo - * @throws Exception\InvalidArgumentException - * @return Mcrypt - */ - public function setAlgorithm($algo) - { - if (!array_key_exists($algo, $this->supportedAlgos)) { - throw new Exception\InvalidArgumentException( - "The algorithm $algo is not supported by " . __CLASS__ - ); - } - $this->algo = $algo; - - return $this; - } - - /** - * Get the encryption algorithm - * - * @return string - */ - public function getAlgorithm() - { - return $this->algo; - } - - /** - * Set the padding object - * - * @param Padding\PaddingInterface $padding - * @return Mcrypt - */ - public function setPadding(Padding\PaddingInterface $padding) - { - $this->padding = $padding; - - return $this; - } - - /** - * Get the padding object - * - * @return Padding\PaddingInterface - */ - public function getPadding() - { - return $this->padding; - } - - /** - * Encrypt - * - * @param string $data - * @throws Exception\InvalidArgumentException - * @return string - */ - public function encrypt($data) - { - // Cannot encrypt empty string - if (!is_string($data) || $data === '') { - throw new Exception\InvalidArgumentException('The data to encrypt cannot be empty'); - } - if (null === $this->getKey()) { - throw new Exception\InvalidArgumentException('No key specified for the encryption'); - } - if (null === $this->getSalt()) { - throw new Exception\InvalidArgumentException('The salt (IV) cannot be empty'); - } - if (null === $this->getPadding()) { - throw new Exception\InvalidArgumentException('You have to specify a padding method'); - } - // padding - $data = $this->padding->pad($data, $this->getBlockSize()); - $iv = $this->getSalt(); - // encryption - $result = mcrypt_encrypt( - $this->supportedAlgos[$this->algo], - $this->getKey(), - $data, - $this->supportedModes[$this->mode], - $iv - ); - - return $iv . $result; - } - - /** - * Decrypt - * - * @param string $data - * @throws Exception\InvalidArgumentException - * @return string - */ - public function decrypt($data) - { - if (empty($data)) { - throw new Exception\InvalidArgumentException('The data to decrypt cannot be empty'); - } - if (null === $this->getKey()) { - throw new Exception\InvalidArgumentException('No key specified for the decryption'); - } - if (null === $this->getPadding()) { - throw new Exception\InvalidArgumentException('You have to specify a padding method'); - } - $iv = substr($data, 0, $this->getSaltSize()); - $ciphertext = substr($data, $this->getSaltSize()); - $result = mcrypt_decrypt( - $this->supportedAlgos[$this->algo], - $this->getKey(), - $ciphertext, - $this->supportedModes[$this->mode], - $iv - ); - // unpadding - return $this->padding->strip($result); - } - - /** - * Get the salt (IV) size - * - * @return int - */ - public function getSaltSize() - { - return mcrypt_get_iv_size($this->supportedAlgos[$this->algo], $this->supportedModes[$this->mode]); - } - - /** - * Get the supported algorithms - * - * @return array - */ - public function getSupportedAlgorithms() - { - return array_keys($this->supportedAlgos); - } - - /** - * Set the salt (IV) - * - * @param string $salt - * @throws Exception\InvalidArgumentException - * @return Mcrypt - */ - public function setSalt($salt) - { - if (empty($salt)) { - throw new Exception\InvalidArgumentException('The salt (IV) cannot be empty'); - } - if (strlen($salt) < $this->getSaltSize()) { - throw new Exception\InvalidArgumentException( - 'The size of the salt (IV) must be at least ' . $this->getSaltSize() . ' bytes' - ); - } - $this->iv = $salt; - - return $this; - } - - /** - * Get the salt (IV) according to the size requested by the algorithm - * - * @return string - */ - public function getSalt() - { - if (empty($this->iv)) { - return null; - } - if (strlen($this->iv) < $this->getSaltSize()) { - throw new Exception\RuntimeException( - 'The size of the salt (IV) must be at least ' . $this->getSaltSize() . ' bytes' - ); - } - - return substr($this->iv, 0, $this->getSaltSize()); - } - - /** - * Get the original salt value - * - * @return string - */ - public function getOriginalSalt() - { - return $this->iv; - } - - /** - * Set the cipher mode - * - * @param string $mode - * @throws Exception\InvalidArgumentException - * @return Mcrypt - */ - public function setMode($mode) - { - if (!empty($mode)) { - $mode = strtolower($mode); - if (!array_key_exists($mode, $this->supportedModes)) { - throw new Exception\InvalidArgumentException( - "The mode $mode is not supported by " . __CLASS__ - ); - } - $this->mode = $mode; - } - - return $this; - } - - /** - * Get the cipher mode - * - * @return string - */ - public function getMode() - { - return $this->mode; - } - - /** - * Get all supported encryption modes - * - * @return array - */ - public function getSupportedModes() - { - return array_keys($this->supportedModes); - } - - /** - * Get the block size - * - * @return int - */ - public function getBlockSize() - { - return mcrypt_get_block_size($this->supportedAlgos[$this->algo], $this->supportedModes[$this->mode]); - } -} diff --git a/library/Zend/Crypt/Symmetric/Padding/PaddingInterface.php b/library/Zend/Crypt/Symmetric/Padding/PaddingInterface.php deleted file mode 100755 index 24050c311..000000000 --- a/library/Zend/Crypt/Symmetric/Padding/PaddingInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - 'Zend\Crypt\Symmetric\Padding\Pkcs7' - ); - - /** - * Do not share by default - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the padding adapter loaded is an instance of Padding\PaddingInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Padding\PaddingInterface) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Padding\PaddingInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Crypt/Symmetric/SymmetricInterface.php b/library/Zend/Crypt/Symmetric/SymmetricInterface.php deleted file mode 100755 index acf160e96..000000000 --- a/library/Zend/Crypt/Symmetric/SymmetricInterface.php +++ /dev/null @@ -1,61 +0,0 @@ - 'Zend\Crypt\Symmetric\Mcrypt', - ); - - /** - * Do not share by default - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the adapter loaded is an instance - * of Symmetric\SymmetricInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Symmetric\SymmetricInterface) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Symmetric\SymmetricInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Crypt/Utils.php b/library/Zend/Crypt/Utils.php deleted file mode 100755 index ff013dcbc..000000000 --- a/library/Zend/Crypt/Utils.php +++ /dev/null @@ -1,45 +0,0 @@ -=5.3.23", - "zendframework/zend-math": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "ext-mcrypt": "Required for most features of Zend\\Crypt" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Db/Adapter/Adapter.php b/library/Zend/Db/Adapter/Adapter.php deleted file mode 100755 index b4c7edfff..000000000 --- a/library/Zend/Db/Adapter/Adapter.php +++ /dev/null @@ -1,387 +0,0 @@ -createProfiler($parameters); - } - $driver = $this->createDriver($parameters); - } elseif (!$driver instanceof Driver\DriverInterface) { - throw new Exception\InvalidArgumentException( - 'The supplied or instantiated driver object does not implement Zend\Db\Adapter\Driver\DriverInterface' - ); - } - - $driver->checkEnvironment(); - $this->driver = $driver; - - if ($platform == null) { - $platform = $this->createPlatform($parameters); - } - - $this->platform = $platform; - $this->queryResultSetPrototype = ($queryResultPrototype) ?: new ResultSet\ResultSet(); - - if ($profiler) { - $this->setProfiler($profiler); - } - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Adapter - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - if ($this->driver instanceof Profiler\ProfilerAwareInterface) { - $this->driver->setProfiler($profiler); - } - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * getDriver() - * - * @throws Exception\RuntimeException - * @return Driver\DriverInterface - */ - public function getDriver() - { - if ($this->driver == null) { - throw new Exception\RuntimeException('Driver has not been set or configured for this adapter.'); - } - return $this->driver; - } - - /** - * @return Platform\PlatformInterface - */ - public function getPlatform() - { - return $this->platform; - } - - /** - * @return ResultSet\ResultSetInterface - */ - public function getQueryResultSetPrototype() - { - return $this->queryResultSetPrototype; - } - - public function getCurrentSchema() - { - return $this->driver->getConnection()->getCurrentSchema(); - } - - /** - * query() is a convenience function - * - * @param string $sql - * @param string|array|ParameterContainer $parametersOrQueryMode - * @throws Exception\InvalidArgumentException - * @return Driver\StatementInterface|ResultSet\ResultSet - */ - public function query($sql, $parametersOrQueryMode = self::QUERY_MODE_PREPARE, ResultSet\ResultSetInterface $resultPrototype = null) - { - if (is_string($parametersOrQueryMode) && in_array($parametersOrQueryMode, array(self::QUERY_MODE_PREPARE, self::QUERY_MODE_EXECUTE))) { - $mode = $parametersOrQueryMode; - $parameters = null; - } elseif (is_array($parametersOrQueryMode) || $parametersOrQueryMode instanceof ParameterContainer) { - $mode = self::QUERY_MODE_PREPARE; - $parameters = $parametersOrQueryMode; - } else { - throw new Exception\InvalidArgumentException('Parameter 2 to this method must be a flag, an array, or ParameterContainer'); - } - - if ($mode == self::QUERY_MODE_PREPARE) { - $this->lastPreparedStatement = null; - $this->lastPreparedStatement = $this->driver->createStatement($sql); - $this->lastPreparedStatement->prepare(); - if (is_array($parameters) || $parameters instanceof ParameterContainer) { - $this->lastPreparedStatement->setParameterContainer((is_array($parameters)) ? new ParameterContainer($parameters) : $parameters); - $result = $this->lastPreparedStatement->execute(); - } else { - return $this->lastPreparedStatement; - } - } else { - $result = $this->driver->getConnection()->execute($sql); - } - - if ($result instanceof Driver\ResultInterface && $result->isQueryResult()) { - $resultSet = clone ($resultPrototype ?: $this->queryResultSetPrototype); - $resultSet->initialize($result); - return $resultSet; - } - - return $result; - } - - /** - * Create statement - * - * @param string $initialSql - * @param ParameterContainer $initialParameters - * @return Driver\StatementInterface - */ - public function createStatement($initialSql = null, $initialParameters = null) - { - $statement = $this->driver->createStatement($initialSql); - if ($initialParameters == null || !$initialParameters instanceof ParameterContainer && is_array($initialParameters)) { - $initialParameters = new ParameterContainer((is_array($initialParameters) ? $initialParameters : array())); - } - $statement->setParameterContainer($initialParameters); - return $statement; - } - - public function getHelpers(/* $functions */) - { - $functions = array(); - $platform = $this->platform; - foreach (func_get_args() as $arg) { - switch ($arg) { - case self::FUNCTION_QUOTE_IDENTIFIER: - $functions[] = function ($value) use ($platform) { return $platform->quoteIdentifier($value); }; - break; - case self::FUNCTION_QUOTE_VALUE: - $functions[] = function ($value) use ($platform) { return $platform->quoteValue($value); }; - break; - - } - } - } - - /** - * @param $name - * @throws Exception\InvalidArgumentException - * @return Driver\DriverInterface|Platform\PlatformInterface - */ - public function __get($name) - { - switch (strtolower($name)) { - case 'driver': - return $this->driver; - case 'platform': - return $this->platform; - default: - throw new Exception\InvalidArgumentException('Invalid magic property on adapter'); - } - } - - /** - * @param array $parameters - * @return Driver\DriverInterface - * @throws \InvalidArgumentException - * @throws Exception\InvalidArgumentException - */ - protected function createDriver($parameters) - { - if (!isset($parameters['driver'])) { - throw new Exception\InvalidArgumentException(__FUNCTION__ . ' expects a "driver" key to be present inside the parameters'); - } - - if ($parameters['driver'] instanceof Driver\DriverInterface) { - return $parameters['driver']; - } - - if (!is_string($parameters['driver'])) { - throw new Exception\InvalidArgumentException(__FUNCTION__ . ' expects a "driver" to be a string or instance of DriverInterface'); - } - - $options = array(); - if (isset($parameters['options'])) { - $options = (array) $parameters['options']; - unset($parameters['options']); - } - - $driverName = strtolower($parameters['driver']); - switch ($driverName) { - case 'mysqli': - $driver = new Driver\Mysqli\Mysqli($parameters, null, null, $options); - break; - case 'sqlsrv': - $driver = new Driver\Sqlsrv\Sqlsrv($parameters); - break; - case 'oci8': - $driver = new Driver\Oci8\Oci8($parameters); - break; - case 'pgsql': - $driver = new Driver\Pgsql\Pgsql($parameters); - break; - case 'ibmdb2': - $driver = new Driver\IbmDb2\IbmDb2($parameters); - break; - case 'pdo': - default: - if ($driverName == 'pdo' || strpos($driverName, 'pdo') === 0) { - $driver = new Driver\Pdo\Pdo($parameters); - } - } - - if (!isset($driver) || !$driver instanceof Driver\DriverInterface) { - throw new Exception\InvalidArgumentException('DriverInterface expected', null, null); - } - - return $driver; - } - - /** - * @param Driver\DriverInterface $driver - * @return Platform\PlatformInterface - */ - protected function createPlatform($parameters) - { - if (isset($parameters['platform'])) { - $platformName = $parameters['platform']; - } elseif ($this->driver instanceof Driver\DriverInterface) { - $platformName = $this->driver->getDatabasePlatformName(Driver\DriverInterface::NAME_FORMAT_CAMELCASE); - } else { - throw new Exception\InvalidArgumentException('A platform could not be determined from the provided configuration'); - } - - // currently only supported by the IbmDb2 & Oracle concrete implementations - $options = (isset($parameters['platform_options'])) ? $parameters['platform_options'] : array(); - - switch ($platformName) { - case 'Mysql': - // mysqli or pdo_mysql driver - $driver = ($this->driver instanceof Driver\Mysqli\Mysqli || $this->driver instanceof Driver\Pdo\Pdo) ? $this->driver : null; - return new Platform\Mysql($driver); - case 'SqlServer': - // PDO is only supported driver for quoting values in this platform - return new Platform\SqlServer(($this->driver instanceof Driver\Pdo\Pdo) ? $this->driver : null); - case 'Oracle': - // oracle does not accept a driver as an option, no driver specific quoting available - return new Platform\Oracle($options); - case 'Sqlite': - // PDO is only supported driver for quoting values in this platform - return new Platform\Sqlite(($this->driver instanceof Driver\Pdo\Pdo) ? $this->driver : null); - case 'Postgresql': - // pgsql or pdo postgres driver - $driver = ($this->driver instanceof Driver\Pgsql\Pgsql || $this->driver instanceof Driver\Pdo\Pdo) ? $this->driver : null; - return new Platform\Postgresql($driver); - case 'IbmDb2': - // ibm_db2 driver escaping does not need an action connection - return new Platform\IbmDb2($options); - default: - return new Platform\Sql92(); - } - } - - protected function createProfiler($parameters) - { - if ($parameters['profiler'] instanceof Profiler\ProfilerInterface) { - $profiler = $parameters['profiler']; - } elseif (is_bool($parameters['profiler'])) { - $profiler = ($parameters['profiler'] == true) ? new Profiler\Profiler : null; - } else { - throw new Exception\InvalidArgumentException( - '"profiler" parameter must be an instance of ProfilerInterface or a boolean' - ); - } - return $profiler; - } - - /** - * @param array $parameters - * @return Driver\DriverInterface - * @throws \InvalidArgumentException - * @throws Exception\InvalidArgumentException - * @deprecated - */ - protected function createDriverFromParameters(array $parameters) - { - return $this->createDriver($parameters); - } - - /** - * @param Driver\DriverInterface $driver - * @return Platform\PlatformInterface - * @deprecated - */ - protected function createPlatformFromDriver(Driver\DriverInterface $driver) - { - return $this->createPlatform($driver); - } -} diff --git a/library/Zend/Db/Adapter/AdapterAbstractServiceFactory.php b/library/Zend/Db/Adapter/AdapterAbstractServiceFactory.php deleted file mode 100755 index 42800a2ce..000000000 --- a/library/Zend/Db/Adapter/AdapterAbstractServiceFactory.php +++ /dev/null @@ -1,99 +0,0 @@ -getConfig($services); - if (empty($config)) { - return false; - } - - return ( - isset($config[$requestedName]) - && is_array($config[$requestedName]) - && !empty($config[$requestedName]) - ); - } - - /** - * Create a DB adapter - * - * @param ServiceLocatorInterface $services - * @param string $name - * @param string $requestedName - * @return Adapter - */ - public function createServiceWithName(ServiceLocatorInterface $services, $name, $requestedName) - { - $config = $this->getConfig($services); - return new Adapter($config[$requestedName]); - } - - /** - * Get db configuration, if any - * - * @param ServiceLocatorInterface $services - * @return array - */ - protected function getConfig(ServiceLocatorInterface $services) - { - if ($this->config !== null) { - return $this->config; - } - - if (!$services->has('Config')) { - $this->config = array(); - return $this->config; - } - - $config = $services->get('Config'); - if (!isset($config['db']) - || !is_array($config['db']) - ) { - $this->config = array(); - return $this->config; - } - - $config = $config['db']; - if (!isset($config['adapters']) - || !is_array($config['adapters']) - ) { - $this->config = array(); - return $this->config; - } - - $this->config = $config['adapters']; - return $this->config; - } -} diff --git a/library/Zend/Db/Adapter/AdapterAwareInterface.php b/library/Zend/Db/Adapter/AdapterAwareInterface.php deleted file mode 100755 index 95443a9a0..000000000 --- a/library/Zend/Db/Adapter/AdapterAwareInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -adapter = $adapter; - - return $this; - } -} diff --git a/library/Zend/Db/Adapter/AdapterInterface.php b/library/Zend/Db/Adapter/AdapterInterface.php deleted file mode 100755 index 57a6a7376..000000000 --- a/library/Zend/Db/Adapter/AdapterInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -get('Config'); - return new Adapter($config['db']); - } -} diff --git a/library/Zend/Db/Adapter/Driver/ConnectionInterface.php b/library/Zend/Db/Adapter/Driver/ConnectionInterface.php deleted file mode 100755 index 2e27fd688..000000000 --- a/library/Zend/Db/Adapter/Driver/ConnectionInterface.php +++ /dev/null @@ -1,85 +0,0 @@ -driver = $driver; - } - - /** - * Get name - * - * @return string - */ - abstract public function getName(); -} diff --git a/library/Zend/Db/Adapter/Driver/Feature/DriverFeatureInterface.php b/library/Zend/Db/Adapter/Driver/Feature/DriverFeatureInterface.php deleted file mode 100755 index 10c96f773..000000000 --- a/library/Zend/Db/Adapter/Driver/Feature/DriverFeatureInterface.php +++ /dev/null @@ -1,37 +0,0 @@ -setConnectionParameters($connectionParameters); - } elseif (is_resource($connectionParameters)) { - $this->setResource($connectionParameters); - } elseif (null !== $connectionParameters) { - throw new Exception\InvalidArgumentException( - '$connection must be an array of parameters, a db2 connection resource or null' - ); - } - } - - /** - * Set driver - * - * @param IbmDb2 $driver - * @return Connection - */ - public function setDriver(IbmDb2 $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Connection - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * @param array $connectionParameters - * @return Connection - */ - public function setConnectionParameters(array $connectionParameters) - { - $this->connectionParameters = $connectionParameters; - return $this; - } - - /** - * @return array - */ - public function getConnectionParameters() - { - return $this->connectionParameters; - } - - /** - * @param resource $resource DB2 resource - * @return Connection - */ - public function setResource($resource) - { - if (!is_resource($resource) || get_resource_type($resource) !== 'DB2 Connection') { - throw new Exception\InvalidArgumentException('The resource provided must be of type "DB2 Connection"'); - } - $this->resource = $resource; - return $this; - } - - /** - * Get current schema - * - * @return string - */ - public function getCurrentSchema() - { - if (!$this->isConnected()) { - $this->connect(); - } - - $info = db2_server_info($this->resource); - return (isset($info->DB_NAME) ? $info->DB_NAME : ''); - } - - /** - * Get resource - * - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Connect - * - * @return self - */ - public function connect() - { - if (is_resource($this->resource)) { - return $this; - } - - // localize - $p = $this->connectionParameters; - - // given a list of key names, test for existence in $p - $findParameterValue = function (array $names) use ($p) { - foreach ($names as $name) { - if (isset($p[$name])) { - return $p[$name]; - } - } - - return null; - }; - - $database = $findParameterValue(array('database', 'db')); - $username = $findParameterValue(array('username', 'uid', 'UID')); - $password = $findParameterValue(array('password', 'pwd', 'PWD')); - $isPersistent = $findParameterValue(array('persistent', 'PERSISTENT', 'Persistent')); - $options = (isset($p['driver_options']) ? $p['driver_options'] : array()); - $connect = ((bool) $isPersistent) ? 'db2_pconnect' : 'db2_connect'; - - $this->resource = $connect($database, $username, $password, $options); - - if ($this->resource === false) { - throw new Exception\RuntimeException(sprintf( - '%s: Unable to connect to database', - __METHOD__ - )); - } - - return $this; - } - - /** - * Is connected - * - * @return bool - */ - public function isConnected() - { - return ($this->resource !== null); - } - - /** - * Disconnect - * - * @return ConnectionInterface - */ - public function disconnect() - { - if ($this->resource) { - db2_close($this->resource); - $this->resource = null; - } - - return $this; - } - - /** - * Begin transaction - * - * @return ConnectionInterface - */ - public function beginTransaction() - { - if ($this->isI5() && !ini_get('ibm_db2.i5_allow_commit')) { - throw new Exception\RuntimeException( - 'DB2 transactions are not enabled, you need to set the ibm_db2.i5_allow_commit=1 in your php.ini' - ); - } - - if (!$this->isConnected()) { - $this->connect(); - } - - $this->prevAutocommit = db2_autocommit($this->resource); - db2_autocommit($this->resource, DB2_AUTOCOMMIT_OFF); - $this->inTransaction = true; - return $this; - } - - /** - * In transaction - * - * @return bool - */ - public function inTransaction() - { - return $this->inTransaction; - } - - /** - * Commit - * - * @return ConnectionInterface - */ - public function commit() - { - if (!$this->isConnected()) { - $this->connect(); - } - - if (!db2_commit($this->resource)) { - throw new Exception\RuntimeException("The commit has not been successful"); - } - - if ($this->prevAutocommit) { - db2_autocommit($this->resource, $this->prevAutocommit); - } - - $this->inTransaction = false; - return $this; - } - - /** - * Rollback - * - * @return ConnectionInterface - */ - public function rollback() - { - if (!$this->resource) { - throw new Exception\RuntimeException('Must be connected before you can rollback.'); - } - - if (!$this->inTransaction) { - throw new Exception\RuntimeException('Must call beginTransaction() before you can rollback.'); - } - - if (!db2_rollback($this->resource)) { - throw new Exception\RuntimeException('The rollback has not been successful'); - } - - if ($this->prevAutocommit) { - db2_autocommit($this->resource, $this->prevAutocommit); - } - - $this->inTransaction = false; - return $this; - } - - /** - * Execute - * - * @param string $sql - * @return Result - */ - public function execute($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - if ($this->profiler) { - $this->profiler->profilerStart($sql); - } - - set_error_handler(function () {}, E_WARNING); // suppress warnings - $resultResource = db2_exec($this->resource, $sql); - restore_error_handler(); - - if ($this->profiler) { - $this->profiler->profilerFinish($sql); - } - - // if the returnValue is something other than a pg result resource, bypass wrapping it - if ($resultResource === false) { - throw new Exception\InvalidQueryException(db2_stmt_errormsg()); - } - - return $this->driver->createResult(($resultResource === true) ? $this->resource : $resultResource); - } - - /** - * Get last generated id - * - * @param null $name Ignored - * @return int - */ - public function getLastGeneratedValue($name = null) - { - return db2_last_insert_id($this->resource); - } - - /** - * Determine if the OS is OS400 (AS400, IBM i) - * - * @return bool - */ - protected function isI5() - { - if (isset($this->i5)) { - return $this->i5; - } - - $this->i5 = php_uname('s') == 'OS400' ? true : false; - return $this->i5; - } -} diff --git a/library/Zend/Db/Adapter/Driver/IbmDb2/IbmDb2.php b/library/Zend/Db/Adapter/Driver/IbmDb2/IbmDb2.php deleted file mode 100755 index d129b49b3..000000000 --- a/library/Zend/Db/Adapter/Driver/IbmDb2/IbmDb2.php +++ /dev/null @@ -1,214 +0,0 @@ -registerConnection($connection); - $this->registerStatementPrototype(($statementPrototype) ?: new Statement()); - $this->registerResultPrototype(($resultPrototype) ?: new Result()); - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return IbmDb2 - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - if ($this->connection instanceof Profiler\ProfilerAwareInterface) { - $this->connection->setProfiler($profiler); - } - if ($this->statementPrototype instanceof Profiler\ProfilerAwareInterface) { - $this->statementPrototype->setProfiler($profiler); - } - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * @param Connection $connection - * @return IbmDb2 - */ - public function registerConnection(Connection $connection) - { - $this->connection = $connection; - $this->connection->setDriver($this); - return $this; - } - - /** - * @param Statement $statementPrototype - * @return IbmDb2 - */ - public function registerStatementPrototype(Statement $statementPrototype) - { - $this->statementPrototype = $statementPrototype; - $this->statementPrototype->setDriver($this); - return $this; - } - - /** - * @param Result $resultPrototype - * @return IbmDb2 - */ - public function registerResultPrototype(Result $resultPrototype) - { - $this->resultPrototype = $resultPrototype; - return $this; - } - - /** - * Get database platform name - * - * @param string $nameFormat - * @return string - */ - public function getDatabasePlatformName($nameFormat = self::NAME_FORMAT_CAMELCASE) - { - if ($nameFormat == self::NAME_FORMAT_CAMELCASE) { - return 'IbmDb2'; - } else { - return 'IBM DB2'; - } - } - - /** - * Check environment - * - * @return bool - */ - public function checkEnvironment() - { - if (!extension_loaded('ibm_db2')) { - throw new Exception\RuntimeException('The ibm_db2 extension is required by this driver.'); - } - } - - /** - * Get connection - * - * @return Connection - */ - public function getConnection() - { - return $this->connection; - } - - /** - * Create statement - * - * @param string|resource $sqlOrResource - * @return Statement - */ - public function createStatement($sqlOrResource = null) - { - $statement = clone $this->statementPrototype; - if (is_resource($sqlOrResource) && get_resource_type($sqlOrResource) == 'DB2 Statement') { - $statement->setResource($sqlOrResource); - } else { - if (is_string($sqlOrResource)) { - $statement->setSql($sqlOrResource); - } elseif ($sqlOrResource !== null) { - throw new Exception\InvalidArgumentException( - __FUNCTION__ . ' only accepts an SQL string or an ibm_db2 resource' - ); - } - if (!$this->connection->isConnected()) { - $this->connection->connect(); - } - $statement->initialize($this->connection->getResource()); - } - return $statement; - } - - /** - * Create result - * - * @param resource $resource - * @return Result - */ - public function createResult($resource) - { - $result = clone $this->resultPrototype; - $result->initialize($resource, $this->connection->getLastGeneratedValue()); - return $result; - } - - /** - * Get prepare type - * - * @return array - */ - public function getPrepareType() - { - return self::PARAMETERIZATION_POSITIONAL; - } - - /** - * Format parameter name - * - * @param string $name - * @param mixed $type - * @return string - */ - public function formatParameterName($name, $type = null) - { - return '?'; - } - - /** - * Get last generated value - * - * @return mixed - */ - public function getLastGeneratedValue() - { - return $this->connection->getLastGeneratedValue(); - } -} diff --git a/library/Zend/Db/Adapter/Driver/IbmDb2/Result.php b/library/Zend/Db/Adapter/Driver/IbmDb2/Result.php deleted file mode 100755 index add4e1e3f..000000000 --- a/library/Zend/Db/Adapter/Driver/IbmDb2/Result.php +++ /dev/null @@ -1,192 +0,0 @@ -resource = $resource; - $this->generatedValue = $generatedValue; - return $this; - } - - /** - * (PHP 5 >= 5.0.0)
- * Return the current element - * @link http://php.net/manual/en/iterator.current.php - * @return mixed Can return any type. - */ - public function current() - { - if ($this->currentComplete) { - return $this->currentData; - } - - $this->currentData = db2_fetch_assoc($this->resource); - return $this->currentData; - } - - /** - * @return mixed - */ - public function next() - { - $this->currentData = db2_fetch_assoc($this->resource); - $this->currentComplete = true; - $this->position++; - return $this->currentData; - } - - /** - * @return int|string - */ - public function key() - { - return $this->position; - } - - /** - * @return bool - */ - public function valid() - { - return ($this->currentData !== false); - } - - /** - * (PHP 5 >= 5.0.0)
- * Rewind the Iterator to the first element - * @link http://php.net/manual/en/iterator.rewind.php - * @return void Any returned value is ignored. - */ - public function rewind() - { - if ($this->position > 0) { - throw new Exception\RuntimeException( - 'This result is a forward only result set, calling rewind() after moving forward is not supported' - ); - } - $this->currentData = db2_fetch_assoc($this->resource); - $this->currentComplete = true; - $this->position = 1; - } - - /** - * Force buffering - * - * @return void - */ - public function buffer() - { - return null; - } - - /** - * Check if is buffered - * - * @return bool|null - */ - public function isBuffered() - { - return false; - } - - /** - * Is query result? - * - * @return bool - */ - public function isQueryResult() - { - return (db2_num_fields($this->resource) > 0); - } - - /** - * Get affected rows - * - * @return int - */ - public function getAffectedRows() - { - return db2_num_rows($this->resource); - } - - /** - * Get generated value - * - * @return mixed|null - */ - public function getGeneratedValue() - { - return $this->generatedValue; - } - - /** - * Get the resource - * - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Get field count - * - * @return int - */ - public function getFieldCount() - { - return db2_num_fields($this->resource); - } - - /** - * @return null|int - */ - public function count() - { - return null; - } -} diff --git a/library/Zend/Db/Adapter/Driver/IbmDb2/Statement.php b/library/Zend/Db/Adapter/Driver/IbmDb2/Statement.php deleted file mode 100755 index 029a9ed27..000000000 --- a/library/Zend/Db/Adapter/Driver/IbmDb2/Statement.php +++ /dev/null @@ -1,240 +0,0 @@ -db2 = $resource; - return $this; - } - - /** - * @param IbmDb2 $driver - * @return Statement - */ - public function setDriver(IbmDb2 $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Statement - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Set sql - * - * @param $sql - * @return mixed - */ - public function setSql($sql) - { - $this->sql = $sql; - return $this; - } - - /** - * Get sql - * - * @return mixed - */ - public function getSql() - { - return $this->sql; - } - - /** - * Set parameter container - * - * @param ParameterContainer $parameterContainer - * @return mixed - */ - public function setParameterContainer(ParameterContainer $parameterContainer) - { - $this->parameterContainer = $parameterContainer; - return $this; - } - - /** - * Get parameter container - * - * @return mixed - */ - public function getParameterContainer() - { - return $this->parameterContainer; - } - - /** - * @param $resource - * @throws \Zend\Db\Adapter\Exception\InvalidArgumentException - */ - public function setResource($resource) - { - if (get_resource_type($resource) !== 'DB2 Statement') { - throw new Exception\InvalidArgumentException('Resource must be of type DB2 Statement'); - } - $this->resource = $resource; - } - - /** - * Get resource - * - * @return resource - */ - public function getResource() - { - return $this->resource; - } - - /** - * Prepare sql - * - * @param string|null $sql - * @return Statement - */ - public function prepare($sql = null) - { - if ($this->isPrepared) { - throw new Exception\RuntimeException('This statement has been prepared already'); - } - - if ($sql == null) { - $sql = $this->sql; - } - - $this->resource = db2_prepare($this->db2, $sql); - - if ($this->resource === false) { - throw new Exception\RuntimeException(db2_stmt_errormsg(), db2_stmt_error()); - } - - $this->isPrepared = true; - return $this; - } - - /** - * Check if is prepared - * - * @return bool - */ - public function isPrepared() - { - return $this->isPrepared; - } - - /** - * Execute - * - * @param null $parameters - * @return Result - */ - public function execute($parameters = null) - { - if (!$this->isPrepared) { - $this->prepare(); - } - - /** START Standard ParameterContainer Merging Block */ - if (!$this->parameterContainer instanceof ParameterContainer) { - if ($parameters instanceof ParameterContainer) { - $this->parameterContainer = $parameters; - $parameters = null; - } else { - $this->parameterContainer = new ParameterContainer(); - } - } - - if (is_array($parameters)) { - $this->parameterContainer->setFromArray($parameters); - } - /** END Standard ParameterContainer Merging Block */ - - if ($this->profiler) { - $this->profiler->profilerStart($this); - } - - set_error_handler(function () {}, E_WARNING); // suppress warnings - $response = db2_execute($this->resource, $this->parameterContainer->getPositionalArray()); - restore_error_handler(); - - if ($this->profiler) { - $this->profiler->profilerFinish(); - } - - if ($response === false) { - throw new Exception\RuntimeException(db2_stmt_errormsg($this->resource)); - } - - $result = $this->driver->createResult($this->resource); - return $result; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Mysqli/Connection.php b/library/Zend/Db/Adapter/Driver/Mysqli/Connection.php deleted file mode 100755 index d84db10fe..000000000 --- a/library/Zend/Db/Adapter/Driver/Mysqli/Connection.php +++ /dev/null @@ -1,346 +0,0 @@ -setConnectionParameters($connectionInfo); - } elseif ($connectionInfo instanceof \mysqli) { - $this->setResource($connectionInfo); - } elseif (null !== $connectionInfo) { - throw new Exception\InvalidArgumentException('$connection must be an array of parameters, a mysqli object or null'); - } - } - - /** - * @param Mysqli $driver - * @return Connection - */ - public function setDriver(Mysqli $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Connection - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Set connection parameters - * - * @param array $connectionParameters - * @return Connection - */ - public function setConnectionParameters(array $connectionParameters) - { - $this->connectionParameters = $connectionParameters; - return $this; - } - - /** - * Get connection parameters - * - * @return array - */ - public function getConnectionParameters() - { - return $this->connectionParameters; - } - - /** - * Get current schema - * - * @return string - */ - public function getCurrentSchema() - { - if (!$this->isConnected()) { - $this->connect(); - } - - /** @var $result \mysqli_result */ - $result = $this->resource->query('SELECT DATABASE()'); - $r = $result->fetch_row(); - return $r[0]; - } - - /** - * Set resource - * - * @param \mysqli $resource - * @return Connection - */ - public function setResource(\mysqli $resource) - { - $this->resource = $resource; - return $this; - } - - /** - * Get resource - * - * @return \mysqli - */ - public function getResource() - { - $this->connect(); - return $this->resource; - } - - /** - * Connect - * - * @throws Exception\RuntimeException - * @return Connection - */ - public function connect() - { - if ($this->resource instanceof \mysqli) { - return $this; - } - - // localize - $p = $this->connectionParameters; - - // given a list of key names, test for existence in $p - $findParameterValue = function (array $names) use ($p) { - foreach ($names as $name) { - if (isset($p[$name])) { - return $p[$name]; - } - } - return; - }; - - $hostname = $findParameterValue(array('hostname', 'host')); - $username = $findParameterValue(array('username', 'user')); - $password = $findParameterValue(array('password', 'passwd', 'pw')); - $database = $findParameterValue(array('database', 'dbname', 'db', 'schema')); - $port = (isset($p['port'])) ? (int) $p['port'] : null; - $socket = (isset($p['socket'])) ? $p['socket'] : null; - - $this->resource = new \mysqli(); - $this->resource->init(); - - if (!empty($p['driver_options'])) { - foreach ($p['driver_options'] as $option => $value) { - if (is_string($option)) { - $option = strtoupper($option); - if (!defined($option)) { - continue; - } - $option = constant($option); - } - $this->resource->options($option, $value); - } - } - - $this->resource->real_connect($hostname, $username, $password, $database, $port, $socket); - - if ($this->resource->connect_error) { - throw new Exception\RuntimeException( - 'Connection error', - null, - new Exception\ErrorException($this->resource->connect_error, $this->resource->connect_errno) - ); - } - - if (!empty($p['charset'])) { - $this->resource->set_charset($p['charset']); - } - - return $this; - } - - /** - * Is connected - * - * @return bool - */ - public function isConnected() - { - return ($this->resource instanceof \mysqli); - } - - /** - * Disconnect - * - * @return void - */ - public function disconnect() - { - if ($this->resource instanceof \mysqli) { - $this->resource->close(); - } - $this->resource = null; - } - - /** - * Begin transaction - * - * @return void - */ - public function beginTransaction() - { - if (!$this->isConnected()) { - $this->connect(); - } - - $this->resource->autocommit(false); - $this->inTransaction = true; - } - - /** - * In transaction - * - * @return bool - */ - public function inTransaction() - { - return $this->inTransaction; - } - - /** - * Commit - * - * @return void - */ - public function commit() - { - if (!$this->resource) { - $this->connect(); - } - - $this->resource->commit(); - $this->inTransaction = false; - $this->resource->autocommit(true); - } - - /** - * Rollback - * - * @throws Exception\RuntimeException - * @return Connection - */ - public function rollback() - { - if (!$this->resource) { - throw new Exception\RuntimeException('Must be connected before you can rollback.'); - } - - if (!$this->inTransaction) { - throw new Exception\RuntimeException('Must call beginTransaction() before you can rollback.'); - } - - $this->resource->rollback(); - $this->resource->autocommit(true); - return $this; - } - - /** - * Execute - * - * @param string $sql - * @throws Exception\InvalidQueryException - * @return Result - */ - public function execute($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - if ($this->profiler) { - $this->profiler->profilerStart($sql); - } - - $resultResource = $this->resource->query($sql); - - if ($this->profiler) { - $this->profiler->profilerFinish($sql); - } - - // if the returnValue is something other than a mysqli_result, bypass wrapping it - if ($resultResource === false) { - throw new Exception\InvalidQueryException($this->resource->error); - } - - $resultPrototype = $this->driver->createResult(($resultResource === true) ? $this->resource : $resultResource); - return $resultPrototype; - } - - /** - * Get last generated id - * - * @param null $name Ignored - * @return int - */ - public function getLastGeneratedValue($name = null) - { - return $this->resource->insert_id; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Mysqli/Mysqli.php b/library/Zend/Db/Adapter/Driver/Mysqli/Mysqli.php deleted file mode 100755 index 443350ca1..000000000 --- a/library/Zend/Db/Adapter/Driver/Mysqli/Mysqli.php +++ /dev/null @@ -1,256 +0,0 @@ - false - ); - - /** - * Constructor - * - * @param array|Connection|\mysqli $connection - * @param null|Statement $statementPrototype - * @param null|Result $resultPrototype - * @param array $options - */ - public function __construct($connection, Statement $statementPrototype = null, Result $resultPrototype = null, array $options = array()) - { - if (!$connection instanceof Connection) { - $connection = new Connection($connection); - } - - $options = array_intersect_key(array_merge($this->options, $options), $this->options); - - $this->registerConnection($connection); - $this->registerStatementPrototype(($statementPrototype) ?: new Statement($options['buffer_results'])); - $this->registerResultPrototype(($resultPrototype) ?: new Result()); - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Mysqli - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - if ($this->connection instanceof Profiler\ProfilerAwareInterface) { - $this->connection->setProfiler($profiler); - } - if ($this->statementPrototype instanceof Profiler\ProfilerAwareInterface) { - $this->statementPrototype->setProfiler($profiler); - } - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Register connection - * - * @param Connection $connection - * @return Mysqli - */ - public function registerConnection(Connection $connection) - { - $this->connection = $connection; - $this->connection->setDriver($this); // needs access to driver to createStatement() - return $this; - } - - /** - * Register statement prototype - * - * @param Statement $statementPrototype - */ - public function registerStatementPrototype(Statement $statementPrototype) - { - $this->statementPrototype = $statementPrototype; - $this->statementPrototype->setDriver($this); // needs access to driver to createResult() - } - - /** - * Get statement prototype - * - * @return null|Statement - */ - public function getStatementPrototype() - { - return $this->statementPrototype; - } - - /** - * Register result prototype - * - * @param Result $resultPrototype - */ - public function registerResultPrototype(Result $resultPrototype) - { - $this->resultPrototype = $resultPrototype; - } - - /** - * @return null|Result - */ - public function getResultPrototype() - { - return $this->resultPrototype; - } - - /** - * Get database platform name - * - * @param string $nameFormat - * @return string - */ - public function getDatabasePlatformName($nameFormat = self::NAME_FORMAT_CAMELCASE) - { - if ($nameFormat == self::NAME_FORMAT_CAMELCASE) { - return 'Mysql'; - } - - return 'MySQL'; - } - - /** - * Check environment - * - * @throws Exception\RuntimeException - * @return void - */ - public function checkEnvironment() - { - if (!extension_loaded('mysqli')) { - throw new Exception\RuntimeException('The Mysqli extension is required for this adapter but the extension is not loaded'); - } - } - - /** - * Get connection - * - * @return Connection - */ - public function getConnection() - { - return $this->connection; - } - - /** - * Create statement - * - * @param string $sqlOrResource - * @return Statement - */ - public function createStatement($sqlOrResource = null) - { - /** - * @todo Resource tracking - if (is_resource($sqlOrResource) && !in_array($sqlOrResource, $this->resources, true)) { - $this->resources[] = $sqlOrResource; - } - */ - - $statement = clone $this->statementPrototype; - if ($sqlOrResource instanceof mysqli_stmt) { - $statement->setResource($sqlOrResource); - } else { - if (is_string($sqlOrResource)) { - $statement->setSql($sqlOrResource); - } - if (!$this->connection->isConnected()) { - $this->connection->connect(); - } - $statement->initialize($this->connection->getResource()); - } - return $statement; - } - - /** - * Create result - * - * @param resource $resource - * @param null|bool $isBuffered - * @return Result - */ - public function createResult($resource, $isBuffered = null) - { - $result = clone $this->resultPrototype; - $result->initialize($resource, $this->connection->getLastGeneratedValue(), $isBuffered); - return $result; - } - - /** - * Get prepare type - * - * @return array - */ - public function getPrepareType() - { - return self::PARAMETERIZATION_POSITIONAL; - } - - /** - * Format parameter name - * - * @param string $name - * @param mixed $type - * @return string - */ - public function formatParameterName($name, $type = null) - { - return '?'; - } - - /** - * Get last generated value - * - * @return mixed - */ - public function getLastGeneratedValue() - { - return $this->getConnection()->getLastGeneratedValue(); - } -} diff --git a/library/Zend/Db/Adapter/Driver/Mysqli/Result.php b/library/Zend/Db/Adapter/Driver/Mysqli/Result.php deleted file mode 100755 index 11622b15a..000000000 --- a/library/Zend/Db/Adapter/Driver/Mysqli/Result.php +++ /dev/null @@ -1,341 +0,0 @@ - null, 'values' => array()); - - /** - * @var mixed - */ - protected $generatedValue = null; - - /** - * Initialize - * - * @param mixed $resource - * @param mixed $generatedValue - * @param bool|null $isBuffered - * @throws Exception\InvalidArgumentException - * @return Result - */ - public function initialize($resource, $generatedValue, $isBuffered = null) - { - if (!$resource instanceof \mysqli && !$resource instanceof \mysqli_result && !$resource instanceof \mysqli_stmt) { - throw new Exception\InvalidArgumentException('Invalid resource provided.'); - } - - if ($isBuffered !== null) { - $this->isBuffered = $isBuffered; - } else { - if ($resource instanceof \mysqli || $resource instanceof \mysqli_result - || $resource instanceof \mysqli_stmt && $resource->num_rows != 0) { - $this->isBuffered = true; - } - } - - $this->resource = $resource; - $this->generatedValue = $generatedValue; - return $this; - } - - /** - * Force buffering - * - * @throws Exception\RuntimeException - */ - public function buffer() - { - if ($this->resource instanceof \mysqli_stmt && $this->isBuffered !== true) { - if ($this->position > 0) { - throw new Exception\RuntimeException('Cannot buffer a result set that has started iteration.'); - } - $this->resource->store_result(); - $this->isBuffered = true; - } - } - - /** - * Check if is buffered - * - * @return bool|null - */ - public function isBuffered() - { - return $this->isBuffered; - } - - /** - * Return the resource - * - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Is query result? - * - * @return bool - */ - public function isQueryResult() - { - return ($this->resource->field_count > 0); - } - - /** - * Get affected rows - * - * @return int - */ - public function getAffectedRows() - { - if ($this->resource instanceof \mysqli || $this->resource instanceof \mysqli_stmt) { - return $this->resource->affected_rows; - } - - return $this->resource->num_rows; - } - - /** - * Current - * - * @return mixed - */ - public function current() - { - if ($this->currentComplete) { - return $this->currentData; - } - - if ($this->resource instanceof \mysqli_stmt) { - $this->loadDataFromMysqliStatement(); - return $this->currentData; - } else { - $this->loadFromMysqliResult(); - return $this->currentData; - } - } - - /** - * Mysqli's binding and returning of statement values - * - * Mysqli requires you to bind variables to the extension in order to - * get data out. These values have to be references: - * @see http://php.net/manual/en/mysqli-stmt.bind-result.php - * - * @throws Exception\RuntimeException - * @return bool - */ - protected function loadDataFromMysqliStatement() - { - $data = null; - // build the default reference based bind structure, if it does not already exist - if ($this->statementBindValues['keys'] === null) { - $this->statementBindValues['keys'] = array(); - $resultResource = $this->resource->result_metadata(); - foreach ($resultResource->fetch_fields() as $col) { - $this->statementBindValues['keys'][] = $col->name; - } - $this->statementBindValues['values'] = array_fill(0, count($this->statementBindValues['keys']), null); - $refs = array(); - foreach ($this->statementBindValues['values'] as $i => &$f) { - $refs[$i] = &$f; - } - call_user_func_array(array($this->resource, 'bind_result'), $this->statementBindValues['values']); - } - - if (($r = $this->resource->fetch()) === null) { - if (!$this->isBuffered) { - $this->resource->close(); - } - return false; - } elseif ($r === false) { - throw new Exception\RuntimeException($this->resource->error); - } - - // dereference - for ($i = 0, $count = count($this->statementBindValues['keys']); $i < $count; $i++) { - $this->currentData[$this->statementBindValues['keys'][$i]] = $this->statementBindValues['values'][$i]; - } - $this->currentComplete = true; - $this->nextComplete = true; - $this->position++; - return true; - } - - /** - * Load from mysqli result - * - * @return bool - */ - protected function loadFromMysqliResult() - { - $this->currentData = null; - - if (($data = $this->resource->fetch_assoc()) === null) { - return false; - } - - $this->position++; - $this->currentData = $data; - $this->currentComplete = true; - $this->nextComplete = true; - $this->position++; - return true; - } - - /** - * Next - * - * @return void - */ - public function next() - { - $this->currentComplete = false; - - if ($this->nextComplete == false) { - $this->position++; - } - - $this->nextComplete = false; - } - - /** - * Key - * - * @return mixed - */ - public function key() - { - return $this->position; - } - - /** - * Rewind - * - * @throws Exception\RuntimeException - * @return void - */ - public function rewind() - { - if ($this->position !== 0) { - if ($this->isBuffered === false) { - throw new Exception\RuntimeException('Unbuffered results cannot be rewound for multiple iterations'); - } - } - $this->resource->data_seek(0); // works for both mysqli_result & mysqli_stmt - $this->currentComplete = false; - $this->position = 0; - } - - /** - * Valid - * - * @return bool - */ - public function valid() - { - if ($this->currentComplete) { - return true; - } - - if ($this->resource instanceof \mysqli_stmt) { - return $this->loadDataFromMysqliStatement(); - } - - return $this->loadFromMysqliResult(); - } - - /** - * Count - * - * @throws Exception\RuntimeException - * @return int - */ - public function count() - { - if ($this->isBuffered === false) { - throw new Exception\RuntimeException('Row count is not available in unbuffered result sets.'); - } - return $this->resource->num_rows; - } - - /** - * Get field count - * - * @return int - */ - public function getFieldCount() - { - return $this->resource->field_count; - } - - /** - * Get generated value - * - * @return mixed|null - */ - public function getGeneratedValue() - { - return $this->generatedValue; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Mysqli/Statement.php b/library/Zend/Db/Adapter/Driver/Mysqli/Statement.php deleted file mode 100755 index d462cd177..000000000 --- a/library/Zend/Db/Adapter/Driver/Mysqli/Statement.php +++ /dev/null @@ -1,315 +0,0 @@ -bufferResults = (bool) $bufferResults; - } - - /** - * Set driver - * - * @param Mysqli $driver - * @return Statement - */ - public function setDriver(Mysqli $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Statement - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Initialize - * - * @param \mysqli $mysqli - * @return Statement - */ - public function initialize(\mysqli $mysqli) - { - $this->mysqli = $mysqli; - return $this; - } - - /** - * Set sql - * - * @param string $sql - * @return Statement - */ - public function setSql($sql) - { - $this->sql = $sql; - return $this; - } - - /** - * Set Parameter container - * - * @param ParameterContainer $parameterContainer - * @return Statement - */ - public function setParameterContainer(ParameterContainer $parameterContainer) - { - $this->parameterContainer = $parameterContainer; - return $this; - } - - /** - * Get resource - * - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Set resource - * - * @param \mysqli_stmt $mysqliStatement - * @return Statement - */ - public function setResource(\mysqli_stmt $mysqliStatement) - { - $this->resource = $mysqliStatement; - $this->isPrepared = true; - return $this; - } - - /** - * Get sql - * - * @return string - */ - public function getSql() - { - return $this->sql; - } - - /** - * Get parameter count - * - * @return ParameterContainer - */ - public function getParameterContainer() - { - return $this->parameterContainer; - } - - /** - * Is prepared - * - * @return bool - */ - public function isPrepared() - { - return $this->isPrepared; - } - - /** - * Prepare - * - * @param string $sql - * @throws Exception\InvalidQueryException - * @throws Exception\RuntimeException - * @return Statement - */ - public function prepare($sql = null) - { - if ($this->isPrepared) { - throw new Exception\RuntimeException('This statement has already been prepared'); - } - - $sql = ($sql) ?: $this->sql; - - $this->resource = $this->mysqli->prepare($sql); - if (!$this->resource instanceof \mysqli_stmt) { - throw new Exception\InvalidQueryException( - 'Statement couldn\'t be produced with sql: ' . $sql, - null, - new Exception\ErrorException($this->mysqli->error, $this->mysqli->errno) - ); - } - - $this->isPrepared = true; - return $this; - } - - /** - * Execute - * - * @param ParameterContainer|array $parameters - * @throws Exception\RuntimeException - * @return mixed - */ - public function execute($parameters = null) - { - if (!$this->isPrepared) { - $this->prepare(); - } - - /** START Standard ParameterContainer Merging Block */ - if (!$this->parameterContainer instanceof ParameterContainer) { - if ($parameters instanceof ParameterContainer) { - $this->parameterContainer = $parameters; - $parameters = null; - } else { - $this->parameterContainer = new ParameterContainer(); - } - } - - if (is_array($parameters)) { - $this->parameterContainer->setFromArray($parameters); - } - - if ($this->parameterContainer->count() > 0) { - $this->bindParametersFromContainer(); - } - /** END Standard ParameterContainer Merging Block */ - - if ($this->profiler) { - $this->profiler->profilerStart($this); - } - - $return = $this->resource->execute(); - - if ($this->profiler) { - $this->profiler->profilerFinish(); - } - - if ($return === false) { - throw new Exception\RuntimeException($this->resource->error); - } - - if ($this->bufferResults === true) { - $this->resource->store_result(); - $this->isPrepared = false; - $buffered = true; - } else { - $buffered = false; - } - - $result = $this->driver->createResult($this->resource, $buffered); - return $result; - } - - /** - * Bind parameters from container - * - * @return void - */ - protected function bindParametersFromContainer() - { - $parameters = $this->parameterContainer->getNamedArray(); - $type = ''; - $args = array(); - - foreach ($parameters as $name => &$value) { - if ($this->parameterContainer->offsetHasErrata($name)) { - switch ($this->parameterContainer->offsetGetErrata($name)) { - case ParameterContainer::TYPE_DOUBLE: - $type .= 'd'; - break; - case ParameterContainer::TYPE_NULL: - $value = null; // as per @see http://www.php.net/manual/en/mysqli-stmt.bind-param.php#96148 - case ParameterContainer::TYPE_INTEGER: - $type .= 'i'; - break; - case ParameterContainer::TYPE_STRING: - default: - $type .= 's'; - break; - } - } else { - $type .= 's'; - } - $args[] = &$value; - } - - if ($args) { - array_unshift($args, $type); - call_user_func_array(array($this->resource, 'bind_param'), $args); - } - } -} diff --git a/library/Zend/Db/Adapter/Driver/Oci8/Connection.php b/library/Zend/Db/Adapter/Driver/Oci8/Connection.php deleted file mode 100755 index 73376521e..000000000 --- a/library/Zend/Db/Adapter/Driver/Oci8/Connection.php +++ /dev/null @@ -1,346 +0,0 @@ -setConnectionParameters($connectionInfo); - } elseif ($connectionInfo instanceof \oci8) { - $this->setResource($connectionInfo); - } elseif (null !== $connectionInfo) { - throw new Exception\InvalidArgumentException('$connection must be an array of parameters, an oci8 resource or null'); - } - } - - /** - * @param Oci8 $driver - * @return Connection - */ - public function setDriver(Oci8 $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Connection - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Set connection parameters - * - * @param array $connectionParameters - * @return Connection - */ - public function setConnectionParameters(array $connectionParameters) - { - $this->connectionParameters = $connectionParameters; - return $this; - } - - /** - * Get connection parameters - * - * @return array - */ - public function getConnectionParameters() - { - return $this->connectionParameters; - } - - /** - * Get current schema - * - * @return string - */ - public function getCurrentSchema() - { - if (!$this->isConnected()) { - $this->connect(); - } - - $query = "SELECT sys_context('USERENV', 'CURRENT_SCHEMA') as \"current_schema\" FROM DUAL"; - $stmt = oci_parse($this->resource, $query); - oci_execute($stmt); - $dbNameArray = oci_fetch_array($stmt, OCI_ASSOC); - return $dbNameArray['current_schema']; - } - - /** - * Set resource - * - * @param resource $resource - * @return Connection - */ - public function setResource($resource) - { - if (!is_resource($resource) || get_resource_type($resource) !== 'oci8 connection') { - throw new Exception\InvalidArgumentException('A resource of type "oci8 connection" was expected'); - } - $this->resource = $resource; - return $this; - } - - /** - * Get resource - * - * @return \oci8 - */ - public function getResource() - { - $this->connect(); - return $this->resource; - } - - /** - * Connect - * - * @return Connection - */ - public function connect() - { - if (is_resource($this->resource)) { - return $this; - } - - // localize - $p = $this->connectionParameters; - - // given a list of key names, test for existence in $p - $findParameterValue = function (array $names) use ($p) { - foreach ($names as $name) { - if (isset($p[$name])) { - return $p[$name]; - } - } - return null; - }; - - // http://www.php.net/manual/en/function.oci-connect.php - $username = $findParameterValue(array('username')); - $password = $findParameterValue(array('password')); - $connectionString = $findParameterValue(array('connection_string', 'connectionstring', 'connection', 'hostname', 'instance')); - $characterSet = $findParameterValue(array('character_set', 'charset', 'encoding')); - $sessionMode = $findParameterValue(array('session_mode')); - - // connection modifiers - $isUnique = $findParameterValue(array('unique')); - $isPersistent = $findParameterValue(array('persistent')); - - if ($isUnique == true) { - $this->resource = oci_new_connect($username, $password, $connectionString, $characterSet, $sessionMode); - } elseif ($isPersistent == true) { - $this->resource = oci_pconnect($username, $password, $connectionString, $characterSet, $sessionMode); - } else { - $this->resource = oci_connect($username, $password, $connectionString, $characterSet, $sessionMode); - } - - if (!$this->resource) { - $e = oci_error(); - throw new Exception\RuntimeException( - 'Connection error', - null, - new Exception\ErrorException($e['message'], $e['code']) - ); - } - - return $this; - } - - /** - * Is connected - * - * @return bool - */ - public function isConnected() - { - return (is_resource($this->resource)); - } - - /** - * Disconnect - */ - public function disconnect() - { - if (is_resource($this->resource)) { - oci_close($this->resource); - } - } - - /** - * Begin transaction - */ - public function beginTransaction() - { - if (!$this->isConnected()) { - $this->connect(); - } - - // A transaction begins when the first SQL statement that changes data is executed with oci_execute() using the OCI_NO_AUTO_COMMIT flag. - $this->inTransaction = true; - } - - /** - * In transaction - * - * @return bool - */ - public function inTransaction() - { - return $this->inTransaction; - } - - /** - * Commit - */ - public function commit() - { - if (!$this->resource) { - $this->connect(); - } - - if ($this->inTransaction) { - $valid = oci_commit($this->resource); - if ($valid === false) { - $e = oci_error($this->resource); - throw new Exception\InvalidQueryException($e['message'], $e['code']); - } - } - } - - /** - * Rollback - * - * @return Connection - */ - public function rollback() - { - if (!$this->resource) { - throw new Exception\RuntimeException('Must be connected before you can rollback.'); - } - - if (!$this->inTransaction) { - throw new Exception\RuntimeException('Must call commit() before you can rollback.'); - } - - $valid = oci_rollback($this->resource); - if ($valid === false) { - $e = oci_error($this->resource); - throw new Exception\InvalidQueryException($e['message'], $e['code']); - } - - return $this; - } - - /** - * Execute - * - * @param string $sql - * @return Result - */ - public function execute($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - if ($this->profiler) { - $this->profiler->profilerStart($sql); - } - - $ociStmt = oci_parse($this->resource, $sql); - - if ($this->inTransaction) { - $valid = @oci_execute($ociStmt, OCI_NO_AUTO_COMMIT); - } else { - $valid = @oci_execute($ociStmt, OCI_COMMIT_ON_SUCCESS); - } - - if ($this->profiler) { - $this->profiler->profilerFinish($sql); - } - - if ($valid === false) { - $e = oci_error($ociStmt); - throw new Exception\InvalidQueryException($e['message'], $e['code']); - } - - $resultPrototype = $this->driver->createResult($ociStmt); - return $resultPrototype; - } - - /** - * Get last generated id - * - * @param null $name Ignored - * @return int - */ - public function getLastGeneratedValue($name = null) - { - // @todo Get Last Generated Value in Connection (this might not apply) - return null; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Oci8/Oci8.php b/library/Zend/Db/Adapter/Driver/Oci8/Oci8.php deleted file mode 100755 index 9685f8c41..000000000 --- a/library/Zend/Db/Adapter/Driver/Oci8/Oci8.php +++ /dev/null @@ -1,223 +0,0 @@ -registerConnection($connection); - $this->registerStatementPrototype(($statementPrototype) ?: new Statement()); - $this->registerResultPrototype(($resultPrototype) ?: new Result()); - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Oci8 - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - if ($this->connection instanceof Profiler\ProfilerAwareInterface) { - $this->connection->setProfiler($profiler); - } - if ($this->statementPrototype instanceof Profiler\ProfilerAwareInterface) { - $this->statementPrototype->setProfiler($profiler); - } - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Register connection - * - * @param Connection $connection - * @return Oci8 - */ - public function registerConnection(Connection $connection) - { - $this->connection = $connection; - $this->connection->setDriver($this); // needs access to driver to createStatement() - return $this; - } - - /** - * Register statement prototype - * - * @param Statement $statementPrototype - * @return Oci8 - */ - public function registerStatementPrototype(Statement $statementPrototype) - { - $this->statementPrototype = $statementPrototype; - $this->statementPrototype->setDriver($this); // needs access to driver to createResult() - return $this; - } - - /** - * @return null|Statement - */ - public function getStatementPrototype() - { - return $this->statementPrototype; - } - - /** - * Register result prototype - * - * @param Result $resultPrototype - * @return Oci8 - */ - public function registerResultPrototype(Result $resultPrototype) - { - $this->resultPrototype = $resultPrototype; - return $this; - } - - /** - * @return null|Result - */ - public function getResultPrototype() - { - return $this->resultPrototype; - } - - /** - * Get database platform name - * - * @param string $nameFormat - * @return string - */ - public function getDatabasePlatformName($nameFormat = self::NAME_FORMAT_CAMELCASE) - { - return 'Oracle'; - } - - /** - * Check environment - */ - public function checkEnvironment() - { - if (!extension_loaded('oci8')) { - throw new Exception\RuntimeException('The Oci8 extension is required for this adapter but the extension is not loaded'); - } - } - - /** - * @return Connection - */ - public function getConnection() - { - return $this->connection; - } - - /** - * @param string $sqlOrResource - * @return Statement - */ - public function createStatement($sqlOrResource = null) - { - $statement = clone $this->statementPrototype; - if (is_resource($sqlOrResource) && get_resource_type($sqlOrResource) == 'oci8 statement') { - $statement->setResource($sqlOrResource); - } else { - if (is_string($sqlOrResource)) { - $statement->setSql($sqlOrResource); - } elseif ($sqlOrResource !== null) { - throw new Exception\InvalidArgumentException( - 'Oci8 only accepts an SQL string or an oci8 resource in ' . __FUNCTION__ - ); - } - if (!$this->connection->isConnected()) { - $this->connection->connect(); - } - $statement->initialize($this->connection->getResource()); - } - return $statement; - } - - /** - * @param resource $resource - * @param null $isBuffered - * @return Result - */ - public function createResult($resource, $isBuffered = null) - { - $result = clone $this->resultPrototype; - $result->initialize($resource, $this->connection->getLastGeneratedValue(), $isBuffered); - return $result; - } - - /** - * @return array - */ - public function getPrepareType() - { - return self::PARAMETERIZATION_NAMED; - } - - /** - * @param string $name - * @param mixed $type - * @return string - */ - public function formatParameterName($name, $type = null) - { - return ':' . $name; - } - - /** - * @return mixed - */ - public function getLastGeneratedValue() - { - return $this->getConnection()->getLastGeneratedValue(); - } -} diff --git a/library/Zend/Db/Adapter/Driver/Oci8/Result.php b/library/Zend/Db/Adapter/Driver/Oci8/Result.php deleted file mode 100755 index f0ae96abd..000000000 --- a/library/Zend/Db/Adapter/Driver/Oci8/Result.php +++ /dev/null @@ -1,224 +0,0 @@ - null, 'values' => array()); - - /** - * @var mixed - */ - protected $generatedValue = null; - - /** - * Initialize - * @param resource $resource - * @return Result - */ - public function initialize($resource /*, $generatedValue, $isBuffered = null*/) - { - if (!is_resource($resource) && get_resource_type($resource) !== 'oci8 statement') { - throw new Exception\InvalidArgumentException('Invalid resource provided.'); - } - $this->resource = $resource; - return $this; - } - - /** - * Force buffering at driver level - * - * Oracle does not support this, to my knowledge (@ralphschindler) - * - * @throws Exception\RuntimeException - */ - public function buffer() - { - return null; - } - - /** - * Is the result buffered? - * - * @return bool - */ - public function isBuffered() - { - return false; - } - - /** - * Return the resource - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Is query result? - * - * @return bool - */ - public function isQueryResult() - { - return (oci_num_fields($this->resource) > 0); - } - - /** - * Get affected rows - * @return int - */ - public function getAffectedRows() - { - return oci_num_rows($this->resource); - } - - /** - * Current - * @return mixed - */ - public function current() - { - if ($this->currentComplete == false) { - if ($this->loadData() === false) { - return false; - } - } - - return $this->currentData; - } - - /** - * Load from oci8 result - * - * @return bool - */ - protected function loadData() - { - $this->currentComplete = true; - $this->currentData = oci_fetch_assoc($this->resource); - - if ($this->currentData !== false) { - $this->position++; - return true; - } - return false; - } - - /** - * Next - */ - public function next() - { - return $this->loadData(); - } - - /** - * Key - * @return mixed - */ - public function key() - { - return $this->position; - } - - /** - * Rewind - */ - public function rewind() - { - if ($this->position > 0) { - throw new Exception\RuntimeException('Oci8 results cannot be rewound for multiple iterations'); - } - } - - /** - * Valid - * @return bool - */ - public function valid() - { - if ($this->currentComplete) { - return ($this->currentData !== false); - } - - return $this->loadData(); - } - - /** - * Count - * @return int - */ - public function count() - { - // @todo OCI8 row count in Driver Result - return null; - } - - /** - * @return int - */ - public function getFieldCount() - { - return oci_num_fields($this->resource); - } - - /** - * @return mixed|null - */ - public function getGeneratedValue() - { - // @todo OCI8 generated value in Driver Result - return null; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Oci8/Statement.php b/library/Zend/Db/Adapter/Driver/Oci8/Statement.php deleted file mode 100755 index 707442fde..000000000 --- a/library/Zend/Db/Adapter/Driver/Oci8/Statement.php +++ /dev/null @@ -1,311 +0,0 @@ -driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Statement - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Initialize - * - * @param resource $oci8 - * @return Statement - */ - public function initialize($oci8) - { - $this->oci8 = $oci8; - return $this; - } - - /** - * Set sql - * - * @param string $sql - * @return Statement - */ - public function setSql($sql) - { - $this->sql = $sql; - return $this; - } - - /** - * Set Parameter container - * - * @param ParameterContainer $parameterContainer - * @return Statement - */ - public function setParameterContainer(ParameterContainer $parameterContainer) - { - $this->parameterContainer = $parameterContainer; - return $this; - } - - /** - * Get resource - * - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Set resource - * - * @param resource $oci8Statement - * @return Statement - */ - public function setResource($oci8Statement) - { - $type = oci_statement_type($oci8Statement); - if (false === $type || 'UNKNOWN' == $type) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid statement provided to %s', - __METHOD__ - )); - } - $this->resource = $oci8Statement; - $this->isPrepared = true; - return $this; - } - - /** - * Get sql - * - * @return string - */ - public function getSql() - { - return $this->sql; - } - - /** - * @return ParameterContainer - */ - public function getParameterContainer() - { - return $this->parameterContainer; - } - - /** - * @return bool - */ - public function isPrepared() - { - return $this->isPrepared; - } - - /** - * @param string $sql - * @return Statement - */ - public function prepare($sql = null) - { - if ($this->isPrepared) { - throw new Exception\RuntimeException('This statement has already been prepared'); - } - - $sql = ($sql) ?: $this->sql; - - // get oci8 statement resource - $this->resource = oci_parse($this->oci8, $sql); - - if (!$this->resource) { - $e = oci_error($this->oci8); - throw new Exception\InvalidQueryException( - 'Statement couldn\'t be produced with sql: ' . $sql, - null, - new Exception\ErrorException($e['message'], $e['code']) - ); - } - - $this->isPrepared = true; - return $this; - } - - /** - * Execute - * - * @param ParameterContainer $parameters - * @return mixed - */ - public function execute($parameters = null) - { - if (!$this->isPrepared) { - $this->prepare(); - } - - /** START Standard ParameterContainer Merging Block */ - if (!$this->parameterContainer instanceof ParameterContainer) { - if ($parameters instanceof ParameterContainer) { - $this->parameterContainer = $parameters; - $parameters = null; - } else { - $this->parameterContainer = new ParameterContainer(); - } - } - - if (is_array($parameters)) { - $this->parameterContainer->setFromArray($parameters); - } - - if ($this->parameterContainer->count() > 0) { - $this->bindParametersFromContainer(); - } - /** END Standard ParameterContainer Merging Block */ - - if ($this->profiler) { - $this->profiler->profilerStart($this); - } - - if ($this->driver->getConnection()->inTransaction()) { - $ret = @oci_execute($this->resource, OCI_NO_AUTO_COMMIT); - } else { - $ret = @oci_execute($this->resource, OCI_COMMIT_ON_SUCCESS); - } - - if ($this->profiler) { - $this->profiler->profilerFinish(); - } - - if ($ret === false) { - $e = oci_error($this->resource); - throw new Exception\RuntimeException($e['message'], $e['code']); - } - - $result = $this->driver->createResult($this->resource); - return $result; - } - - /** - * Bind parameters from container - * - * @param ParameterContainer $pContainer - */ - protected function bindParametersFromContainer() - { - $parameters = $this->parameterContainer->getNamedArray(); - - foreach ($parameters as $name => &$value) { - if ($this->parameterContainer->offsetHasErrata($name)) { - switch ($this->parameterContainer->offsetGetErrata($name)) { - case ParameterContainer::TYPE_NULL: - $type = null; - $value = null; - break; - case ParameterContainer::TYPE_DOUBLE: - case ParameterContainer::TYPE_INTEGER: - $type = SQLT_INT; - if (is_string($value)) { - $value = (int) $value; - } - break; - case ParameterContainer::TYPE_BINARY: - $type = SQLT_BIN; - break; - case ParameterContainer::TYPE_LOB: - $type = OCI_B_CLOB; - $clob = oci_new_descriptor($this->driver->getConnection()->getResource(), OCI_DTYPE_LOB); - $clob->writetemporary($value, OCI_TEMP_CLOB); - $value = $clob; - break; - case ParameterContainer::TYPE_STRING: - default: - $type = SQLT_CHR; - break; - } - } else { - $type = SQLT_CHR; - } - - oci_bind_by_name($this->resource, $name, $value, -1, $type); - } - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pdo/Connection.php b/library/Zend/Db/Adapter/Driver/Pdo/Connection.php deleted file mode 100755 index 1cd2c6667..000000000 --- a/library/Zend/Db/Adapter/Driver/Pdo/Connection.php +++ /dev/null @@ -1,488 +0,0 @@ -setConnectionParameters($connectionParameters); - } elseif ($connectionParameters instanceof \PDO) { - $this->setResource($connectionParameters); - } elseif (null !== $connectionParameters) { - throw new Exception\InvalidArgumentException('$connection must be an array of parameters, a PDO object or null'); - } - } - - /** - * Set driver - * - * @param Pdo $driver - * @return Connection - */ - public function setDriver(Pdo $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Connection - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Get driver name - * - * @return null|string - */ - public function getDriverName() - { - return $this->driverName; - } - - /** - * Set connection parameters - * - * @param array $connectionParameters - * @return void - */ - public function setConnectionParameters(array $connectionParameters) - { - $this->connectionParameters = $connectionParameters; - if (isset($connectionParameters['dsn'])) { - $this->driverName = substr($connectionParameters['dsn'], 0, - strpos($connectionParameters['dsn'], ':') - ); - } elseif (isset($connectionParameters['pdodriver'])) { - $this->driverName = strtolower($connectionParameters['pdodriver']); - } elseif (isset($connectionParameters['driver'])) { - $this->driverName = strtolower(substr( - str_replace(array('-', '_', ' '), '', $connectionParameters['driver']), - 3 - )); - } - } - - /** - * Get connection parameters - * - * @return array - */ - public function getConnectionParameters() - { - return $this->connectionParameters; - } - - /** - * Get the dsn string for this connection - * @throws \Zend\Db\Adapter\Exception\RunTimeException - * @return string - */ - public function getDsn() - { - if (!$this->dsn) { - throw new Exception\RunTimeException("The DSN has not been set or constructed from parameters in connect() for this Connection"); - } - - return $this->dsn; - } - - /** - * Get current schema - * - * @return string - */ - public function getCurrentSchema() - { - if (!$this->isConnected()) { - $this->connect(); - } - - switch ($this->driverName) { - case 'mysql': - $sql = 'SELECT DATABASE()'; - break; - case 'sqlite': - return 'main'; - case 'sqlsrv': - case 'dblib': - $sql = 'SELECT SCHEMA_NAME()'; - break; - case 'pgsql': - default: - $sql = 'SELECT CURRENT_SCHEMA'; - break; - } - - /** @var $result \PDOStatement */ - $result = $this->resource->query($sql); - if ($result instanceof \PDOStatement) { - return $result->fetchColumn(); - } - return false; - } - - /** - * Set resource - * - * @param \PDO $resource - * @return Connection - */ - public function setResource(\PDO $resource) - { - $this->resource = $resource; - $this->driverName = strtolower($this->resource->getAttribute(\PDO::ATTR_DRIVER_NAME)); - return $this; - } - - /** - * Get resource - * - * @return \PDO - */ - public function getResource() - { - if (!$this->isConnected()) { - $this->connect(); - } - return $this->resource; - } - - /** - * Connect - * - * @return Connection - * @throws Exception\InvalidConnectionParametersException - * @throws Exception\RuntimeException - */ - public function connect() - { - if ($this->resource) { - return $this; - } - - $dsn = $username = $password = $hostname = $database = null; - $options = array(); - foreach ($this->connectionParameters as $key => $value) { - switch (strtolower($key)) { - case 'dsn': - $dsn = $value; - break; - case 'driver': - $value = strtolower($value); - if (strpos($value, 'pdo') === 0) { - $pdoDriver = strtolower(substr(str_replace(array('-', '_', ' '), '', $value), 3)); - } - break; - case 'pdodriver': - $pdoDriver = (string) $value; - break; - case 'user': - case 'username': - $username = (string) $value; - break; - case 'pass': - case 'password': - $password = (string) $value; - break; - case 'host': - case 'hostname': - $hostname = (string) $value; - break; - case 'port': - $port = (int) $value; - break; - case 'database': - case 'dbname': - $database = (string) $value; - break; - case 'charset': - $charset = (string) $value; - break; - case 'driver_options': - case 'options': - $value = (array) $value; - $options = array_diff_key($options, $value) + $value; - break; - default: - $options[$key] = $value; - break; - } - } - - if (!isset($dsn) && isset($pdoDriver)) { - $dsn = array(); - switch ($pdoDriver) { - case 'sqlite': - $dsn[] = $database; - break; - case 'sqlsrv': - if (isset($database)) { - $dsn[] = "database={$database}"; - } - if (isset($hostname)) { - $dsn[] = "server={$hostname}"; - } - break; - default: - if (isset($database)) { - $dsn[] = "dbname={$database}"; - } - if (isset($hostname)) { - $dsn[] = "host={$hostname}"; - } - if (isset($port)) { - $dsn[] = "port={$port}"; - } - if (isset($charset) && $pdoDriver != 'pgsql') { - $dsn[] = "charset={$charset}"; - } - break; - } - $dsn = $pdoDriver . ':' . implode(';', $dsn); - } elseif (!isset($dsn)) { - throw new Exception\InvalidConnectionParametersException( - 'A dsn was not provided or could not be constructed from your parameters', - $this->connectionParameters - ); - } - - $this->dsn = $dsn; - - try { - $this->resource = new \PDO($dsn, $username, $password, $options); - $this->resource->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); - if (isset($charset) && $pdoDriver == 'pgsql') { - $this->resource->exec('SET NAMES ' . $this->resource->quote($charset)); - } - $this->driverName = strtolower($this->resource->getAttribute(\PDO::ATTR_DRIVER_NAME)); - } catch (\PDOException $e) { - $code = $e->getCode(); - if (!is_long($code)) { - $code = null; - } - throw new Exception\RuntimeException('Connect Error: ' . $e->getMessage(), $code, $e); - } - - return $this; - } - - /** - * Is connected - * - * @return bool - */ - public function isConnected() - { - return ($this->resource instanceof \PDO); - } - - /** - * Disconnect - * - * @return Connection - */ - public function disconnect() - { - if ($this->isConnected()) { - $this->resource = null; - } - return $this; - } - - /** - * Begin transaction - * - * @return Connection - */ - public function beginTransaction() - { - if (!$this->isConnected()) { - $this->connect(); - } - $this->resource->beginTransaction(); - $this->inTransaction = true; - return $this; - } - - /** - * In transaction - * - * @return bool - */ - public function inTransaction() - { - return $this->inTransaction; - } - - /** - * Commit - * - * @return Connection - */ - public function commit() - { - if (!$this->isConnected()) { - $this->connect(); - } - - $this->resource->commit(); - $this->inTransaction = false; - return $this; - } - - /** - * Rollback - * - * @return Connection - * @throws Exception\RuntimeException - */ - public function rollback() - { - if (!$this->isConnected()) { - throw new Exception\RuntimeException('Must be connected before you can rollback'); - } - - if (!$this->inTransaction) { - throw new Exception\RuntimeException('Must call beginTransaction() before you can rollback'); - } - - $this->resource->rollBack(); - return $this; - } - - /** - * Execute - * - * @param $sql - * @return Result - * @throws Exception\InvalidQueryException - */ - public function execute($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - if ($this->profiler) { - $this->profiler->profilerStart($sql); - } - - $resultResource = $this->resource->query($sql); - - if ($this->profiler) { - $this->profiler->profilerFinish($sql); - } - - if ($resultResource === false) { - $errorInfo = $this->resource->errorInfo(); - throw new Exception\InvalidQueryException($errorInfo[2]); - } - - $result = $this->driver->createResult($resultResource, $sql); - return $result; - } - - /** - * Prepare - * - * @param string $sql - * @return Statement - */ - public function prepare($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - $statement = $this->driver->createStatement($sql); - return $statement; - } - - /** - * Get last generated id - * - * @param string $name - * @return string|null|false - */ - public function getLastGeneratedValue($name = null) - { - if ($name === null && $this->driverName == 'pgsql') { - return null; - } - - try { - return $this->resource->lastInsertId($name); - } catch (\Exception $e) { - // do nothing - } - return false; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pdo/Feature/OracleRowCounter.php b/library/Zend/Db/Adapter/Driver/Pdo/Feature/OracleRowCounter.php deleted file mode 100755 index 2a25cdd6b..000000000 --- a/library/Zend/Db/Adapter/Driver/Pdo/Feature/OracleRowCounter.php +++ /dev/null @@ -1,78 +0,0 @@ -getSql(); - if ($sql == '' || stripos($sql, 'select') === false) { - return null; - } - $countSql = 'SELECT COUNT(*) as "count" FROM (' . $sql . ')'; - $countStmt->prepare($countSql); - $result = $countStmt->execute(); - $countRow = $result->getResource()->fetch(\PDO::FETCH_ASSOC); - unset($statement, $result); - return $countRow['count']; - } - - /** - * @param $sql - * @return null|int - */ - public function getCountForSql($sql) - { - if (stripos($sql, 'select') === false) { - return null; - } - $countSql = 'SELECT COUNT(*) as count FROM (' . $sql . ')'; - /** @var $pdo \PDO */ - $pdo = $this->driver->getConnection()->getResource(); - $result = $pdo->query($countSql); - $countRow = $result->fetch(\PDO::FETCH_ASSOC); - return $countRow['count']; - } - - /** - * @param $context - * @return \Closure - */ - public function getRowCountClosure($context) - { - $oracleRowCounter = $this; - return function () use ($oracleRowCounter, $context) { - /** @var $oracleRowCounter OracleRowCounter */ - return ($context instanceof Pdo\Statement) - ? $oracleRowCounter->getCountForStatement($context) - : $oracleRowCounter->getCountForSql($context); - }; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pdo/Feature/SqliteRowCounter.php b/library/Zend/Db/Adapter/Driver/Pdo/Feature/SqliteRowCounter.php deleted file mode 100755 index 13c8d66d4..000000000 --- a/library/Zend/Db/Adapter/Driver/Pdo/Feature/SqliteRowCounter.php +++ /dev/null @@ -1,78 +0,0 @@ -getSql(); - if ($sql == '' || stripos($sql, 'select') === false) { - return null; - } - $countSql = 'SELECT COUNT(*) as "count" FROM (' . $sql . ')'; - $countStmt->prepare($countSql); - $result = $countStmt->execute(); - $countRow = $result->getResource()->fetch(\PDO::FETCH_ASSOC); - unset($statement, $result); - return $countRow['count']; - } - - /** - * @param $sql - * @return null|int - */ - public function getCountForSql($sql) - { - if (stripos($sql, 'select') === false) { - return null; - } - $countSql = 'SELECT COUNT(*) as count FROM (' . $sql . ')'; - /** @var $pdo \PDO */ - $pdo = $this->driver->getConnection()->getResource(); - $result = $pdo->query($countSql); - $countRow = $result->fetch(\PDO::FETCH_ASSOC); - return $countRow['count']; - } - - /** - * @param $context - * @return \Closure - */ - public function getRowCountClosure($context) - { - $sqliteRowCounter = $this; - return function () use ($sqliteRowCounter, $context) { - /** @var $sqliteRowCounter SqliteRowCounter */ - return ($context instanceof Pdo\Statement) - ? $sqliteRowCounter->getCountForStatement($context) - : $sqliteRowCounter->getCountForSql($context); - }; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pdo/Pdo.php b/library/Zend/Db/Adapter/Driver/Pdo/Pdo.php deleted file mode 100755 index 3de7beb49..000000000 --- a/library/Zend/Db/Adapter/Driver/Pdo/Pdo.php +++ /dev/null @@ -1,314 +0,0 @@ -registerConnection($connection); - $this->registerStatementPrototype(($statementPrototype) ?: new Statement()); - $this->registerResultPrototype(($resultPrototype) ?: new Result()); - if (is_array($features)) { - foreach ($features as $name => $feature) { - $this->addFeature($name, $feature); - } - } elseif ($features instanceof AbstractFeature) { - $this->addFeature($features->getName(), $features); - } elseif ($features === self::FEATURES_DEFAULT) { - $this->setupDefaultFeatures(); - } - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Pdo - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - if ($this->connection instanceof Profiler\ProfilerAwareInterface) { - $this->connection->setProfiler($profiler); - } - if ($this->statementPrototype instanceof Profiler\ProfilerAwareInterface) { - $this->statementPrototype->setProfiler($profiler); - } - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Register connection - * - * @param Connection $connection - * @return Pdo - */ - public function registerConnection(Connection $connection) - { - $this->connection = $connection; - $this->connection->setDriver($this); - return $this; - } - - /** - * Register statement prototype - * - * @param Statement $statementPrototype - */ - public function registerStatementPrototype(Statement $statementPrototype) - { - $this->statementPrototype = $statementPrototype; - $this->statementPrototype->setDriver($this); - } - - /** - * Register result prototype - * - * @param Result $resultPrototype - */ - public function registerResultPrototype(Result $resultPrototype) - { - $this->resultPrototype = $resultPrototype; - } - - /** - * Add feature - * - * @param string $name - * @param AbstractFeature $feature - * @return Pdo - */ - public function addFeature($name, $feature) - { - if ($feature instanceof AbstractFeature) { - $name = $feature->getName(); // overwrite the name, just in case - $feature->setDriver($this); - } - $this->features[$name] = $feature; - return $this; - } - - /** - * Setup the default features for Pdo - * - * @return Pdo - */ - public function setupDefaultFeatures() - { - $driverName = $this->connection->getDriverName(); - if ($driverName == 'sqlite') { - $this->addFeature(null, new Feature\SqliteRowCounter); - } elseif ($driverName == 'oci') { - $this->addFeature(null, new Feature\OracleRowCounter); - } - return $this; - } - - /** - * Get feature - * - * @param $name - * @return AbstractFeature|false - */ - public function getFeature($name) - { - if (isset($this->features[$name])) { - return $this->features[$name]; - } - return false; - } - - /** - * Get database platform name - * - * @param string $nameFormat - * @return string - */ - public function getDatabasePlatformName($nameFormat = self::NAME_FORMAT_CAMELCASE) - { - $name = $this->getConnection()->getDriverName(); - if ($nameFormat == self::NAME_FORMAT_CAMELCASE) { - switch ($name) { - case 'pgsql': - return 'Postgresql'; - case 'oci': - return 'Oracle'; - case 'dblib': - case 'sqlsrv': - return 'SqlServer'; - default: - return ucfirst($name); - } - } else { - switch ($name) { - case 'sqlite': - return 'SQLite'; - case 'mysql': - return 'MySQL'; - case 'pgsql': - return 'PostgreSQL'; - case 'oci': - return 'Oracle'; - case 'dblib': - case 'sqlsrv': - return 'SQLServer'; - default: - return ucfirst($name); - } - } - } - - /** - * Check environment - */ - public function checkEnvironment() - { - if (!extension_loaded('PDO')) { - throw new Exception\RuntimeException('The PDO extension is required for this adapter but the extension is not loaded'); - } - } - - /** - * @return Connection - */ - public function getConnection() - { - return $this->connection; - } - - /** - * @param string|PDOStatement $sqlOrResource - * @return Statement - */ - public function createStatement($sqlOrResource = null) - { - $statement = clone $this->statementPrototype; - if ($sqlOrResource instanceof PDOStatement) { - $statement->setResource($sqlOrResource); - } else { - if (is_string($sqlOrResource)) { - $statement->setSql($sqlOrResource); - } - if (!$this->connection->isConnected()) { - $this->connection->connect(); - } - $statement->initialize($this->connection->getResource()); - } - return $statement; - } - - /** - * @param resource $resource - * @param mixed $context - * @return Result - */ - public function createResult($resource, $context = null) - { - $result = clone $this->resultPrototype; - $rowCount = null; - - // special feature, sqlite PDO counter - if ($this->connection->getDriverName() == 'sqlite' - && ($sqliteRowCounter = $this->getFeature('SqliteRowCounter')) - && $resource->columnCount() > 0) { - $rowCount = $sqliteRowCounter->getRowCountClosure($context); - } - - // special feature, oracle PDO counter - if ($this->connection->getDriverName() == 'oci' - && ($oracleRowCounter = $this->getFeature('OracleRowCounter')) - && $resource->columnCount() > 0) { - $rowCount = $oracleRowCounter->getRowCountClosure($context); - } - - - $result->initialize($resource, $this->connection->getLastGeneratedValue(), $rowCount); - return $result; - } - - /** - * @return array - */ - public function getPrepareType() - { - return self::PARAMETERIZATION_NAMED; - } - - /** - * @param string $name - * @param string|null $type - * @return string - */ - public function formatParameterName($name, $type = null) - { - if ($type == null && !is_numeric($name) || $type == self::PARAMETERIZATION_NAMED) { - return ':' . $name; - } - - return '?'; - } - - /** - * @return mixed - */ - public function getLastGeneratedValue($name = null) - { - return $this->connection->getLastGeneratedValue($name); - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pdo/Result.php b/library/Zend/Db/Adapter/Driver/Pdo/Result.php deleted file mode 100755 index 9323282d6..000000000 --- a/library/Zend/Db/Adapter/Driver/Pdo/Result.php +++ /dev/null @@ -1,226 +0,0 @@ -resource = $resource; - $this->generatedValue = $generatedValue; - $this->rowCount = $rowCount; - - return $this; - } - - /** - * @return null - */ - public function buffer() - { - return null; - } - - /** - * @return bool|null - */ - public function isBuffered() - { - return false; - } - - /** - * Get resource - * - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Get the data - * @return array - */ - public function current() - { - if ($this->currentComplete) { - return $this->currentData; - } - - $this->currentData = $this->resource->fetch(\PDO::FETCH_ASSOC); - $this->currentComplete = true; - return $this->currentData; - } - - /** - * Next - * - * @return mixed - */ - public function next() - { - $this->currentData = $this->resource->fetch(\PDO::FETCH_ASSOC); - $this->currentComplete = true; - $this->position++; - return $this->currentData; - } - - /** - * Key - * - * @return mixed - */ - public function key() - { - return $this->position; - } - - /** - * @throws Exception\RuntimeException - * @return void - */ - public function rewind() - { - if ($this->statementMode == self::STATEMENT_MODE_FORWARD && $this->position > 0) { - throw new Exception\RuntimeException( - 'This result is a forward only result set, calling rewind() after moving forward is not supported' - ); - } - $this->currentData = $this->resource->fetch(\PDO::FETCH_ASSOC); - $this->currentComplete = true; - $this->position = 0; - } - - /** - * Valid - * - * @return bool - */ - public function valid() - { - return ($this->currentData !== false); - } - - /** - * Count - * - * @return int - */ - public function count() - { - if (is_int($this->rowCount)) { - return $this->rowCount; - } - if ($this->rowCount instanceof \Closure) { - $this->rowCount = (int) call_user_func($this->rowCount); - } else { - $this->rowCount = (int) $this->resource->rowCount(); - } - return $this->rowCount; - } - - /** - * @return int - */ - public function getFieldCount() - { - return $this->resource->columnCount(); - } - - /** - * Is query result - * - * @return bool - */ - public function isQueryResult() - { - return ($this->resource->columnCount() > 0); - } - - /** - * Get affected rows - * - * @return int - */ - public function getAffectedRows() - { - return $this->resource->rowCount(); - } - - /** - * @return mixed|null - */ - public function getGeneratedValue() - { - return $this->generatedValue; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pdo/Statement.php b/library/Zend/Db/Adapter/Driver/Pdo/Statement.php deleted file mode 100755 index 891bec9d7..000000000 --- a/library/Zend/Db/Adapter/Driver/Pdo/Statement.php +++ /dev/null @@ -1,310 +0,0 @@ -driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Statement - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Initialize - * - * @param \PDO $connectionResource - * @return Statement - */ - public function initialize(\PDO $connectionResource) - { - $this->pdo = $connectionResource; - return $this; - } - - /** - * Set resource - * - * @param \PDOStatement $pdoStatement - * @return Statement - */ - public function setResource(\PDOStatement $pdoStatement) - { - $this->resource = $pdoStatement; - return $this; - } - - /** - * Get resource - * - * @return mixed - */ - public function getResource() - { - return $this->resource; - } - - /** - * Set sql - * - * @param string $sql - * @return Statement - */ - public function setSql($sql) - { - $this->sql = $sql; - return $this; - } - - /** - * Get sql - * - * @return string - */ - public function getSql() - { - return $this->sql; - } - - /** - * @param ParameterContainer $parameterContainer - * @return Statement - */ - public function setParameterContainer(ParameterContainer $parameterContainer) - { - $this->parameterContainer = $parameterContainer; - return $this; - } - - /** - * @return ParameterContainer - */ - public function getParameterContainer() - { - return $this->parameterContainer; - } - - /** - * @param string $sql - * @throws Exception\RuntimeException - */ - public function prepare($sql = null) - { - if ($this->isPrepared) { - throw new Exception\RuntimeException('This statement has been prepared already'); - } - - if ($sql == null) { - $sql = $this->sql; - } - - $this->resource = $this->pdo->prepare($sql); - - if ($this->resource === false) { - $error = $this->pdo->errorInfo(); - throw new Exception\RuntimeException($error[2]); - } - - $this->isPrepared = true; - } - - /** - * @return bool - */ - public function isPrepared() - { - return $this->isPrepared; - } - - /** - * @param mixed $parameters - * @throws Exception\InvalidQueryException - * @return Result - */ - public function execute($parameters = null) - { - if (!$this->isPrepared) { - $this->prepare(); - } - - /** START Standard ParameterContainer Merging Block */ - if (!$this->parameterContainer instanceof ParameterContainer) { - if ($parameters instanceof ParameterContainer) { - $this->parameterContainer = $parameters; - $parameters = null; - } else { - $this->parameterContainer = new ParameterContainer(); - } - } - - if (is_array($parameters)) { - $this->parameterContainer->setFromArray($parameters); - } - - if ($this->parameterContainer->count() > 0) { - $this->bindParametersFromContainer(); - } - /** END Standard ParameterContainer Merging Block */ - - if ($this->profiler) { - $this->profiler->profilerStart($this); - } - - try { - $this->resource->execute(); - } catch (\PDOException $e) { - if ($this->profiler) { - $this->profiler->profilerFinish(); - } - throw new Exception\InvalidQueryException( - 'Statement could not be executed (' . implode(' - ', $this->resource->errorInfo()) . ')', - null, - $e - ); - } - - if ($this->profiler) { - $this->profiler->profilerFinish(); - } - - $result = $this->driver->createResult($this->resource, $this); - return $result; - } - - /** - * Bind parameters from container - */ - protected function bindParametersFromContainer() - { - if ($this->parametersBound) { - return; - } - - $parameters = $this->parameterContainer->getNamedArray(); - foreach ($parameters as $name => &$value) { - if (is_bool($value)) { - $type = \PDO::PARAM_BOOL; - } elseif (is_int($value)) { - $type = \PDO::PARAM_INT; - } else { - $type = \PDO::PARAM_STR; - } - if ($this->parameterContainer->offsetHasErrata($name)) { - switch ($this->parameterContainer->offsetGetErrata($name)) { - case ParameterContainer::TYPE_INTEGER: - $type = \PDO::PARAM_INT; - break; - case ParameterContainer::TYPE_NULL: - $type = \PDO::PARAM_NULL; - break; - case ParameterContainer::TYPE_LOB: - $type = \PDO::PARAM_LOB; - break; - } - } - - // parameter is named or positional, value is reference - $parameter = is_int($name) ? ($name + 1) : $name; - $this->resource->bindParam($parameter, $value, $type); - } - } - - /** - * Perform a deep clone - * @return Statement A cloned statement - */ - public function __clone() - { - $this->isPrepared = false; - $this->parametersBound = false; - $this->resource = null; - if ($this->parameterContainer) { - $this->parameterContainer = clone $this->parameterContainer; - } - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pgsql/Connection.php b/library/Zend/Db/Adapter/Driver/Pgsql/Connection.php deleted file mode 100755 index fa91289a4..000000000 --- a/library/Zend/Db/Adapter/Driver/Pgsql/Connection.php +++ /dev/null @@ -1,311 +0,0 @@ -setConnectionParameters($connectionInfo); - } elseif (is_resource($connectionInfo)) { - $this->setResource($connectionInfo); - } - } - - /** - * Set connection parameters - * - * @param array $connectionParameters - * @return Connection - */ - public function setConnectionParameters(array $connectionParameters) - { - $this->connectionParameters = $connectionParameters; - return $this; - } - - /** - * Set driver - * - * @param Pgsql $driver - * @return Connection - */ - public function setDriver(Pgsql $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Connection - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Set resource - * - * @param resource $resource - * @return Connection - */ - public function setResource($resource) - { - $this->resource = $resource; - return; - } - - /** - * Get current schema - * - * @return null|string - */ - public function getCurrentSchema() - { - if (!$this->isConnected()) { - $this->connect(); - } - - $result = pg_query($this->resource, 'SELECT CURRENT_SCHEMA AS "currentschema"'); - if ($result == false) { - return null; - } - return pg_fetch_result($result, 0, 'currentschema'); - } - - /** - * Get resource - * - * @return resource - */ - public function getResource() - { - if (!$this->isConnected()) { - $this->connect(); - } - return $this->resource; - } - - /** - * Connect to the database - * - * @return Connection - * @throws Exception\RuntimeException on failure - */ - public function connect() - { - if (is_resource($this->resource)) { - return $this; - } - - // localize - $p = $this->connectionParameters; - - // given a list of key names, test for existence in $p - $findParameterValue = function (array $names) use ($p) { - foreach ($names as $name) { - if (isset($p[$name])) { - return $p[$name]; - } - } - return null; - }; - - $connection = array(); - $connection['host'] = $findParameterValue(array('hostname', 'host')); - $connection['user'] = $findParameterValue(array('username', 'user')); - $connection['password'] = $findParameterValue(array('password', 'passwd', 'pw')); - $connection['dbname'] = $findParameterValue(array('database', 'dbname', 'db', 'schema')); - $connection['port'] = (isset($p['port'])) ? (int) $p['port'] : null; - $connection['socket'] = (isset($p['socket'])) ? $p['socket'] : null; - - $connection = array_filter($connection); // remove nulls - $connection = http_build_query($connection, null, ' '); // @link http://php.net/pg_connect - - set_error_handler(function ($number, $string) { - throw new Exception\RuntimeException( - __METHOD__ . ': Unable to connect to database', null, new Exception\ErrorException($string, $number) - ); - }); - $this->resource = pg_connect($connection); - restore_error_handler(); - - if ($this->resource === false) { - throw new Exception\RuntimeException(sprintf( - '%s: Unable to connect to database', - __METHOD__ - )); - } - - return $this; - } - - /** - * @return bool - */ - public function isConnected() - { - return (is_resource($this->resource)); - } - - /** - * @return void - */ - public function disconnect() - { - pg_close($this->resource); - } - - /** - * @return void - */ - public function beginTransaction() - { - if ($this->inTransaction) { - throw new Exception\RuntimeException('Nested transactions are not supported'); - } - - if (!$this->isConnected()) { - $this->connect(); - } - - pg_query($this->resource, 'BEGIN'); - $this->inTransaction = true; - } - - /** - * In transaction - * - * @return bool - */ - public function inTransaction() - { - return $this->inTransaction; - } - - /** - * @return void - */ - public function commit() - { - if (!$this->inTransaction) { - return; // We ignore attempts to commit non-existing transaction - } - - pg_query($this->resource, 'COMMIT'); - $this->inTransaction = false; - } - - /** - * @return void - */ - public function rollback() - { - if (!$this->inTransaction) { - return; - } - - pg_query($this->resource, 'ROLLBACK'); - $this->inTransaction = false; - } - - /** - * @param string $sql - * @throws Exception\InvalidQueryException - * @return resource|\Zend\Db\ResultSet\ResultSetInterface - */ - public function execute($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - if ($this->profiler) { - $this->profiler->profilerStart($sql); - } - - $resultResource = pg_query($this->resource, $sql); - - if ($this->profiler) { - $this->profiler->profilerFinish($sql); - } - - // if the returnValue is something other than a pg result resource, bypass wrapping it - if ($resultResource === false) { - throw new Exception\InvalidQueryException(pg_errormessage()); - } - - $resultPrototype = $this->driver->createResult(($resultResource === true) ? $this->resource : $resultResource); - return $resultPrototype; - } - - /** - * @param null $name Ignored - * @return string - */ - public function getLastGeneratedValue($name = null) - { - if ($name == null) { - return null; - } - $result = pg_query($this->resource, 'SELECT CURRVAL(\'' . str_replace('\'', '\\\'', $name) . '\') as "currval"'); - return pg_fetch_result($result, 0, 'currval'); - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pgsql/Pgsql.php b/library/Zend/Db/Adapter/Driver/Pgsql/Pgsql.php deleted file mode 100755 index 36e5e0f29..000000000 --- a/library/Zend/Db/Adapter/Driver/Pgsql/Pgsql.php +++ /dev/null @@ -1,227 +0,0 @@ - false - ); - - /** - * Constructor - * - * @param array|Connection|resource $connection - * @param null|Statement $statementPrototype - * @param null|Result $resultPrototype - * @param array $options - */ - public function __construct($connection, Statement $statementPrototype = null, Result $resultPrototype = null, $options = null) - { - if (!$connection instanceof Connection) { - $connection = new Connection($connection); - } - - $this->registerConnection($connection); - $this->registerStatementPrototype(($statementPrototype) ?: new Statement()); - $this->registerResultPrototype(($resultPrototype) ?: new Result()); - } - - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - if ($this->connection instanceof Profiler\ProfilerAwareInterface) { - $this->connection->setProfiler($profiler); - } - if ($this->statementPrototype instanceof Profiler\ProfilerAwareInterface) { - $this->statementPrototype->setProfiler($profiler); - } - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Register connection - * - * @param Connection $connection - * @return Pgsql - */ - public function registerConnection(Connection $connection) - { - $this->connection = $connection; - $this->connection->setDriver($this); - return $this; - } - - /** - * Register statement prototype - * - * @param Statement $statement - * @return Pgsql - */ - public function registerStatementPrototype(Statement $statement) - { - $this->statementPrototype = $statement; - $this->statementPrototype->setDriver($this); // needs access to driver to createResult() - return $this; - } - - /** - * Register result prototype - * - * @param Result $result - * @return Pgsql - */ - public function registerResultPrototype(Result $result) - { - $this->resultPrototype = $result; - return $this; - } - - /** - * Get database platform name - * - * @param string $nameFormat - * @return string - */ - public function getDatabasePlatformName($nameFormat = self::NAME_FORMAT_CAMELCASE) - { - if ($nameFormat == self::NAME_FORMAT_CAMELCASE) { - return 'Postgresql'; - } - - return 'PostgreSQL'; - } - - /** - * Check environment - * - * @throws Exception\RuntimeException - * @return bool - */ - public function checkEnvironment() - { - if (!extension_loaded('pgsql')) { - throw new Exception\RuntimeException('The PostgreSQL (pgsql) extension is required for this adapter but the extension is not loaded'); - } - } - - /** - * Get connection - * - * @return Connection - */ - public function getConnection() - { - return $this->connection; - } - - /** - * Create statement - * - * @param string|null $sqlOrResource - * @return Statement - */ - public function createStatement($sqlOrResource = null) - { - $statement = clone $this->statementPrototype; - - if (is_string($sqlOrResource)) { - $statement->setSql($sqlOrResource); - } - - if (!$this->connection->isConnected()) { - $this->connection->connect(); - } - - $statement->initialize($this->connection->getResource()); - return $statement; - } - - /** - * Create result - * - * @param resource $resource - * @return Result - */ - public function createResult($resource) - { - $result = clone $this->resultPrototype; - $result->initialize($resource, $this->connection->getLastGeneratedValue()); - return $result; - } - - /** - * Get prepare Type - * - * @return array - */ - public function getPrepareType() - { - return self::PARAMETERIZATION_POSITIONAL; - } - - /** - * Format parameter name - * - * @param string $name - * @param mixed $type - * @return string - */ - public function formatParameterName($name, $type = null) - { - return '$#'; - } - - /** - * Get last generated value - * - * @param string $name - * @return mixed - */ - public function getLastGeneratedValue($name = null) - { - return $this->connection->getLastGeneratedValue($name); - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pgsql/Result.php b/library/Zend/Db/Adapter/Driver/Pgsql/Result.php deleted file mode 100755 index 6c2410dae..000000000 --- a/library/Zend/Db/Adapter/Driver/Pgsql/Result.php +++ /dev/null @@ -1,192 +0,0 @@ -resource = $resource; - $this->count = pg_num_rows($this->resource); - $this->generatedValue = $generatedValue; - } - - /** - * Current - * - * @return array|bool|mixed - */ - public function current() - { - if ($this->count === 0) { - return false; - } - return pg_fetch_assoc($this->resource, $this->position); - } - - /** - * Next - * - * @return void - */ - public function next() - { - $this->position++; - } - - /** - * Key - * - * @return int|mixed - */ - public function key() - { - return $this->position; - } - - /** - * Valid - * - * @return bool - */ - public function valid() - { - return ($this->position < $this->count); - } - - /** - * Rewind - * - * @return void - */ - public function rewind() - { - $this->position = 0; - } - - /** - * Buffer - * - * @return null - */ - public function buffer() - { - return null; - } - - /** - * Is buffered - * - * @return false - */ - public function isBuffered() - { - return false; - } - - /** - * Is query result - * - * @return bool - */ - public function isQueryResult() - { - return (pg_num_fields($this->resource) > 0); - } - - /** - * Get affected rows - * - * @return int - */ - public function getAffectedRows() - { - return pg_affected_rows($this->resource); - } - - /** - * Get generated value - * - * @return mixed|null - */ - public function getGeneratedValue() - { - return $this->generatedValue; - } - - /** - * Get resource - */ - public function getResource() - { - // TODO: Implement getResource() method. - } - - /** - * Count - * - * (PHP 5 >= 5.1.0)
- * Count elements of an object - * @link http://php.net/manual/en/countable.count.php - * @return int The custom count as an integer. - *

- *

- * The return value is cast to an integer. - */ - public function count() - { - return $this->count; - } - - /** - * Get field count - * - * @return int - */ - public function getFieldCount() - { - return pg_num_fields($this->resource); - } -} diff --git a/library/Zend/Db/Adapter/Driver/Pgsql/Statement.php b/library/Zend/Db/Adapter/Driver/Pgsql/Statement.php deleted file mode 100755 index c105a6647..000000000 --- a/library/Zend/Db/Adapter/Driver/Pgsql/Statement.php +++ /dev/null @@ -1,241 +0,0 @@ -driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Statement - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Initialize - * - * @param resource $pgsql - * @return void - * @throws Exception\RuntimeException for invalid or missing postgresql connection - */ - public function initialize($pgsql) - { - if (!is_resource($pgsql) || get_resource_type($pgsql) !== 'pgsql link') { - throw new Exception\RuntimeException(sprintf( - '%s: Invalid or missing postgresql connection; received "%s"', - __METHOD__, - get_resource_type($pgsql) - )); - } - $this->pgsql = $pgsql; - } - - /** - * Get resource - * - * @return resource - */ - public function getResource() - { - // TODO: Implement getResource() method. - } - - /** - * Set sql - * - * @param string $sql - * @return Statement - */ - public function setSql($sql) - { - $this->sql = $sql; - return $this; - } - - /** - * Get sql - * - * @return string - */ - public function getSql() - { - return $this->sql; - } - - /** - * Set parameter container - * - * @param ParameterContainer $parameterContainer - * @return Statement - */ - public function setParameterContainer(ParameterContainer $parameterContainer) - { - $this->parameterContainer = $parameterContainer; - return $this; - } - - /** - * Get parameter container - * - * @return ParameterContainer - */ - public function getParameterContainer() - { - return $this->parameterContainer; - } - - /** - * Prepare - * - * @param string $sql - */ - public function prepare($sql = null) - { - $sql = ($sql) ?: $this->sql; - - $pCount = 1; - $sql = preg_replace_callback( - '#\$\##', function ($foo) use (&$pCount) { - return '$' . $pCount++; - }, - $sql - ); - - $this->sql = $sql; - $this->statementName = 'statement' . ++static::$statementIndex; - $this->resource = pg_prepare($this->pgsql, $this->statementName, $sql); - } - - /** - * Is prepared - * - * @return bool - */ - public function isPrepared() - { - return isset($this->resource); - } - - /** - * Execute - * - * @param ParameterContainer|null $parameters - * @throws Exception\InvalidQueryException - * @return Result - */ - public function execute($parameters = null) - { - if (!$this->isPrepared()) { - $this->prepare(); - } - - /** START Standard ParameterContainer Merging Block */ - if (!$this->parameterContainer instanceof ParameterContainer) { - if ($parameters instanceof ParameterContainer) { - $this->parameterContainer = $parameters; - $parameters = null; - } else { - $this->parameterContainer = new ParameterContainer(); - } - } - - if (is_array($parameters)) { - $this->parameterContainer->setFromArray($parameters); - } - - if ($this->parameterContainer->count() > 0) { - $parameters = $this->parameterContainer->getPositionalArray(); - } - /** END Standard ParameterContainer Merging Block */ - - if ($this->profiler) { - $this->profiler->profilerStart($this); - } - - $resultResource = pg_execute($this->pgsql, $this->statementName, (array) $parameters); - - if ($this->profiler) { - $this->profiler->profilerFinish(); - } - - if ($resultResource === false) { - throw new Exception\InvalidQueryException(pg_last_error()); - } - - $result = $this->driver->createResult($resultResource); - return $result; - } -} diff --git a/library/Zend/Db/Adapter/Driver/ResultInterface.php b/library/Zend/Db/Adapter/Driver/ResultInterface.php deleted file mode 100755 index cb1f40784..000000000 --- a/library/Zend/Db/Adapter/Driver/ResultInterface.php +++ /dev/null @@ -1,67 +0,0 @@ -setConnectionParameters($connectionInfo); - } elseif (is_resource($connectionInfo)) { - $this->setResource($connectionInfo); - } else { - throw new Exception\InvalidArgumentException('$connection must be an array of parameters or a resource'); - } - } - - /** - * Set driver - * - * @param Sqlsrv $driver - * @return Connection - */ - public function setDriver(Sqlsrv $driver) - { - $this->driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Connection - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Set connection parameters - * - * @param array $connectionParameters - * @return Connection - */ - public function setConnectionParameters(array $connectionParameters) - { - $this->connectionParameters = $connectionParameters; - return $this; - } - - /** - * Get connection parameters - * - * @return array - */ - public function getConnectionParameters() - { - return $this->connectionParameters; - } - - /** - * Get current schema - * - * @return string - */ - public function getCurrentSchema() - { - if (!$this->isConnected()) { - $this->connect(); - } - - $result = sqlsrv_query($this->resource, 'SELECT SCHEMA_NAME()'); - $r = sqlsrv_fetch_array($result); - return $r[0]; - } - - /** - * Set resource - * - * @param resource $resource - * @throws Exception\InvalidArgumentException - * @return Connection - */ - public function setResource($resource) - { - if (get_resource_type($resource) !== 'SQL Server Connection') { - throw new Exception\InvalidArgumentException('Resource provided was not of type SQL Server Connection'); - } - $this->resource = $resource; - return $this; - } - - /** - * @return resource - */ - public function getResource() - { - if (!$this->isConnected()) { - $this->connect(); - } - return $this->resource; - } - - /** - * Connect - * - * @throws Exception\RuntimeException - * @return Connection - */ - public function connect() - { - if ($this->resource) { - return $this; - } - - $serverName = '.'; - $params = array( - 'ReturnDatesAsStrings' => true - ); - foreach ($this->connectionParameters as $key => $value) { - switch (strtolower($key)) { - case 'hostname': - case 'servername': - $serverName = (string) $value; - break; - case 'username': - case 'uid': - $params['UID'] = (string) $value; - break; - case 'password': - case 'pwd': - $params['PWD'] = (string) $value; - break; - case 'database': - case 'dbname': - $params['Database'] = (string) $value; - break; - case 'charset': - $params['CharacterSet'] = (string) $value; - break; - case 'driver_options': - case 'options': - $params = array_merge($params, (array) $value); - break; - - } - } - - $this->resource = sqlsrv_connect($serverName, $params); - - if (!$this->resource) { - throw new Exception\RuntimeException( - 'Connect Error', - null, - new ErrorException(sqlsrv_errors()) - ); - } - - return $this; - } - - /** - * Is connected - * @return bool - */ - public function isConnected() - { - return (is_resource($this->resource)); - } - - /** - * Disconnect - */ - public function disconnect() - { - sqlsrv_close($this->resource); - $this->resource = null; - } - - /** - * Begin transaction - */ - public function beginTransaction() - { - if (!$this->resource) { - $this->connect(); - } - if (sqlsrv_begin_transaction($this->resource) === false) { - throw new Exception\RuntimeException( - 'Begin transaction failed', - null, - new ErrorException(sqlsrv_errors()) - ); - } - - $this->inTransaction = true; - } - - /** - * In transaction - * - * @return bool - */ - public function inTransaction() - { - return $this->inTransaction; - } - - /** - * Commit - */ - public function commit() - { - // http://msdn.microsoft.com/en-us/library/cc296194.aspx - - if (!$this->resource) { - $this->connect(); - } - - $this->inTransaction = false; - - return sqlsrv_commit($this->resource); - } - - /** - * Rollback - */ - public function rollback() - { - // http://msdn.microsoft.com/en-us/library/cc296176.aspx - - if (!$this->resource) { - throw new Exception\RuntimeException('Must be connected before you can rollback.'); - } - - return sqlsrv_rollback($this->resource); - } - - /** - * Execute - * - * @param string $sql - * @throws Exception\RuntimeException - * @return mixed - */ - public function execute($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - if (!$this->driver instanceof Sqlsrv) { - throw new Exception\RuntimeException('Connection is missing an instance of Sqlsrv'); - } - - if ($this->profiler) { - $this->profiler->profilerStart($sql); - } - - $returnValue = sqlsrv_query($this->resource, $sql); - - if ($this->profiler) { - $this->profiler->profilerFinish($sql); - } - - // if the returnValue is something other than a Sqlsrv_result, bypass wrapping it - if ($returnValue === false) { - $errors = sqlsrv_errors(); - // ignore general warnings - if ($errors[0]['SQLSTATE'] != '01000') { - throw new Exception\RuntimeException( - 'An exception occurred while trying to execute the provided $sql', - null, - new ErrorException($errors) - ); - } - } - - $result = $this->driver->createResult($returnValue); - return $result; - } - - /** - * Prepare - * - * @param string $sql - * @return string - */ - public function prepare($sql) - { - if (!$this->isConnected()) { - $this->connect(); - } - - $statement = $this->driver->createStatement($sql); - return $statement; - } - - /** - * Get last generated id - * - * @param string $name - * @return mixed - */ - public function getLastGeneratedValue($name = null) - { - if (!$this->resource) { - $this->connect(); - } - $sql = 'SELECT @@IDENTITY as Current_Identity'; - $result = sqlsrv_query($this->resource, $sql); - $row = sqlsrv_fetch_array($result); - return $row['Current_Identity']; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Sqlsrv/Exception/ErrorException.php b/library/Zend/Db/Adapter/Driver/Sqlsrv/Exception/ErrorException.php deleted file mode 100755 index 9976eee63..000000000 --- a/library/Zend/Db/Adapter/Driver/Sqlsrv/Exception/ErrorException.php +++ /dev/null @@ -1,32 +0,0 @@ -errors = ($errors === false) ? sqlsrv_errors() : $errors; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Sqlsrv/Exception/ExceptionInterface.php b/library/Zend/Db/Adapter/Driver/Sqlsrv/Exception/ExceptionInterface.php deleted file mode 100755 index a7168e8d6..000000000 --- a/library/Zend/Db/Adapter/Driver/Sqlsrv/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -resource = $resource; - $this->generatedValue = $generatedValue; - return $this; - } - - /** - * @return null - */ - public function buffer() - { - return null; - } - - /** - * @return bool - */ - public function isBuffered() - { - return false; - } - - /** - * Get resource - * - * @return resource - */ - public function getResource() - { - return $this->resource; - } - - /** - * Current - * - * @return mixed - */ - public function current() - { - if ($this->currentComplete) { - return $this->currentData; - } - - $this->load(); - return $this->currentData; - } - - /** - * Next - * - * @return bool - */ - public function next() - { - $this->load(); - return true; - } - - /** - * Load - * - * @param int $row - * @return mixed - */ - protected function load($row = SQLSRV_SCROLL_NEXT) - { - $this->currentData = sqlsrv_fetch_array($this->resource, SQLSRV_FETCH_ASSOC, $row); - $this->currentComplete = true; - $this->position++; - return $this->currentData; - } - - /** - * Key - * - * @return mixed - */ - public function key() - { - return $this->position; - } - - /** - * Rewind - * - * @return bool - */ - public function rewind() - { - $this->position = 0; - $this->load(SQLSRV_SCROLL_FIRST); - return true; - } - - /** - * Valid - * - * @return bool - */ - public function valid() - { - if ($this->currentComplete && $this->currentData) { - return true; - } - - return $this->load(); - } - - /** - * Count - * - * @return int - */ - public function count() - { - return sqlsrv_num_rows($this->resource); - } - - /** - * @return bool|int - */ - public function getFieldCount() - { - return sqlsrv_num_fields($this->resource); - } - - /** - * Is query result - * - * @return bool - */ - public function isQueryResult() - { - if (is_bool($this->resource)) { - return false; - } - return (sqlsrv_num_fields($this->resource) > 0); - } - - /** - * Get affected rows - * - * @return int - */ - public function getAffectedRows() - { - return sqlsrv_rows_affected($this->resource); - } - - /** - * @return mixed|null - */ - public function getGeneratedValue() - { - return $this->generatedValue; - } -} diff --git a/library/Zend/Db/Adapter/Driver/Sqlsrv/Sqlsrv.php b/library/Zend/Db/Adapter/Driver/Sqlsrv/Sqlsrv.php deleted file mode 100755 index 0cb8b2435..000000000 --- a/library/Zend/Db/Adapter/Driver/Sqlsrv/Sqlsrv.php +++ /dev/null @@ -1,211 +0,0 @@ -registerConnection($connection); - $this->registerStatementPrototype(($statementPrototype) ?: new Statement()); - $this->registerResultPrototype(($resultPrototype) ?: new Result()); - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Sqlsrv - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - if ($this->connection instanceof Profiler\ProfilerAwareInterface) { - $this->connection->setProfiler($profiler); - } - if ($this->statementPrototype instanceof Profiler\ProfilerAwareInterface) { - $this->statementPrototype->setProfiler($profiler); - } - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * Register connection - * - * @param Connection $connection - * @return Sqlsrv - */ - public function registerConnection(Connection $connection) - { - $this->connection = $connection; - $this->connection->setDriver($this); - return $this; - } - - /** - * Register statement prototype - * - * @param Statement $statementPrototype - * @return Sqlsrv - */ - public function registerStatementPrototype(Statement $statementPrototype) - { - $this->statementPrototype = $statementPrototype; - $this->statementPrototype->setDriver($this); - return $this; - } - - /** - * Register result prototype - * - * @param Result $resultPrototype - * @return Sqlsrv - */ - public function registerResultPrototype(Result $resultPrototype) - { - $this->resultPrototype = $resultPrototype; - return $this; - } - - /** - * Get database paltform name - * - * @param string $nameFormat - * @return string - */ - public function getDatabasePlatformName($nameFormat = self::NAME_FORMAT_CAMELCASE) - { - if ($nameFormat == self::NAME_FORMAT_CAMELCASE) { - return 'SqlServer'; - } - - return 'SQLServer'; - } - - /** - * Check environment - * - * @throws Exception\RuntimeException - * @return void - */ - public function checkEnvironment() - { - if (!extension_loaded('sqlsrv')) { - throw new Exception\RuntimeException('The Sqlsrv extension is required for this adapter but the extension is not loaded'); - } - } - - /** - * @return Connection - */ - public function getConnection() - { - return $this->connection; - } - - /** - * @param string|resource $sqlOrResource - * @return Statement - */ - public function createStatement($sqlOrResource = null) - { - $statement = clone $this->statementPrototype; - if (is_resource($sqlOrResource)) { - $statement->initialize($sqlOrResource); - } else { - if (!$this->connection->isConnected()) { - $this->connection->connect(); - } - $statement->initialize($this->connection->getResource()); - if (is_string($sqlOrResource)) { - $statement->setSql($sqlOrResource); - } elseif ($sqlOrResource != null) { - throw new Exception\InvalidArgumentException('createStatement() only accepts an SQL string or a Sqlsrv resource'); - } - } - return $statement; - } - - /** - * @param resource $resource - * @return Result - */ - public function createResult($resource) - { - $result = clone $this->resultPrototype; - $result->initialize($resource, $this->connection->getLastGeneratedValue()); - return $result; - } - - /** - * @return array - */ - public function getPrepareType() - { - return self::PARAMETERIZATION_POSITIONAL; - } - - /** - * @param string $name - * @param mixed $type - * @return string - */ - public function formatParameterName($name, $type = null) - { - return '?'; - } - - /** - * @return mixed - */ - public function getLastGeneratedValue() - { - return $this->getConnection()->getLastGeneratedValue(); - } -} diff --git a/library/Zend/Db/Adapter/Driver/Sqlsrv/Statement.php b/library/Zend/Db/Adapter/Driver/Sqlsrv/Statement.php deleted file mode 100755 index 4aefa9ff9..000000000 --- a/library/Zend/Db/Adapter/Driver/Sqlsrv/Statement.php +++ /dev/null @@ -1,313 +0,0 @@ -driver = $driver; - return $this; - } - - /** - * @param Profiler\ProfilerInterface $profiler - * @return Statement - */ - public function setProfiler(Profiler\ProfilerInterface $profiler) - { - $this->profiler = $profiler; - return $this; - } - - /** - * @return null|Profiler\ProfilerInterface - */ - public function getProfiler() - { - return $this->profiler; - } - - /** - * - * One of two resource types will be provided here: - * a) "SQL Server Connection" when a prepared statement needs to still be produced - * b) "SQL Server Statement" when a prepared statement has been already produced - * (there will need to already be a bound param set if it applies to this query) - * - * @param resource $resource - * @throws Exception\InvalidArgumentException - * @return Statement - */ - public function initialize($resource) - { - $resourceType = get_resource_type($resource); - - if ($resourceType == 'SQL Server Connection') { - $this->sqlsrv = $resource; - } elseif ($resourceType == 'SQL Server Statement') { - $this->resource = $resource; - $this->isPrepared = true; - } else { - throw new Exception\InvalidArgumentException('Invalid resource provided to ' . __CLASS__); - } - - return $this; - } - - /** - * Set parameter container - * - * @param ParameterContainer $parameterContainer - * @return Statement - */ - public function setParameterContainer(ParameterContainer $parameterContainer) - { - $this->parameterContainer = $parameterContainer; - return $this; - } - - /** - * @return ParameterContainer - */ - public function getParameterContainer() - { - return $this->parameterContainer; - } - - /** - * @param $resource - * @return Statement - */ - public function setResource($resource) - { - $this->resource = $resource; - return $this; - } - - /** - * Get resource - * - * @return resource - */ - public function getResource() - { - return $this->resource; - } - - /** - * @param string $sql - * @return Statement - */ - public function setSql($sql) - { - $this->sql = $sql; - return $this; - } - - /** - * Get sql - * - * @return string - */ - public function getSql() - { - return $this->sql; - } - - /** - * @param string $sql - * @param array $options - * @throws Exception\RuntimeException - * @return Statement - */ - public function prepare($sql = null, array $options = array()) - { - if ($this->isPrepared) { - throw new Exception\RuntimeException('Already prepared'); - } - $sql = ($sql) ?: $this->sql; - $options = ($options) ?: $this->prepareOptions; - - $pRef = &$this->parameterReferences; - for ($position = 0, $count = substr_count($sql, '?'); $position < $count; $position++) { - if (!isset($this->prepareParams[$position])) { - $pRef[$position] = array('', SQLSRV_PARAM_IN, null, null); - } else { - $pRef[$position] = &$this->prepareParams[$position]; - } - } - - $this->resource = sqlsrv_prepare($this->sqlsrv, $sql, $pRef, $options); - - $this->isPrepared = true; - - return $this; - } - - /** - * @return bool - */ - public function isPrepared() - { - return $this->isPrepared; - } - - /** - * Execute - * - * @param array|ParameterContainer $parameters - * @throws Exception\RuntimeException - * @return Result - */ - public function execute($parameters = null) - { - /** END Standard ParameterContainer Merging Block */ - if (!$this->isPrepared) { - $this->prepare(); - } - - /** START Standard ParameterContainer Merging Block */ - if (!$this->parameterContainer instanceof ParameterContainer) { - if ($parameters instanceof ParameterContainer) { - $this->parameterContainer = $parameters; - $parameters = null; - } else { - $this->parameterContainer = new ParameterContainer(); - } - } - - if (is_array($parameters)) { - $this->parameterContainer->setFromArray($parameters); - } - - if ($this->parameterContainer->count() > 0) { - $this->bindParametersFromContainer(); - } - - if ($this->profiler) { - $this->profiler->profilerStart($this); - } - - $resultValue = sqlsrv_execute($this->resource); - - if ($this->profiler) { - $this->profiler->profilerFinish(); - } - - if ($resultValue === false) { - $errors = sqlsrv_errors(); - // ignore general warnings - if ($errors[0]['SQLSTATE'] != '01000') { - throw new Exception\RuntimeException($errors[0]['message']); - } - } - - $result = $this->driver->createResult($this->resource); - return $result; - } - - /** - * Bind parameters from container - * - */ - protected function bindParametersFromContainer() - { - $values = $this->parameterContainer->getPositionalArray(); - $position = 0; - foreach ($values as $value) { - $this->parameterReferences[$position++][0] = $value; - } - } - - /** - * @param array $prepareParams - */ - public function setPrepareParams(array $prepareParams) - { - $this->prepareParams = $prepareParams; - } - - /** - * @param array $prepareOptions - */ - public function setPrepareOptions(array $prepareOptions) - { - $this->prepareOptions = $prepareOptions; - } -} diff --git a/library/Zend/Db/Adapter/Driver/StatementInterface.php b/library/Zend/Db/Adapter/Driver/StatementInterface.php deleted file mode 100755 index a1ba56709..000000000 --- a/library/Zend/Db/Adapter/Driver/StatementInterface.php +++ /dev/null @@ -1,44 +0,0 @@ -parameters = $parameters; - } -} diff --git a/library/Zend/Db/Adapter/Exception/InvalidQueryException.php b/library/Zend/Db/Adapter/Exception/InvalidQueryException.php deleted file mode 100755 index 1372237fe..000000000 --- a/library/Zend/Db/Adapter/Exception/InvalidQueryException.php +++ /dev/null @@ -1,14 +0,0 @@ -setFromArray($data); - } - } - - /** - * Offset exists - * - * @param string $name - * @return bool - */ - public function offsetExists($name) - { - return (isset($this->data[$name])); - } - - /** - * Offset get - * - * @param string $name - * @return mixed - */ - public function offsetGet($name) - { - return (isset($this->data[$name])) ? $this->data[$name] : null; - } - - /** - * @param $name - * @param $from - */ - public function offsetSetReference($name, $from) - { - $this->data[$name] =& $this->data[$from]; - } - - /** - * Offset set - * - * @param string|int $name - * @param mixed $value - * @param mixed $errata - */ - public function offsetSet($name, $value, $errata = null) - { - $position = false; - - // if integer, get name for this position - if (is_int($name)) { - if (isset($this->positions[$name])) { - $position = $name; - $name = $this->positions[$name]; - } else { - $name = (string) $name; - } - } elseif (is_string($name)) { - // is a string: - $position = array_key_exists($name, $this->data); - } elseif ($name === null) { - $name = (string) count($this->data); - } else { - throw new Exception\InvalidArgumentException('Keys must be string, integer or null'); - } - - if ($position === false) { - $this->positions[] = $name; - } - - $this->data[$name] = $value; - - if ($errata) { - $this->offsetSetErrata($name, $errata); - } - } - - /** - * Offset unset - * - * @param string $name - * @return ParameterContainer - */ - public function offsetUnset($name) - { - if (is_int($name) && isset($this->positions[$name])) { - $name = $this->positions[$name]; - } - unset($this->data[$name]); - return $this; - } - - /** - * Set from array - * - * @param array $data - * @return ParameterContainer - */ - public function setFromArray(Array $data) - { - foreach ($data as $n => $v) { - $this->offsetSet($n, $v); - } - return $this; - } - - /** - * Offset set errata - * - * @param string|int $name - * @param mixed $errata - */ - public function offsetSetErrata($name, $errata) - { - if (is_int($name)) { - $name = $this->positions[$name]; - } - $this->errata[$name] = $errata; - } - - /** - * Offset get errata - * - * @param string|int $name - * @throws Exception\InvalidArgumentException - * @return mixed - */ - public function offsetGetErrata($name) - { - if (is_int($name)) { - $name = $this->positions[$name]; - } - if (!array_key_exists($name, $this->data)) { - throw new Exception\InvalidArgumentException('Data does not exist for this name/position'); - } - return $this->errata[$name]; - } - - /** - * Offset has errata - * - * @param string|int $name - * @return bool - */ - public function offsetHasErrata($name) - { - if (is_int($name)) { - $name = $this->positions[$name]; - } - return (isset($this->errata[$name])); - } - - /** - * Offset unset errata - * - * @param string|int $name - * @throws Exception\InvalidArgumentException - */ - public function offsetUnsetErrata($name) - { - if (is_int($name)) { - $name = $this->positions[$name]; - } - if (!array_key_exists($name, $this->errata)) { - throw new Exception\InvalidArgumentException('Data does not exist for this name/position'); - } - $this->errata[$name] = null; - } - - /** - * Get errata iterator - * - * @return \ArrayIterator - */ - public function getErrataIterator() - { - return new \ArrayIterator($this->errata); - } - - /** - * getNamedArray - * - * @return array - */ - public function getNamedArray() - { - return $this->data; - } - - /** - * getNamedArray - * - * @return array - */ - public function getPositionalArray() - { - return array_values($this->data); - } - - /** - * count - * - * @return int - */ - public function count() - { - return count($this->data); - } - - /** - * Current - * - * @return mixed - */ - public function current() - { - return current($this->data); - } - - /** - * Next - * - * @return mixed - */ - public function next() - { - return next($this->data); - } - - /** - * Key - * - * @return mixed - */ - public function key() - { - return key($this->data); - } - - /** - * Valid - * - * @return bool - */ - public function valid() - { - return (current($this->data) !== false); - } - - /** - * Rewind - */ - public function rewind() - { - reset($this->data); - } - - /** - * @param array|ParameterContainer $parameters - * @throws Exception\InvalidArgumentException - * @return ParameterContainer - */ - public function merge($parameters) - { - if (!is_array($parameters) && !$parameters instanceof ParameterContainer) { - throw new Exception\InvalidArgumentException('$parameters must be an array or an instance of ParameterContainer'); - } - - if (count($parameters) == 0) { - return $this; - } - - if ($parameters instanceof ParameterContainer) { - $parameters = $parameters->getNamedArray(); - } - - foreach ($parameters as $key => $value) { - if (is_int($key)) { - $key = null; - } - $this->offsetSet($key, $value); - } - return $this; - } -} diff --git a/library/Zend/Db/Adapter/Platform/IbmDb2.php b/library/Zend/Db/Adapter/Platform/IbmDb2.php deleted file mode 100755 index 693b647e8..000000000 --- a/library/Zend/Db/Adapter/Platform/IbmDb2.php +++ /dev/null @@ -1,207 +0,0 @@ -quoteIdentifiers = false; - } - - if (isset($options['identifier_separator'])) { - $this->identifierSeparator = $options['identifier_separator']; - } - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return 'IBM DB2'; - } - - /** - * Get quote indentifier symbol - * - * @return string - */ - public function getQuoteIdentifierSymbol() - { - return '"'; - } - - /** - * Quote identifier - * - * @param string $identifier - * @return string - */ - public function quoteIdentifier($identifier) - { - if ($this->quoteIdentifiers === false) { - return $identifier; - } - return '"' . str_replace('"', '\\' . '"', $identifier) . '"'; - } - - /** - * Quote identifier chain - * - * @param string|string[] $identifierChain - * @return string - */ - public function quoteIdentifierChain($identifierChain) - { - if ($this->quoteIdentifiers === false) { - return (is_array($identifierChain)) ? implode($this->identifierSeparator, $identifierChain) : $identifierChain; - } - $identifierChain = str_replace('"', '\\"', $identifierChain); - if (is_array($identifierChain)) { - $identifierChain = implode('"' . $this->identifierSeparator . '"', $identifierChain); - } - return '"' . $identifierChain . '"'; - } - - /** - * Get quote value symbol - * - * @return string - */ - public function getQuoteValueSymbol() - { - return '\''; - } - - /** - * Quote value - * - * @param string $value - * @return string - */ - public function quoteValue($value) - { - if (function_exists('db2_escape_string')) { - return '\'' . db2_escape_string($value) . '\''; - } - trigger_error( - 'Attempting to quote a value in ' . __CLASS__ . ' without extension/driver support ' - . 'can introduce security vulnerabilities in a production environment.' - ); - return '\'' . str_replace("'", "''", $value) . '\''; - } - - /** - * Quote Trusted Value - * - * The ability to quote values without notices - * - * @param $value - * @return mixed - */ - public function quoteTrustedValue($value) - { - if (function_exists('db2_escape_string')) { - return '\'' . db2_escape_string($value) . '\''; - } - return '\'' . str_replace("'", "''", $value) . '\''; - } - - /** - * Quote value list - * - * @param string|string[] $valueList - * @return string - */ - public function quoteValueList($valueList) - { - if (!is_array($valueList)) { - return $this->quoteValue($valueList); - } - - $value = reset($valueList); - do { - $valueList[key($valueList)] = $this->quoteValue($value); - } while ($value = next($valueList)); - return implode(', ', $valueList); - } - - /** - * Get identifier separator - * - * @return string - */ - public function getIdentifierSeparator() - { - return $this->identifierSeparator; - } - - /** - * Quote identifier in fragment - * - * @param string $identifier - * @param array $safeWords - * @return string - */ - public function quoteIdentifierInFragment($identifier, array $safeWords = array()) - { - if ($this->quoteIdentifiers === false) { - return $identifier; - } - $parts = preg_split('#([\.\s\W])#', $identifier, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - - if ($safeWords) { - $safeWords = array_flip($safeWords); - $safeWords = array_change_key_case($safeWords, CASE_LOWER); - } - foreach ($parts as $i => $part) { - if ($safeWords && isset($safeWords[strtolower($part)])) { - continue; - } - - switch ($part) { - case ' ': - case '.': - case '*': - case 'AS': - case 'As': - case 'aS': - case 'as': - break; - default: - $parts[$i] = '"' . str_replace('"', '\\' . '"', $part) . '"'; - } - } - - return implode('', $parts); - } -} diff --git a/library/Zend/Db/Adapter/Platform/Mysql.php b/library/Zend/Db/Adapter/Platform/Mysql.php deleted file mode 100755 index 6e02f083a..000000000 --- a/library/Zend/Db/Adapter/Platform/Mysql.php +++ /dev/null @@ -1,214 +0,0 @@ -setDriver($driver); - } - } - - /** - * @param \Zend\Db\Adapter\Driver\Mysqli\Mysqli|\Zend\Db\Adapter\Driver\Pdo\Pdo||\mysqli|\PDO $driver - * @throws \Zend\Db\Adapter\Exception\InvalidArgumentException - * @return $this - */ - public function setDriver($driver) - { - // handle Zend\Db drivers - if ($driver instanceof Mysqli\Mysqli - || ($driver instanceof Pdo\Pdo && $driver->getDatabasePlatformName() == 'Mysql') - || ($driver instanceof \mysqli) - || ($driver instanceof \PDO && $driver->getAttribute(\PDO::ATTR_DRIVER_NAME) == 'mysql') - ) { - $this->resource = $driver; - return $this; - } - - throw new Exception\InvalidArgumentException('$driver must be a Mysqli or Mysql PDO Zend\Db\Adapter\Driver, Mysqli instance or MySQL PDO instance'); - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return 'MySQL'; - } - - /** - * Get quote identifier symbol - * - * @return string - */ - public function getQuoteIdentifierSymbol() - { - return '`'; - } - - /** - * Quote identifier - * - * @param string $identifier - * @return string - */ - public function quoteIdentifier($identifier) - { - return '`' . str_replace('`', '``', $identifier) . '`'; - } - - /** - * Quote identifier chain - * - * @param string|string[] $identifierChain - * @return string - */ - public function quoteIdentifierChain($identifierChain) - { - $identifierChain = str_replace('`', '``', $identifierChain); - if (is_array($identifierChain)) { - $identifierChain = implode('`.`', $identifierChain); - } - return '`' . $identifierChain . '`'; - } - - /** - * Get quote value symbol - * - * @return string - */ - public function getQuoteValueSymbol() - { - return '\''; - } - - /** - * Quote value - * - * @param string $value - * @return string - */ - public function quoteValue($value) - { - if ($this->resource instanceof DriverInterface) { - $this->resource = $this->resource->getConnection()->getResource(); - } - if ($this->resource instanceof \mysqli) { - return '\'' . $this->resource->real_escape_string($value) . '\''; - } - if ($this->resource instanceof \PDO) { - return $this->resource->quote($value); - } - trigger_error( - 'Attempting to quote a value in ' . __CLASS__ . ' without extension/driver support ' - . 'can introduce security vulnerabilities in a production environment.' - ); - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote Trusted Value - * - * The ability to quote values without notices - * - * @param $value - * @return mixed - */ - public function quoteTrustedValue($value) - { - if ($this->resource instanceof DriverInterface) { - $this->resource = $this->resource->getConnection()->getResource(); - } - if ($this->resource instanceof \mysqli) { - return '\'' . $this->resource->real_escape_string($value) . '\''; - } - if ($this->resource instanceof \PDO) { - return $this->resource->quote($value); - } - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote value list - * - * @param string|string[] $valueList - * @return string - */ - public function quoteValueList($valueList) - { - if (!is_array($valueList)) { - return $this->quoteValue($valueList); - } - - $value = reset($valueList); - do { - $valueList[key($valueList)] = $this->quoteValue($value); - } while ($value = next($valueList)); - return implode(', ', $valueList); - } - - /** - * Get identifier separator - * - * @return string - */ - public function getIdentifierSeparator() - { - return '.'; - } - - /** - * Quote identifier in fragment - * - * @param string $identifier - * @param array $safeWords - * @return string - */ - public function quoteIdentifierInFragment($identifier, array $safeWords = array()) - { - // regex taken from @link http://dev.mysql.com/doc/refman/5.0/en/identifiers.html - $parts = preg_split('#([^0-9,a-z,A-Z$_])#', $identifier, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - if ($safeWords) { - $safeWords = array_flip($safeWords); - $safeWords = array_change_key_case($safeWords, CASE_LOWER); - } - foreach ($parts as $i => $part) { - if ($safeWords && isset($safeWords[strtolower($part)])) { - continue; - } - switch ($part) { - case ' ': - case '.': - case '*': - case 'AS': - case 'As': - case 'aS': - case 'as': - break; - default: - $parts[$i] = '`' . str_replace('`', '``', $part) . '`'; - } - } - return implode('', $parts); - } -} diff --git a/library/Zend/Db/Adapter/Platform/Oracle.php b/library/Zend/Db/Adapter/Platform/Oracle.php deleted file mode 100755 index 61f700a49..000000000 --- a/library/Zend/Db/Adapter/Platform/Oracle.php +++ /dev/null @@ -1,187 +0,0 @@ -quoteIdentifiers = false; - } - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return 'Oracle'; - } - - /** - * Get quote identifier symbol - * - * @return string - */ - public function getQuoteIdentifierSymbol() - { - return '"'; - } - - /** - * Quote identifier - * - * @param string $identifier - * @return string - */ - public function quoteIdentifier($identifier) - { - if ($this->quoteIdentifiers === false) { - return $identifier; - } - return '"' . str_replace('"', '\\' . '"', $identifier) . '"'; - } - - /** - * Quote identifier chain - * - * @param string|string[] $identifierChain - * @return string - */ - public function quoteIdentifierChain($identifierChain) - { - if ($this->quoteIdentifiers === false) { - return (is_array($identifierChain)) ? implode('.', $identifierChain) : $identifierChain; - } - $identifierChain = str_replace('"', '\\"', $identifierChain); - if (is_array($identifierChain)) { - $identifierChain = implode('"."', $identifierChain); - } - return '"' . $identifierChain . '"'; - } - - /** - * Get quote value symbol - * - * @return string - */ - public function getQuoteValueSymbol() - { - return '\''; - } - - /** - * Quote value - * - * @param string $value - * @return string - */ - public function quoteValue($value) - { - trigger_error( - 'Attempting to quote a value in ' . __CLASS__ . ' without extension/driver support ' - . 'can introduce security vulnerabilities in a production environment.' - ); - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote Trusted Value - * - * The ability to quote values without notices - * - * @param $value - * @return mixed - */ - public function quoteTrustedValue($value) - { - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote value list - * - * @param string|string[] $valueList - * @return string - */ - public function quoteValueList($valueList) - { - if (!is_array($valueList)) { - return $this->quoteValue($valueList); - } - - $value = reset($valueList); - do { - $valueList[key($valueList)] = $this->quoteValue($value); - } while ($value = next($valueList)); - return implode(', ', $valueList); - } - - /** - * Get identifier separator - * - * @return string - */ - public function getIdentifierSeparator() - { - return '.'; - } - - /** - * Quote identifier in fragment - * - * @param string $identifier - * @param array $safeWords - * @return string - */ - public function quoteIdentifierInFragment($identifier, array $safeWords = array()) - { - if ($this->quoteIdentifiers === false) { - return $identifier; - } - $parts = preg_split('#([\.\s\W])#', $identifier, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - if ($safeWords) { - $safeWords = array_flip($safeWords); - $safeWords = array_change_key_case($safeWords, CASE_LOWER); - } - foreach ($parts as $i => $part) { - if ($safeWords && isset($safeWords[strtolower($part)])) { - continue; - } - switch ($part) { - case ' ': - case '.': - case '*': - case 'AS': - case 'As': - case 'aS': - case 'as': - break; - default: - $parts[$i] = '"' . str_replace('"', '\\' . '"', $part) . '"'; - } - } - return implode('', $parts); - } -} diff --git a/library/Zend/Db/Adapter/Platform/PlatformInterface.php b/library/Zend/Db/Adapter/Platform/PlatformInterface.php deleted file mode 100755 index d8ec05b2b..000000000 --- a/library/Zend/Db/Adapter/Platform/PlatformInterface.php +++ /dev/null @@ -1,94 +0,0 @@ -setDriver($driver); - } - } - - /** - * @param \Zend\Db\Adapter\Driver\Pgsql\Pgsql|\Zend\Db\Adapter\Driver\Pdo\Pdo|resource|\PDO $driver - * @throws \Zend\Db\Adapter\Exception\InvalidArgumentException - * @return $this - */ - public function setDriver($driver) - { - if ($driver instanceof Pgsql\Pgsql - || ($driver instanceof Pdo\Pdo && $driver->getDatabasePlatformName() == 'Postgresql') - || (is_resource($driver) && (in_array(get_resource_type($driver), array('pgsql link', 'pgsql link persistent')))) - || ($driver instanceof \PDO && $driver->getAttribute(\PDO::ATTR_DRIVER_NAME) == 'pgsql') - ) { - $this->resource = $driver; - return $this; - } - - throw new Exception\InvalidArgumentException('$driver must be a Pgsql or Postgresql PDO Zend\Db\Adapter\Driver, pgsql link resource or Postgresql PDO instance'); - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return 'PostgreSQL'; - } - - /** - * Get quote indentifier symbol - * - * @return string - */ - public function getQuoteIdentifierSymbol() - { - return '"'; - } - - /** - * Quote identifier - * - * @param string $identifier - * @return string - */ - public function quoteIdentifier($identifier) - { - return '"' . str_replace('"', '\\' . '"', $identifier) . '"'; - } - - /** - * Quote identifier chain - * - * @param string|string[] $identifierChain - * @return string - */ - public function quoteIdentifierChain($identifierChain) - { - $identifierChain = str_replace('"', '\\"', $identifierChain); - if (is_array($identifierChain)) { - $identifierChain = implode('"."', $identifierChain); - } - return '"' . $identifierChain . '"'; - } - - /** - * Get quote value symbol - * - * @return string - */ - public function getQuoteValueSymbol() - { - return '\''; - } - - /** - * Quote value - * - * @param string $value - * @return string - */ - public function quoteValue($value) - { - if ($this->resource instanceof DriverInterface) { - $this->resource = $this->resource->getConnection()->getResource(); - } - if (is_resource($this->resource)) { - return '\'' . pg_escape_string($this->resource, $value) . '\''; - } - if ($this->resource instanceof \PDO) { - return $this->resource->quote($value); - } - trigger_error( - 'Attempting to quote a value in ' . __CLASS__ . ' without extension/driver support ' - . 'can introduce security vulnerabilities in a production environment.' - ); - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote Trusted Value - * - * The ability to quote values without notices - * - * @param $value - * @return mixed - */ - public function quoteTrustedValue($value) - { - if ($this->resource instanceof DriverInterface) { - $this->resource = $this->resource->getConnection()->getResource(); - } - if (is_resource($this->resource)) { - return '\'' . pg_escape_string($this->resource, $value) . '\''; - } - if ($this->resource instanceof \PDO) { - return $this->resource->quote($value); - } - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote value list - * - * @param string|string[] $valueList - * @return string - */ - public function quoteValueList($valueList) - { - if (!is_array($valueList)) { - return $this->quoteValue($valueList); - } - - $value = reset($valueList); - do { - $valueList[key($valueList)] = $this->quoteValue($value); - } while ($value = next($valueList)); - return implode(', ', $valueList); - } - - /** - * Get identifier separator - * - * @return string - */ - public function getIdentifierSeparator() - { - return '.'; - } - - /** - * Quote identifier in fragment - * - * @param string $identifier - * @param array $safeWords - * @return string - */ - public function quoteIdentifierInFragment($identifier, array $safeWords = array()) - { - $parts = preg_split('#([\.\s\W])#', $identifier, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - if ($safeWords) { - $safeWords = array_flip($safeWords); - $safeWords = array_change_key_case($safeWords, CASE_LOWER); - } - foreach ($parts as $i => $part) { - if ($safeWords && isset($safeWords[strtolower($part)])) { - continue; - } - switch ($part) { - case ' ': - case '.': - case '*': - case 'AS': - case 'As': - case 'aS': - case 'as': - break; - default: - $parts[$i] = '"' . str_replace('"', '\\' . '"', $part) . '"'; - } - } - return implode('', $parts); - } -} diff --git a/library/Zend/Db/Adapter/Platform/Sql92.php b/library/Zend/Db/Adapter/Platform/Sql92.php deleted file mode 100755 index bbeda46d7..000000000 --- a/library/Zend/Db/Adapter/Platform/Sql92.php +++ /dev/null @@ -1,161 +0,0 @@ -quoteValue($valueList); - } - - $value = reset($valueList); - do { - $valueList[key($valueList)] = $this->quoteValue($value); - } while ($value = next($valueList)); - return implode(', ', $valueList); - } - - /** - * Get identifier separator - * - * @return string - */ - public function getIdentifierSeparator() - { - return '.'; - } - - /** - * Quote identifier in fragment - * - * @param string $identifier - * @param array $safeWords - * @return string - */ - public function quoteIdentifierInFragment($identifier, array $safeWords = array()) - { - $parts = preg_split('#([\.\s\W])#', $identifier, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - if ($safeWords) { - $safeWords = array_flip($safeWords); - $safeWords = array_change_key_case($safeWords, CASE_LOWER); - } - foreach ($parts as $i => $part) { - if ($safeWords && isset($safeWords[strtolower($part)])) { - continue; - } - - switch ($part) { - case ' ': - case '.': - case '*': - case 'AS': - case 'As': - case 'aS': - case 'as': - break; - default: - $parts[$i] = '"' . str_replace('"', '\\' . '"', $part) . '"'; - } - } - - return implode('', $parts); - } -} diff --git a/library/Zend/Db/Adapter/Platform/SqlServer.php b/library/Zend/Db/Adapter/Platform/SqlServer.php deleted file mode 100755 index 74a9acb9c..000000000 --- a/library/Zend/Db/Adapter/Platform/SqlServer.php +++ /dev/null @@ -1,203 +0,0 @@ -setDriver($driver); - } - } - - /** - * @param \Zend\Db\Adapter\Driver\Sqlsrv\Sqlsrv|\Zend\Db\Adapter\Driver\Pdo\Pdo||resource|\PDO $driver - * @throws \Zend\Db\Adapter\Exception\InvalidArgumentException - * @return $this - */ - public function setDriver($driver) - { - // handle Zend\Db drivers - if (($driver instanceof Pdo\Pdo && in_array($driver->getDatabasePlatformName(), array('SqlServer', 'Dblib'))) - || (($driver instanceof \PDO && in_array($driver->getAttribute(\PDO::ATTR_DRIVER_NAME), array('sqlsrv', 'dblib')))) - ) { - $this->resource = $driver; - return $this; - } - - throw new Exception\InvalidArgumentException('$driver must be a Sqlsrv PDO Zend\Db\Adapter\Driver or Sqlsrv PDO instance'); - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return 'SQLServer'; - } - - /** - * Get quote identifier symbol - * - * @return string - */ - public function getQuoteIdentifierSymbol() - { - return array('[', ']'); - } - - /** - * Quote identifier - * - * @param string $identifier - * @return string - */ - public function quoteIdentifier($identifier) - { - return '[' . $identifier . ']'; - } - - /** - * Quote identifier chain - * - * @param string|string[] $identifierChain - * @return string - */ - public function quoteIdentifierChain($identifierChain) - { - if (is_array($identifierChain)) { - $identifierChain = implode('].[', $identifierChain); - } - return '[' . $identifierChain . ']'; - } - - /** - * Get quote value symbol - * - * @return string - */ - public function getQuoteValueSymbol() - { - return '\''; - } - - /** - * Quote value - * - * @param string $value - * @return string - */ - public function quoteValue($value) - { - if ($this->resource instanceof DriverInterface) { - $this->resource = $this->resource->getConnection()->getResource(); - } - if ($this->resource instanceof \PDO) { - return $this->resource->quote($value); - } - trigger_error( - 'Attempting to quote a value in ' . __CLASS__ . ' without extension/driver support ' - . 'can introduce security vulnerabilities in a production environment.' - ); - $value = addcslashes($value, "\000\032"); - return '\'' . str_replace('\'', '\'\'', $value) . '\''; - } - - /** - * Quote Trusted Value - * - * The ability to quote values without notices - * - * @param $value - * @return mixed - */ - public function quoteTrustedValue($value) - { - if ($this->resource instanceof DriverInterface) { - $this->resource = $this->resource->getConnection()->getResource(); - } - if ($this->resource instanceof \PDO) { - return $this->resource->quote($value); - } - return '\'' . str_replace('\'', '\'\'', $value) . '\''; - } - - /** - * Quote value list - * - * @param string|string[] $valueList - * @return string - */ - public function quoteValueList($valueList) - { - if (!is_array($valueList)) { - return $this->quoteValue($valueList); - } - $value = reset($valueList); - do { - $valueList[key($valueList)] = $this->quoteValue($value); - } while ($value = next($valueList)); - return implode(', ', $valueList); - } - - /** - * Get identifier separator - * - * @return string - */ - public function getIdentifierSeparator() - { - return '.'; - } - - /** - * Quote identifier in fragment - * - * @param string $identifier - * @param array $safeWords - * @return string - */ - public function quoteIdentifierInFragment($identifier, array $safeWords = array()) - { - $parts = preg_split('#([\.\s\W])#', $identifier, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - if ($safeWords) { - $safeWords = array_flip($safeWords); - $safeWords = array_change_key_case($safeWords, CASE_LOWER); - } - foreach ($parts as $i => $part) { - if ($safeWords && isset($safeWords[strtolower($part)])) { - continue; - } - switch ($part) { - case ' ': - case '.': - case '*': - case 'AS': - case 'As': - case 'aS': - case 'as': - break; - default: - $parts[$i] = '[' . $part . ']'; - } - } - return implode('', $parts); - } -} diff --git a/library/Zend/Db/Adapter/Platform/Sqlite.php b/library/Zend/Db/Adapter/Platform/Sqlite.php deleted file mode 100755 index 340c247e3..000000000 --- a/library/Zend/Db/Adapter/Platform/Sqlite.php +++ /dev/null @@ -1,210 +0,0 @@ -setDriver($driver); - } - } - - /** - * @param \Zend\Db\Adapter\Driver\Pdo\Pdo||\PDO $driver - * @throws \Zend\Db\Adapter\Exception\InvalidArgumentException - * @return $this - */ - public function setDriver($driver) - { - if (($driver instanceof \PDO && $driver->getAttribute(\PDO::ATTR_DRIVER_NAME) == 'sqlite') - || ($driver instanceof Pdo\Pdo && $driver->getDatabasePlatformName() == 'Sqlite') - ) { - $this->resource = $driver; - return $this; - } - - throw new Exception\InvalidArgumentException('$driver must be a Sqlite PDO Zend\Db\Adapter\Driver, Sqlite PDO instance'); - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return 'SQLite'; - } - - /** - * Get quote identifier symbol - * - * @return string - */ - public function getQuoteIdentifierSymbol() - { - return '"'; - } - - /** - * Quote identifier - * - * @param string $identifier - * @return string - */ - public function quoteIdentifier($identifier) - { - return '"' . str_replace('"', '\\' . '"', $identifier) . '"'; - } - - /** - * Quote identifier chain - * - * @param string|string[] $identifierChain - * @return string - */ - public function quoteIdentifierChain($identifierChain) - { - $identifierChain = str_replace('"', '\\"', $identifierChain); - if (is_array($identifierChain)) { - $identifierChain = implode('"."', $identifierChain); - } - return '"' . $identifierChain . '"'; - } - - /** - * Get quote value symbol - * - * @return string - */ - public function getQuoteValueSymbol() - { - return '\''; - } - - /** - * Quote value - * - * @param string $value - * @return string - */ - public function quoteValue($value) - { - $resource = $this->resource; - - if ($resource instanceof DriverInterface) { - $resource = $resource->getConnection()->getResource(); - } - - if ($resource instanceof \PDO) { - return $resource->quote($value); - } - - trigger_error( - 'Attempting to quote a value in ' . __CLASS__ . ' without extension/driver support ' - . 'can introduce security vulnerabilities in a production environment.' - ); - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote Trusted Value - * - * The ability to quote values without notices - * - * @param $value - * @return mixed - */ - public function quoteTrustedValue($value) - { - $resource = $this->resource; - - if ($resource instanceof DriverInterface) { - $resource = $resource->getConnection()->getResource(); - } - - if ($resource instanceof \PDO) { - return $resource->quote($value); - } - - return '\'' . addcslashes($value, "\x00\n\r\\'\"\x1a") . '\''; - } - - /** - * Quote value list - * - * @param string|string[] $valueList - * @return string - */ - public function quoteValueList($valueList) - { - if (!is_array($valueList)) { - return $this->quoteValue($valueList); - } - $value = reset($valueList); - do { - $valueList[key($valueList)] = $this->quoteValue($value); - } while ($value = next($valueList)); - return implode(', ', $valueList); - } - - /** - * Get identifier separator - * - * @return string - */ - public function getIdentifierSeparator() - { - return '.'; - } - - /** - * Quote identifier in fragment - * - * @param string $identifier - * @param array $safeWords - * @return string - */ - public function quoteIdentifierInFragment($identifier, array $safeWords = array()) - { - $parts = preg_split('#([\.\s\W])#', $identifier, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - if ($safeWords) { - $safeWords = array_flip($safeWords); - $safeWords = array_change_key_case($safeWords, CASE_LOWER); - } - foreach ($parts as $i => $part) { - if ($safeWords && isset($safeWords[strtolower($part)])) { - continue; - } - switch ($part) { - case ' ': - case '.': - case '*': - case 'AS': - case 'As': - case 'aS': - case 'as': - break; - default: - $parts[$i] = '"' . str_replace('"', '\\' . '"', $part) . '"'; - } - } - return implode('', $parts); - } -} diff --git a/library/Zend/Db/Adapter/Profiler/Profiler.php b/library/Zend/Db/Adapter/Profiler/Profiler.php deleted file mode 100755 index 5115e3f3f..000000000 --- a/library/Zend/Db/Adapter/Profiler/Profiler.php +++ /dev/null @@ -1,85 +0,0 @@ - '', - 'parameters' => null, - 'start' => microtime(true), - 'end' => null, - 'elapse' => null - ); - if ($target instanceof StatementContainerInterface) { - $profileInformation['sql'] = $target->getSql(); - $profileInformation['parameters'] = clone $target->getParameterContainer(); - } elseif (is_string($target)) { - $profileInformation['sql'] = $target; - } else { - throw new Exception\InvalidArgumentException(__FUNCTION__ . ' takes either a StatementContainer or a string'); - } - - $this->profiles[$this->currentIndex] = $profileInformation; - - return $this; - } - - /** - * @return Profiler - */ - public function profilerFinish() - { - if (!isset($this->profiles[$this->currentIndex])) { - throw new Exception\RuntimeException('A profile must be started before ' . __FUNCTION__ . ' can be called.'); - } - $current = &$this->profiles[$this->currentIndex]; - $current['end'] = microtime(true); - $current['elapse'] = $current['end'] - $current['start']; - $this->currentIndex++; - return $this; - } - - /** - * @return array|null - */ - public function getLastProfile() - { - return end($this->profiles); - } - - /** - * @return array - */ - public function getProfiles() - { - return $this->profiles; - } -} diff --git a/library/Zend/Db/Adapter/Profiler/ProfilerAwareInterface.php b/library/Zend/Db/Adapter/Profiler/ProfilerAwareInterface.php deleted file mode 100755 index a0b631d94..000000000 --- a/library/Zend/Db/Adapter/Profiler/ProfilerAwareInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -setSql($sql); - } - $this->parameterContainer = ($parameterContainer) ?: new ParameterContainer; - } - - /** - * @param $sql - * @return StatementContainer - */ - public function setSql($sql) - { - $this->sql = $sql; - return $this; - } - - /** - * @return string - */ - public function getSql() - { - return $this->sql; - } - - /** - * @param ParameterContainer $parameterContainer - * @return StatementContainer - */ - public function setParameterContainer(ParameterContainer $parameterContainer) - { - $this->parameterContainer = $parameterContainer; - return $this; - } - - /** - * @return null|ParameterContainer - */ - public function getParameterContainer() - { - return $this->parameterContainer; - } -} diff --git a/library/Zend/Db/Adapter/StatementContainerInterface.php b/library/Zend/Db/Adapter/StatementContainerInterface.php deleted file mode 100755 index 098d6a6fd..000000000 --- a/library/Zend/Db/Adapter/StatementContainerInterface.php +++ /dev/null @@ -1,43 +0,0 @@ -adapter = $adapter; - $this->source = $this->createSourceFromAdapter($adapter); - } - - /** - * Create source from adapter - * - * @param Adapter $adapter - * @return Source\AbstractSource - */ - protected function createSourceFromAdapter(Adapter $adapter) - { - switch ($adapter->getPlatform()->getName()) { - case 'MySQL': - return new Source\MysqlMetadata($adapter); - case 'SQLServer': - return new Source\SqlServerMetadata($adapter); - case 'SQLite': - return new Source\SqliteMetadata($adapter); - case 'PostgreSQL': - return new Source\PostgresqlMetadata($adapter); - case 'Oracle': - return new Source\OracleMetadata($adapter); - } - - throw new \Exception('cannot create source from adapter'); - } - - // @todo methods - - /** - * Get base tables and views - * - * @param string $schema - * @param bool $includeViews - * @return Object\TableObject[] - */ - public function getTables($schema = null, $includeViews = false) - { - return $this->source->getTables($schema, $includeViews); - } - - /** - * Get base tables and views - * - * @param string $schema - * @return Object\TableObject[] - */ - public function getViews($schema = null) - { - return $this->source->getViews($schema); - } - - /** - * Get triggers - * - * @param string $schema - * @return array - */ - public function getTriggers($schema = null) - { - return $this->source->getTriggers($schema); - } - - /** - * Get constraints - * - * @param string $table - * @param string $schema - * @return array - */ - public function getConstraints($table, $schema = null) - { - return $this->source->getConstraints($table, $schema); - } - - /** - * Get columns - * - * @param string $table - * @param string $schema - * @return array - */ - public function getColumns($table, $schema = null) - { - return $this->source->getColumns($table, $schema); - } - - /** - * Get constraint keys - * - * @param string $constraint - * @param string $table - * @param string $schema - * @return array - */ - public function getConstraintKeys($constraint, $table, $schema = null) - { - return $this->source->getConstraintKeys($constraint, $table, $schema); - } - - /** - * Get constraints - * - * @param string $constraintName - * @param string $table - * @param string $schema - * @return Object\ConstraintObject - */ - public function getConstraint($constraintName, $table, $schema = null) - { - return $this->source->getConstraint($constraintName, $table, $schema); - } - - /** - * Get schemas - */ - public function getSchemas() - { - return $this->source->getSchemas(); - } - - /** - * Get table names - * - * @param string $schema - * @param bool $includeViews - * @return array - */ - public function getTableNames($schema = null, $includeViews = false) - { - return $this->source->getTableNames($schema, $includeViews); - } - - /** - * Get table - * - * @param string $tableName - * @param string $schema - * @return Object\TableObject - */ - public function getTable($tableName, $schema = null) - { - return $this->source->getTable($tableName, $schema); - } - - /** - * Get views names - * - * @param string $schema - * @return \Zend\Db\Metadata\Object\TableObject - */ - public function getViewNames($schema = null) - { - return $this->source->getViewNames($schema); - } - - /** - * Get view - * - * @param string $viewName - * @param string $schema - * @return \Zend\Db\Metadata\Object\TableObject - */ - public function getView($viewName, $schema = null) - { - return $this->source->getView($viewName, $schema); - } - - /** - * Get trigger names - * - * @param string $schema - * @return array - */ - public function getTriggerNames($schema = null) - { - return $this->source->getTriggerNames($schema); - } - - /** - * Get trigger - * - * @param string $triggerName - * @param string $schema - * @return \Zend\Db\Metadata\Object\TriggerObject - */ - public function getTrigger($triggerName, $schema = null) - { - return $this->source->getTrigger($triggerName, $schema); - } - - /** - * Get column names - * - * @param string $table - * @param string $schema - * @return array - */ - public function getColumnNames($table, $schema = null) - { - return $this->source->getColumnNames($table, $schema); - } - - /** - * Get column - * - * @param string $columnName - * @param string $table - * @param string $schema - * @return \Zend\Db\Metadata\Object\ColumnObject - */ - public function getColumn($columnName, $table, $schema = null) - { - return $this->source->getColumn($columnName, $table, $schema); - } -} diff --git a/library/Zend/Db/Metadata/MetadataInterface.php b/library/Zend/Db/Metadata/MetadataInterface.php deleted file mode 100755 index f0f58eb30..000000000 --- a/library/Zend/Db/Metadata/MetadataInterface.php +++ /dev/null @@ -1,35 +0,0 @@ -setName($name); - } - } - - /** - * Set columns - * - * @param array $columns - */ - public function setColumns(array $columns) - { - $this->columns = $columns; - } - - /** - * Get columns - * - * @return array - */ - public function getColumns() - { - return $this->columns; - } - - /** - * Set constraints - * - * @param array $constraints - */ - public function setConstraints($constraints) - { - $this->constraints = $constraints; - } - - /** - * Get constraints - * - * @return array - */ - public function getConstraints() - { - return $this->constraints; - } - - /** - * Set name - * - * @param string $name - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return $this->name; - } -} diff --git a/library/Zend/Db/Metadata/Object/ColumnObject.php b/library/Zend/Db/Metadata/Object/ColumnObject.php deleted file mode 100755 index e76a91a99..000000000 --- a/library/Zend/Db/Metadata/Object/ColumnObject.php +++ /dev/null @@ -1,388 +0,0 @@ -setName($name); - $this->setTableName($tableName); - $this->setSchemaName($schemaName); - } - - /** - * Set name - * - * @param string $name - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Get table name - * - * @return string - */ - public function getTableName() - { - return $this->tableName; - } - - /** - * Set table name - * - * @param string $tableName - * @return ColumnObject - */ - public function setTableName($tableName) - { - $this->tableName = $tableName; - return $this; - } - - /** - * Set schema name - * - * @param string $schemaName - */ - public function setSchemaName($schemaName) - { - $this->schemaName = $schemaName; - } - - /** - * Get schema name - * - * @return string - */ - public function getSchemaName() - { - return $this->schemaName; - } - - /** - * @return int $ordinalPosition - */ - public function getOrdinalPosition() - { - return $this->ordinalPosition; - } - - /** - * @param int $ordinalPosition to set - * @return ColumnObject - */ - public function setOrdinalPosition($ordinalPosition) - { - $this->ordinalPosition = $ordinalPosition; - return $this; - } - - /** - * @return null|string the $columnDefault - */ - public function getColumnDefault() - { - return $this->columnDefault; - } - - /** - * @param mixed $columnDefault to set - * @return ColumnObject - */ - public function setColumnDefault($columnDefault) - { - $this->columnDefault = $columnDefault; - return $this; - } - - /** - * @return bool $isNullable - */ - public function getIsNullable() - { - return $this->isNullable; - } - - /** - * @param bool $isNullable to set - * @return ColumnObject - */ - public function setIsNullable($isNullable) - { - $this->isNullable = $isNullable; - return $this; - } - - /** - * @return bool $isNullable - */ - public function isNullable() - { - return $this->isNullable; - } - - /** - * @return null|string the $dataType - */ - public function getDataType() - { - return $this->dataType; - } - - /** - * @param string $dataType the $dataType to set - * @return ColumnObject - */ - public function setDataType($dataType) - { - $this->dataType = $dataType; - return $this; - } - - /** - * @return int|null the $characterMaximumLength - */ - public function getCharacterMaximumLength() - { - return $this->characterMaximumLength; - } - - /** - * @param int $characterMaximumLength the $characterMaximumLength to set - * @return ColumnObject - */ - public function setCharacterMaximumLength($characterMaximumLength) - { - $this->characterMaximumLength = $characterMaximumLength; - return $this; - } - - /** - * @return int|null the $characterOctetLength - */ - public function getCharacterOctetLength() - { - return $this->characterOctetLength; - } - - /** - * @param int $characterOctetLength the $characterOctetLength to set - * @return ColumnObject - */ - public function setCharacterOctetLength($characterOctetLength) - { - $this->characterOctetLength = $characterOctetLength; - return $this; - } - - /** - * @return int the $numericPrecision - */ - public function getNumericPrecision() - { - return $this->numericPrecision; - } - - /** - * @param int $numericPrecision the $numericPrevision to set - * @return ColumnObject - */ - public function setNumericPrecision($numericPrecision) - { - $this->numericPrecision = $numericPrecision; - return $this; - } - - /** - * @return int the $numericScale - */ - public function getNumericScale() - { - return $this->numericScale; - } - - /** - * @param int $numericScale the $numericScale to set - * @return ColumnObject - */ - public function setNumericScale($numericScale) - { - $this->numericScale = $numericScale; - return $this; - } - - /** - * @return bool - */ - public function getNumericUnsigned() - { - return $this->numericUnsigned; - } - - /** - * @param bool $numericUnsigned - * @return ColumnObject - */ - public function setNumericUnsigned($numericUnsigned) - { - $this->numericUnsigned = $numericUnsigned; - return $this; - } - - /** - * @return bool - */ - public function isNumericUnsigned() - { - return $this->numericUnsigned; - } - - /** - * @return array the $errata - */ - public function getErratas() - { - return $this->errata; - } - - /** - * @param array $erratas - * @return ColumnObject - */ - public function setErratas(array $erratas) - { - foreach ($erratas as $name => $value) { - $this->setErrata($name, $value); - } - return $this; - } - - /** - * @param string $errataName - * @return mixed - */ - public function getErrata($errataName) - { - if (array_key_exists($errataName, $this->errata)) { - return $this->errata[$errataName]; - } - return null; - } - - /** - * @param string $errataName - * @param mixed $errataValue - * @return ColumnObject - */ - public function setErrata($errataName, $errataValue) - { - $this->errata[$errataName] = $errataValue; - return $this; - } -} diff --git a/library/Zend/Db/Metadata/Object/ConstraintKeyObject.php b/library/Zend/Db/Metadata/Object/ConstraintKeyObject.php deleted file mode 100755 index 568368805..000000000 --- a/library/Zend/Db/Metadata/Object/ConstraintKeyObject.php +++ /dev/null @@ -1,249 +0,0 @@ -setColumnName($column); - } - - /** - * Get column name - * - * @return string - */ - public function getColumnName() - { - return $this->columnName; - } - - /** - * Set column name - * - * @param string $columnName - * @return ConstraintKeyObject - */ - public function setColumnName($columnName) - { - $this->columnName = $columnName; - return $this; - } - - /** - * Get ordinal position - * - * @return int - */ - public function getOrdinalPosition() - { - return $this->ordinalPosition; - } - - /** - * Set ordinal position - * - * @param int $ordinalPosition - * @return ConstraintKeyObject - */ - public function setOrdinalPosition($ordinalPosition) - { - $this->ordinalPosition = $ordinalPosition; - return $this; - } - - /** - * Get position in unique constraint - * - * @return bool - */ - public function getPositionInUniqueConstraint() - { - return $this->positionInUniqueConstraint; - } - - /** - * Set position in unique constraint - * - * @param bool $positionInUniqueConstraint - * @return ConstraintKeyObject - */ - public function setPositionInUniqueConstraint($positionInUniqueConstraint) - { - $this->positionInUniqueConstraint = $positionInUniqueConstraint; - return $this; - } - - /** - * Get referencred table schema - * - * @return string - */ - public function getReferencedTableSchema() - { - return $this->referencedTableSchema; - } - - /** - * Set referenced table schema - * - * @param string $referencedTableSchema - * @return ConstraintKeyObject - */ - public function setReferencedTableSchema($referencedTableSchema) - { - $this->referencedTableSchema = $referencedTableSchema; - return $this; - } - - /** - * Get referenced table name - * - * @return string - */ - public function getReferencedTableName() - { - return $this->referencedTableName; - } - - /** - * Set Referenced table name - * - * @param string $referencedTableName - * @return ConstraintKeyObject - */ - public function setReferencedTableName($referencedTableName) - { - $this->referencedTableName = $referencedTableName; - return $this; - } - - /** - * Get referenced column name - * - * @return string - */ - public function getReferencedColumnName() - { - return $this->referencedColumnName; - } - - /** - * Set referenced column name - * - * @param string $referencedColumnName - * @return ConstraintKeyObject - */ - public function setReferencedColumnName($referencedColumnName) - { - $this->referencedColumnName = $referencedColumnName; - return $this; - } - - /** - * set foreign key update rule - * - * @param string $foreignKeyUpdateRule - */ - public function setForeignKeyUpdateRule($foreignKeyUpdateRule) - { - $this->foreignKeyUpdateRule = $foreignKeyUpdateRule; - } - - /** - * Get foreign key update rule - * - * @return string - */ - public function getForeignKeyUpdateRule() - { - return $this->foreignKeyUpdateRule; - } - - /** - * Set foreign key delete rule - * - * @param string $foreignKeyDeleteRule - */ - public function setForeignKeyDeleteRule($foreignKeyDeleteRule) - { - $this->foreignKeyDeleteRule = $foreignKeyDeleteRule; - } - - /** - * get foreign key delete rule - * - * @return string - */ - public function getForeignKeyDeleteRule() - { - return $this->foreignKeyDeleteRule; - } -} diff --git a/library/Zend/Db/Metadata/Object/ConstraintObject.php b/library/Zend/Db/Metadata/Object/ConstraintObject.php deleted file mode 100755 index 089c5ea1f..000000000 --- a/library/Zend/Db/Metadata/Object/ConstraintObject.php +++ /dev/null @@ -1,411 +0,0 @@ -setName($name); - $this->setTableName($tableName); - $this->setSchemaName($schemaName); - } - - /** - * Set name - * - * @param string $name - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Set schema name - * - * @param string $schemaName - */ - public function setSchemaName($schemaName) - { - $this->schemaName = $schemaName; - } - - /** - * Get schema name - * - * @return string - */ - public function getSchemaName() - { - return $this->schemaName; - } - - /** - * Get table name - * - * @return string - */ - public function getTableName() - { - return $this->tableName; - } - - /** - * Set table name - * - * @param string $tableName - * @return ConstraintObject - */ - public function setTableName($tableName) - { - $this->tableName = $tableName; - return $this; - } - - /** - * Set type - * - * @param string $type - */ - public function setType($type) - { - $this->type = $type; - } - - /** - * Get type - * - * @return string - */ - public function getType() - { - return $this->type; - } - - public function hasColumns() - { - return (!empty($this->columns)); - } - - /** - * Get Columns. - * - * @return string[] - */ - public function getColumns() - { - return $this->columns; - } - - /** - * Set Columns. - * - * @param string[] $columns - * @return ConstraintObject - */ - public function setColumns(array $columns) - { - $this->columns = $columns; - return $this; - } - - /** - * Get Referenced Table Schema. - * - * @return string - */ - public function getReferencedTableSchema() - { - return $this->referencedTableSchema; - } - - /** - * Set Referenced Table Schema. - * - * @param string $referencedTableSchema - * @return ConstraintObject - */ - public function setReferencedTableSchema($referencedTableSchema) - { - $this->referencedTableSchema = $referencedTableSchema; - return $this; - } - - /** - * Get Referenced Table Name. - * - * @return string - */ - public function getReferencedTableName() - { - return $this->referencedTableName; - } - - /** - * Set Referenced Table Name. - * - * @param string $referencedTableName - * @return ConstraintObject - */ - public function setReferencedTableName($referencedTableName) - { - $this->referencedTableName = $referencedTableName; - return $this; - } - - /** - * Get Referenced Columns. - * - * @return string[] - */ - public function getReferencedColumns() - { - return $this->referencedColumns; - } - - /** - * Set Referenced Columns. - * - * @param string[] $referencedColumns - * @return ConstraintObject - */ - public function setReferencedColumns(array $referencedColumns) - { - $this->referencedColumns = $referencedColumns; - return $this; - } - - /** - * Get Match Option. - * - * @return string - */ - public function getMatchOption() - { - return $this->matchOption; - } - - /** - * Set Match Option. - * - * @param string $matchOption - * @return ConstraintObject - */ - public function setMatchOption($matchOption) - { - $this->matchOption = $matchOption; - return $this; - } - - /** - * Get Update Rule. - * - * @return string - */ - public function getUpdateRule() - { - return $this->updateRule; - } - - /** - * Set Update Rule. - * - * @param string $updateRule - * @return ConstraintObject - */ - public function setUpdateRule($updateRule) - { - $this->updateRule = $updateRule; - return $this; - } - - /** - * Get Delete Rule. - * - * @return string - */ - public function getDeleteRule() - { - return $this->deleteRule; - } - - /** - * Set Delete Rule. - * - * @param string $deleteRule - * @return ConstraintObject - */ - public function setDeleteRule($deleteRule) - { - $this->deleteRule = $deleteRule; - return $this; - } - - /** - * Get Check Clause. - * - * @return string - */ - public function getCheckClause() - { - return $this->checkClause; - } - - /** - * Set Check Clause. - * - * @param string $checkClause - * @return ConstraintObject - */ - public function setCheckClause($checkClause) - { - $this->checkClause = $checkClause; - return $this; - } - - /** - * Is primary key - * - * @return bool - */ - public function isPrimaryKey() - { - return ('PRIMARY KEY' == $this->type); - } - - /** - * Is unique key - * - * @return bool - */ - public function isUnique() - { - return ('UNIQUE' == $this->type); - } - - /** - * Is foreign key - * - * @return bool - */ - public function isForeignKey() - { - return ('FOREIGN KEY' == $this->type); - } - - /** - * Is foreign key - * - * @return bool - */ - public function isCheck() - { - return ('CHECK' == $this->type); - } -} diff --git a/library/Zend/Db/Metadata/Object/TableObject.php b/library/Zend/Db/Metadata/Object/TableObject.php deleted file mode 100755 index 8735fbfc8..000000000 --- a/library/Zend/Db/Metadata/Object/TableObject.php +++ /dev/null @@ -1,14 +0,0 @@ -name; - } - - /** - * Set Name. - * - * @param string $name - * @return TriggerObject - */ - public function setName($name) - { - $this->name = $name; - return $this; - } - - /** - * Get Event Manipulation. - * - * @return string - */ - public function getEventManipulation() - { - return $this->eventManipulation; - } - - /** - * Set Event Manipulation. - * - * @param string $eventManipulation - * @return TriggerObject - */ - public function setEventManipulation($eventManipulation) - { - $this->eventManipulation = $eventManipulation; - return $this; - } - - /** - * Get Event Object Catalog. - * - * @return string - */ - public function getEventObjectCatalog() - { - return $this->eventObjectCatalog; - } - - /** - * Set Event Object Catalog. - * - * @param string $eventObjectCatalog - * @return TriggerObject - */ - public function setEventObjectCatalog($eventObjectCatalog) - { - $this->eventObjectCatalog = $eventObjectCatalog; - return $this; - } - - /** - * Get Event Object Schema. - * - * @return string - */ - public function getEventObjectSchema() - { - return $this->eventObjectSchema; - } - - /** - * Set Event Object Schema. - * - * @param string $eventObjectSchema - * @return TriggerObject - */ - public function setEventObjectSchema($eventObjectSchema) - { - $this->eventObjectSchema = $eventObjectSchema; - return $this; - } - - /** - * Get Event Object Table. - * - * @return string - */ - public function getEventObjectTable() - { - return $this->eventObjectTable; - } - - /** - * Set Event Object Table. - * - * @param string $eventObjectTable - * @return TriggerObject - */ - public function setEventObjectTable($eventObjectTable) - { - $this->eventObjectTable = $eventObjectTable; - return $this; - } - - /** - * Get Action Order. - * - * @return string - */ - public function getActionOrder() - { - return $this->actionOrder; - } - - /** - * Set Action Order. - * - * @param string $actionOrder - * @return TriggerObject - */ - public function setActionOrder($actionOrder) - { - $this->actionOrder = $actionOrder; - return $this; - } - - /** - * Get Action Condition. - * - * @return string - */ - public function getActionCondition() - { - return $this->actionCondition; - } - - /** - * Set Action Condition. - * - * @param string $actionCondition - * @return TriggerObject - */ - public function setActionCondition($actionCondition) - { - $this->actionCondition = $actionCondition; - return $this; - } - - /** - * Get Action Statement. - * - * @return string - */ - public function getActionStatement() - { - return $this->actionStatement; - } - - /** - * Set Action Statement. - * - * @param string $actionStatement - * @return TriggerObject - */ - public function setActionStatement($actionStatement) - { - $this->actionStatement = $actionStatement; - return $this; - } - - /** - * Get Action Orientation. - * - * @return string - */ - public function getActionOrientation() - { - return $this->actionOrientation; - } - - /** - * Set Action Orientation. - * - * @param string $actionOrientation - * @return TriggerObject - */ - public function setActionOrientation($actionOrientation) - { - $this->actionOrientation = $actionOrientation; - return $this; - } - - /** - * Get Action Timing. - * - * @return string - */ - public function getActionTiming() - { - return $this->actionTiming; - } - - /** - * Set Action Timing. - * - * @param string $actionTiming - * @return TriggerObject - */ - public function setActionTiming($actionTiming) - { - $this->actionTiming = $actionTiming; - return $this; - } - - /** - * Get Action Reference Old Table. - * - * @return string - */ - public function getActionReferenceOldTable() - { - return $this->actionReferenceOldTable; - } - - /** - * Set Action Reference Old Table. - * - * @param string $actionReferenceOldTable - * @return TriggerObject - */ - public function setActionReferenceOldTable($actionReferenceOldTable) - { - $this->actionReferenceOldTable = $actionReferenceOldTable; - return $this; - } - - /** - * Get Action Reference New Table. - * - * @return string - */ - public function getActionReferenceNewTable() - { - return $this->actionReferenceNewTable; - } - - /** - * Set Action Reference New Table. - * - * @param string $actionReferenceNewTable - * @return TriggerObject - */ - public function setActionReferenceNewTable($actionReferenceNewTable) - { - $this->actionReferenceNewTable = $actionReferenceNewTable; - return $this; - } - - /** - * Get Action Reference Old Row. - * - * @return string - */ - public function getActionReferenceOldRow() - { - return $this->actionReferenceOldRow; - } - - /** - * Set Action Reference Old Row. - * - * @param string $actionReferenceOldRow - * @return TriggerObject - */ - public function setActionReferenceOldRow($actionReferenceOldRow) - { - $this->actionReferenceOldRow = $actionReferenceOldRow; - return $this; - } - - /** - * Get Action Reference New Row. - * - * @return string - */ - public function getActionReferenceNewRow() - { - return $this->actionReferenceNewRow; - } - - /** - * Set Action Reference New Row. - * - * @param string $actionReferenceNewRow - * @return TriggerObject - */ - public function setActionReferenceNewRow($actionReferenceNewRow) - { - $this->actionReferenceNewRow = $actionReferenceNewRow; - return $this; - } - - /** - * Get Created. - * - * @return \DateTime - */ - public function getCreated() - { - return $this->created; - } - - /** - * Set Created. - * - * @param \DateTime $created - * @return TriggerObject - */ - public function setCreated($created) - { - $this->created = $created; - return $this; - } -} diff --git a/library/Zend/Db/Metadata/Object/ViewObject.php b/library/Zend/Db/Metadata/Object/ViewObject.php deleted file mode 100755 index 5130e9ecc..000000000 --- a/library/Zend/Db/Metadata/Object/ViewObject.php +++ /dev/null @@ -1,76 +0,0 @@ -viewDefinition; - } - - /** - * @param string $viewDefinition to set - * @return ViewObject - */ - public function setViewDefinition($viewDefinition) - { - $this->viewDefinition = $viewDefinition; - return $this; - } - - /** - * @return string $checkOption - */ - public function getCheckOption() - { - return $this->checkOption; - } - - /** - * @param string $checkOption to set - * @return ViewObject - */ - public function setCheckOption($checkOption) - { - $this->checkOption = $checkOption; - return $this; - } - - /** - * @return bool $isUpdatable - */ - public function getIsUpdatable() - { - return $this->isUpdatable; - } - - /** - * @param bool $isUpdatable to set - * @return ViewObject - */ - public function setIsUpdatable($isUpdatable) - { - $this->isUpdatable = $isUpdatable; - return $this; - } - - public function isUpdatable() - { - return $this->isUpdatable; - } -} diff --git a/library/Zend/Db/Metadata/Source/AbstractSource.php b/library/Zend/Db/Metadata/Source/AbstractSource.php deleted file mode 100755 index 63d63a928..000000000 --- a/library/Zend/Db/Metadata/Source/AbstractSource.php +++ /dev/null @@ -1,601 +0,0 @@ -adapter = $adapter; - $this->defaultSchema = ($adapter->getCurrentSchema()) ?: self::DEFAULT_SCHEMA; - } - - /** - * Get schemas - * - */ - public function getSchemas() - { - $this->loadSchemaData(); - - return $this->data['schemas']; - } - - /** - * Get table names - * - * @param string $schema - * @param bool $includeViews - * @return string[] - */ - public function getTableNames($schema = null, $includeViews = false) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadTableNameData($schema); - - if ($includeViews) { - return array_keys($this->data['table_names'][$schema]); - } - - $tableNames = array(); - foreach ($this->data['table_names'][$schema] as $tableName => $data) { - if ('BASE TABLE' == $data['table_type']) { - $tableNames[] = $tableName; - } - } - return $tableNames; - } - - /** - * Get tables - * - * @param string $schema - * @param bool $includeViews - * @return Object\TableObject[] - */ - public function getTables($schema = null, $includeViews = false) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $tables = array(); - foreach ($this->getTableNames($schema, $includeViews) as $tableName) { - $tables[] = $this->getTable($tableName, $schema); - } - return $tables; - } - - /** - * Get table - * - * @param string $tableName - * @param string $schema - * @return Object\TableObject - */ - public function getTable($tableName, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadTableNameData($schema); - - if (!isset($this->data['table_names'][$schema][$tableName])) { - throw new \Exception('Table "' . $tableName . '" does not exist'); - } - - $data = $this->data['table_names'][$schema][$tableName]; - switch ($data['table_type']) { - case 'BASE TABLE': - $table = new Object\TableObject($tableName); - break; - case 'VIEW': - $table = new Object\ViewObject($tableName); - $table->setViewDefinition($data['view_definition']); - $table->setCheckOption($data['check_option']); - $table->setIsUpdatable($data['is_updatable']); - break; - default: - throw new \Exception('Table "' . $tableName . '" is of an unsupported type "' . $data['table_type'] . '"'); - } - $table->setColumns($this->getColumns($tableName, $schema)); - $table->setConstraints($this->getConstraints($tableName, $schema)); - return $table; - } - - /** - * Get view names - * - * @param string $schema - * @return array - */ - public function getViewNames($schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadTableNameData($schema); - - $viewNames = array(); - foreach ($this->data['table_names'][$schema] as $tableName => $data) { - if ('VIEW' == $data['table_type']) { - $viewNames[] = $tableName; - } - } - return $viewNames; - } - - /** - * Get views - * - * @param string $schema - * @return array - */ - public function getViews($schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $views = array(); - foreach ($this->getViewNames($schema) as $tableName) { - $views[] = $this->getTable($tableName, $schema); - } - return $views; - } - - /** - * Get view - * - * @param string $viewName - * @param string $schema - * @return \Zend\Db\Metadata\Object\TableObject - */ - public function getView($viewName, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadTableNameData($schema); - - $tableNames = $this->data['table_names'][$schema]; - if (isset($tableNames[$viewName]) && 'VIEW' == $tableNames[$viewName]['table_type']) { - return $this->getTable($viewName, $schema); - } - throw new \Exception('View "' . $viewName . '" does not exist'); - } - - /** - * Gt column names - * - * @param string $table - * @param string $schema - * @return array - */ - public function getColumnNames($table, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadColumnData($table, $schema); - - if (!isset($this->data['columns'][$schema][$table])) { - throw new \Exception('"' . $table . '" does not exist'); - } - - return array_keys($this->data['columns'][$schema][$table]); - } - - /** - * Get columns - * - * @param string $table - * @param string $schema - * @return array - */ - public function getColumns($table, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadColumnData($table, $schema); - - $columns = array(); - foreach ($this->getColumnNames($table, $schema) as $columnName) { - $columns[] = $this->getColumn($columnName, $table, $schema); - } - return $columns; - } - - /** - * Get column - * - * @param string $columnName - * @param string $table - * @param string $schema - * @return Object\ColumnObject - */ - public function getColumn($columnName, $table, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadColumnData($table, $schema); - - if (!isset($this->data['columns'][$schema][$table][$columnName])) { - throw new \Exception('A column by that name was not found.'); - } - - $info = $this->data['columns'][$schema][$table][$columnName]; - - $column = new Object\ColumnObject($columnName, $table, $schema); - $props = array( - 'ordinal_position', 'column_default', 'is_nullable', - 'data_type', 'character_maximum_length', 'character_octet_length', - 'numeric_precision', 'numeric_scale', 'numeric_unsigned', - 'erratas' - ); - foreach ($props as $prop) { - if (isset($info[$prop])) { - $column->{'set' . str_replace('_', '', $prop)}($info[$prop]); - } - } - - $column->setOrdinalPosition($info['ordinal_position']); - $column->setColumnDefault($info['column_default']); - $column->setIsNullable($info['is_nullable']); - $column->setDataType($info['data_type']); - $column->setCharacterMaximumLength($info['character_maximum_length']); - $column->setCharacterOctetLength($info['character_octet_length']); - $column->setNumericPrecision($info['numeric_precision']); - $column->setNumericScale($info['numeric_scale']); - $column->setNumericUnsigned($info['numeric_unsigned']); - $column->setErratas($info['erratas']); - - return $column; - } - - /** - * Get constraints - * - * @param string $table - * @param string $schema - * @return array - */ - public function getConstraints($table, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadConstraintData($table, $schema); - - $constraints = array(); - foreach (array_keys($this->data['constraints'][$schema][$table]) as $constraintName) { - $constraints[] = $this->getConstraint($constraintName, $table, $schema); - } - - return $constraints; - } - - /** - * Get constraint - * - * @param string $constraintName - * @param string $table - * @param string $schema - * @return Object\ConstraintObject - */ - public function getConstraint($constraintName, $table, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadConstraintData($table, $schema); - - if (!isset($this->data['constraints'][$schema][$table][$constraintName])) { - throw new \Exception('Cannot find a constraint by that name in this table'); - } - - $info = $this->data['constraints'][$schema][$table][$constraintName]; - $constraint = new Object\ConstraintObject($constraintName, $table, $schema); - - foreach (array( - 'constraint_type' => 'setType', - 'match_option' => 'setMatchOption', - 'update_rule' => 'setUpdateRule', - 'delete_rule' => 'setDeleteRule', - 'columns' => 'setColumns', - 'referenced_table_schema' => 'setReferencedTableSchema', - 'referenced_table_name' => 'setReferencedTableName', - 'referenced_columns' => 'setReferencedColumns', - 'check_clause' => 'setCheckClause', - ) as $key => $setMethod) { - if (isset($info[$key])) { - $constraint->{$setMethod}($info[$key]); - } - } - - return $constraint; - } - - /** - * Get constraint keys - * - * @param string $constraint - * @param string $table - * @param string $schema - * @return array - */ - public function getConstraintKeys($constraint, $table, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadConstraintReferences($table, $schema); - - // organize references first - $references = array(); - foreach ($this->data['constraint_references'][$schema] as $refKeyInfo) { - if ($refKeyInfo['constraint_name'] == $constraint) { - $references[$refKeyInfo['constraint_name']] = $refKeyInfo; - } - } - - $this->loadConstraintDataKeys($schema); - - $keys = array(); - foreach ($this->data['constraint_keys'][$schema] as $constraintKeyInfo) { - if ($constraintKeyInfo['table_name'] == $table && $constraintKeyInfo['constraint_name'] === $constraint) { - $keys[] = $key = new Object\ConstraintKeyObject($constraintKeyInfo['column_name']); - $key->setOrdinalPosition($constraintKeyInfo['ordinal_position']); - if (isset($references[$constraint])) { - //$key->setReferencedTableSchema($constraintKeyInfo['referenced_table_schema']); - $key->setForeignKeyUpdateRule($references[$constraint]['update_rule']); - $key->setForeignKeyDeleteRule($references[$constraint]['delete_rule']); - //$key->setReferencedTableSchema($references[$constraint]['referenced_table_schema']); - $key->setReferencedTableName($references[$constraint]['referenced_table_name']); - $key->setReferencedColumnName($references[$constraint]['referenced_column_name']); - } - } - } - - return $keys; - } - - /** - * Get trigger names - * - * @param string $schema - * @return array - */ - public function getTriggerNames($schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadTriggerData($schema); - - return array_keys($this->data['triggers'][$schema]); - } - - /** - * Get triggers - * - * @param string $schema - * @return array - */ - public function getTriggers($schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $triggers = array(); - foreach ($this->getTriggerNames($schema) as $triggerName) { - $triggers[] = $this->getTrigger($triggerName, $schema); - } - return $triggers; - } - - /** - * Get trigger - * - * @param string $triggerName - * @param string $schema - * @return Object\TriggerObject - */ - public function getTrigger($triggerName, $schema = null) - { - if ($schema === null) { - $schema = $this->defaultSchema; - } - - $this->loadTriggerData($schema); - - if (!isset($this->data['triggers'][$schema][$triggerName])) { - throw new \Exception('Trigger "' . $triggerName . '" does not exist'); - } - - $info = $this->data['triggers'][$schema][$triggerName]; - - $trigger = new Object\TriggerObject(); - - $trigger->setName($triggerName); - $trigger->setEventManipulation($info['event_manipulation']); - $trigger->setEventObjectCatalog($info['event_object_catalog']); - $trigger->setEventObjectSchema($info['event_object_schema']); - $trigger->setEventObjectTable($info['event_object_table']); - $trigger->setActionOrder($info['action_order']); - $trigger->setActionCondition($info['action_condition']); - $trigger->setActionStatement($info['action_statement']); - $trigger->setActionOrientation($info['action_orientation']); - $trigger->setActionTiming($info['action_timing']); - $trigger->setActionReferenceOldTable($info['action_reference_old_table']); - $trigger->setActionReferenceNewTable($info['action_reference_new_table']); - $trigger->setActionReferenceOldRow($info['action_reference_old_row']); - $trigger->setActionReferenceNewRow($info['action_reference_new_row']); - $trigger->setCreated($info['created']); - - return $trigger; - } - - /** - * Prepare data hierarchy - * - * @param string $type - * @param string $key ... - */ - protected function prepareDataHierarchy($type) - { - $data = &$this->data; - foreach (func_get_args() as $key) { - if (!isset($data[$key])) { - $data[$key] = array(); - } - $data = &$data[$key]; - } - } - - /** - * Load schema data - */ - protected function loadSchemaData() - { - } - - /** - * Load table name data - * - * @param string $schema - */ - protected function loadTableNameData($schema) - { - if (isset($this->data['table_names'][$schema])) { - return; - } - - $this->prepareDataHierarchy('table_names', $schema); - } - - /** - * Load column data - * - * @param string $table - * @param string $schema - */ - protected function loadColumnData($table, $schema) - { - if (isset($this->data['columns'][$schema][$table])) { - return; - } - - $this->prepareDataHierarchy('columns', $schema, $table); - } - - /** - * Load constraint data - * - * @param string $table - * @param string $schema - */ - protected function loadConstraintData($table, $schema) - { - if (isset($this->data['constraints'][$schema])) { - return; - } - - $this->prepareDataHierarchy('constraints', $schema); - } - - /** - * Load constraint data keys - * - * @param string $schema - */ - protected function loadConstraintDataKeys($schema) - { - if (isset($this->data['constraint_keys'][$schema])) { - return; - } - - $this->prepareDataHierarchy('constraint_keys', $schema); - } - - /** - * Load constraint references - * - * @param string $table - * @param string $schema - */ - protected function loadConstraintReferences($table, $schema) - { - if (isset($this->data['constraint_references'][$schema])) { - return; - } - - $this->prepareDataHierarchy('constraint_references', $schema); - } - - /** - * Load trigger data - * - * @param string $schema - */ - protected function loadTriggerData($schema) - { - if (isset($this->data['triggers'][$schema])) { - return; - } - - $this->prepareDataHierarchy('triggers', $schema); - } -} diff --git a/library/Zend/Db/Metadata/Source/MysqlMetadata.php b/library/Zend/Db/Metadata/Source/MysqlMetadata.php deleted file mode 100755 index ac9642f9c..000000000 --- a/library/Zend/Db/Metadata/Source/MysqlMetadata.php +++ /dev/null @@ -1,493 +0,0 @@ -data['schemas'])) { - return; - } - $this->prepareDataHierarchy('schemas'); - - $p = $this->adapter->getPlatform(); - - $sql = 'SELECT ' . $p->quoteIdentifier('SCHEMA_NAME') - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'SCHEMATA')) - . ' WHERE ' . $p->quoteIdentifier('SCHEMA_NAME') - . ' != \'INFORMATION_SCHEMA\''; - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $schemas = array(); - foreach ($results->toArray() as $row) { - $schemas[] = $row['SCHEMA_NAME']; - } - - $this->data['schemas'] = $schemas; - } - - protected function loadTableNameData($schema) - { - if (isset($this->data['table_names'][$schema])) { - return; - } - $this->prepareDataHierarchy('table_names', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('T', 'TABLE_NAME'), - array('T', 'TABLE_TYPE'), - array('V', 'VIEW_DEFINITION'), - array('V', 'CHECK_OPTION'), - array('V', 'IS_UPDATABLE'), - ); - - array_walk($isColumns, function (&$c) use ($p) { $c = $p->quoteIdentifierChain($c); }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . 'T' - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'VIEWS')) . ' V' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('V', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('V', 'TABLE_NAME')) - - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $tables = array(); - foreach ($results->toArray() as $row) { - $tables[$row['TABLE_NAME']] = array( - 'table_type' => $row['TABLE_TYPE'], - 'view_definition' => $row['VIEW_DEFINITION'], - 'check_option' => $row['CHECK_OPTION'], - 'is_updatable' => ('YES' == $row['IS_UPDATABLE']), - ); - } - - $this->data['table_names'][$schema] = $tables; - } - - protected function loadColumnData($table, $schema) - { - if (isset($this->data['columns'][$schema][$table])) { - return; - } - $this->prepareDataHierarchy('columns', $schema, $table); - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('C', 'ORDINAL_POSITION'), - array('C', 'COLUMN_DEFAULT'), - array('C', 'IS_NULLABLE'), - array('C', 'DATA_TYPE'), - array('C', 'CHARACTER_MAXIMUM_LENGTH'), - array('C', 'CHARACTER_OCTET_LENGTH'), - array('C', 'NUMERIC_PRECISION'), - array('C', 'NUMERIC_SCALE'), - array('C', 'COLUMN_NAME'), - array('C', 'COLUMN_TYPE'), - ); - - array_walk($isColumns, function (&$c) use ($p) { $c = $p->quoteIdentifierChain($c); }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . 'T' - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'COLUMNS')) . 'C' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('C', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('C', 'TABLE_NAME')) - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')' - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteTrustedValue($table); - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - $columns = array(); - foreach ($results->toArray() as $row) { - $erratas = array(); - $matches = array(); - if (preg_match('/^(?:enum|set)\((.+)\)$/i', $row['COLUMN_TYPE'], $matches)) { - $permittedValues = $matches[1]; - if (preg_match_all("/\\s*'((?:[^']++|'')*+)'\\s*(?:,|\$)/", $permittedValues, $matches, PREG_PATTERN_ORDER)) { - $permittedValues = str_replace("''", "'", $matches[1]); - } else { - $permittedValues = array($permittedValues); - } - $erratas['permitted_values'] = $permittedValues; - } - $columns[$row['COLUMN_NAME']] = array( - 'ordinal_position' => $row['ORDINAL_POSITION'], - 'column_default' => $row['COLUMN_DEFAULT'], - 'is_nullable' => ('YES' == $row['IS_NULLABLE']), - 'data_type' => $row['DATA_TYPE'], - 'character_maximum_length' => $row['CHARACTER_MAXIMUM_LENGTH'], - 'character_octet_length' => $row['CHARACTER_OCTET_LENGTH'], - 'numeric_precision' => $row['NUMERIC_PRECISION'], - 'numeric_scale' => $row['NUMERIC_SCALE'], - 'numeric_unsigned' => (false !== strpos($row['COLUMN_TYPE'], 'unsigned')), - 'erratas' => $erratas, - ); - } - - $this->data['columns'][$schema][$table] = $columns; - } - - protected function loadConstraintData($table, $schema) - { - if (isset($this->data['constraints'][$schema][$table])) { - return; - } - - $this->prepareDataHierarchy('constraints', $schema, $table); - - $isColumns = array( - array('T', 'TABLE_NAME'), - array('TC', 'CONSTRAINT_NAME'), - array('TC', 'CONSTRAINT_TYPE'), - array('KCU', 'COLUMN_NAME'), - array('RC', 'MATCH_OPTION'), - array('RC', 'UPDATE_RULE'), - array('RC', 'DELETE_RULE'), - array('KCU', 'REFERENCED_TABLE_SCHEMA'), - array('KCU', 'REFERENCED_TABLE_NAME'), - array('KCU', 'REFERENCED_COLUMN_NAME'), - ); - - $p = $this->adapter->getPlatform(); - - array_walk($isColumns, function (&$c) use ($p) { - $c = $p->quoteIdentifierChain($c); - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . ' T' - - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLE_CONSTRAINTS')) . ' TC' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('TC', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('TC', 'TABLE_NAME')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'KEY_COLUMN_USAGE')) . ' KCU' - . ' ON ' . $p->quoteIdentifierChain(array('TC', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('TC', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_NAME')) - . ' AND ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'CONSTRAINT_NAME')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'REFERENTIAL_CONSTRAINTS')) . ' RC' - . ' ON ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('RC', 'CONSTRAINT_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('RC', 'CONSTRAINT_NAME')) - - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteTrustedValue($table) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $sql .= ' ORDER BY CASE ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_TYPE')) - . " WHEN 'PRIMARY KEY' THEN 1" - . " WHEN 'UNIQUE' THEN 2" - . " WHEN 'FOREIGN KEY' THEN 3" - . " ELSE 4 END" - - . ', ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_NAME')) - . ', ' . $p->quoteIdentifierChain(array('KCU', 'ORDINAL_POSITION')); - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $realName = null; - $constraints = array(); - foreach ($results->toArray() as $row) { - if ($row['CONSTRAINT_NAME'] !== $realName) { - $realName = $row['CONSTRAINT_NAME']; - $isFK = ('FOREIGN KEY' == $row['CONSTRAINT_TYPE']); - if ($isFK) { - $name = $realName; - } else { - $name = '_zf_' . $row['TABLE_NAME'] . '_' . $realName; - } - $constraints[$name] = array( - 'constraint_name' => $name, - 'constraint_type' => $row['CONSTRAINT_TYPE'], - 'table_name' => $row['TABLE_NAME'], - 'columns' => array(), - ); - if ($isFK) { - $constraints[$name]['referenced_table_schema'] = $row['REFERENCED_TABLE_SCHEMA']; - $constraints[$name]['referenced_table_name'] = $row['REFERENCED_TABLE_NAME']; - $constraints[$name]['referenced_columns'] = array(); - $constraints[$name]['match_option'] = $row['MATCH_OPTION']; - $constraints[$name]['update_rule'] = $row['UPDATE_RULE']; - $constraints[$name]['delete_rule'] = $row['DELETE_RULE']; - } - } - $constraints[$name]['columns'][] = $row['COLUMN_NAME']; - if ($isFK) { - $constraints[$name]['referenced_columns'][] = $row['REFERENCED_COLUMN_NAME']; - } - } - - $this->data['constraints'][$schema][$table] = $constraints; - } - - protected function loadConstraintDataNames($schema) - { - if (isset($this->data['constraint_names'][$schema])) { - return; - } - - $this->prepareDataHierarchy('constraint_names', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('TC', 'TABLE_NAME'), - array('TC', 'CONSTRAINT_NAME'), - array('TC', 'CONSTRAINT_TYPE'), - ); - - array_walk($isColumns, function (&$c) use ($p) { - $c = $p->quoteIdentifierChain($c); - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . 'T' - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLE_CONSTRAINTS')) . 'TC' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('TC', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('TC', 'TABLE_NAME')) - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $data = array(); - foreach ($results->toArray() as $row) { - $data[] = array_change_key_case($row, CASE_LOWER); - } - - $this->data['constraint_names'][$schema] = $data; - } - - protected function loadConstraintDataKeys($schema) - { - if (isset($this->data['constraint_keys'][$schema])) { - return; - } - - $this->prepareDataHierarchy('constraint_keys', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('T', 'TABLE_NAME'), - array('KCU', 'CONSTRAINT_NAME'), - array('KCU', 'COLUMN_NAME'), - array('KCU', 'ORDINAL_POSITION'), - ); - - array_walk($isColumns, function (&$c) use ($p) { - $c = $p->quoteIdentifierChain($c); - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . 'T' - - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'KEY_COLUMN_USAGE')) . 'KCU' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_NAME')) - - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $data = array(); - foreach ($results->toArray() as $row) { - $data[] = array_change_key_case($row, CASE_LOWER); - } - - $this->data['constraint_keys'][$schema] = $data; - } - - protected function loadConstraintReferences($table, $schema) - { - parent::loadConstraintReferences($table, $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('RC', 'TABLE_NAME'), - array('RC', 'CONSTRAINT_NAME'), - array('RC', 'UPDATE_RULE'), - array('RC', 'DELETE_RULE'), - array('KCU', 'REFERENCED_TABLE_SCHEMA'), - array('KCU', 'REFERENCED_TABLE_NAME'), - array('KCU', 'REFERENCED_COLUMN_NAME'), - ); - - array_walk($isColumns, function (&$c) use ($p) { - $c = $p->quoteIdentifierChain($c); - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . 'FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . 'T' - - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'REFERENTIAL_CONSTRAINTS')) . 'RC' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('RC', 'CONSTRAINT_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('RC', 'TABLE_NAME')) - - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'KEY_COLUMN_USAGE')) . 'KCU' - . ' ON ' . $p->quoteIdentifierChain(array('RC', 'CONSTRAINT_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('RC', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_NAME')) - . ' AND ' . $p->quoteIdentifierChain(array('RC', 'CONSTRAINT_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'CONSTRAINT_NAME')) - - . 'WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $data = array(); - foreach ($results->toArray() as $row) { - $data[] = array_change_key_case($row, CASE_LOWER); - } - - $this->data['constraint_references'][$schema] = $data; - } - - protected function loadTriggerData($schema) - { - if (isset($this->data['triggers'][$schema])) { - return; - } - - $this->prepareDataHierarchy('triggers', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( -// 'TRIGGER_CATALOG', -// 'TRIGGER_SCHEMA', - 'TRIGGER_NAME', - 'EVENT_MANIPULATION', - 'EVENT_OBJECT_CATALOG', - 'EVENT_OBJECT_SCHEMA', - 'EVENT_OBJECT_TABLE', - 'ACTION_ORDER', - 'ACTION_CONDITION', - 'ACTION_STATEMENT', - 'ACTION_ORIENTATION', - 'ACTION_TIMING', - 'ACTION_REFERENCE_OLD_TABLE', - 'ACTION_REFERENCE_NEW_TABLE', - 'ACTION_REFERENCE_OLD_ROW', - 'ACTION_REFERENCE_NEW_ROW', - 'CREATED', - ); - - array_walk($isColumns, function (&$c) use ($p) { - $c = $p->quoteIdentifier($c); - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TRIGGERS')) - . ' WHERE '; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= $p->quoteIdentifier('TRIGGER_SCHEMA') - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= $p->quoteIdentifier('TRIGGER_SCHEMA') - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $data = array(); - foreach ($results->toArray() as $row) { - $row = array_change_key_case($row, CASE_LOWER); - if (null !== $row['created']) { - $row['created'] = new \DateTime($row['created']); - } - $data[$row['trigger_name']] = $row; - } - - $this->data['triggers'][$schema] = $data; - } -} diff --git a/library/Zend/Db/Metadata/Source/OracleMetadata.php b/library/Zend/Db/Metadata/Source/OracleMetadata.php deleted file mode 100755 index 44deac13d..000000000 --- a/library/Zend/Db/Metadata/Source/OracleMetadata.php +++ /dev/null @@ -1,256 +0,0 @@ - 'CHECK', - 'P' => 'PRIMARY KEY', - 'R' => 'FOREIGN_KEY' - ); - - /** - * {@inheritdoc} - * @see \Zend\Db\Metadata\Source\AbstractSource::loadColumnData() - */ - protected function loadColumnData($table, $schema) - { - if (isset($this->data['columns'][$schema][$table])) { - return; - } - - $isColumns = array( - 'COLUMN_ID', - 'COLUMN_NAME', - 'DATA_DEFAULT', - 'NULLABLE', - 'DATA_TYPE', - 'DATA_LENGTH', - 'DATA_PRECISION', - 'DATA_SCALE' - ); - - $this->prepareDataHierarchy('columns', $schema, $table); - $parameters = array( - ':ownername' => $schema, - ':tablename' => $table - ); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM all_tab_columns' - . ' WHERE owner = :ownername AND table_name = :tablename'; - - $result = $this->adapter->query($sql)->execute($parameters); - $columns = array(); - - foreach ($result as $row) { - $columns[$row['COLUMN_NAME']] = array( - 'ordinal_position' => $row['COLUMN_ID'], - 'column_default' => $row['DATA_DEFAULT'], - 'is_nullable' => ('Y' == $row['NULLABLE']), - 'data_type' => $row['DATA_TYPE'], - 'character_maximum_length' => $row['DATA_LENGTH'], - 'character_octet_length' => null, - 'numeric_precision' => $row['DATA_PRECISION'], - 'numeric_scale' => $row['DATA_SCALE'], - 'numeric_unsigned' => false, - 'erratas' => array(), - ); - } - - $this->data['columns'][$schema][$table] = $columns; - return $this; - } - - /** - * Constraint type - * - * @param string $type - * @return string - */ - protected function getConstraintType($type) - { - if (isset($this->constraintTypeMap[$type])) { - return $this->constraintTypeMap[$type]; - } - - return $type; - } - - /** - * {@inheritdoc} - * @see \Zend\Db\Metadata\Source\AbstractSource::loadConstraintData() - */ - protected function loadConstraintData($table, $schema) - { - if (isset($this->data['constraints'][$schema][$table])) { - return; - } - - $this->prepareDataHierarchy('constraints', $schema, $table); - $sql = ' - SELECT - ac.owner, - ac.constraint_name, - ac.constraint_type, - ac.search_condition check_clause, - ac.table_name, - ac.delete_rule, - cc1.column_name, - cc2.table_name as ref_table, - cc2.column_name as ref_column, - cc2.owner as ref_owner - FROM all_constraints ac - INNER JOIN all_cons_columns cc1 - ON cc1.constraint_name = ac.constraint_name - LEFT JOIN all_cons_columns cc2 - ON cc2.constraint_name = ac.r_constraint_name - AND cc2.position = cc1.position - - WHERE - ac.owner = :schema AND ac.table_name = :table - - ORDER BY ac.constraint_name; - '; - - $parameters = array( - ':schema' => $schema, - ':table' => $table - ); - - $results = $this->adapter->query($sql)->execute($parameters); - $isFK = false; - $name = null; - $constraints = array(); - - foreach ($results as $row) { - if ($row['CONSTRAINT_NAME'] !== $name) { - $name = $row['CONSTRAINT_NAME']; - $constraints[$name] = array( - 'constraint_name' => $name, - 'constraint_type' => $this->getConstraintType($row['CONSTRAINT_TYPE']), - 'table_name' => $row['TABLE_NAME'], - ); - - if ('C' == $row['CONSTRAINT_TYPE']) { - $constraints[$name]['CHECK_CLAUSE'] = $row['CHECK_CLAUSE']; - continue; - } - - $constraints[$name]['columns'] = array(); - - $isFK = ('R' == $row['CONSTRAINT_TYPE']); - if ($isFK) { - $constraints[$name]['referenced_table_schema'] = $row['REF_OWNER']; - $constraints[$name]['referenced_table_name'] = $row['REF_TABLE']; - $constraints[$name]['referenced_columns'] = array(); - $constraints[$name]['match_option'] = 'NONE'; - $constraints[$name]['update_rule'] = null; - $constraints[$name]['delete_rule'] = $row['DELETE_RULE']; - } - } - - $constraints[$name]['columns'][] = $row['COLUMN_NAME']; - if ($isFK) { - $constraints[$name]['referenced_columns'][] = $row['REF_COLUMN']; - } - } - - return $this; - } - - /** - * {@inheritdoc} - * @see \Zend\Db\Metadata\Source\AbstractSource::loadSchemaData() - */ - protected function loadSchemaData() - { - if (isset($this->data['schemas'])) { - return; - } - - $this->prepareDataHierarchy('schemas'); - $sql = 'SELECT USERNAME FROM ALL_USERS'; - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $schemas = array(); - foreach ($results->toArray() as $row) { - $schemas[] = $row['USERNAME']; - } - - $this->data['schemas'] = $schemas; - } - - /** - * {@inheritdoc} - * @see \Zend\Db\Metadata\Source\AbstractSource::loadTableNameData() - */ - protected function loadTableNameData($schema) - { - if (isset($this->data['table_names'][$schema])) { - return $this; - } - - $this->prepareDataHierarchy('table_names', $schema); - $tables = array(); - - // Tables - $bind = array(':OWNER' => strtoupper($schema)); - $result = $this->adapter->query('SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER=:OWNER')->execute($bind); - - foreach ($result as $row) { - $tables[$row['TABLE_NAME']] = array( - 'table_type' => 'BASE TABLE', - 'view_definition' => null, - 'check_option' => null, - 'is_updatable' => false, - ); - } - - // Views - $result = $this->adapter->query('SELECT VIEW_NAME, TEXT FROM ALL_VIEWS WHERE OWNER=:OWNER', $bind); - foreach ($result as $row) { - $tables[$row['VIEW_NAME']] = array( - 'table_type' => 'VIEW', - 'view_definition' => null, - 'check_option' => 'NONE', - 'is_updatable' => false, - ); - } - - $this->data['table_names'][$schema] = $tables; - return $this; - } - - /** - * FIXME: load trigger data - * - * {@inheritdoc} - * - * @see \Zend\Db\Metadata\Source\AbstractSource::loadTriggerData() - */ - protected function loadTriggerData($schema) - { - if (isset($this->data['triggers'][$schema])) { - return; - } - - $this->prepareDataHierarchy('triggers', $schema); - } -} diff --git a/library/Zend/Db/Metadata/Source/PostgresqlMetadata.php b/library/Zend/Db/Metadata/Source/PostgresqlMetadata.php deleted file mode 100755 index bb274487d..000000000 --- a/library/Zend/Db/Metadata/Source/PostgresqlMetadata.php +++ /dev/null @@ -1,345 +0,0 @@ -data['schemas'])) { - return; - } - $this->prepareDataHierarchy('schemas'); - - $p = $this->adapter->getPlatform(); - - $sql = 'SELECT ' . $p->quoteIdentifier('schema_name') - . ' FROM ' . $p->quoteIdentifierChain(array('information_schema', 'schemata')) - . ' WHERE ' . $p->quoteIdentifier('schema_name') - . ' != \'information_schema\'' - . ' AND ' . $p->quoteIdentifier('schema_name') . " NOT LIKE 'pg_%'"; - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $schemas = array(); - foreach ($results->toArray() as $row) { - $schemas[] = $row['schema_name']; - } - - $this->data['schemas'] = $schemas; - } - - protected function loadTableNameData($schema) - { - if (isset($this->data['table_names'][$schema])) { - return; - } - $this->prepareDataHierarchy('table_names', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('t', 'table_name'), - array('t', 'table_type'), - array('v', 'view_definition'), - array('v', 'check_option'), - array('v', 'is_updatable'), - ); - - array_walk($isColumns, function (&$c) use ($p) { $c = $p->quoteIdentifierChain($c); }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('information_schema', 'tables')) . ' t' - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('information_schema', 'views')) . ' v' - . ' ON ' . $p->quoteIdentifierChain(array('t', 'table_schema')) - . ' = ' . $p->quoteIdentifierChain(array('v', 'table_schema')) - . ' AND ' . $p->quoteIdentifierChain(array('t', 'table_name')) - . ' = ' . $p->quoteIdentifierChain(array('v', 'table_name')) - - . ' WHERE ' . $p->quoteIdentifierChain(array('t', 'table_type')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('t', 'table_schema')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('t', 'table_schema')) - . ' != \'information_schema\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $tables = array(); - foreach ($results->toArray() as $row) { - $tables[$row['table_name']] = array( - 'table_type' => $row['table_type'], - 'view_definition' => $row['view_definition'], - 'check_option' => $row['check_option'], - 'is_updatable' => ('YES' == $row['is_updatable']), - ); - } - - $this->data['table_names'][$schema] = $tables; - } - - protected function loadColumnData($table, $schema) - { - if (isset($this->data['columns'][$schema][$table])) { - return; - } - - $this->prepareDataHierarchy('columns', $schema, $table); - - $platform = $this->adapter->getPlatform(); - - $isColumns = array( - 'table_name', - 'column_name', - 'ordinal_position', - 'column_default', - 'is_nullable', - 'data_type', - 'character_maximum_length', - 'character_octet_length', - 'numeric_precision', - 'numeric_scale', - ); - - array_walk($isColumns, function (&$c) use ($platform) { $c = $platform->quoteIdentifier($c); }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $platform->quoteIdentifier('information_schema') - . $platform->getIdentifierSeparator() . $platform->quoteIdentifier('columns') - . ' WHERE ' . $platform->quoteIdentifier('table_schema') - . ' != \'information\'' - . ' AND ' . $platform->quoteIdentifier('table_name') - . ' = ' . $platform->quoteTrustedValue($table); - - if ($schema != '__DEFAULT_SCHEMA__') { - $sql .= ' AND ' . $platform->quoteIdentifier('table_schema') - . ' = ' . $platform->quoteTrustedValue($schema); - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - $columns = array(); - foreach ($results->toArray() as $row) { - $columns[$row['column_name']] = array( - 'ordinal_position' => $row['ordinal_position'], - 'column_default' => $row['column_default'], - 'is_nullable' => ('YES' == $row['is_nullable']), - 'data_type' => $row['data_type'], - 'character_maximum_length' => $row['character_maximum_length'], - 'character_octet_length' => $row['character_octet_length'], - 'numeric_precision' => $row['numeric_precision'], - 'numeric_scale' => $row['numeric_scale'], - 'numeric_unsigned' => null, - 'erratas' => array(), - ); - } - - $this->data['columns'][$schema][$table] = $columns; - } - - protected function loadConstraintData($table, $schema) - { - if (isset($this->data['constraints'][$schema][$table])) { - return; - } - - $this->prepareDataHierarchy('constraints', $schema, $table); - - $isColumns = array( - array('t', 'table_name'), - array('tc', 'constraint_name'), - array('tc', 'constraint_type'), - array('kcu', 'column_name'), - array('cc', 'check_clause'), - array('rc', 'match_option'), - array('rc', 'update_rule'), - array('rc', 'delete_rule'), - array('referenced_table_schema' => 'kcu2', 'table_schema'), - array('referenced_table_name' => 'kcu2', 'table_name'), - array('referenced_column_name' => 'kcu2', 'column_name'), - ); - - $p = $this->adapter->getPlatform(); - - array_walk($isColumns, function (&$c) use ($p) { - $alias = key($c); - $c = $p->quoteIdentifierChain($c); - if (is_string($alias)) { - $c .= ' ' . $p->quoteIdentifier($alias); - } - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('information_schema', 'tables')) . ' t' - - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('information_schema', 'table_constraints')) . ' tc' - . ' ON ' . $p->quoteIdentifierChain(array('t', 'table_schema')) - . ' = ' . $p->quoteIdentifierChain(array('tc', 'table_schema')) - . ' AND ' . $p->quoteIdentifierChain(array('t', 'table_name')) - . ' = ' . $p->quoteIdentifierChain(array('tc', 'table_name')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('information_schema', 'key_column_usage')) . ' kcu' - . ' ON ' . $p->quoteIdentifierChain(array('tc', 'table_schema')) - . ' = ' . $p->quoteIdentifierChain(array('kcu', 'table_schema')) - . ' AND ' . $p->quoteIdentifierChain(array('tc', 'table_name')) - . ' = ' . $p->quoteIdentifierChain(array('kcu', 'table_name')) - . ' AND ' . $p->quoteIdentifierChain(array('tc', 'constraint_name')) - . ' = ' . $p->quoteIdentifierChain(array('kcu', 'constraint_name')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('information_schema', 'check_constraints')) . ' cc' - . ' ON ' . $p->quoteIdentifierChain(array('tc', 'constraint_schema')) - . ' = ' . $p->quoteIdentifierChain(array('cc', 'constraint_schema')) - . ' AND ' . $p->quoteIdentifierChain(array('tc', 'constraint_name')) - . ' = ' . $p->quoteIdentifierChain(array('cc', 'constraint_name')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('information_schema', 'referential_constraints')) . ' rc' - . ' ON ' . $p->quoteIdentifierChain(array('tc', 'constraint_schema')) - . ' = ' . $p->quoteIdentifierChain(array('rc', 'constraint_schema')) - . ' AND ' . $p->quoteIdentifierChain(array('tc', 'constraint_name')) - . ' = ' . $p->quoteIdentifierChain(array('rc', 'constraint_name')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('information_schema', 'key_column_usage')) . ' kcu2' - . ' ON ' . $p->quoteIdentifierChain(array('rc', 'unique_constraint_schema')) - . ' = ' . $p->quoteIdentifierChain(array('kcu2', 'constraint_schema')) - . ' AND ' . $p->quoteIdentifierChain(array('rc', 'unique_constraint_name')) - . ' = ' . $p->quoteIdentifierChain(array('kcu2', 'constraint_name')) - . ' AND ' . $p->quoteIdentifierChain(array('kcu', 'position_in_unique_constraint')) - . ' = ' . $p->quoteIdentifierChain(array('kcu2', 'ordinal_position')) - - . ' WHERE ' . $p->quoteIdentifierChain(array('t', 'table_name')) - . ' = ' . $p->quoteTrustedValue($table) - . ' AND ' . $p->quoteIdentifierChain(array('t', 'table_type')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('t', 'table_schema')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('t', 'table_schema')) - . ' != \'information_schema\''; - } - - $sql .= ' ORDER BY CASE ' . $p->quoteIdentifierChain(array('tc', 'constraint_type')) - . " WHEN 'PRIMARY KEY' THEN 1" - . " WHEN 'UNIQUE' THEN 2" - . " WHEN 'FOREIGN KEY' THEN 3" - . " WHEN 'CHECK' THEN 4" - . " ELSE 5 END" - . ', ' . $p->quoteIdentifierChain(array('tc', 'constraint_name')) - . ', ' . $p->quoteIdentifierChain(array('kcu', 'ordinal_position')); - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $name = null; - $constraints = array(); - foreach ($results->toArray() as $row) { - if ($row['constraint_name'] !== $name) { - $name = $row['constraint_name']; - $constraints[$name] = array( - 'constraint_name' => $name, - 'constraint_type' => $row['constraint_type'], - 'table_name' => $row['table_name'], - ); - if ('CHECK' == $row['constraint_type']) { - $constraints[$name]['check_clause'] = $row['check_clause']; - continue; - } - $constraints[$name]['columns'] = array(); - $isFK = ('FOREIGN KEY' == $row['constraint_type']); - if ($isFK) { - $constraints[$name]['referenced_table_schema'] = $row['referenced_table_schema']; - $constraints[$name]['referenced_table_name'] = $row['referenced_table_name']; - $constraints[$name]['referenced_columns'] = array(); - $constraints[$name]['match_option'] = $row['match_option']; - $constraints[$name]['update_rule'] = $row['update_rule']; - $constraints[$name]['delete_rule'] = $row['delete_rule']; - } - } - $constraints[$name]['columns'][] = $row['column_name']; - if ($isFK) { - $constraints[$name]['referenced_columns'][] = $row['referenced_column_name']; - } - } - - $this->data['constraints'][$schema][$table] = $constraints; - } - - protected function loadTriggerData($schema) - { - if (isset($this->data['triggers'][$schema])) { - return; - } - - $this->prepareDataHierarchy('triggers', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - 'trigger_name', - 'event_manipulation', - 'event_object_catalog', - 'event_object_schema', - 'event_object_table', - 'action_order', - 'action_condition', - 'action_statement', - 'action_orientation', - array('action_timing' => 'condition_timing'), - array('action_reference_old_table' => 'condition_reference_old_table'), - array('action_reference_new_table' => 'condition_reference_new_table'), - 'created', - ); - - array_walk($isColumns, function (&$c) use ($p) { - if (is_array($c)) { - $alias = key($c); - $c = $p->quoteIdentifierChain($c); - if (is_string($alias)) { - $c .= ' ' . $p->quoteIdentifier($alias); - } - } else { - $c = $p->quoteIdentifier($c); - } - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('information_schema', 'triggers')) - . ' WHERE '; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= $p->quoteIdentifier('trigger_schema') - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= $p->quoteIdentifier('trigger_schema') - . ' != \'information_schema\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $data = array(); - foreach ($results->toArray() as $row) { - $row = array_change_key_case($row, CASE_LOWER); - $row['action_reference_old_row'] = 'OLD'; - $row['action_reference_new_row'] = 'NEW'; - if (null !== $row['created']) { - $row['created'] = new \DateTime($row['created']); - } - $data[$row['trigger_name']] = $row; - } - - $this->data['triggers'][$schema] = $data; - } -} diff --git a/library/Zend/Db/Metadata/Source/SqlServerMetadata.php b/library/Zend/Db/Metadata/Source/SqlServerMetadata.php deleted file mode 100755 index b2b3e76fa..000000000 --- a/library/Zend/Db/Metadata/Source/SqlServerMetadata.php +++ /dev/null @@ -1,341 +0,0 @@ -data['schemas'])) { - return; - } - $this->prepareDataHierarchy('schemas'); - - $p = $this->adapter->getPlatform(); - - $sql = 'SELECT ' . $p->quoteIdentifier('SCHEMA_NAME') - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'SCHEMATA')) - . ' WHERE ' . $p->quoteIdentifier('SCHEMA_NAME') - . ' != \'INFORMATION_SCHEMA\''; - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $schemas = array(); - foreach ($results->toArray() as $row) { - $schemas[] = $row['SCHEMA_NAME']; - } - - $this->data['schemas'] = $schemas; - } - - protected function loadTableNameData($schema) - { - if (isset($this->data['table_names'][$schema])) { - return; - } - $this->prepareDataHierarchy('table_names', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('T', 'TABLE_NAME'), - array('T', 'TABLE_TYPE'), - array('V', 'VIEW_DEFINITION'), - array('V', 'CHECK_OPTION'), - array('V', 'IS_UPDATABLE'), - ); - - array_walk($isColumns, function (&$c) use ($p) { $c = $p->quoteIdentifierChain($c); }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . ' t' - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'VIEWS')) . ' v' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('V', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('V', 'TABLE_NAME')) - - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $tables = array(); - foreach ($results->toArray() as $row) { - $tables[$row['TABLE_NAME']] = array( - 'table_type' => $row['TABLE_TYPE'], - 'view_definition' => $row['VIEW_DEFINITION'], - 'check_option' => $row['CHECK_OPTION'], - 'is_updatable' => ('YES' == $row['IS_UPDATABLE']), - ); - } - - $this->data['table_names'][$schema] = $tables; - } - - protected function loadColumnData($table, $schema) - { - if (isset($this->data['columns'][$schema][$table])) { - return; - } - $this->prepareDataHierarchy('columns', $schema, $table); - $p = $this->adapter->getPlatform(); - - $isColumns = array( - array('C', 'ORDINAL_POSITION'), - array('C', 'COLUMN_DEFAULT'), - array('C', 'IS_NULLABLE'), - array('C', 'DATA_TYPE'), - array('C', 'CHARACTER_MAXIMUM_LENGTH'), - array('C', 'CHARACTER_OCTET_LENGTH'), - array('C', 'NUMERIC_PRECISION'), - array('C', 'NUMERIC_SCALE'), - array('C', 'COLUMN_NAME'), - ); - - array_walk($isColumns, function (&$c) use ($p) { $c = $p->quoteIdentifierChain($c); }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . 'T' - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'COLUMNS')) . 'C' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('C', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('C', 'TABLE_NAME')) - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')' - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteTrustedValue($table); - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - $columns = array(); - foreach ($results->toArray() as $row) { - $columns[$row['COLUMN_NAME']] = array( - 'ordinal_position' => $row['ORDINAL_POSITION'], - 'column_default' => $row['COLUMN_DEFAULT'], - 'is_nullable' => ('YES' == $row['IS_NULLABLE']), - 'data_type' => $row['DATA_TYPE'], - 'character_maximum_length' => $row['CHARACTER_MAXIMUM_LENGTH'], - 'character_octet_length' => $row['CHARACTER_OCTET_LENGTH'], - 'numeric_precision' => $row['NUMERIC_PRECISION'], - 'numeric_scale' => $row['NUMERIC_SCALE'], - 'numeric_unsigned' => null, - 'erratas' => array(), - ); - } - - $this->data['columns'][$schema][$table] = $columns; - } - - protected function loadConstraintData($table, $schema) - { - if (isset($this->data['constraints'][$schema][$table])) { - return; - } - - $this->prepareDataHierarchy('constraints', $schema, $table); - - $isColumns = array( - array('T', 'TABLE_NAME'), - array('TC', 'CONSTRAINT_NAME'), - array('TC', 'CONSTRAINT_TYPE'), - array('KCU', 'COLUMN_NAME'), - array('CC', 'CHECK_CLAUSE'), - array('RC', 'MATCH_OPTION'), - array('RC', 'UPDATE_RULE'), - array('RC', 'DELETE_RULE'), - array('REFERENCED_TABLE_SCHEMA' => 'KCU2', 'TABLE_SCHEMA'), - array('REFERENCED_TABLE_NAME' => 'KCU2', 'TABLE_NAME'), - array('REFERENCED_COLUMN_NAME' => 'KCU2', 'COLUMN_NAME'), - ); - - $p = $this->adapter->getPlatform(); - - array_walk($isColumns, function (&$c) use ($p) { - $alias = key($c); - $c = $p->quoteIdentifierChain($c); - if (is_string($alias)) { - $c .= ' ' . $p->quoteIdentifier($alias); - } - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLES')) . ' T' - - . ' INNER JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TABLE_CONSTRAINTS')) . ' TC' - . ' ON ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('TC', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('TC', 'TABLE_NAME')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'KEY_COLUMN_USAGE')) . ' KCU' - . ' ON ' . $p->quoteIdentifierChain(array('TC', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('TC', 'TABLE_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'TABLE_NAME')) - . ' AND ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU', 'CONSTRAINT_NAME')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'CHECK_CONSTRAINTS')) . ' CC' - . ' ON ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('CC', 'CONSTRAINT_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('CC', 'CONSTRAINT_NAME')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'REFERENTIAL_CONSTRAINTS')) . ' RC' - . ' ON ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('RC', 'CONSTRAINT_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('RC', 'CONSTRAINT_NAME')) - - . ' LEFT JOIN ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'KEY_COLUMN_USAGE')) . ' KCU2' - . ' ON ' . $p->quoteIdentifierChain(array('RC', 'UNIQUE_CONSTRAINT_SCHEMA')) - . ' = ' . $p->quoteIdentifierChain(array('KCU2', 'CONSTRAINT_SCHEMA')) - . ' AND ' . $p->quoteIdentifierChain(array('RC', 'UNIQUE_CONSTRAINT_NAME')) - . ' = ' . $p->quoteIdentifierChain(array('KCU2', 'CONSTRAINT_NAME')) - . ' AND ' . $p->quoteIdentifierChain(array('KCU', 'ORDINAL_POSITION')) - . ' = ' . $p->quoteIdentifierChain(array('KCU2', 'ORDINAL_POSITION')) - - . ' WHERE ' . $p->quoteIdentifierChain(array('T', 'TABLE_NAME')) - . ' = ' . $p->quoteTrustedValue($table) - . ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_TYPE')) - . ' IN (\'BASE TABLE\', \'VIEW\')'; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= ' AND ' . $p->quoteIdentifierChain(array('T', 'TABLE_SCHEMA')) - . ' != \'INFORMATION_SCHEMA\''; - } - - $sql .= ' ORDER BY CASE ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_TYPE')) - . " WHEN 'PRIMARY KEY' THEN 1" - . " WHEN 'UNIQUE' THEN 2" - . " WHEN 'FOREIGN KEY' THEN 3" - . " WHEN 'CHECK' THEN 4" - . " ELSE 5 END" - . ', ' . $p->quoteIdentifierChain(array('TC', 'CONSTRAINT_NAME')) - . ', ' . $p->quoteIdentifierChain(array('KCU', 'ORDINAL_POSITION')); - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $name = null; - $constraints = array(); - $isFK = false; - foreach ($results->toArray() as $row) { - if ($row['CONSTRAINT_NAME'] !== $name) { - $name = $row['CONSTRAINT_NAME']; - $constraints[$name] = array( - 'constraint_name' => $name, - 'constraint_type' => $row['CONSTRAINT_TYPE'], - 'table_name' => $row['TABLE_NAME'], - ); - if ('CHECK' == $row['CONSTRAINT_TYPE']) { - $constraints[$name]['check_clause'] = $row['CHECK_CLAUSE']; - continue; - } - $constraints[$name]['columns'] = array(); - $isFK = ('FOREIGN KEY' == $row['CONSTRAINT_TYPE']); - if ($isFK) { - $constraints[$name]['referenced_table_schema'] = $row['REFERENCED_TABLE_SCHEMA']; - $constraints[$name]['referenced_table_name'] = $row['REFERENCED_TABLE_NAME']; - $constraints[$name]['referenced_columns'] = array(); - $constraints[$name]['match_option'] = $row['MATCH_OPTION']; - $constraints[$name]['update_rule'] = $row['UPDATE_RULE']; - $constraints[$name]['delete_rule'] = $row['DELETE_RULE']; - } - } - $constraints[$name]['columns'][] = $row['COLUMN_NAME']; - if ($isFK) { - $constraints[$name]['referenced_columns'][] = $row['REFERENCED_COLUMN_NAME']; - } - } - - $this->data['constraints'][$schema][$table] = $constraints; - } - - protected function loadTriggerData($schema) - { - if (isset($this->data['triggers'][$schema])) { - return; - } - - $this->prepareDataHierarchy('triggers', $schema); - - $p = $this->adapter->getPlatform(); - - $isColumns = array( - 'TRIGGER_NAME', - 'EVENT_MANIPULATION', - 'EVENT_OBJECT_CATALOG', - 'EVENT_OBJECT_SCHEMA', - 'EVENT_OBJECT_TABLE', - 'ACTION_ORDER', - 'ACTION_CONDITION', - 'ACTION_STATEMENT', - 'ACTION_ORIENTATION', - 'ACTION_TIMING', - 'ACTION_REFERENCE_OLD_TABLE', - 'ACTION_REFERENCE_NEW_TABLE', - 'ACTION_REFERENCE_OLD_ROW', - 'ACTION_REFERENCE_NEW_ROW', - 'CREATED', - ); - - array_walk($isColumns, function (&$c) use ($p) { - $c = $p->quoteIdentifier($c); - }); - - $sql = 'SELECT ' . implode(', ', $isColumns) - . ' FROM ' . $p->quoteIdentifierChain(array('INFORMATION_SCHEMA', 'TRIGGERS')) - . ' WHERE '; - - if ($schema != self::DEFAULT_SCHEMA) { - $sql .= $p->quoteIdentifier('TRIGGER_SCHEMA') - . ' = ' . $p->quoteTrustedValue($schema); - } else { - $sql .= $p->quoteIdentifier('TRIGGER_SCHEMA') - . ' != \'INFORMATION_SCHEMA\''; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - - $data = array(); - foreach ($results->toArray() as $row) { - $row = array_change_key_case($row, CASE_LOWER); - if (null !== $row['created']) { - $row['created'] = new \DateTime($row['created']); - } - $data[$row['trigger_name']] = $row; - } - - $this->data['triggers'][$schema] = $data; - } -} diff --git a/library/Zend/Db/Metadata/Source/SqliteMetadata.php b/library/Zend/Db/Metadata/Source/SqliteMetadata.php deleted file mode 100755 index f3869af8c..000000000 --- a/library/Zend/Db/Metadata/Source/SqliteMetadata.php +++ /dev/null @@ -1,390 +0,0 @@ -data['schemas'])) { - return; - } - $this->prepareDataHierarchy('schemas'); - - $results = $this->fetchPragma('database_list'); - foreach ($results as $row) { - $schemas[] = $row['name']; - } - $this->data['schemas'] = $schemas; - } - - protected function loadTableNameData($schema) - { - if (isset($this->data['table_names'][$schema])) { - return; - } - $this->prepareDataHierarchy('table_names', $schema); - - // FEATURE: Filename? - - $p = $this->adapter->getPlatform(); - - $sql = 'SELECT "name", "type", "sql" FROM ' . $p->quoteIdentifierChain(array($schema, 'sqlite_master')) - . ' WHERE "type" IN (\'table\',\'view\') AND "name" NOT LIKE \'sqlite_%\''; - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - $tables = array(); - foreach ($results->toArray() as $row) { - if ('table' == $row['type']) { - $table = array( - 'table_type' => 'BASE TABLE', - 'view_definition' => null, // VIEW only - 'check_option' => null, // VIEW only - 'is_updatable' => null, // VIEW only - ); - } else { - $table = array( - 'table_type' => 'VIEW', - 'view_definition' => null, - 'check_option' => 'NONE', - 'is_updatable' => false, - ); - - // Parse out extra data - if (null !== ($data = $this->parseView($row['sql']))) { - $table = array_merge($table, $data); - } - } - $tables[$row['name']] = $table; - } - $this->data['table_names'][$schema] = $tables; - } - - protected function loadColumnData($table, $schema) - { - if (isset($this->data['columns'][$schema][$table])) { - return; - } - $this->prepareDataHierarchy('columns', $schema, $table); - $this->prepareDataHierarchy('sqlite_columns', $schema, $table); - - $p = $this->adapter->getPlatform(); - - - $results = $this->fetchPragma('table_info', $table, $schema); - - $columns = array(); - - foreach ($results as $row) { - $columns[$row['name']] = array( - // cid appears to be zero-based, ordinal position needs to be one-based - 'ordinal_position' => $row['cid'] + 1, - 'column_default' => $row['dflt_value'], - 'is_nullable' => !((bool) $row['notnull']), - 'data_type' => $row['type'], - 'character_maximum_length' => null, - 'character_octet_length' => null, - 'numeric_precision' => null, - 'numeric_scale' => null, - 'numeric_unsigned' => null, - 'erratas' => array(), - ); - // TODO: populate character_ and numeric_values with correct info - } - - $this->data['columns'][$schema][$table] = $columns; - $this->data['sqlite_columns'][$schema][$table] = $results; - } - - protected function loadConstraintData($table, $schema) - { - if (isset($this->data['constraints'][$schema][$table])) { - return; - } - - $this->prepareDataHierarchy('constraints', $schema, $table); - - $this->loadColumnData($table, $schema); - $primaryKey = array(); - - foreach ($this->data['sqlite_columns'][$schema][$table] as $col) { - if ((bool) $col['pk']) { - $primaryKey[] = $col['name']; - } - } - - if (empty($primaryKey)) { - $primaryKey = null; - } - $constraints = array(); - $indexes = $this->fetchPragma('index_list', $table, $schema); - foreach ($indexes as $index) { - if (!((bool) $index['unique'])) { - continue; - } - $constraint = array( - 'constraint_name' => $index['name'], - 'constraint_type' => 'UNIQUE', - 'table_name' => $table, - 'columns' => array(), - ); - - $info = $this->fetchPragma('index_info', $index['name'], $schema); - - foreach ($info as $column) { - $constraint['columns'][] = $column['name']; - } - if ($primaryKey === $constraint['columns']) { - $constraint['constraint_type'] = 'PRIMARY KEY'; - $primaryKey = null; - } - $constraints[$constraint['constraint_name']] = $constraint; - } - - if (null !== $primaryKey) { - $constraintName = '_zf_' . $table . '_PRIMARY'; - $constraints[$constraintName] = array( - 'constraint_name' => $constraintName, - 'constraint_type' => 'PRIMARY KEY', - 'table_name' => $table, - 'columns' => $primaryKey, - ); - } - - $foreignKeys = $this->fetchPragma('foreign_key_list', $table, $schema); - - $id = $name = null; - foreach ($foreignKeys as $fk) { - if ($id !== $fk['id']) { - $id = $fk['id']; - $name = '_zf_' . $table . '_FOREIGN_KEY_' . ($id + 1); - $constraints[$name] = array( - 'constraint_name' => $name, - 'constraint_type' => 'FOREIGN KEY', - 'table_name' => $table, - 'columns' => array(), - 'referenced_table_schema' => $schema, - 'referenced_table_name' => $fk['table'], - 'referenced_columns' => array(), - // TODO: Verify match, on_update, and on_delete values conform to SQL Standard - 'match_option' => strtoupper($fk['match']), - 'update_rule' => strtoupper($fk['on_update']), - 'delete_rule' => strtoupper($fk['on_delete']), - ); - } - $constraints[$name]['columns'][] = $fk['from']; - $constraints[$name]['referenced_columns'][] = $fk['to']; - } - - $this->data['constraints'][$schema][$table] = $constraints; - } - - protected function loadTriggerData($schema) - { - if (isset($this->data['triggers'][$schema])) { - return; - } - - $this->prepareDataHierarchy('triggers', $schema); - - $p = $this->adapter->getPlatform(); - - $sql = 'SELECT "name", "tbl_name", "sql" FROM ' - . $p->quoteIdentifierChain(array($schema, 'sqlite_master')) - . ' WHERE "type" = \'trigger\''; - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - $triggers = array(); - foreach ($results->toArray() as $row) { - $trigger = array( - 'trigger_name' => $row['name'], - 'event_manipulation' => null, // in $row['sql'] - 'event_object_catalog' => null, - 'event_object_schema' => $schema, - 'event_object_table' => $row['tbl_name'], - 'action_order' => 0, - 'action_condition' => null, // in $row['sql'] - 'action_statement' => null, // in $row['sql'] - 'action_orientation' => 'ROW', - 'action_timing' => null, // in $row['sql'] - 'action_reference_old_table' => null, - 'action_reference_new_table' => null, - 'action_reference_old_row' => 'OLD', - 'action_reference_new_row' => 'NEW', - 'created' => null, - ); - - // Parse out extra data - if (null !== ($data = $this->parseTrigger($row['sql']))) { - $trigger = array_merge($trigger, $data); - } - $triggers[$trigger['trigger_name']] = $trigger; - } - - $this->data['triggers'][$schema] = $triggers; - } - - protected function fetchPragma($name, $value = null, $schema = null) - { - $p = $this->adapter->getPlatform(); - - $sql = 'PRAGMA '; - - if (null !== $schema) { - $sql .= $p->quoteIdentifier($schema) . '.'; - } - $sql .= $name; - - if (null !== $value) { - $sql .= '(' . $p->quoteTrustedValue($value) . ')'; - } - - $results = $this->adapter->query($sql, Adapter::QUERY_MODE_EXECUTE); - if ($results instanceof ResultSetInterface) { - return $results->toArray(); - } - return array(); - } - - protected function parseView($sql) - { - static $re = null; - if (null === $re) { - $identifierChain = $this->getIdentifierChainRegularExpression(); - $re = $this->buildRegularExpression(array( - 'CREATE', - array('TEMP|TEMPORARY'), - 'VIEW', - array('IF', 'NOT', 'EXISTS'), - $identifierChain, - 'AS', - '(?.+)', - array(';'), - )); - } - - if (!preg_match($re, $sql, $matches)) { - return null; - } - return array( - 'view_definition' => $matches['view_definition'], - ); - } - - protected function parseTrigger($sql) - { - static $re = null; - if (null === $re) { - $identifier = $this->getIdentifierRegularExpression(); - $identifierList = $this->getIdentifierListRegularExpression(); - $identifierChain = $this->getIdentifierChainRegularExpression(); - $re = $this->buildRegularExpression(array( - 'CREATE', - array('TEMP|TEMPORARY'), - 'TRIGGER', - array('IF', 'NOT', 'EXISTS'), - $identifierChain, - array('(?BEFORE|AFTER|INSTEAD\\s+OF)',), - '(?DELETE|INSERT|UPDATE)', - array('OF', '(?' . $identifierList . ')'), - 'ON', - '(?' . $identifier . ')', - array('FOR', 'EACH', 'ROW'), - array('WHEN', '(?.+)'), - '(?BEGIN', - '.+', - 'END)', - array(';'), - )); - } - - if (!preg_match($re, $sql, $matches)) { - return null; - } - $data = array(); - - foreach ($matches as $key => $value) { - if (is_string($key)) { - $data[$key] = $value; - } - } - - // Normalize data and populate defaults, if necessary - - $data['event_manipulation'] = strtoupper($data['event_manipulation']); - if (empty($data['action_condition'])) { - $data['action_condition'] = null; - } - if (!empty($data['action_timing'])) { - $data['action_timing'] = strtoupper($data['action_timing']); - if ('I' == $data['action_timing'][0]) { - // normalize the white-space between the two words - $data['action_timing'] = 'INSTEAD OF'; - } - } else { - $data['action_timing'] = 'AFTER'; - } - unset($data['column_usage']); - - return $data; - } - - protected function buildRegularExpression(array $re) - { - foreach ($re as &$value) { - if (is_array($value)) { - $value = '(?:' . implode('\\s*+', $value) . '\\s*+)?'; - } else { - $value .= '\\s*+'; - } - } - unset($value); - $re = '/^' . implode('\\s*+', $re) . '$/'; - return $re; - } - - protected function getIdentifierRegularExpression() - { - static $re = null; - if (null === $re) { - $re = '(?:' . implode('|', array( - '"(?:[^"\\\\]++|\\\\.)*+"', - '`(?:[^`]++|``)*+`', - '\\[[^\\]]+\\]', - '[^\\s\\.]+', - )) . ')'; - } - - return $re; - } - - protected function getIdentifierChainRegularExpression() - { - static $re = null; - if (null === $re) { - $identifier = $this->getIdentifierRegularExpression(); - $re = $identifier . '(?:\\s*\\.\\s*' . $identifier . ')*+'; - } - return $re; - } - - protected function getIdentifierListRegularExpression() - { - static $re = null; - if (null === $re) { - $identifier = $this->getIdentifierRegularExpression(); - $re = $identifier . '(?:\\s*,\\s*' . $identifier . ')*+'; - } - return $re; - } -} diff --git a/library/Zend/Db/README.md b/library/Zend/Db/README.md deleted file mode 100755 index 5c6788407..000000000 --- a/library/Zend/Db/README.md +++ /dev/null @@ -1,15 +0,0 @@ -DB Component from ZF2 -===================== - -This is the DB component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Db/ResultSet/AbstractResultSet.php b/library/Zend/Db/ResultSet/AbstractResultSet.php deleted file mode 100755 index 0db4c2d38..000000000 --- a/library/Zend/Db/ResultSet/AbstractResultSet.php +++ /dev/null @@ -1,280 +0,0 @@ -buffer)) { - $this->buffer = array(); - } - - if ($dataSource instanceof ResultInterface) { - $this->count = $dataSource->count(); - $this->fieldCount = $dataSource->getFieldCount(); - $this->dataSource = $dataSource; - if ($dataSource->isBuffered()) { - $this->buffer = -1; - } - if (is_array($this->buffer)) { - $this->dataSource->rewind(); - } - return $this; - } - - if (is_array($dataSource)) { - // its safe to get numbers from an array - $first = current($dataSource); - reset($dataSource); - $this->count = count($dataSource); - $this->fieldCount = count($first); - $this->dataSource = new ArrayIterator($dataSource); - $this->buffer = -1; // array's are a natural buffer - } elseif ($dataSource instanceof IteratorAggregate) { - $this->dataSource = $dataSource->getIterator(); - } elseif ($dataSource instanceof Iterator) { - $this->dataSource = $dataSource; - } else { - throw new Exception\InvalidArgumentException('DataSource provided is not an array, nor does it implement Iterator or IteratorAggregate'); - } - - if ($this->count == null && $this->dataSource instanceof Countable) { - $this->count = $this->dataSource->count(); - } - - return $this; - } - - public function buffer() - { - if ($this->buffer === -2) { - throw new Exception\RuntimeException('Buffering must be enabled before iteration is started'); - } elseif ($this->buffer === null) { - $this->buffer = array(); - if ($this->dataSource instanceof ResultInterface) { - $this->dataSource->rewind(); - } - } - return $this; - } - - public function isBuffered() - { - if ($this->buffer === -1 || is_array($this->buffer)) { - return true; - } - return false; - } - - /** - * Get the data source used to create the result set - * - * @return null|Iterator - */ - public function getDataSource() - { - return $this->dataSource; - } - - /** - * Retrieve count of fields in individual rows of the result set - * - * @return int - */ - public function getFieldCount() - { - if (null !== $this->fieldCount) { - return $this->fieldCount; - } - - $dataSource = $this->getDataSource(); - if (null === $dataSource) { - return 0; - } - - $dataSource->rewind(); - if (!$dataSource->valid()) { - $this->fieldCount = 0; - return 0; - } - - $row = $dataSource->current(); - if (is_object($row) && $row instanceof Countable) { - $this->fieldCount = $row->count(); - return $this->fieldCount; - } - - $row = (array) $row; - $this->fieldCount = count($row); - return $this->fieldCount; - } - - /** - * Iterator: move pointer to next item - * - * @return void - */ - public function next() - { - if ($this->buffer === null) { - $this->buffer = -2; // implicitly disable buffering from here on - } - $this->dataSource->next(); - $this->position++; - } - - /** - * Iterator: retrieve current key - * - * @return mixed - */ - public function key() - { - return $this->position; - } - - /** - * Iterator: get current item - * - * @return array - */ - public function current() - { - if ($this->buffer === null) { - $this->buffer = -2; // implicitly disable buffering from here on - } elseif (is_array($this->buffer) && isset($this->buffer[$this->position])) { - return $this->buffer[$this->position]; - } - $data = $this->dataSource->current(); - if (is_array($this->buffer)) { - $this->buffer[$this->position] = $data; - } - return $data; - } - - /** - * Iterator: is pointer valid? - * - * @return bool - */ - public function valid() - { - if (is_array($this->buffer) && isset($this->buffer[$this->position])) { - return true; - } - if ($this->dataSource instanceof Iterator) { - return $this->dataSource->valid(); - } else { - $key = key($this->dataSource); - return ($key !== null); - } - } - - /** - * Iterator: rewind - * - * @return void - */ - public function rewind() - { - if (!is_array($this->buffer)) { - if ($this->dataSource instanceof Iterator) { - $this->dataSource->rewind(); - } else { - reset($this->dataSource); - } - } - $this->position = 0; - } - - /** - * Countable: return count of rows - * - * @return int - */ - public function count() - { - if ($this->count !== null) { - return $this->count; - } - $this->count = count($this->dataSource); - return $this->count; - } - - /** - * Cast result set to array of arrays - * - * @return array - * @throws Exception\RuntimeException if any row is not castable to an array - */ - public function toArray() - { - $return = array(); - foreach ($this as $row) { - if (is_array($row)) { - $return[] = $row; - } elseif (method_exists($row, 'toArray')) { - $return[] = $row->toArray(); - } elseif (method_exists($row, 'getArrayCopy')) { - $return[] = $row->getArrayCopy(); - } else { - throw new Exception\RuntimeException( - 'Rows as part of this DataSource, with type ' . gettype($row) . ' cannot be cast to an array' - ); - } - } - return $return; - } -} diff --git a/library/Zend/Db/ResultSet/Exception/ExceptionInterface.php b/library/Zend/Db/ResultSet/Exception/ExceptionInterface.php deleted file mode 100755 index 7f7648b33..000000000 --- a/library/Zend/Db/ResultSet/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -setHydrator(($hydrator) ?: new ArraySerializable); - $this->setObjectPrototype(($objectPrototype) ?: new ArrayObject); - } - - /** - * Set the row object prototype - * - * @param object $objectPrototype - * @throws Exception\InvalidArgumentException - * @return ResultSet - */ - public function setObjectPrototype($objectPrototype) - { - if (!is_object($objectPrototype)) { - throw new Exception\InvalidArgumentException( - 'An object must be set as the object prototype, a ' . gettype($objectPrototype) . ' was provided.' - ); - } - $this->objectPrototype = $objectPrototype; - return $this; - } - - /** - * Set the hydrator to use for each row object - * - * @param HydratorInterface $hydrator - * @return HydratingResultSet - */ - public function setHydrator(HydratorInterface $hydrator) - { - $this->hydrator = $hydrator; - return $this; - } - - /** - * Get the hydrator to use for each row object - * - * @return HydratorInterface - */ - public function getHydrator() - { - return $this->hydrator; - } - - /** - * Iterator: get current item - * - * @return object - */ - public function current() - { - if ($this->buffer === null) { - $this->buffer = -2; // implicitly disable buffering from here on - } elseif (is_array($this->buffer) && isset($this->buffer[$this->position])) { - return $this->buffer[$this->position]; - } - $data = $this->dataSource->current(); - $object = is_array($data) ? $this->hydrator->hydrate($data, clone $this->objectPrototype) : false; - - if (is_array($this->buffer)) { - $this->buffer[$this->position] = $object; - } - - return $object; - } - - /** - * Cast result set to array of arrays - * - * @return array - * @throws Exception\RuntimeException if any row is not castable to an array - */ - public function toArray() - { - $return = array(); - foreach ($this as $row) { - $return[] = $this->getHydrator()->extract($row); - } - return $return; - } -} diff --git a/library/Zend/Db/ResultSet/ResultSet.php b/library/Zend/Db/ResultSet/ResultSet.php deleted file mode 100755 index 2286410c6..000000000 --- a/library/Zend/Db/ResultSet/ResultSet.php +++ /dev/null @@ -1,112 +0,0 @@ -returnType = (in_array($returnType, array(self::TYPE_ARRAY, self::TYPE_ARRAYOBJECT))) ? $returnType : self::TYPE_ARRAYOBJECT; - if ($this->returnType === self::TYPE_ARRAYOBJECT) { - $this->setArrayObjectPrototype(($arrayObjectPrototype) ?: new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS)); - } - } - - /** - * Set the row object prototype - * - * @param ArrayObject $arrayObjectPrototype - * @throws Exception\InvalidArgumentException - * @return ResultSet - */ - public function setArrayObjectPrototype($arrayObjectPrototype) - { - if (!is_object($arrayObjectPrototype) - || (!$arrayObjectPrototype instanceof ArrayObject && !method_exists($arrayObjectPrototype, 'exchangeArray')) - - ) { - throw new Exception\InvalidArgumentException('Object must be of type ArrayObject, or at least implement exchangeArray'); - } - $this->arrayObjectPrototype = $arrayObjectPrototype; - return $this; - } - - /** - * Get the row object prototype - * - * @return ArrayObject - */ - public function getArrayObjectPrototype() - { - return $this->arrayObjectPrototype; - } - - /** - * Get the return type to use when returning objects from the set - * - * @return string - */ - public function getReturnType() - { - return $this->returnType; - } - - /** - * @return array|\ArrayObject|null - */ - public function current() - { - $data = parent::current(); - - if ($this->returnType === self::TYPE_ARRAYOBJECT && is_array($data)) { - /** @var $ao ArrayObject */ - $ao = clone $this->arrayObjectPrototype; - if ($ao instanceof ArrayObject || method_exists($ao, 'exchangeArray')) { - $ao->exchangeArray($data); - } - return $ao; - } - - return $data; - } -} diff --git a/library/Zend/Db/ResultSet/ResultSetInterface.php b/library/Zend/Db/ResultSet/ResultSetInterface.php deleted file mode 100755 index c2bbd73b2..000000000 --- a/library/Zend/Db/ResultSet/ResultSetInterface.php +++ /dev/null @@ -1,33 +0,0 @@ -isInitialized) { - return; - } - - if (!$this->featureSet instanceof Feature\FeatureSet) { - $this->featureSet = new Feature\FeatureSet; - } - - $this->featureSet->setRowGateway($this); - $this->featureSet->apply('preInitialize', array()); - - if (!is_string($this->table) && !$this->table instanceof TableIdentifier) { - throw new Exception\RuntimeException('This row object does not have a valid table set.'); - } - - if ($this->primaryKeyColumn == null) { - throw new Exception\RuntimeException('This row object does not have a primary key column set.'); - } elseif (is_string($this->primaryKeyColumn)) { - $this->primaryKeyColumn = (array) $this->primaryKeyColumn; - } - - if (!$this->sql instanceof Sql) { - throw new Exception\RuntimeException('This row object does not have a Sql object set.'); - } - - $this->featureSet->apply('postInitialize', array()); - - $this->isInitialized = true; - } - - /** - * Populate Data - * - * @param array $rowData - * @param bool $rowExistsInDatabase - * @return AbstractRowGateway - */ - public function populate(array $rowData, $rowExistsInDatabase = false) - { - $this->initialize(); - - $this->data = $rowData; - if ($rowExistsInDatabase == true) { - $this->processPrimaryKeyData(); - } else { - $this->primaryKeyData = null; - } - - return $this; - } - - /** - * @param mixed $array - * @return array|void - */ - public function exchangeArray($array) - { - return $this->populate($array, true); - } - - /** - * Save - * - * @return int - */ - public function save() - { - $this->initialize(); - - if ($this->rowExistsInDatabase()) { - // UPDATE - - $data = $this->data; - $where = array(); - $isPkModified = false; - - // primary key is always an array even if its a single column - foreach ($this->primaryKeyColumn as $pkColumn) { - $where[$pkColumn] = $this->primaryKeyData[$pkColumn]; - if ($data[$pkColumn] == $this->primaryKeyData[$pkColumn]) { - unset($data[$pkColumn]); - } else { - $isPkModified = true; - } - } - - $statement = $this->sql->prepareStatementForSqlObject($this->sql->update()->set($data)->where($where)); - $result = $statement->execute(); - $rowsAffected = $result->getAffectedRows(); - unset($statement, $result); // cleanup - - // If one or more primary keys are modified, we update the where clause - if ($isPkModified) { - foreach ($this->primaryKeyColumn as $pkColumn) { - if ($data[$pkColumn] != $this->primaryKeyData[$pkColumn]) { - $where[$pkColumn] = $data[$pkColumn]; - } - } - } - } else { - // INSERT - $insert = $this->sql->insert(); - $insert->values($this->data); - - $statement = $this->sql->prepareStatementForSqlObject($insert); - - $result = $statement->execute(); - if (($primaryKeyValue = $result->getGeneratedValue()) && count($this->primaryKeyColumn) == 1) { - $this->primaryKeyData = array($this->primaryKeyColumn[0] => $primaryKeyValue); - } else { - // make primary key data available so that $where can be complete - $this->processPrimaryKeyData(); - } - $rowsAffected = $result->getAffectedRows(); - unset($statement, $result); // cleanup - - $where = array(); - // primary key is always an array even if its a single column - foreach ($this->primaryKeyColumn as $pkColumn) { - $where[$pkColumn] = $this->primaryKeyData[$pkColumn]; - } - } - - // refresh data - $statement = $this->sql->prepareStatementForSqlObject($this->sql->select()->where($where)); - $result = $statement->execute(); - $rowData = $result->current(); - unset($statement, $result); // cleanup - - // make sure data and original data are in sync after save - $this->populate($rowData, true); - - // return rows affected - return $rowsAffected; - } - - /** - * Delete - * - * @return int - */ - public function delete() - { - $this->initialize(); - - $where = array(); - // primary key is always an array even if its a single column - foreach ($this->primaryKeyColumn as $pkColumn) { - $where[$pkColumn] = $this->primaryKeyData[$pkColumn]; - } - - // @todo determine if we need to do a select to ensure 1 row will be affected - - $statement = $this->sql->prepareStatementForSqlObject($this->sql->delete()->where($where)); - $result = $statement->execute(); - - $affectedRows = $result->getAffectedRows(); - if ($affectedRows == 1) { - // detach from database - $this->primaryKeyData = null; - } - - return $affectedRows; - } - - /** - * Offset Exists - * - * @param string $offset - * @return bool - */ - public function offsetExists($offset) - { - return array_key_exists($offset, $this->data); - } - - /** - * Offset get - * - * @param string $offset - * @return mixed - */ - public function offsetGet($offset) - { - return $this->data[$offset]; - } - - /** - * Offset set - * - * @param string $offset - * @param mixed $value - * @return RowGateway - */ - public function offsetSet($offset, $value) - { - $this->data[$offset] = $value; - return $this; - } - - /** - * Offset unset - * - * @param string $offset - * @return AbstractRowGateway - */ - public function offsetUnset($offset) - { - $this->data[$offset] = null; - return $this; - } - - /** - * @return int - */ - public function count() - { - return count($this->data); - } - - /** - * To array - * - * @return array - */ - public function toArray() - { - return $this->data; - } - - /** - * __get - * - * @param string $name - * @throws Exception\InvalidArgumentException - * @return mixed - */ - public function __get($name) - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } else { - throw new Exception\InvalidArgumentException('Not a valid column in this row: ' . $name); - } - } - - /** - * __set - * - * @param string $name - * @param mixed $value - * @return void - */ - public function __set($name, $value) - { - $this->offsetSet($name, $value); - } - - /** - * __isset - * - * @param string $name - * @return bool - */ - public function __isset($name) - { - return $this->offsetExists($name); - } - - /** - * __unset - * - * @param string $name - * @return void - */ - public function __unset($name) - { - $this->offsetUnset($name); - } - - /** - * @return bool - */ - public function rowExistsInDatabase() - { - return ($this->primaryKeyData !== null); - } - - /** - * @throws Exception\RuntimeException - */ - protected function processPrimaryKeyData() - { - $this->primaryKeyData = array(); - foreach ($this->primaryKeyColumn as $column) { - if (!isset($this->data[$column])) { - throw new Exception\RuntimeException('While processing primary key data, a known key ' . $column . ' was not found in the data array'); - } - $this->primaryKeyData[$column] = $this->data[$column]; - } - } -} diff --git a/library/Zend/Db/RowGateway/Exception/ExceptionInterface.php b/library/Zend/Db/RowGateway/Exception/ExceptionInterface.php deleted file mode 100755 index 7bb37fc98..000000000 --- a/library/Zend/Db/RowGateway/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -rowGateway = $rowGateway; - } - - /** - * @throws \Zend\Db\RowGateway\Exception\RuntimeException - */ - public function initialize() - { - throw new Exception\RuntimeException('This method is not intended to be called on this object.'); - } - - /** - * @return array - */ - public function getMagicMethodSpecifications() - { - return array(); - } -} diff --git a/library/Zend/Db/RowGateway/Feature/FeatureSet.php b/library/Zend/Db/RowGateway/Feature/FeatureSet.php deleted file mode 100755 index de3b2344f..000000000 --- a/library/Zend/Db/RowGateway/Feature/FeatureSet.php +++ /dev/null @@ -1,149 +0,0 @@ -addFeatures($features); - } - } - - public function setRowGateway(AbstractRowGateway $rowGateway) - { - $this->rowGateway = $rowGateway; - foreach ($this->features as $feature) { - $feature->setRowGateway($this->rowGateway); - } - return $this; - } - - public function getFeatureByClassName($featureClassName) - { - $feature = false; - foreach ($this->features as $potentialFeature) { - if ($potentialFeature instanceof $featureClassName) { - $feature = $potentialFeature; - break; - } - } - return $feature; - } - - public function addFeatures(array $features) - { - foreach ($features as $feature) { - $this->addFeature($feature); - } - return $this; - } - - public function addFeature(AbstractFeature $feature) - { - $this->features[] = $feature; - $feature->setRowGateway($feature); - return $this; - } - - public function apply($method, $args) - { - foreach ($this->features as $feature) { - if (method_exists($feature, $method)) { - $return = call_user_func_array(array($feature, $method), $args); - if ($return === self::APPLY_HALT) { - break; - } - } - } - } - - /** - * @param string $property - * @return bool - */ - public function canCallMagicGet($property) - { - return false; - } - - /** - * @param string $property - * @return mixed - */ - public function callMagicGet($property) - { - $return = null; - return $return; - } - - /** - * @param string $property - * @return bool - */ - public function canCallMagicSet($property) - { - return false; - } - - /** - * @param $property - * @param $value - * @return mixed - */ - public function callMagicSet($property, $value) - { - $return = null; - return $return; - } - - /** - * @param string $method - * @return bool - */ - public function canCallMagicCall($method) - { - return false; - } - - /** - * @param string $method - * @param array $arguments - * @return mixed - */ - public function callMagicCall($method, $arguments) - { - $return = null; - return $return; - } -} diff --git a/library/Zend/Db/RowGateway/RowGateway.php b/library/Zend/Db/RowGateway/RowGateway.php deleted file mode 100755 index df2295c14..000000000 --- a/library/Zend/Db/RowGateway/RowGateway.php +++ /dev/null @@ -1,48 +0,0 @@ -primaryKeyColumn = empty($primaryKeyColumn) ? null : (array) $primaryKeyColumn; - - // set table - $this->table = $table; - - // set Sql object - if ($adapterOrSql instanceof Sql) { - $this->sql = $adapterOrSql; - } elseif ($adapterOrSql instanceof Adapter) { - $this->sql = new Sql($adapterOrSql, $this->table); - } else { - throw new Exception\InvalidArgumentException('A valid Sql object was not provided.'); - } - - if ($this->sql->getTable() !== $this->table) { - throw new Exception\InvalidArgumentException('The Sql object provided does not have a table that matches this row object'); - } - - $this->initialize(); - } -} diff --git a/library/Zend/Db/RowGateway/RowGatewayInterface.php b/library/Zend/Db/RowGateway/RowGatewayInterface.php deleted file mode 100755 index e0a20b554..000000000 --- a/library/Zend/Db/RowGateway/RowGatewayInterface.php +++ /dev/null @@ -1,16 +0,0 @@ - '', 'subselectCount' => 0); - - /** - * @var array - */ - protected $instanceParameterIndex = array(); - - protected function processExpression(ExpressionInterface $expression, PlatformInterface $platform, DriverInterface $driver = null, $namedParameterPrefix = null) - { - // static counter for the number of times this method was invoked across the PHP runtime - static $runtimeExpressionPrefix = 0; - - if ($driver && ((!is_string($namedParameterPrefix) || $namedParameterPrefix == ''))) { - $namedParameterPrefix = sprintf('expr%04dParam', ++$runtimeExpressionPrefix); - } - - $sql = ''; - $statementContainer = new StatementContainer; - $parameterContainer = $statementContainer->getParameterContainer(); - - // initialize variables - $parts = $expression->getExpressionData(); - - if (!isset($this->instanceParameterIndex[$namedParameterPrefix])) { - $this->instanceParameterIndex[$namedParameterPrefix] = 1; - } - - $expressionParamIndex = &$this->instanceParameterIndex[$namedParameterPrefix]; - - foreach ($parts as $part) { - // if it is a string, simply tack it onto the return sql "specification" string - if (is_string($part)) { - $sql .= $part; - continue; - } - - if (!is_array($part)) { - throw new Exception\RuntimeException('Elements returned from getExpressionData() array must be a string or array.'); - } - - // process values and types (the middle and last position of the expression data) - $values = $part[1]; - $types = (isset($part[2])) ? $part[2] : array(); - foreach ($values as $vIndex => $value) { - if (isset($types[$vIndex]) && $types[$vIndex] == ExpressionInterface::TYPE_IDENTIFIER) { - $values[$vIndex] = $platform->quoteIdentifierInFragment($value); - } elseif (isset($types[$vIndex]) && $types[$vIndex] == ExpressionInterface::TYPE_VALUE && $value instanceof Select) { - // process sub-select - if ($driver) { - $values[$vIndex] = '(' . $this->processSubSelect($value, $platform, $driver, $parameterContainer) . ')'; - } else { - $values[$vIndex] = '(' . $this->processSubSelect($value, $platform) . ')'; - } - } elseif (isset($types[$vIndex]) && $types[$vIndex] == ExpressionInterface::TYPE_VALUE && $value instanceof ExpressionInterface) { - // recursive call to satisfy nested expressions - $innerStatementContainer = $this->processExpression($value, $platform, $driver, $namedParameterPrefix . $vIndex . 'subpart'); - $values[$vIndex] = $innerStatementContainer->getSql(); - if ($driver) { - $parameterContainer->merge($innerStatementContainer->getParameterContainer()); - } - } elseif (isset($types[$vIndex]) && $types[$vIndex] == ExpressionInterface::TYPE_VALUE) { - // if prepareType is set, it means that this particular value must be - // passed back to the statement in a way it can be used as a placeholder value - if ($driver) { - $name = $namedParameterPrefix . $expressionParamIndex++; - $parameterContainer->offsetSet($name, $value); - $values[$vIndex] = $driver->formatParameterName($name); - continue; - } - - // if not a preparable statement, simply quote the value and move on - $values[$vIndex] = $platform->quoteValue($value); - } elseif (isset($types[$vIndex]) && $types[$vIndex] == ExpressionInterface::TYPE_LITERAL) { - $values[$vIndex] = $value; - } - } - - // after looping the values, interpolate them into the sql string (they might be placeholder names, or values) - $sql .= vsprintf($part[0], $values); - } - - $statementContainer->setSql($sql); - return $statementContainer; - } - - /** - * @param $specifications - * @param $parameters - * @return string - * @throws Exception\RuntimeException - */ - protected function createSqlFromSpecificationAndParameters($specifications, $parameters) - { - if (is_string($specifications)) { - return vsprintf($specifications, $parameters); - } - - $parametersCount = count($parameters); - foreach ($specifications as $specificationString => $paramSpecs) { - if ($parametersCount == count($paramSpecs)) { - break; - } - unset($specificationString, $paramSpecs); - } - - if (!isset($specificationString)) { - throw new Exception\RuntimeException( - 'A number of parameters was found that is not supported by this specification' - ); - } - - $topParameters = array(); - foreach ($parameters as $position => $paramsForPosition) { - if (isset($paramSpecs[$position]['combinedby'])) { - $multiParamValues = array(); - foreach ($paramsForPosition as $multiParamsForPosition) { - $ppCount = count($multiParamsForPosition); - if (!isset($paramSpecs[$position][$ppCount])) { - throw new Exception\RuntimeException('A number of parameters (' . $ppCount . ') was found that is not supported by this specification'); - } - $multiParamValues[] = vsprintf($paramSpecs[$position][$ppCount], $multiParamsForPosition); - } - $topParameters[] = implode($paramSpecs[$position]['combinedby'], $multiParamValues); - } elseif ($paramSpecs[$position] !== null) { - $ppCount = count($paramsForPosition); - if (!isset($paramSpecs[$position][$ppCount])) { - throw new Exception\RuntimeException('A number of parameters (' . $ppCount . ') was found that is not supported by this specification'); - } - $topParameters[] = vsprintf($paramSpecs[$position][$ppCount], $paramsForPosition); - } else { - $topParameters[] = $paramsForPosition; - } - } - return vsprintf($specificationString, $topParameters); - } - - protected function processSubSelect(Select $subselect, PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($driver) { - $stmtContainer = new StatementContainer; - - // Track subselect prefix and count for parameters - $this->processInfo['subselectCount']++; - $subselect->processInfo['subselectCount'] = $this->processInfo['subselectCount']; - $subselect->processInfo['paramPrefix'] = 'subselect' . $subselect->processInfo['subselectCount']; - - // call subselect - if ($this instanceof PlatformDecoratorInterface) { - /** @var Select|PlatformDecoratorInterface $subselectDecorator */ - $subselectDecorator = clone $this; - $subselectDecorator->setSubject($subselect); - $subselectDecorator->prepareStatement(new Adapter($driver, $platform), $stmtContainer); - } else { - $subselect->prepareStatement(new Adapter($driver, $platform), $stmtContainer); - } - - // copy count - $this->processInfo['subselectCount'] = $subselect->processInfo['subselectCount']; - - $parameterContainer->merge($stmtContainer->getParameterContainer()->getNamedArray()); - $sql = $stmtContainer->getSql(); - } else { - if ($this instanceof PlatformDecoratorInterface) { - $subselectDecorator = clone $this; - $subselectDecorator->setSubject($subselect); - $sql = $subselectDecorator->getSqlString($platform); - } else { - $sql = $subselect->getSqlString($platform); - } - } - return $sql; - } -} diff --git a/library/Zend/Db/Sql/Ddl/AlterTable.php b/library/Zend/Db/Sql/Ddl/AlterTable.php deleted file mode 100755 index 2721db5a2..000000000 --- a/library/Zend/Db/Sql/Ddl/AlterTable.php +++ /dev/null @@ -1,268 +0,0 @@ - "ALTER TABLE %1\$s\n", - self::ADD_COLUMNS => array( - "%1\$s" => array( - array(1 => 'ADD COLUMN %1$s', 'combinedby' => ",\n") - ) - ), - self::CHANGE_COLUMNS => array( - "%1\$s" => array( - array(2 => 'CHANGE COLUMN %1$s %2$s', 'combinedby' => ",\n"), - ) - ), - self::DROP_COLUMNS => array( - "%1\$s" => array( - array(1 => 'DROP COLUMN %1$s', 'combinedby' => ",\n"), - ) - ), - self::ADD_CONSTRAINTS => array( - "%1\$s" => array( - array(1 => 'ADD %1$s', 'combinedby' => ",\n"), - ) - ), - self::DROP_CONSTRAINTS => array( - "%1\$s" => array( - array(1 => 'DROP CONSTRAINT %1$s', 'combinedby' => ",\n"), - ) - ) - ); - - /** - * @var string - */ - protected $table = ''; - - /** - * @param string $table - */ - public function __construct($table = '') - { - ($table) ? $this->setTable($table) : null; - } - - /** - * @param string $name - * @return self - */ - public function setTable($name) - { - $this->table = $name; - - return $this; - } - - /** - * @param Column\ColumnInterface $column - * @return self - */ - public function addColumn(Column\ColumnInterface $column) - { - $this->addColumns[] = $column; - - return $this; - } - - /** - * @param string $name - * @param Column\ColumnInterface $column - * @return self - */ - public function changeColumn($name, Column\ColumnInterface $column) - { - $this->changeColumns[$name] = $column; - - return $this; - } - - /** - * @param string $name - * @return self - */ - public function dropColumn($name) - { - $this->dropColumns[] = $name; - - return $this; - } - - /** - * @param string $name - * @return self - */ - public function dropConstraint($name) - { - $this->dropConstraints[] = $name; - - return $this; - } - - /** - * @param Constraint\ConstraintInterface $constraint - * @return self - */ - public function addConstraint(Constraint\ConstraintInterface $constraint) - { - $this->addConstraints[] = $constraint; - - return $this; - } - - /** - * @param string|null $key - * @return array - */ - public function getRawState($key = null) - { - $rawState = array( - self::TABLE => $this->table, - self::ADD_COLUMNS => $this->addColumns, - self::DROP_COLUMNS => $this->dropColumns, - self::CHANGE_COLUMNS => $this->changeColumns, - self::ADD_CONSTRAINTS => $this->addConstraints, - self::DROP_CONSTRAINTS => $this->dropConstraints, - ); - - return (isset($key) && array_key_exists($key, $rawState)) ? $rawState[$key] : $rawState; - } - - /** - * @param PlatformInterface $adapterPlatform - * @return string - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - // get platform, or create default - $adapterPlatform = ($adapterPlatform) ?: new AdapterSql92Platform; - - $sqls = array(); - $parameters = array(); - - foreach ($this->specifications as $name => $specification) { - $parameters[$name] = $this->{'process' . $name}($adapterPlatform, null, null, $sqls, $parameters); - if ($specification && is_array($parameters[$name]) && ($parameters[$name] != array(array()))) { - $sqls[$name] = $this->createSqlFromSpecificationAndParameters($specification, $parameters[$name]); - } - if (stripos($name, 'table') === false && $parameters[$name] !== array(array())) { - $sqls[] = ",\n"; - } - } - - // remove last ,\n - array_pop($sqls); - - $sql = implode('', $sqls); - - return $sql; - } - - protected function processTable(PlatformInterface $adapterPlatform = null) - { - return array($adapterPlatform->quoteIdentifier($this->table)); - } - - protected function processAddColumns(PlatformInterface $adapterPlatform = null) - { - $sqls = array(); - foreach ($this->addColumns as $column) { - $sqls[] = $this->processExpression($column, $adapterPlatform)->getSql(); - } - - return array($sqls); - } - - protected function processChangeColumns(PlatformInterface $adapterPlatform = null) - { - $sqls = array(); - foreach ($this->changeColumns as $name => $column) { - $sqls[] = array( - $adapterPlatform->quoteIdentifier($name), - $this->processExpression($column, $adapterPlatform)->getSql() - ); - } - - return array($sqls); - } - - protected function processDropColumns(PlatformInterface $adapterPlatform = null) - { - $sqls = array(); - foreach ($this->dropColumns as $column) { - $sqls[] = $adapterPlatform->quoteIdentifier($column); - } - - return array($sqls); - } - - protected function processAddConstraints(PlatformInterface $adapterPlatform = null) - { - $sqls = array(); - foreach ($this->addConstraints as $constraint) { - $sqls[] = $this->processExpression($constraint, $adapterPlatform); - } - - return array($sqls); - } - - protected function processDropConstraints(PlatformInterface $adapterPlatform = null) - { - $sqls = array(); - foreach ($this->dropConstraints as $constraint) { - $sqls[] = $adapterPlatform->quoteIdentifier($constraint); - } - - return array($sqls); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/BigInteger.php b/library/Zend/Db/Sql/Ddl/Column/BigInteger.php deleted file mode 100755 index d915a948f..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/BigInteger.php +++ /dev/null @@ -1,18 +0,0 @@ -setName($name); - $this->setLength($length); - $this->setNullable($nullable); - $this->setDefault($default); - $this->setOptions($options); - } - - /** - * @param int $length - * @return self - */ - public function setLength($length) - { - $this->length = $length; - return $this; - } - - /** - * @return int - */ - public function getLength() - { - return $this->length; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - - $params = array(); - $params[] = $this->name; - $params[] = $this->type; - - if ($this->length) { - $params[1] .= ' ' . $this->length; - } - - $types = array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL); - - if (!$this->isNullable) { - $params[1] .= ' NOT NULL'; - } - - if ($this->default !== null) { - $spec .= ' DEFAULT %s'; - $params[] = $this->default; - $types[] = self::TYPE_VALUE; - } - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Boolean.php b/library/Zend/Db/Sql/Ddl/Column/Boolean.php deleted file mode 100755 index 36c07187c..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Boolean.php +++ /dev/null @@ -1,42 +0,0 @@ -name = $name; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array($this->name); - $types = array(self::TYPE_IDENTIFIER); - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Char.php b/library/Zend/Db/Sql/Ddl/Column/Char.php deleted file mode 100755 index 507cfe2c6..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Char.php +++ /dev/null @@ -1,58 +0,0 @@ -name = $name; - $this->length = $length; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array(); - - $types = array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL); - $params[] = $this->name; - $params[] = $this->length; - - $types[] = self::TYPE_LITERAL; - $params[] = (!$this->isNullable) ? 'NOT NULL' : ''; - - $types[] = ($this->default !== null) ? self::TYPE_VALUE : self::TYPE_LITERAL; - $params[] = ($this->default !== null) ? $this->default : ''; - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Column.php b/library/Zend/Db/Sql/Ddl/Column/Column.php deleted file mode 100755 index de2f852b0..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Column.php +++ /dev/null @@ -1,164 +0,0 @@ -setName($name); - } - - /** - * @param string $name - * @return self - */ - public function setName($name) - { - $this->name = $name; - return $this; - } - - /** - * @return null|string - */ - public function getName() - { - return $this->name; - } - - /** - * @param bool $nullable - * @return self - */ - public function setNullable($nullable) - { - $this->isNullable = (bool) $nullable; - return $this; - } - - /** - * @return bool - */ - public function isNullable() - { - return $this->isNullable; - } - - /** - * @param null|string|int $default - * @return self - */ - public function setDefault($default) - { - $this->default = $default; - return $this; - } - - /** - * @return null|string|int - */ - public function getDefault() - { - return $this->default; - } - - /** - * @param array $options - * @return self - */ - public function setOptions(array $options) - { - $this->options = $options; - return $this; - } - - /** - * @param string $name - * @param string $value - * @return self - */ - public function setOption($name, $value) - { - $this->options[$name] = $value; - return $this; - } - - /** - * @return array - */ - public function getOptions() - { - return $this->options; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - - $params = array(); - $params[] = $this->name; - $params[] = $this->type; - - $types = array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL); - - if (!$this->isNullable) { - $params[1] .= ' NOT NULL'; - } - - if ($this->default !== null) { - $spec .= ' DEFAULT %s'; - $params[] = $this->default; - $types[] = self::TYPE_VALUE; - } - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/ColumnInterface.php b/library/Zend/Db/Sql/Ddl/Column/ColumnInterface.php deleted file mode 100755 index 331e5254f..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/ColumnInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -name = $name; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array(); - - $types = array(self::TYPE_IDENTIFIER); - $params[] = $this->name; - - $types[] = self::TYPE_LITERAL; - $params[] = (!$this->isNullable) ? 'NOT NULL' : ''; - - $types[] = ($this->default !== null) ? self::TYPE_VALUE : self::TYPE_LITERAL; - $params[] = ($this->default !== null) ? $this->default : ''; - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Decimal.php b/library/Zend/Db/Sql/Ddl/Column/Decimal.php deleted file mode 100755 index 8a0ff25e3..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Decimal.php +++ /dev/null @@ -1,69 +0,0 @@ -name = $name; - $this->precision = $precision; - $this->scale = $scale; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array(); - - $types = array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL); - $params[] = $this->name; - $params[] = $this->precision; - - if ($this->scale !== null) { - $params[1] .= ', ' . $this->scale; - } - - $types[] = self::TYPE_LITERAL; - $params[] = (!$this->isNullable) ? 'NOT NULL' : ''; - - $types[] = ($this->default !== null) ? self::TYPE_VALUE : self::TYPE_LITERAL; - $params[] = ($this->default !== null) ? $this->default : ''; - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Float.php b/library/Zend/Db/Sql/Ddl/Column/Float.php deleted file mode 100755 index e866abcf5..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Float.php +++ /dev/null @@ -1,66 +0,0 @@ -name = $name; - $this->digits = $digits; - $this->decimal = $decimal; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array(); - - $types = array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL); - $params[] = $this->name; - $params[] = $this->digits; - $params[1] .= ', ' . $this->decimal; - - $types[] = self::TYPE_LITERAL; - $params[] = (!$this->isNullable) ? 'NOT NULL' : ''; - - $types[] = ($this->default !== null) ? self::TYPE_VALUE : self::TYPE_LITERAL; - $params[] = ($this->default !== null) ? $this->default : ''; - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Integer.php b/library/Zend/Db/Sql/Ddl/Column/Integer.php deleted file mode 100755 index 5e424285c..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Integer.php +++ /dev/null @@ -1,32 +0,0 @@ -setName($name); - $this->setNullable($nullable); - $this->setDefault($default); - $this->setOptions($options); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Text.php b/library/Zend/Db/Sql/Ddl/Column/Text.php deleted file mode 100755 index 3e4070909..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Text.php +++ /dev/null @@ -1,51 +0,0 @@ -name = $name; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array(); - - $types = array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL); - $params[] = $this->name; - - $types[] = self::TYPE_LITERAL; - $params[] = (!$this->isNullable) ? 'NOT NULL' : ''; - - $types[] = ($this->default !== null) ? self::TYPE_VALUE : self::TYPE_LITERAL; - $params[] = ($this->default !== null) ? $this->default : ''; - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Time.php b/library/Zend/Db/Sql/Ddl/Column/Time.php deleted file mode 100755 index 68d3c6648..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Time.php +++ /dev/null @@ -1,50 +0,0 @@ -name = $name; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array(); - - $types = array(self::TYPE_IDENTIFIER); - $params[] = $this->name; - - $types[] = self::TYPE_LITERAL; - $params[] = (!$this->isNullable) ? 'NOT NULL' : ''; - - $types[] = ($this->default !== null) ? self::TYPE_VALUE : self::TYPE_LITERAL; - $params[] = ($this->default !== null) ? $this->default : ''; - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Column/Varchar.php b/library/Zend/Db/Sql/Ddl/Column/Varchar.php deleted file mode 100755 index 49a718c78..000000000 --- a/library/Zend/Db/Sql/Ddl/Column/Varchar.php +++ /dev/null @@ -1,58 +0,0 @@ -name = $name; - $this->length = $length; - } - - /** - * @return array - */ - public function getExpressionData() - { - $spec = $this->specification; - $params = array(); - - $types = array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL); - $params[] = $this->name; - $params[] = $this->length; - - $types[] = self::TYPE_LITERAL; - $params[] = (!$this->isNullable) ? 'NOT NULL' : ''; - - $types[] = ($this->default !== null) ? self::TYPE_VALUE : self::TYPE_LITERAL; - $params[] = ($this->default !== null) ? $this->default : ''; - - return array(array( - $spec, - $params, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Constraint/AbstractConstraint.php b/library/Zend/Db/Sql/Ddl/Constraint/AbstractConstraint.php deleted file mode 100755 index 19909fadb..000000000 --- a/library/Zend/Db/Sql/Ddl/Constraint/AbstractConstraint.php +++ /dev/null @@ -1,58 +0,0 @@ -setColumns($columns); - } - - /** - * @param null|string|array $columns - * @return self - */ - public function setColumns($columns) - { - if (!is_array($columns)) { - $columns = array($columns); - } - - $this->columns = $columns; - return $this; - } - - /** - * @param string $column - * @return self - */ - public function addColumn($column) - { - $this->columns[] = $column; - return $this; - } - - /** - * @return array - */ - public function getColumns() - { - return $this->columns; - } -} diff --git a/library/Zend/Db/Sql/Ddl/Constraint/Check.php b/library/Zend/Db/Sql/Ddl/Constraint/Check.php deleted file mode 100755 index 1afbeb39c..000000000 --- a/library/Zend/Db/Sql/Ddl/Constraint/Check.php +++ /dev/null @@ -1,45 +0,0 @@ -expression = $expression; - $this->name = $name; - } - - /** - * @return array - */ - public function getExpressionData() - { - return array(array( - $this->specification, - array($this->name, $this->expression), - array(self::TYPE_IDENTIFIER, self::TYPE_LITERAL), - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Constraint/ConstraintInterface.php b/library/Zend/Db/Sql/Ddl/Constraint/ConstraintInterface.php deleted file mode 100755 index bcb964394..000000000 --- a/library/Zend/Db/Sql/Ddl/Constraint/ConstraintInterface.php +++ /dev/null @@ -1,17 +0,0 @@ -setName($name); - $this->setColumns($column); - $this->setReferenceTable($referenceTable); - $this->setReferenceColumn($referenceColumn); - (!$onDeleteRule) ?: $this->setOnDeleteRule($onDeleteRule); - (!$onUpdateRule) ?: $this->setOnUpdateRule($onUpdateRule); - } - - /** - * @param string $name - * @return self - */ - public function setName($name) - { - $this->name = $name; - return $this; - } - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @param string $referenceTable - * @return self - */ - public function setReferenceTable($referenceTable) - { - $this->referenceTable = $referenceTable; - return $this; - } - - /** - * @return string - */ - public function getReferenceTable() - { - return $this->referenceTable; - } - - /** - * @param string $referenceColumn - * @return self - */ - public function setReferenceColumn($referenceColumn) - { - $this->referenceColumn = $referenceColumn; - return $this; - } - - /** - * @return string - */ - public function getReferenceColumn() - { - return $this->referenceColumn; - } - - /** - * @param string $onDeleteRule - * @return self - */ - public function setOnDeleteRule($onDeleteRule) - { - $this->onDeleteRule = $onDeleteRule; - return $this; - } - - /** - * @return string - */ - public function getOnDeleteRule() - { - return $this->onDeleteRule; - } - - /** - * @param string $onUpdateRule - * @return self - */ - public function setOnUpdateRule($onUpdateRule) - { - $this->onUpdateRule = $onUpdateRule; - return $this; - } - - /** - * @return string - */ - public function getOnUpdateRule() - { - return $this->onUpdateRule; - } - - /** - * @return array - */ - public function getExpressionData() - { - return array(array( - $this->specification, - array( - $this->name, - $this->columns[0], - $this->referenceTable, - $this->referenceColumn, - $this->onDeleteRule, - $this->onUpdateRule, - ), - array( - self::TYPE_IDENTIFIER, - self::TYPE_IDENTIFIER, - self::TYPE_IDENTIFIER, - self::TYPE_IDENTIFIER, - self::TYPE_LITERAL, - self::TYPE_LITERAL, - ), - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Constraint/PrimaryKey.php b/library/Zend/Db/Sql/Ddl/Constraint/PrimaryKey.php deleted file mode 100755 index 84124a4d0..000000000 --- a/library/Zend/Db/Sql/Ddl/Constraint/PrimaryKey.php +++ /dev/null @@ -1,36 +0,0 @@ -columns); - $newSpecParts = array_fill(0, $colCount, '%s'); - $newSpecTypes = array_fill(0, $colCount, self::TYPE_IDENTIFIER); - - $newSpec = sprintf($this->specification, implode(', ', $newSpecParts)); - - return array(array( - $newSpec, - $this->columns, - $newSpecTypes, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/Constraint/UniqueKey.php b/library/Zend/Db/Sql/Ddl/Constraint/UniqueKey.php deleted file mode 100755 index 8d871054e..000000000 --- a/library/Zend/Db/Sql/Ddl/Constraint/UniqueKey.php +++ /dev/null @@ -1,55 +0,0 @@ -setColumns($column); - $this->name = $name; - } - - /** - * @return array - */ - public function getExpressionData() - { - $colCount = count($this->columns); - - $values = array(); - $values[] = ($this->name) ? $this->name : ''; - - $newSpecTypes = array(self::TYPE_IDENTIFIER); - $newSpecParts = array(); - - for ($i = 0; $i < $colCount; $i++) { - $newSpecParts[] = '%s'; - $newSpecTypes[] = self::TYPE_IDENTIFIER; - } - - $newSpec = str_replace('...', implode(', ', $newSpecParts), $this->specification); - - return array(array( - $newSpec, - array_merge($values, $this->columns), - $newSpecTypes, - )); - } -} diff --git a/library/Zend/Db/Sql/Ddl/CreateTable.php b/library/Zend/Db/Sql/Ddl/CreateTable.php deleted file mode 100755 index 45bfd982d..000000000 --- a/library/Zend/Db/Sql/Ddl/CreateTable.php +++ /dev/null @@ -1,218 +0,0 @@ - 'CREATE %1$sTABLE %2$s (', - self::COLUMNS => array( - "\n %1\$s" => array( - array(1 => '%1$s', 'combinedby' => ",\n ") - ) - ), - self::CONSTRAINTS => array( - "\n %1\$s" => array( - array(1 => '%1$s', 'combinedby' => ",\n ") - ) - ), - ); - - /** - * @var string - */ - protected $table = ''; - - /** - * @param string $table - * @param bool $isTemporary - */ - public function __construct($table = '', $isTemporary = false) - { - $this->table = $table; - $this->setTemporary($isTemporary); - } - - /** - * @param bool $temporary - * @return self - */ - public function setTemporary($temporary) - { - $this->isTemporary = (bool) $temporary; - return $this; - } - - /** - * @return bool - */ - public function isTemporary() - { - return $this->isTemporary; - } - - /** - * @param string $name - * @return self - */ - public function setTable($name) - { - $this->table = $name; - return $this; - } - - /** - * @param Column\ColumnInterface $column - * @return self - */ - public function addColumn(Column\ColumnInterface $column) - { - $this->columns[] = $column; - return $this; - } - - /** - * @param Constraint\ConstraintInterface $constraint - * @return self - */ - public function addConstraint(Constraint\ConstraintInterface $constraint) - { - $this->constraints[] = $constraint; - return $this; - } - - /** - * @param string|null $key - * @return array - */ - public function getRawState($key = null) - { - $rawState = array( - self::COLUMNS => $this->columns, - self::CONSTRAINTS => $this->constraints, - self::TABLE => $this->table, - ); - - return (isset($key) && array_key_exists($key, $rawState)) ? $rawState[$key] : $rawState; - } - - /** - * @param PlatformInterface $adapterPlatform - * @return string - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - // get platform, or create default - $adapterPlatform = ($adapterPlatform) ?: new AdapterSql92Platform; - - $sqls = array(); - $parameters = array(); - - foreach ($this->specifications as $name => $specification) { - if (is_int($name)) { - $sqls[] = $specification; - continue; - } - - $parameters[$name] = $this->{'process' . $name}( - $adapterPlatform, - null, - null, - $sqls, - $parameters - ); - - - if ($specification - && is_array($parameters[$name]) - && ($parameters[$name] != array(array())) - ) { - $sqls[$name] = $this->createSqlFromSpecificationAndParameters( - $specification, - $parameters[$name] - ); - } - - if (stripos($name, 'table') === false - && $parameters[$name] !== array(array()) - ) { - $sqls[] = ",\n"; - } - } - - - // remove last , - if (count($sqls) > 2) { - array_pop($sqls); - } - - $sql = implode('', $sqls) . "\n)"; - - return $sql; - } - - protected function processTable(PlatformInterface $adapterPlatform = null) - { - $ret = array(); - if ($this->isTemporary) { - $ret[] = 'TEMPORARY '; - } else { - $ret[] = ''; - } - - $ret[] = $adapterPlatform->quoteIdentifier($this->table); - return $ret; - } - - protected function processColumns(PlatformInterface $adapterPlatform = null) - { - $sqls = array(); - foreach ($this->columns as $column) { - $sqls[] = $this->processExpression($column, $adapterPlatform)->getSql(); - } - return array($sqls); - } - - protected function processConstraints(PlatformInterface $adapterPlatform = null) - { - $sqls = array(); - foreach ($this->constraints as $constraint) { - $sqls[] = $this->processExpression($constraint, $adapterPlatform)->getSql(); - } - return array($sqls); - } -} diff --git a/library/Zend/Db/Sql/Ddl/DropTable.php b/library/Zend/Db/Sql/Ddl/DropTable.php deleted file mode 100755 index e38425c6b..000000000 --- a/library/Zend/Db/Sql/Ddl/DropTable.php +++ /dev/null @@ -1,77 +0,0 @@ - 'DROP TABLE %1$s' - ); - - /** - * @var string - */ - protected $table = ''; - - /** - * @param string $table - */ - public function __construct($table = '') - { - $this->table = $table; - } - - /** - * @param null|PlatformInterface $adapterPlatform - * @return string - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - // get platform, or create default - $adapterPlatform = ($adapterPlatform) ?: new AdapterSql92Platform; - - $sqls = array(); - $parameters = array(); - - foreach ($this->specifications as $name => $specification) { - $parameters[$name] = $this->{'process' . $name}( - $adapterPlatform, - null, - null, - $sqls, - $parameters - ); - - if ($specification && is_array($parameters[$name])) { - $sqls[$name] = $this->createSqlFromSpecificationAndParameters( - $specification, - $parameters[$name] - ); - } - } - - $sql = implode(' ', $sqls); - return $sql; - } - - protected function processTable(PlatformInterface $adapterPlatform = null) - { - return array($adapterPlatform->quoteIdentifier($this->table)); - } -} diff --git a/library/Zend/Db/Sql/Ddl/SqlInterface.php b/library/Zend/Db/Sql/Ddl/SqlInterface.php deleted file mode 100755 index 761312458..000000000 --- a/library/Zend/Db/Sql/Ddl/SqlInterface.php +++ /dev/null @@ -1,16 +0,0 @@ - 'DELETE FROM %1$s', - self::SPECIFICATION_WHERE => 'WHERE %1$s' - ); - - /** - * @var string|TableIdentifier - */ - protected $table = ''; - - /** - * @var bool - */ - protected $emptyWhereProtection = true; - - /** - * @var array - */ - protected $set = array(); - - /** - * @var null|string|Where - */ - protected $where = null; - - /** - * Constructor - * - * @param null|string|TableIdentifier $table - */ - public function __construct($table = null) - { - if ($table) { - $this->from($table); - } - $this->where = new Where(); - } - - /** - * Create from statement - * - * @param string|TableIdentifier $table - * @return Delete - */ - public function from($table) - { - $this->table = $table; - return $this; - } - - public function getRawState($key = null) - { - $rawState = array( - 'emptyWhereProtection' => $this->emptyWhereProtection, - 'table' => $this->table, - 'set' => $this->set, - 'where' => $this->where - ); - return (isset($key) && array_key_exists($key, $rawState)) ? $rawState[$key] : $rawState; - } - - /** - * Create where clause - * - * @param Where|\Closure|string|array $predicate - * @param string $combination One of the OP_* constants from Predicate\PredicateSet - * @return Delete - */ - public function where($predicate, $combination = Predicate\PredicateSet::OP_AND) - { - if ($predicate instanceof Where) { - $this->where = $predicate; - } else { - $this->where->addPredicates($predicate, $combination); - } - return $this; - } - - /** - * Prepare the delete statement - * - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - * @return void - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - $driver = $adapter->getDriver(); - $platform = $adapter->getPlatform(); - $parameterContainer = $statementContainer->getParameterContainer(); - - if (!$parameterContainer instanceof ParameterContainer) { - $parameterContainer = new ParameterContainer(); - $statementContainer->setParameterContainer($parameterContainer); - } - - $table = $this->table; - $schema = null; - - // create quoted table name to use in delete processing - if ($table instanceof TableIdentifier) { - list($table, $schema) = $table->getTableAndSchema(); - } - - $table = $platform->quoteIdentifier($table); - - if ($schema) { - $table = $platform->quoteIdentifier($schema) . $platform->getIdentifierSeparator() . $table; - } - - $sql = sprintf($this->specifications[static::SPECIFICATION_DELETE], $table); - - // process where - if ($this->where->count() > 0) { - $whereParts = $this->processExpression($this->where, $platform, $driver, 'where'); - $parameterContainer->merge($whereParts->getParameterContainer()); - $sql .= ' ' . sprintf($this->specifications[static::SPECIFICATION_WHERE], $whereParts->getSql()); - } - $statementContainer->setSql($sql); - } - - /** - * Get the SQL string, based on the platform - * - * Platform defaults to Sql92 if none provided - * - * @param null|PlatformInterface $adapterPlatform - * @return string - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - $adapterPlatform = ($adapterPlatform) ?: new Sql92; - $table = $this->table; - $schema = null; - - // create quoted table name to use in delete processing - if ($table instanceof TableIdentifier) { - list($table, $schema) = $table->getTableAndSchema(); - } - - $table = $adapterPlatform->quoteIdentifier($table); - - if ($schema) { - $table = $adapterPlatform->quoteIdentifier($schema) . $adapterPlatform->getIdentifierSeparator() . $table; - } - - $sql = sprintf($this->specifications[static::SPECIFICATION_DELETE], $table); - - if ($this->where->count() > 0) { - $whereParts = $this->processExpression($this->where, $adapterPlatform, null, 'where'); - $sql .= ' ' . sprintf($this->specifications[static::SPECIFICATION_WHERE], $whereParts->getSql()); - } - - return $sql; - } - - /** - * Property overloading - * - * Overloads "where" only. - * - * @param string $name - * @return mixed - */ - public function __get($name) - { - switch (strtolower($name)) { - case 'where': - return $this->where; - } - } -} diff --git a/library/Zend/Db/Sql/Exception/ExceptionInterface.php b/library/Zend/Db/Sql/Exception/ExceptionInterface.php deleted file mode 100755 index 337266de8..000000000 --- a/library/Zend/Db/Sql/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -setExpression($expression); - } - if ($parameters) { - $this->setParameters($parameters); - } - if ($types) { - $this->setTypes($types); - } - } - - /** - * @param $expression - * @return Expression - * @throws Exception\InvalidArgumentException - */ - public function setExpression($expression) - { - if (!is_string($expression) || $expression == '') { - throw new Exception\InvalidArgumentException('Supplied expression must be a string.'); - } - $this->expression = $expression; - return $this; - } - - /** - * @return string - */ - public function getExpression() - { - return $this->expression; - } - - /** - * @param $parameters - * @return Expression - * @throws Exception\InvalidArgumentException - */ - public function setParameters($parameters) - { - if (!is_scalar($parameters) && !is_array($parameters)) { - throw new Exception\InvalidArgumentException('Expression parameters must be a scalar or array.'); - } - $this->parameters = $parameters; - return $this; - } - - /** - * @return array - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * @param array $types - * @return Expression - */ - public function setTypes(array $types) - { - $this->types = $types; - return $this; - } - - /** - * @return array - */ - public function getTypes() - { - return $this->types; - } - - /** - * @return array - * @throws Exception\RuntimeException - */ - public function getExpressionData() - { - $parameters = (is_scalar($this->parameters)) ? array($this->parameters) : $this->parameters; - - $types = array(); - $parametersCount = count($parameters); - - if ($parametersCount == 0 && strpos($this->expression, self::PLACEHOLDER) !== false) { - // if there are no parameters, but there is a placeholder - $parametersCount = substr_count($this->expression, self::PLACEHOLDER); - $parameters = array_fill(0, $parametersCount, null); - } - - for ($i = 0; $i < $parametersCount; $i++) { - $types[$i] = (isset($this->types[$i]) && ($this->types[$i] == self::TYPE_IDENTIFIER || $this->types[$i] == self::TYPE_LITERAL)) - ? $this->types[$i] : self::TYPE_VALUE; - } - - // assign locally, escaping % signs - $expression = str_replace('%', '%%', $this->expression); - - if ($parametersCount > 0) { - $count = 0; - $expression = str_replace(self::PLACEHOLDER, '%s', $expression, $count); - if ($count !== $parametersCount) { - throw new Exception\RuntimeException('The number of replacements in the expression does not match the number of parameters'); - } - } - - return array(array( - $expression, - $parameters, - $types - )); - } -} diff --git a/library/Zend/Db/Sql/ExpressionInterface.php b/library/Zend/Db/Sql/ExpressionInterface.php deleted file mode 100755 index 99c929939..000000000 --- a/library/Zend/Db/Sql/ExpressionInterface.php +++ /dev/null @@ -1,36 +0,0 @@ - 'INSERT INTO %1$s (%2$s) VALUES (%3$s)', - self::SPECIFICATION_SELECT => 'INSERT INTO %1$s %2$s %3$s', - ); - - /** - * @var string|TableIdentifier - */ - protected $table = null; - protected $columns = array(); - - /** - * @var array|Select - */ - protected $values = null; - - /** - * Constructor - * - * @param null|string|TableIdentifier $table - */ - public function __construct($table = null) - { - if ($table) { - $this->into($table); - } - } - - /** - * Create INTO clause - * - * @param string|TableIdentifier $table - * @return Insert - */ - public function into($table) - { - $this->table = $table; - return $this; - } - - /** - * Specify columns - * - * @param array $columns - * @return Insert - */ - public function columns(array $columns) - { - $this->columns = $columns; - return $this; - } - - /** - * Specify values to insert - * - * @param array|Select $values - * @param string $flag one of VALUES_MERGE or VALUES_SET; defaults to VALUES_SET - * @throws Exception\InvalidArgumentException - * @return Insert - */ - public function values($values, $flag = self::VALUES_SET) - { - if (!is_array($values) && !$values instanceof Select) { - throw new Exception\InvalidArgumentException('values() expects an array of values or Zend\Db\Sql\Select instance'); - } - - if ($values instanceof Select) { - if ($flag == self::VALUES_MERGE && (is_array($this->values) && !empty($this->values))) { - throw new Exception\InvalidArgumentException( - 'A Zend\Db\Sql\Select instance cannot be provided with the merge flag when values already exist.' - ); - } - $this->values = $values; - return $this; - } - - // determine if this is assoc or a set of values - $keys = array_keys($values); - $firstKey = current($keys); - - if ($flag == self::VALUES_SET) { - $this->columns = array(); - $this->values = array(); - } elseif ($this->values instanceof Select) { - throw new Exception\InvalidArgumentException( - 'An array of values cannot be provided with the merge flag when a Zend\Db\Sql\Select' - . ' instance already exists as the value source.' - ); - } - - if (is_string($firstKey)) { - foreach ($keys as $key) { - if (($index = array_search($key, $this->columns)) !== false) { - $this->values[$index] = $values[$key]; - } else { - $this->columns[] = $key; - $this->values[] = $values[$key]; - } - } - } elseif (is_int($firstKey)) { - // determine if count of columns should match count of values - $this->values = array_merge($this->values, array_values($values)); - } - - return $this; - } - - /** - * Create INTO SELECT clause - * - * @param Select $select - * @return self - */ - public function select(Select $select) - { - return $this->values($select); - } - - /** - * Get raw state - * - * @param string $key - * @return mixed - */ - public function getRawState($key = null) - { - $rawState = array( - 'table' => $this->table, - 'columns' => $this->columns, - 'values' => $this->values - ); - return (isset($key) && array_key_exists($key, $rawState)) ? $rawState[$key] : $rawState; - } - - /** - * Prepare statement - * - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - * @return void - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - $driver = $adapter->getDriver(); - $platform = $adapter->getPlatform(); - $parameterContainer = $statementContainer->getParameterContainer(); - - if (!$parameterContainer instanceof ParameterContainer) { - $parameterContainer = new ParameterContainer(); - $statementContainer->setParameterContainer($parameterContainer); - } - - $table = $this->table; - $schema = null; - - // create quoted table name to use in insert processing - if ($table instanceof TableIdentifier) { - list($table, $schema) = $table->getTableAndSchema(); - } - - $table = $platform->quoteIdentifier($table); - - if ($schema) { - $table = $platform->quoteIdentifier($schema) . $platform->getIdentifierSeparator() . $table; - } - - $columns = array(); - $values = array(); - - if (is_array($this->values)) { - foreach ($this->columns as $cIndex => $column) { - $columns[$cIndex] = $platform->quoteIdentifier($column); - if (isset($this->values[$cIndex]) && $this->values[$cIndex] instanceof Expression) { - $exprData = $this->processExpression($this->values[$cIndex], $platform, $driver); - $values[$cIndex] = $exprData->getSql(); - $parameterContainer->merge($exprData->getParameterContainer()); - } else { - $values[$cIndex] = $driver->formatParameterName($column); - if (isset($this->values[$cIndex])) { - $parameterContainer->offsetSet($column, $this->values[$cIndex]); - } else { - $parameterContainer->offsetSet($column, null); - } - } - } - $sql = sprintf( - $this->specifications[static::SPECIFICATION_INSERT], - $table, - implode(', ', $columns), - implode(', ', $values) - ); - } elseif ($this->values instanceof Select) { - $this->values->prepareStatement($adapter, $statementContainer); - - $columns = array_map(array($platform, 'quoteIdentifier'), $this->columns); - $columns = implode(', ', $columns); - - $sql = sprintf( - $this->specifications[static::SPECIFICATION_SELECT], - $table, - $columns ? "($columns)" : "", - $statementContainer->getSql() - ); - } else { - throw new Exception\InvalidArgumentException('values or select should be present'); - } - $statementContainer->setSql($sql); - } - - /** - * Get SQL string for this statement - * - * @param null|PlatformInterface $adapterPlatform Defaults to Sql92 if none provided - * @return string - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - $adapterPlatform = ($adapterPlatform) ?: new Sql92; - $table = $this->table; - $schema = null; - - // create quoted table name to use in insert processing - if ($table instanceof TableIdentifier) { - list($table, $schema) = $table->getTableAndSchema(); - } - - $table = $adapterPlatform->quoteIdentifier($table); - - if ($schema) { - $table = $adapterPlatform->quoteIdentifier($schema) . $adapterPlatform->getIdentifierSeparator() . $table; - } - - $columns = array_map(array($adapterPlatform, 'quoteIdentifier'), $this->columns); - $columns = implode(', ', $columns); - - if (is_array($this->values)) { - $values = array(); - foreach ($this->values as $value) { - if ($value instanceof Expression) { - $exprData = $this->processExpression($value, $adapterPlatform); - $values[] = $exprData->getSql(); - } elseif ($value === null) { - $values[] = 'NULL'; - } else { - $values[] = $adapterPlatform->quoteValue($value); - } - } - return sprintf( - $this->specifications[static::SPECIFICATION_INSERT], - $table, - $columns, - implode(', ', $values) - ); - } elseif ($this->values instanceof Select) { - $selectString = $this->values->getSqlString($adapterPlatform); - if ($columns) { - $columns = "($columns)"; - } - return sprintf( - $this->specifications[static::SPECIFICATION_SELECT], - $table, - $columns, - $selectString - ); - } else { - throw new Exception\InvalidArgumentException('values or select should be present'); - } - } - - /** - * Overloading: variable setting - * - * Proxies to values, using VALUES_MERGE strategy - * - * @param string $name - * @param mixed $value - * @return Insert - */ - public function __set($name, $value) - { - $values = array($name => $value); - $this->values($values, self::VALUES_MERGE); - return $this; - } - - /** - * Overloading: variable unset - * - * Proxies to values and columns - * - * @param string $name - * @throws Exception\InvalidArgumentException - * @return void - */ - public function __unset($name) - { - if (($position = array_search($name, $this->columns)) === false) { - throw new Exception\InvalidArgumentException('The key ' . $name . ' was not found in this objects column list'); - } - - unset($this->columns[$position]); - if (is_array($this->values)) { - unset($this->values[$position]); - } - } - - /** - * Overloading: variable isset - * - * Proxies to columns; does a column of that name exist? - * - * @param string $name - * @return bool - */ - public function __isset($name) - { - return in_array($name, $this->columns); - } - - /** - * Overloading: variable retrieval - * - * Retrieves value by column name - * - * @param string $name - * @throws Exception\InvalidArgumentException - * @return mixed - */ - public function __get($name) - { - if (!is_array($this->values)) { - return null; - } - if (($position = array_search($name, $this->columns)) === false) { - throw new Exception\InvalidArgumentException('The key ' . $name . ' was not found in this objects column list'); - } - return $this->values[$position]; - } -} diff --git a/library/Zend/Db/Sql/Literal.php b/library/Zend/Db/Sql/Literal.php deleted file mode 100755 index ba67415a3..000000000 --- a/library/Zend/Db/Sql/Literal.php +++ /dev/null @@ -1,56 +0,0 @@ -literal = $literal; - } - - /** - * @param string $literal - * @return Literal - */ - public function setLiteral($literal) - { - $this->literal = $literal; - return $this; - } - - /** - * @return string - */ - public function getLiteral() - { - return $this->literal; - } - - /** - * @return array - */ - public function getExpressionData() - { - return array(array( - str_replace('%', '%%', $this->literal), - array(), - array() - )); - } -} diff --git a/library/Zend/Db/Sql/Platform/AbstractPlatform.php b/library/Zend/Db/Sql/Platform/AbstractPlatform.php deleted file mode 100755 index c5ddd6ce6..000000000 --- a/library/Zend/Db/Sql/Platform/AbstractPlatform.php +++ /dev/null @@ -1,110 +0,0 @@ -subject = $subject; - } - - /** - * @param $type - * @param PlatformDecoratorInterface $decorator - */ - public function setTypeDecorator($type, PlatformDecoratorInterface $decorator) - { - $this->decorators[$type] = $decorator; - } - - /** - * @return array|PlatformDecoratorInterface[] - */ - public function getDecorators() - { - return $this->decorators; - } - - /** - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - * @throws Exception\RuntimeException - * @return void - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - if (!$this->subject instanceof PreparableSqlInterface) { - throw new Exception\RuntimeException('The subject does not appear to implement Zend\Db\Sql\PreparableSqlInterface, thus calling prepareStatement() has no effect'); - } - - $decoratorForType = false; - foreach ($this->decorators as $type => $decorator) { - if ($this->subject instanceof $type && $decorator instanceof PreparableSqlInterface) { - /** @var $decoratorForType PreparableSqlInterface|PlatformDecoratorInterface */ - $decoratorForType = $decorator; - break; - } - } - if ($decoratorForType) { - $decoratorForType->setSubject($this->subject); - $decoratorForType->prepareStatement($adapter, $statementContainer); - } else { - $this->subject->prepareStatement($adapter, $statementContainer); - } - } - - /** - * @param null|\Zend\Db\Adapter\Platform\PlatformInterface $adapterPlatform - * @return mixed - * @throws Exception\RuntimeException - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - if (!$this->subject instanceof SqlInterface) { - throw new Exception\RuntimeException('The subject does not appear to implement Zend\Db\Sql\PreparableSqlInterface, thus calling prepareStatement() has no effect'); - } - - $decoratorForType = false; - foreach ($this->decorators as $type => $decorator) { - if ($this->subject instanceof $type && $decorator instanceof SqlInterface) { - /** @var $decoratorForType SqlInterface|PlatformDecoratorInterface */ - $decoratorForType = $decorator; - break; - } - } - if ($decoratorForType) { - $decoratorForType->setSubject($this->subject); - return $decoratorForType->getSqlString($adapterPlatform); - } - - return $this->subject->getSqlString($adapterPlatform); - } -} diff --git a/library/Zend/Db/Sql/Platform/IbmDb2/IbmDb2.php b/library/Zend/Db/Sql/Platform/IbmDb2/IbmDb2.php deleted file mode 100755 index f744bb470..000000000 --- a/library/Zend/Db/Sql/Platform/IbmDb2/IbmDb2.php +++ /dev/null @@ -1,23 +0,0 @@ -setTypeDecorator('Zend\Db\Sql\Select', ($selectDecorator) ?: new SelectDecorator()); - } -} diff --git a/library/Zend/Db/Sql/Platform/IbmDb2/SelectDecorator.php b/library/Zend/Db/Sql/Platform/IbmDb2/SelectDecorator.php deleted file mode 100755 index 4ad323694..000000000 --- a/library/Zend/Db/Sql/Platform/IbmDb2/SelectDecorator.php +++ /dev/null @@ -1,192 +0,0 @@ -isSelectContainDistinct; - } - - /** - * @param boolean $isSelectContainDistinct - */ - public function setIsSelectContainDistinct($isSelectContainDistinct) - { - $this->isSelectContainDistinct = $isSelectContainDistinct; - } - - /** - * @param Select $select - */ - public function setSubject($select) - { - $this->select = $select; - } - - /** - * @see Select::renderTable - */ - protected function renderTable($table, $alias = null) - { - return $table . ' ' . $alias; - } - - /** - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - // set specifications - unset($this->specifications[self::LIMIT]); - unset($this->specifications[self::OFFSET]); - - $this->specifications['LIMITOFFSET'] = null; - parent::prepareStatement($adapter, $statementContainer); - } - - /** - * @param PlatformInterface $platform - * @return string - */ - public function getSqlString(PlatformInterface $platform = null) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - - unset($this->specifications[self::LIMIT]); - unset($this->specifications[self::OFFSET]); - $this->specifications['LIMITOFFSET'] = null; - - return parent::getSqlString($platform); - } - - /** - * @param PlatformInterface $platform - * @param DriverInterface $driver - * @param ParameterContainer $parameterContainer - * @param array $sqls - * @param array $parameters - */ - protected function processLimitOffset(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null, &$sqls, &$parameters) - { - if ($this->limit === null && $this->offset === null) { - return; - } - - $selectParameters = $parameters[self::SELECT]; - - $starSuffix = $platform->getIdentifierSeparator() . self::SQL_STAR; - foreach ($selectParameters[0] as $i => $columnParameters) { - if ($columnParameters[0] == self::SQL_STAR - || (isset($columnParameters[1]) && $columnParameters[1] == self::SQL_STAR) - || strpos($columnParameters[0], $starSuffix) - ) { - $selectParameters[0] = array(array(self::SQL_STAR)); - break; - } - - if (isset($columnParameters[1])) { - array_shift($columnParameters); - $selectParameters[0][$i] = $columnParameters; - } - } - - // first, produce column list without compound names (using the AS portion only) - array_unshift($sqls, $this->createSqlFromSpecificationAndParameters( - array('SELECT %1$s FROM (' => current($this->specifications[self::SELECT])), - $selectParameters - )); - - if (preg_match('/DISTINCT/i', $sqls[0])) { - $this->setIsSelectContainDistinct(true); - } - - if ($parameterContainer) { - // create bottom part of query, with offset and limit using row_number - $limitParamName = $driver->formatParameterName('limit'); - $offsetParamName = $driver->formatParameterName('offset'); - - array_push($sqls, sprintf( - ") AS ZEND_IBMDB2_SERVER_LIMIT_OFFSET_EMULATION WHERE ZEND_IBMDB2_SERVER_LIMIT_OFFSET_EMULATION.ZEND_DB_ROWNUM BETWEEN %s AND %s", - $offsetParamName, - $limitParamName - )); - - if ((int) $this->offset > 0) { - $parameterContainer->offsetSet('offset', (int) $this->offset + 1); - } else { - $parameterContainer->offsetSet('offset', (int) $this->offset); - } - - $parameterContainer->offsetSet('limit', (int) $this->limit + (int) $this->offset); - } else { - if ((int) $this->offset > 0) { - $offset = (int) $this->offset + 1; - } else { - $offset = (int) $this->offset; - } - - array_push($sqls, sprintf( - ") AS ZEND_IBMDB2_SERVER_LIMIT_OFFSET_EMULATION WHERE ZEND_IBMDB2_SERVER_LIMIT_OFFSET_EMULATION.ZEND_DB_ROWNUM BETWEEN %d AND %d", - $offset, - (int) $this->limit + (int) $this->offset - )); - } - - if (isset($sqls[self::ORDER])) { - $orderBy = $sqls[self::ORDER]; - unset($sqls[self::ORDER]); - } else { - $orderBy = ''; - } - - // add a column for row_number() using the order specification //dense_rank() - if ($this->getIsSelectContainDistinct()) { - $parameters[self::SELECT][0][] = array('DENSE_RANK() OVER (' . $orderBy . ')', 'ZEND_DB_ROWNUM'); - } else { - $parameters[self::SELECT][0][] = array('ROW_NUMBER() OVER (' . $orderBy . ')', 'ZEND_DB_ROWNUM'); - } - - $sqls[self::SELECT] = $this->createSqlFromSpecificationAndParameters( - $this->specifications[self::SELECT], - $parameters[self::SELECT] - ); - } -} diff --git a/library/Zend/Db/Sql/Platform/Mysql/Ddl/CreateTableDecorator.php b/library/Zend/Db/Sql/Platform/Mysql/Ddl/CreateTableDecorator.php deleted file mode 100755 index d9cfa1556..000000000 --- a/library/Zend/Db/Sql/Platform/Mysql/Ddl/CreateTableDecorator.php +++ /dev/null @@ -1,86 +0,0 @@ -createTable = $subject; - } - - /** - * @param null|PlatformInterface $platform - * @return string - */ - public function getSqlString(PlatformInterface $platform = null) - { - // localize variables - foreach (get_object_vars($this->createTable) as $name => $value) { - $this->{$name} = $value; - } - return parent::getSqlString($platform); - } - - protected function processColumns(PlatformInterface $platform = null) - { - $sqls = array(); - foreach ($this->columns as $i => $column) { - $stmtContainer = $this->processExpression($column, $platform); - $sql = $stmtContainer->getSql(); - $columnOptions = $column->getOptions(); - - foreach ($columnOptions as $coName => $coValue) { - switch (strtolower(str_replace(array('-', '_', ' '), '', $coName))) { - case 'identity': - case 'serial': - case 'autoincrement': - $sql .= ' AUTO_INCREMENT'; - break; - /* - case 'primary': - case 'primarykey': - $sql .= ' PRIMARY KEY'; - break; - case 'unique': - case 'uniquekey': - $sql .= ' UNIQUE KEY'; - break; - */ - case 'comment': - $sql .= ' COMMENT \'' . $coValue . '\''; - break; - case 'columnformat': - case 'format': - $sql .= ' COLUMN_FORMAT ' . strtoupper($coValue); - break; - case 'storage': - $sql .= ' STORAGE ' . strtoupper($coValue); - break; - } - } - $stmtContainer->setSql($sql); - $sqls[$i] = $stmtContainer; - } - return array($sqls); - } -} diff --git a/library/Zend/Db/Sql/Platform/Mysql/Mysql.php b/library/Zend/Db/Sql/Platform/Mysql/Mysql.php deleted file mode 100755 index 80455869a..000000000 --- a/library/Zend/Db/Sql/Platform/Mysql/Mysql.php +++ /dev/null @@ -1,21 +0,0 @@ -setTypeDecorator('Zend\Db\Sql\Select', new SelectDecorator()); - $this->setTypeDecorator('Zend\Db\Sql\Ddl\CreateTable', new Ddl\CreateTableDecorator()); - } -} diff --git a/library/Zend/Db/Sql/Platform/Mysql/SelectDecorator.php b/library/Zend/Db/Sql/Platform/Mysql/SelectDecorator.php deleted file mode 100755 index 5c4678a73..000000000 --- a/library/Zend/Db/Sql/Platform/Mysql/SelectDecorator.php +++ /dev/null @@ -1,97 +0,0 @@ -select = $select; - } - - /** - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - if ($this->limit === null && $this->offset !== null) { - $this->specifications[self::LIMIT] = 'LIMIT 18446744073709551615'; - } - parent::prepareStatement($adapter, $statementContainer); - } - - /** - * @param PlatformInterface $platform - * @return string - */ - public function getSqlString(PlatformInterface $platform = null) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - if ($this->limit === null && $this->offset !== null) { - $this->specifications[self::LIMIT] = 'LIMIT 18446744073709551615'; - } - return parent::getSqlString($platform); - } - - protected function processLimit(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->limit === null && $this->offset !== null) { - return array(''); - } - if ($this->limit === null) { - return null; - } - if ($driver) { - $sql = $driver->formatParameterName('limit'); - $parameterContainer->offsetSet('limit', $this->limit, ParameterContainer::TYPE_INTEGER); - } else { - $sql = $this->limit; - } - - return array($sql); - } - - protected function processOffset(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->offset === null) { - return null; - } - if ($driver) { - $parameterContainer->offsetSet('offset', $this->offset, ParameterContainer::TYPE_INTEGER); - return array($driver->formatParameterName('offset')); - } - - return array($this->offset); - } -} diff --git a/library/Zend/Db/Sql/Platform/Oracle/Oracle.php b/library/Zend/Db/Sql/Platform/Oracle/Oracle.php deleted file mode 100755 index e5af22fa9..000000000 --- a/library/Zend/Db/Sql/Platform/Oracle/Oracle.php +++ /dev/null @@ -1,20 +0,0 @@ -setTypeDecorator('Zend\Db\Sql\Select', ($selectDecorator) ?: new SelectDecorator()); - } -} diff --git a/library/Zend/Db/Sql/Platform/Oracle/SelectDecorator.php b/library/Zend/Db/Sql/Platform/Oracle/SelectDecorator.php deleted file mode 100755 index 457c696bb..000000000 --- a/library/Zend/Db/Sql/Platform/Oracle/SelectDecorator.php +++ /dev/null @@ -1,180 +0,0 @@ -select = $select; - } - - /** - * @see \Zend\Db\Sql\Select::renderTable - */ - protected function renderTable($table, $alias = null) - { - return $table . ' ' . $alias; - } - - /** - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - // set specifications - unset($this->specifications[self::LIMIT]); - unset($this->specifications[self::OFFSET]); - - $this->specifications['LIMITOFFSET'] = null; - parent::prepareStatement($adapter, $statementContainer); - } - - /** - * @param PlatformInterface $platform - * @return string - */ - public function getSqlString(PlatformInterface $platform = null) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - - // set specifications - unset($this->specifications[self::LIMIT]); - unset($this->specifications[self::OFFSET]); - - $this->specifications['LIMITOFFSET'] = null; - return parent::getSqlString($platform); - } - - /** - * @param PlatformInterface $platform - * @param DriverInterface $driver - * @param ParameterContainer $parameterContainer - * @param $sqls - * @param $parameters - * @return null - */ - protected function processLimitOffset(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null, &$sqls, &$parameters) - { - if ($this->limit === null && $this->offset === null) { - return null; - } - - $selectParameters = $parameters[self::SELECT]; - - $starSuffix = $platform->getIdentifierSeparator() . self::SQL_STAR; - foreach ($selectParameters[0] as $i => $columnParameters) { - if ($columnParameters[0] == self::SQL_STAR || (isset($columnParameters[1]) && $columnParameters[1] == self::SQL_STAR) || strpos($columnParameters[0], $starSuffix)) { - $selectParameters[0] = array(array(self::SQL_STAR)); - break; - } - if (isset($columnParameters[1])) { - array_shift($columnParameters); - $selectParameters[0][$i] = $columnParameters; - } - } - - if ($this->offset === null) { - $this->offset = 0; - } - - // first, produce column list without compound names (using the AS portion only) - array_unshift($sqls, $this->createSqlFromSpecificationAndParameters( - array('SELECT %1$s FROM (SELECT b.%1$s, rownum b_rownum FROM (' => current($this->specifications[self::SELECT])), $selectParameters - )); - - if ($parameterContainer) { - if ($this->limit === null) { - array_push($sqls, ') b ) WHERE b_rownum > (:offset)'); - $parameterContainer->offsetSet('offset', $this->offset, $parameterContainer::TYPE_INTEGER); - } else { - // create bottom part of query, with offset and limit using row_number - array_push($sqls, ') b WHERE rownum <= (:offset+:limit)) WHERE b_rownum >= (:offset + 1)'); - $parameterContainer->offsetSet('offset', $this->offset, $parameterContainer::TYPE_INTEGER); - $parameterContainer->offsetSet('limit', $this->limit, $parameterContainer::TYPE_INTEGER); - } - } else { - if ($this->limit === null) { - array_push($sqls, ') b ) WHERE b_rownum > ('. (int) $this->offset. ')' - ); - } else { - array_push($sqls, ') b WHERE rownum <= (' - . (int) $this->offset - . '+' - . (int) $this->limit - . ')) WHERE b_rownum >= (' - . (int) $this->offset - . ' + 1)' - ); - } - } - - $sqls[self::SELECT] = $this->createSqlFromSpecificationAndParameters( - $this->specifications[self::SELECT], $parameters[self::SELECT] - ); - } - - - protected function processJoins(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if (!$this->joins) { - return null; - } - - // process joins - $joinSpecArgArray = array(); - foreach ($this->joins as $j => $join) { - $joinSpecArgArray[$j] = array(); - // type - $joinSpecArgArray[$j][] = strtoupper($join['type']); - // table name - $joinSpecArgArray[$j][] = (is_array($join['name'])) - ? $platform->quoteIdentifier(current($join['name'])) . ' ' . $platform->quoteIdentifier(key($join['name'])) - : $platform->quoteIdentifier($join['name']); - // on expression - $joinSpecArgArray[$j][] = ($join['on'] instanceof ExpressionInterface) - ? $this->processExpression($join['on'], $platform, $driver, $this->processInfo['paramPrefix'] . 'join') - : $platform->quoteIdentifierInFragment($join['on'], array('=', 'AND', 'OR', '(', ')', 'BETWEEN')); // on - if ($joinSpecArgArray[$j][2] instanceof StatementContainerInterface) { - if ($parameterContainer) { - $parameterContainer->merge($joinSpecArgArray[$j][2]->getParameterContainer()); - } - $joinSpecArgArray[$j][2] = $joinSpecArgArray[$j][2]->getSql(); - } - } - - return array($joinSpecArgArray); - } -} diff --git a/library/Zend/Db/Sql/Platform/Platform.php b/library/Zend/Db/Sql/Platform/Platform.php deleted file mode 100755 index 4a6fc2e98..000000000 --- a/library/Zend/Db/Sql/Platform/Platform.php +++ /dev/null @@ -1,46 +0,0 @@ -adapter = $adapter; - $platform = $adapter->getPlatform(); - switch (strtolower($platform->getName())) { - case 'mysql': - $platform = new Mysql\Mysql(); - $this->decorators = $platform->decorators; - break; - case 'sqlserver': - $platform = new SqlServer\SqlServer(); - $this->decorators = $platform->decorators; - break; - case 'oracle': - $platform = new Oracle\Oracle(); - $this->decorators = $platform->decorators; - break; - case 'ibm db2': - case 'ibm_db2': - case 'ibmdb2': - $platform = new IbmDb2\IbmDb2(); - $this->decorators = $platform->decorators; - default: - } - } -} diff --git a/library/Zend/Db/Sql/Platform/PlatformDecoratorInterface.php b/library/Zend/Db/Sql/Platform/PlatformDecoratorInterface.php deleted file mode 100755 index 2ff7c97ce..000000000 --- a/library/Zend/Db/Sql/Platform/PlatformDecoratorInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -createTable = $subject; - return $this; - } - - /** - * @param null|PlatformInterface $platform - * @return string - */ - public function getSqlString(PlatformInterface $platform = null) - { - // localize variables - foreach (get_object_vars($this->createTable) as $name => $value) { - $this->{$name} = $value; - } - return parent::getSqlString($platform); - } - - /** - * @param PlatformInterface $adapterPlatform - * @return array - */ - protected function processTable(PlatformInterface $adapterPlatform = null) - { - $ret = array(''); - if ($this->isTemporary) { - $table = '#'; - } else { - $table = ''; - } - $ret[] = $adapterPlatform->quoteIdentifier($table . ltrim($this->table, '#')); - return $ret; - } -} diff --git a/library/Zend/Db/Sql/Platform/SqlServer/SelectDecorator.php b/library/Zend/Db/Sql/Platform/SqlServer/SelectDecorator.php deleted file mode 100755 index 7667ebcbd..000000000 --- a/library/Zend/Db/Sql/Platform/SqlServer/SelectDecorator.php +++ /dev/null @@ -1,145 +0,0 @@ -select = $select; - } - - /** - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - - // set specifications - unset($this->specifications[self::LIMIT]); - unset($this->specifications[self::OFFSET]); - - $this->specifications['LIMITOFFSET'] = null; - parent::prepareStatement($adapter, $statementContainer); - - //set statement cursor type - if ($statementContainer instanceof Statement) { - $statementContainer->setPrepareOptions(array('Scrollable'=>\SQLSRV_CURSOR_STATIC)); - } - } - - /** - * @param PlatformInterface $platform - * @return string - */ - public function getSqlString(PlatformInterface $platform = null) - { - // localize variables - foreach (get_object_vars($this->select) as $name => $value) { - $this->{$name} = $value; - } - - // set specifications - unset($this->specifications[self::LIMIT]); - unset($this->specifications[self::OFFSET]); - - $this->specifications['LIMITOFFSET'] = null; - return parent::getSqlString($platform); - } - - /** - * @param PlatformInterface $platform - * @param DriverInterface $driver - * @param ParameterContainer $parameterContainer - * @param $sqls - * @param $parameters - * @return null - */ - protected function processLimitOffset(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null, &$sqls, &$parameters) - { - if ($this->limit === null && $this->offset === null) { - return null; - } - - $selectParameters = $parameters[self::SELECT]; - - $starSuffix = $platform->getIdentifierSeparator() . self::SQL_STAR; - foreach ($selectParameters[0] as $i => $columnParameters) { - if ($columnParameters[0] == self::SQL_STAR || (isset($columnParameters[1]) && $columnParameters[1] == self::SQL_STAR) || strpos($columnParameters[0], $starSuffix)) { - $selectParameters[0] = array(array(self::SQL_STAR)); - break; - } - if (isset($columnParameters[1])) { - array_shift($columnParameters); - $selectParameters[0][$i] = $columnParameters; - } - } - - // first, produce column list without compound names (using the AS portion only) - array_unshift($sqls, $this->createSqlFromSpecificationAndParameters( - array('SELECT %1$s FROM (' => current($this->specifications[self::SELECT])), - $selectParameters - )); - - if ($parameterContainer) { - // create bottom part of query, with offset and limit using row_number - $limitParamName = $driver->formatParameterName('limit'); - $offsetParamName = $driver->formatParameterName('offset'); - $offsetForSumParamName = $driver->formatParameterName('offsetForSum'); - array_push($sqls, ') AS [ZEND_SQL_SERVER_LIMIT_OFFSET_EMULATION] WHERE [ZEND_SQL_SERVER_LIMIT_OFFSET_EMULATION].[__ZEND_ROW_NUMBER] BETWEEN ' - . $offsetParamName . '+1 AND ' . $limitParamName . '+' . $offsetForSumParamName); - $parameterContainer->offsetSet('offset', $this->offset); - $parameterContainer->offsetSet('limit', $this->limit); - $parameterContainer->offsetSetReference('offsetForSum', 'offset'); - } else { - array_push($sqls, ') AS [ZEND_SQL_SERVER_LIMIT_OFFSET_EMULATION] WHERE [ZEND_SQL_SERVER_LIMIT_OFFSET_EMULATION].[__ZEND_ROW_NUMBER] BETWEEN ' - . (int) $this->offset . '+1 AND ' - . (int) $this->limit . '+' . (int) $this->offset - ); - } - - if (isset($sqls[self::ORDER])) { - $orderBy = $sqls[self::ORDER]; - unset($sqls[self::ORDER]); - } else { - $orderBy = 'ORDER BY (SELECT 1)'; - } - - // add a column for row_number() using the order specification - $parameters[self::SELECT][0][] = array('ROW_NUMBER() OVER (' . $orderBy . ')', '[__ZEND_ROW_NUMBER]'); - - $sqls[self::SELECT] = $this->createSqlFromSpecificationAndParameters( - $this->specifications[self::SELECT], - $parameters[self::SELECT] - ); - } -} diff --git a/library/Zend/Db/Sql/Platform/SqlServer/SqlServer.php b/library/Zend/Db/Sql/Platform/SqlServer/SqlServer.php deleted file mode 100755 index ed72b77aa..000000000 --- a/library/Zend/Db/Sql/Platform/SqlServer/SqlServer.php +++ /dev/null @@ -1,21 +0,0 @@ -setTypeDecorator('Zend\Db\Sql\Select', ($selectDecorator) ?: new SelectDecorator()); - $this->setTypeDecorator('Zend\Db\Sql\Ddl\CreateTable', new Ddl\CreateTableDecorator()); - } -} diff --git a/library/Zend/Db/Sql/Predicate/Between.php b/library/Zend/Db/Sql/Predicate/Between.php deleted file mode 100755 index 686b65db5..000000000 --- a/library/Zend/Db/Sql/Predicate/Between.php +++ /dev/null @@ -1,142 +0,0 @@ -setIdentifier($identifier); - } - if ($minValue !== null) { - $this->setMinValue($minValue); - } - if ($maxValue !== null) { - $this->setMaxValue($maxValue); - } - } - - /** - * Set identifier for comparison - * - * @param string $identifier - * @return Between - */ - public function setIdentifier($identifier) - { - $this->identifier = $identifier; - return $this; - } - - /** - * Get identifier of comparison - * - * @return null|string - */ - public function getIdentifier() - { - return $this->identifier; - } - - /** - * Set minimum boundary for comparison - * - * @param int|float|string $minValue - * @return Between - */ - public function setMinValue($minValue) - { - $this->minValue = $minValue; - return $this; - } - - /** - * Get minimum boundary for comparison - * - * @return null|int|float|string - */ - public function getMinValue() - { - return $this->minValue; - } - - /** - * Set maximum boundary for comparison - * - * @param int|float|string $maxValue - * @return Between - */ - public function setMaxValue($maxValue) - { - $this->maxValue = $maxValue; - return $this; - } - - /** - * Get maximum boundary for comparison - * - * @return null|int|float|string - */ - public function getMaxValue() - { - return $this->maxValue; - } - - /** - * Set specification string to use in forming SQL predicate - * - * @param string $specification - * @return Between - */ - public function setSpecification($specification) - { - $this->specification = $specification; - return $this; - } - - /** - * Get specification string to use in forming SQL predicate - * - * @return string - */ - public function getSpecification() - { - return $this->specification; - } - - /** - * Return "where" parts - * - * @return array - */ - public function getExpressionData() - { - return array( - array( - $this->getSpecification(), - array($this->identifier, $this->minValue, $this->maxValue), - array(self::TYPE_IDENTIFIER, self::TYPE_VALUE, self::TYPE_VALUE), - ), - ); - } -} diff --git a/library/Zend/Db/Sql/Predicate/Expression.php b/library/Zend/Db/Sql/Predicate/Expression.php deleted file mode 100755 index 4822dd081..000000000 --- a/library/Zend/Db/Sql/Predicate/Expression.php +++ /dev/null @@ -1,41 +0,0 @@ -setExpression($expression); - } - - if (is_array($valueParameter)) { - $this->setParameters($valueParameter); - } else { - $argNum = func_num_args(); - if ($argNum > 2 || is_scalar($valueParameter)) { - $parameters = array(); - for ($i = 1; $i < $argNum; $i++) { - $parameters[] = func_get_arg($i); - } - $this->setParameters($parameters); - } - } - } -} diff --git a/library/Zend/Db/Sql/Predicate/In.php b/library/Zend/Db/Sql/Predicate/In.php deleted file mode 100755 index eb7ccc36c..000000000 --- a/library/Zend/Db/Sql/Predicate/In.php +++ /dev/null @@ -1,133 +0,0 @@ -setIdentifier($identifier); - } - if ($valueSet) { - $this->setValueSet($valueSet); - } - } - - /** - * Set identifier for comparison - * - * @param string|array $identifier - * @return In - */ - public function setIdentifier($identifier) - { - $this->identifier = $identifier; - - return $this; - } - - /** - * Get identifier of comparison - * - * @return null|string|array - */ - public function getIdentifier() - { - return $this->identifier; - } - - /** - * Set set of values for IN comparison - * - * @param array|Select $valueSet - * @throws Exception\InvalidArgumentException - * @return In - */ - public function setValueSet($valueSet) - { - if (!is_array($valueSet) && !$valueSet instanceof Select) { - throw new Exception\InvalidArgumentException( - '$valueSet must be either an array or a Zend\Db\Sql\Select object, ' . gettype($valueSet) . ' given' - ); - } - $this->valueSet = $valueSet; - - return $this; - } - - /** - * Gets set of values in IN comparision - * - * @return array|Select - */ - public function getValueSet() - { - return $this->valueSet; - } - - /** - * Return array of parts for where statement - * - * @return array - */ - public function getExpressionData() - { - $identifier = $this->getIdentifier(); - $values = $this->getValueSet(); - $replacements = array(); - - if (is_array($identifier)) { - $identifierSpecFragment = '(' . implode(', ', array_fill(0, count($identifier), '%s')) . ')'; - $types = array_fill(0, count($identifier), self::TYPE_IDENTIFIER); - $replacements = $identifier; - } else { - $identifierSpecFragment = '%s'; - $replacements[] = $identifier; - $types = array(self::TYPE_IDENTIFIER); - } - - if ($values instanceof Select) { - $specification = vsprintf( - $this->specification, - array($identifierSpecFragment, '%s') - ); - $replacements[] = $values; - $types[] = self::TYPE_VALUE; - } else { - $specification = vsprintf( - $this->specification, - array($identifierSpecFragment, '(' . implode(', ', array_fill(0, count($values), '%s')) . ')') - ); - $replacements = array_merge($replacements, $values); - $types = array_merge($types, array_fill(0, count($values), self::TYPE_VALUE)); - } - - return array(array( - $specification, - $replacements, - $types, - )); - } -} diff --git a/library/Zend/Db/Sql/Predicate/IsNotNull.php b/library/Zend/Db/Sql/Predicate/IsNotNull.php deleted file mode 100755 index e09f34912..000000000 --- a/library/Zend/Db/Sql/Predicate/IsNotNull.php +++ /dev/null @@ -1,15 +0,0 @@ -setIdentifier($identifier); - } - } - - /** - * Set identifier for comparison - * - * @param string $identifier - * @return IsNull - */ - public function setIdentifier($identifier) - { - $this->identifier = $identifier; - return $this; - } - - /** - * Get identifier of comparison - * - * @return null|string - */ - public function getIdentifier() - { - return $this->identifier; - } - - /** - * Set specification string to use in forming SQL predicate - * - * @param string $specification - * @return IsNull - */ - public function setSpecification($specification) - { - $this->specification = $specification; - return $this; - } - - /** - * Get specification string to use in forming SQL predicate - * - * @return string - */ - public function getSpecification() - { - return $this->specification; - } - - /** - * Get parts for where statement - * - * @return array - */ - public function getExpressionData() - { - return array(array( - $this->getSpecification(), - array($this->identifier), - array(self::TYPE_IDENTIFIER), - )); - } -} diff --git a/library/Zend/Db/Sql/Predicate/Like.php b/library/Zend/Db/Sql/Predicate/Like.php deleted file mode 100755 index b5d6676fe..000000000 --- a/library/Zend/Db/Sql/Predicate/Like.php +++ /dev/null @@ -1,106 +0,0 @@ -setIdentifier($identifier); - } - if ($like) { - $this->setLike($like); - } - } - - /** - * @param string $identifier - * @return self - */ - public function setIdentifier($identifier) - { - $this->identifier = $identifier; - return $this; - } - - /** - * @return string - */ - public function getIdentifier() - { - return $this->identifier; - } - - /** - * @param string $like - * @return self - */ - public function setLike($like) - { - $this->like = $like; - return $this; - } - - /** - * @return string - */ - public function getLike() - { - return $this->like; - } - - /** - * @param string $specification - * @return self - */ - public function setSpecification($specification) - { - $this->specification = $specification; - return $this; - } - - /** - * @return string - */ - public function getSpecification() - { - return $this->specification; - } - - /** - * @return array - */ - public function getExpressionData() - { - return array( - array($this->specification, array($this->identifier, $this->like), array(self::TYPE_IDENTIFIER, self::TYPE_VALUE)) - ); - } -} diff --git a/library/Zend/Db/Sql/Predicate/Literal.php b/library/Zend/Db/Sql/Predicate/Literal.php deleted file mode 100755 index 5ee68c998..000000000 --- a/library/Zend/Db/Sql/Predicate/Literal.php +++ /dev/null @@ -1,16 +0,0 @@ -'; - const OP_GT = '>'; - - const OPERATOR_GREATER_THAN_OR_EQUAL_TO = '>='; - const OP_GTE = '>='; - - protected $allowedTypes = array( - self::TYPE_IDENTIFIER, - self::TYPE_VALUE, - ); - - protected $left = null; - protected $leftType = self::TYPE_IDENTIFIER; - protected $operator = self::OPERATOR_EQUAL_TO; - protected $right = null; - protected $rightType = self::TYPE_VALUE; - - /** - * Constructor - * - * @param int|float|bool|string $left - * @param string $operator - * @param int|float|bool|string $right - * @param string $leftType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_IDENTIFIER {@see allowedTypes} - * @param string $rightType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_VALUE {@see allowedTypes} - */ - public function __construct($left = null, $operator = self::OPERATOR_EQUAL_TO, $right = null, $leftType = self::TYPE_IDENTIFIER, $rightType = self::TYPE_VALUE) - { - if ($left !== null) { - $this->setLeft($left); - } - - if ($operator !== self::OPERATOR_EQUAL_TO) { - $this->setOperator($operator); - } - - if ($right !== null) { - $this->setRight($right); - } - - if ($leftType !== self::TYPE_IDENTIFIER) { - $this->setLeftType($leftType); - } - - if ($rightType !== self::TYPE_VALUE) { - $this->setRightType($rightType); - } - } - - /** - * Set left side of operator - * - * @param int|float|bool|string $left - * @return Operator - */ - public function setLeft($left) - { - $this->left = $left; - return $this; - } - - /** - * Get left side of operator - * - * @return int|float|bool|string - */ - public function getLeft() - { - return $this->left; - } - - /** - * Set parameter type for left side of operator - * - * @param string $type TYPE_IDENTIFIER or TYPE_VALUE {@see allowedTypes} - * @throws Exception\InvalidArgumentException - * @return Operator - */ - public function setLeftType($type) - { - if (!in_array($type, $this->allowedTypes)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid type "%s" provided; must be of type "%s" or "%s"', - $type, - __CLASS__ . '::TYPE_IDENTIFIER', - __CLASS__ . '::TYPE_VALUE' - )); - } - $this->leftType = $type; - return $this; - } - - /** - * Get parameter type on left side of operator - * - * @return string - */ - public function getLeftType() - { - return $this->leftType; - } - - /** - * Set operator string - * - * @param string $operator - * @return Operator - */ - public function setOperator($operator) - { - $this->operator = $operator; - return $this; - } - - /** - * Get operator string - * - * @return string - */ - public function getOperator() - { - return $this->operator; - } - - /** - * Set right side of operator - * - * @param int|float|bool|string $value - * @return Operator - */ - public function setRight($value) - { - $this->right = $value; - return $this; - } - - /** - * Get right side of operator - * - * @return int|float|bool|string - */ - public function getRight() - { - return $this->right; - } - - /** - * Set parameter type for right side of operator - * - * @param string $type TYPE_IDENTIFIER or TYPE_VALUE {@see allowedTypes} - * @throws Exception\InvalidArgumentException - * @return Operator - */ - public function setRightType($type) - { - if (!in_array($type, $this->allowedTypes)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid type "%s" provided; must be of type "%s" or "%s"', - $type, - __CLASS__ . '::TYPE_IDENTIFIER', - __CLASS__ . '::TYPE_VALUE' - )); - } - $this->rightType = $type; - return $this; - } - - /** - * Get parameter type on right side of operator - * - * @return string - */ - public function getRightType() - { - return $this->rightType; - } - - /** - * Get predicate parts for where statement - * - * @return array - */ - public function getExpressionData() - { - return array(array( - '%s ' . $this->operator . ' %s', - array($this->left, $this->right), - array($this->leftType, $this->rightType) - )); - } -} diff --git a/library/Zend/Db/Sql/Predicate/Predicate.php b/library/Zend/Db/Sql/Predicate/Predicate.php deleted file mode 100755 index e9ef5757d..000000000 --- a/library/Zend/Db/Sql/Predicate/Predicate.php +++ /dev/null @@ -1,409 +0,0 @@ -setUnnest($this); - $this->addPredicate($predicateSet, ($this->nextPredicateCombineOperator) ?: $this->defaultCombination); - $this->nextPredicateCombineOperator = null; - return $predicateSet; - } - - /** - * Indicate what predicate will be unnested - * - * @param Predicate $predicate - * @return void - */ - public function setUnnest(Predicate $predicate) - { - $this->unnest = $predicate; - } - - /** - * Indicate end of nested predicate - * - * @return Predicate - * @throws RuntimeException - */ - public function unnest() - { - if ($this->unnest == null) { - throw new RuntimeException('Not nested'); - } - $unnset = $this->unnest; - $this->unnest = null; - return $unnset; - } - - /** - * Create "Equal To" predicate - * - * Utilizes Operator predicate - * - * @param int|float|bool|string $left - * @param int|float|bool|string $right - * @param string $leftType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_IDENTIFIER {@see allowedTypes} - * @param string $rightType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_VALUE {@see allowedTypes} - * @return Predicate - */ - public function equalTo($left, $right, $leftType = self::TYPE_IDENTIFIER, $rightType = self::TYPE_VALUE) - { - $this->addPredicate( - new Operator($left, Operator::OPERATOR_EQUAL_TO, $right, $leftType, $rightType), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "Not Equal To" predicate - * - * Utilizes Operator predicate - * - * @param int|float|bool|string $left - * @param int|float|bool|string $right - * @param string $leftType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_IDENTIFIER {@see allowedTypes} - * @param string $rightType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_VALUE {@see allowedTypes} - * @return Predicate - */ - public function notEqualTo($left, $right, $leftType = self::TYPE_IDENTIFIER, $rightType = self::TYPE_VALUE) - { - $this->addPredicate( - new Operator($left, Operator::OPERATOR_NOT_EQUAL_TO, $right, $leftType, $rightType), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "Less Than" predicate - * - * Utilizes Operator predicate - * - * @param int|float|bool|string $left - * @param int|float|bool|string $right - * @param string $leftType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_IDENTIFIER {@see allowedTypes} - * @param string $rightType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_VALUE {@see allowedTypes} - * @return Predicate - */ - public function lessThan($left, $right, $leftType = self::TYPE_IDENTIFIER, $rightType = self::TYPE_VALUE) - { - $this->addPredicate( - new Operator($left, Operator::OPERATOR_LESS_THAN, $right, $leftType, $rightType), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "Greater Than" predicate - * - * Utilizes Operator predicate - * - * @param int|float|bool|string $left - * @param int|float|bool|string $right - * @param string $leftType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_IDENTIFIER {@see allowedTypes} - * @param string $rightType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_VALUE {@see allowedTypes} - * @return Predicate - */ - public function greaterThan($left, $right, $leftType = self::TYPE_IDENTIFIER, $rightType = self::TYPE_VALUE) - { - $this->addPredicate( - new Operator($left, Operator::OPERATOR_GREATER_THAN, $right, $leftType, $rightType), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "Less Than Or Equal To" predicate - * - * Utilizes Operator predicate - * - * @param int|float|bool|string $left - * @param int|float|bool|string $right - * @param string $leftType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_IDENTIFIER {@see allowedTypes} - * @param string $rightType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_VALUE {@see allowedTypes} - * @return Predicate - */ - public function lessThanOrEqualTo($left, $right, $leftType = self::TYPE_IDENTIFIER, $rightType = self::TYPE_VALUE) - { - $this->addPredicate( - new Operator($left, Operator::OPERATOR_LESS_THAN_OR_EQUAL_TO, $right, $leftType, $rightType), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "Greater Than Or Equal To" predicate - * - * Utilizes Operator predicate - * - * @param int|float|bool|string $left - * @param int|float|bool|string $right - * @param string $leftType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_IDENTIFIER {@see allowedTypes} - * @param string $rightType TYPE_IDENTIFIER or TYPE_VALUE by default TYPE_VALUE {@see allowedTypes} - * @return Predicate - */ - public function greaterThanOrEqualTo($left, $right, $leftType = self::TYPE_IDENTIFIER, $rightType = self::TYPE_VALUE) - { - $this->addPredicate( - new Operator($left, Operator::OPERATOR_GREATER_THAN_OR_EQUAL_TO, $right, $leftType, $rightType), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "Like" predicate - * - * Utilizes Like predicate - * - * @param string $identifier - * @param string $like - * @return Predicate - */ - public function like($identifier, $like) - { - $this->addPredicate( - new Like($identifier, $like), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - /** - * Create "notLike" predicate - * - * Utilizes In predicate - * - * @param string $identifier - * @param string $notLike - * @return Predicate - */ - public function notLike($identifier, $notLike) - { - $this->addPredicate( - new NotLike($identifier, $notLike), - ($this->nextPredicateCombineOperator) ? : $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - return $this; - } - - /** - * Create an expression, with parameter placeholders - * - * @param $expression - * @param $parameters - * @return $this - */ - public function expression($expression, $parameters) - { - $this->addPredicate( - new Expression($expression, $parameters), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "Literal" predicate - * - * Literal predicate, for parameters, use expression() - * - * @param string $literal - * @return Predicate - */ - public function literal($literal) - { - // process deprecated parameters from previous literal($literal, $parameters = null) signature - if (func_num_args() >= 2) { - $parameters = func_get_arg(1); - $predicate = new Expression($literal, $parameters); - } - - // normal workflow for "Literals" here - if (!isset($predicate)) { - $predicate = new Literal($literal); - } - - $this->addPredicate( - $predicate, - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "IS NULL" predicate - * - * Utilizes IsNull predicate - * - * @param string $identifier - * @return Predicate - */ - public function isNull($identifier) - { - $this->addPredicate( - new IsNull($identifier), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "IS NOT NULL" predicate - * - * Utilizes IsNotNull predicate - * - * @param string $identifier - * @return Predicate - */ - public function isNotNull($identifier) - { - $this->addPredicate( - new IsNotNull($identifier), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "IN" predicate - * - * Utilizes In predicate - * - * @param string $identifier - * @param array|\Zend\Db\Sql\Select $valueSet - * @return Predicate - */ - public function in($identifier, $valueSet = null) - { - $this->addPredicate( - new In($identifier, $valueSet), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "NOT IN" predicate - * - * Utilizes NotIn predicate - * - * @param string $identifier - * @param array|\Zend\Db\Sql\Select $valueSet - * @return Predicate - */ - public function notIn($identifier, $valueSet = null) - { - $this->addPredicate( - new NotIn($identifier, $valueSet), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Create "between" predicate - * - * Utilizes Between predicate - * - * @param string $identifier - * @param int|float|string $minValue - * @param int|float|string $maxValue - * @return Predicate - */ - public function between($identifier, $minValue, $maxValue) - { - $this->addPredicate( - new Between($identifier, $minValue, $maxValue), - ($this->nextPredicateCombineOperator) ?: $this->defaultCombination - ); - $this->nextPredicateCombineOperator = null; - - return $this; - } - - /** - * Overloading - * - * Overloads "or", "and", "nest", and "unnest" - * - * @param string $name - * @return Predicate - */ - public function __get($name) - { - switch (strtolower($name)) { - case 'or': - $this->nextPredicateCombineOperator = self::OP_OR; - break; - case 'and': - $this->nextPredicateCombineOperator = self::OP_AND; - break; - case 'nest': - return $this->nest(); - case 'unnest': - return $this->unnest(); - } - return $this; - } -} diff --git a/library/Zend/Db/Sql/Predicate/PredicateInterface.php b/library/Zend/Db/Sql/Predicate/PredicateInterface.php deleted file mode 100755 index 68b197f84..000000000 --- a/library/Zend/Db/Sql/Predicate/PredicateInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -defaultCombination = $defaultCombination; - if ($predicates) { - foreach ($predicates as $predicate) { - $this->addPredicate($predicate); - } - } - } - - /** - * Add predicate to set - * - * @param PredicateInterface $predicate - * @param string $combination - * @return PredicateSet - */ - public function addPredicate(PredicateInterface $predicate, $combination = null) - { - if ($combination === null || !in_array($combination, array(self::OP_AND, self::OP_OR))) { - $combination = $this->defaultCombination; - } - - if ($combination == self::OP_OR) { - $this->orPredicate($predicate); - return $this; - } - - $this->andPredicate($predicate); - return $this; - } - - public function addPredicates($predicates, $combination = self::OP_AND) - { - if ($predicates === null) { - throw new Exception\InvalidArgumentException('Predicate cannot be null'); - } - if ($predicates instanceof PredicateInterface) { - $this->addPredicate($predicates, $combination); - return $this; - } - if ($predicates instanceof \Closure) { - $predicates($this); - return $this; - } - if (is_string($predicates)) { - // String $predicate should be passed as an expression - $predicates = (strpos($predicates, Expression::PLACEHOLDER) !== false) - ? new Expression($predicates) : new Literal($predicates); - $this->addPredicate($predicates, $combination); - return $this; - } - if (is_array($predicates)) { - foreach ($predicates as $pkey => $pvalue) { - // loop through predicates - if (is_string($pkey)) { - if (strpos($pkey, '?') !== false) { - // First, process strings that the abstraction replacement character ? - // as an Expression predicate - $predicates = new Expression($pkey, $pvalue); - } elseif ($pvalue === null) { // Otherwise, if still a string, do something intelligent with the PHP type provided - // map PHP null to SQL IS NULL expression - $predicates = new IsNull($pkey, $pvalue); - } elseif (is_array($pvalue)) { - // if the value is an array, assume IN() is desired - $predicates = new In($pkey, $pvalue); - } elseif ($pvalue instanceof PredicateInterface) { - throw new Exception\InvalidArgumentException( - 'Using Predicate must not use string keys' - ); - } else { - // otherwise assume that array('foo' => 'bar') means "foo" = 'bar' - $predicates = new Operator($pkey, Operator::OP_EQ, $pvalue); - } - } elseif ($pvalue instanceof PredicateInterface) { - // Predicate type is ok - $predicates = $pvalue; - } else { - // must be an array of expressions (with int-indexed array) - $predicates = (strpos($pvalue, Expression::PLACEHOLDER) !== false) - ? new Expression($pvalue) : new Literal($pvalue); - } - $this->addPredicate($predicates, $combination); - } - } - return $this; - } - - /** - * Return the predicates - * - * @return PredicateInterface[] - */ - public function getPredicates() - { - return $this->predicates; - } - - /** - * Add predicate using OR operator - * - * @param PredicateInterface $predicate - * @return PredicateSet - */ - public function orPredicate(PredicateInterface $predicate) - { - $this->predicates[] = array(self::OP_OR, $predicate); - return $this; - } - - /** - * Add predicate using AND operator - * - * @param PredicateInterface $predicate - * @return PredicateSet - */ - public function andPredicate(PredicateInterface $predicate) - { - $this->predicates[] = array(self::OP_AND, $predicate); - return $this; - } - - /** - * Get predicate parts for where statement - * - * @return array - */ - public function getExpressionData() - { - $parts = array(); - for ($i = 0, $count = count($this->predicates); $i < $count; $i++) { - /** @var $predicate PredicateInterface */ - $predicate = $this->predicates[$i][1]; - - if ($predicate instanceof PredicateSet) { - $parts[] = '('; - } - - $parts = array_merge($parts, $predicate->getExpressionData()); - - if ($predicate instanceof PredicateSet) { - $parts[] = ')'; - } - - if (isset($this->predicates[$i+1])) { - $parts[] = sprintf(' %s ', $this->predicates[$i+1][0]); - } - } - return $parts; - } - - /** - * Get count of attached predicates - * - * @return int - */ - public function count() - { - return count($this->predicates); - } -} diff --git a/library/Zend/Db/Sql/PreparableSqlInterface.php b/library/Zend/Db/Sql/PreparableSqlInterface.php deleted file mode 100755 index ea32cd65b..000000000 --- a/library/Zend/Db/Sql/PreparableSqlInterface.php +++ /dev/null @@ -1,23 +0,0 @@ - '%1$s', - self::SELECT => array( - 'SELECT %1$s FROM %2$s' => array( - array(1 => '%1$s', 2 => '%1$s AS %2$s', 'combinedby' => ', '), - null - ), - 'SELECT %1$s %2$s FROM %3$s' => array( - null, - array(1 => '%1$s', 2 => '%1$s AS %2$s', 'combinedby' => ', '), - null - ), - 'SELECT %1$s' => array( - array(1 => '%1$s', 2 => '%1$s AS %2$s', 'combinedby' => ', '), - ), - ), - self::JOINS => array( - '%1$s' => array( - array(3 => '%1$s JOIN %2$s ON %3$s', 'combinedby' => ' ') - ) - ), - self::WHERE => 'WHERE %1$s', - self::GROUP => array( - 'GROUP BY %1$s' => array( - array(1 => '%1$s', 'combinedby' => ', ') - ) - ), - self::HAVING => 'HAVING %1$s', - self::ORDER => array( - 'ORDER BY %1$s' => array( - array(1 => '%1$s', 2 => '%1$s %2$s', 'combinedby' => ', ') - ) - ), - self::LIMIT => 'LIMIT %1$s', - self::OFFSET => 'OFFSET %1$s', - 'statementEnd' => '%1$s', - self::COMBINE => '%1$s ( %2$s )', - ); - - /** - * @var bool - */ - protected $tableReadOnly = false; - - /** - * @var bool - */ - protected $prefixColumnsWithTable = true; - - /** - * @var string|array|TableIdentifier - */ - protected $table = null; - - /** - * @var null|string|Expression - */ - protected $quantifier = null; - - /** - * @var array - */ - protected $columns = array(self::SQL_STAR); - - /** - * @var array - */ - protected $joins = array(); - - /** - * @var Where - */ - protected $where = null; - - /** - * @var array - */ - protected $order = array(); - - /** - * @var null|array - */ - protected $group = null; - - /** - * @var null|string|array - */ - protected $having = null; - - /** - * @var int|null - */ - protected $limit = null; - - /** - * @var int|null - */ - protected $offset = null; - - /** - * @var array - */ - protected $combine = array(); - - /** - * Constructor - * - * @param null|string|array|TableIdentifier $table - */ - public function __construct($table = null) - { - if ($table) { - $this->from($table); - $this->tableReadOnly = true; - } - - $this->where = new Where; - $this->having = new Having; - } - - /** - * Create from clause - * - * @param string|array|TableIdentifier $table - * @throws Exception\InvalidArgumentException - * @return Select - */ - public function from($table) - { - if ($this->tableReadOnly) { - throw new Exception\InvalidArgumentException('Since this object was created with a table and/or schema in the constructor, it is read only.'); - } - - if (!is_string($table) && !is_array($table) && !$table instanceof TableIdentifier) { - throw new Exception\InvalidArgumentException('$table must be a string, array, or an instance of TableIdentifier'); - } - - if (is_array($table) && (!is_string(key($table)) || count($table) !== 1)) { - throw new Exception\InvalidArgumentException('from() expects $table as an array is a single element associative array'); - } - - $this->table = $table; - return $this; - } - - /** - * @param string|Expression $quantifier DISTINCT|ALL - * @return Select - */ - public function quantifier($quantifier) - { - if (!is_string($quantifier) && !$quantifier instanceof Expression) { - throw new Exception\InvalidArgumentException( - 'Quantifier must be one of DISTINCT, ALL, or some platform specific Expression object' - ); - } - $this->quantifier = $quantifier; - return $this; - } - - /** - * Specify columns from which to select - * - * Possible valid states: - * - * array(*) - * - * array(value, ...) - * value can be strings or Expression objects - * - * array(string => value, ...) - * key string will be use as alias, - * value can be string or Expression objects - * - * @param array $columns - * @param bool $prefixColumnsWithTable - * @return Select - */ - public function columns(array $columns, $prefixColumnsWithTable = true) - { - $this->columns = $columns; - $this->prefixColumnsWithTable = (bool) $prefixColumnsWithTable; - return $this; - } - - /** - * Create join clause - * - * @param string|array $name - * @param string $on - * @param string|array $columns - * @param string $type one of the JOIN_* constants - * @throws Exception\InvalidArgumentException - * @return Select - */ - public function join($name, $on, $columns = self::SQL_STAR, $type = self::JOIN_INNER) - { - if (is_array($name) && (!is_string(key($name)) || count($name) !== 1)) { - throw new Exception\InvalidArgumentException( - sprintf("join() expects '%s' as an array is a single element associative array", array_shift($name)) - ); - } - if (!is_array($columns)) { - $columns = array($columns); - } - $this->joins[] = array( - 'name' => $name, - 'on' => $on, - 'columns' => $columns, - 'type' => $type - ); - return $this; - } - - /** - * Create where clause - * - * @param Where|\Closure|string|array|Predicate\PredicateInterface $predicate - * @param string $combination One of the OP_* constants from Predicate\PredicateSet - * @throws Exception\InvalidArgumentException - * @return Select - */ - public function where($predicate, $combination = Predicate\PredicateSet::OP_AND) - { - if ($predicate instanceof Where) { - $this->where = $predicate; - } else { - $this->where->addPredicates($predicate, $combination); - } - return $this; - } - - public function group($group) - { - if (is_array($group)) { - foreach ($group as $o) { - $this->group[] = $o; - } - } else { - $this->group[] = $group; - } - return $this; - } - - /** - * Create where clause - * - * @param Where|\Closure|string|array $predicate - * @param string $combination One of the OP_* constants from Predicate\PredicateSet - * @return Select - */ - public function having($predicate, $combination = Predicate\PredicateSet::OP_AND) - { - if ($predicate instanceof Having) { - $this->having = $predicate; - } else { - $this->having->addPredicates($predicate, $combination); - } - return $this; - } - - /** - * @param string|array $order - * @return Select - */ - public function order($order) - { - if (is_string($order)) { - if (strpos($order, ',') !== false) { - $order = preg_split('#,\s+#', $order); - } else { - $order = (array) $order; - } - } elseif (!is_array($order)) { - $order = array($order); - } - foreach ($order as $k => $v) { - if (is_string($k)) { - $this->order[$k] = $v; - } else { - $this->order[] = $v; - } - } - return $this; - } - - /** - * @param int $limit - * @return Select - */ - public function limit($limit) - { - if (!is_numeric($limit)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects parameter to be numeric, "%s" given', - __METHOD__, - (is_object($limit) ? get_class($limit) : gettype($limit)) - )); - } - - $this->limit = $limit; - return $this; - } - - /** - * @param int $offset - * @return Select - */ - public function offset($offset) - { - if (!is_numeric($offset)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects parameter to be numeric, "%s" given', - __METHOD__, - (is_object($offset) ? get_class($offset) : gettype($offset)) - )); - } - - $this->offset = $offset; - return $this; - } - - /** - * @param Select $select - * @param string $type - * @param string $modifier - * @return Select - * @throws Exception\InvalidArgumentException - */ - public function combine(Select $select, $type = self::COMBINE_UNION, $modifier = '') - { - if ($this->combine !== array()) { - throw new Exception\InvalidArgumentException('This Select object is already combined and cannot be combined with multiple Selects objects'); - } - $this->combine = array( - 'select' => $select, - 'type' => $type, - 'modifier' => $modifier - ); - return $this; - } - - /** - * @param string $part - * @return Select - * @throws Exception\InvalidArgumentException - */ - public function reset($part) - { - switch ($part) { - case self::TABLE: - if ($this->tableReadOnly) { - throw new Exception\InvalidArgumentException( - 'Since this object was created with a table and/or schema in the constructor, it is read only.' - ); - } - $this->table = null; - break; - case self::QUANTIFIER: - $this->quantifier = null; - break; - case self::COLUMNS: - $this->columns = array(); - break; - case self::JOINS: - $this->joins = array(); - break; - case self::WHERE: - $this->where = new Where; - break; - case self::GROUP: - $this->group = null; - break; - case self::HAVING: - $this->having = new Having; - break; - case self::LIMIT: - $this->limit = null; - break; - case self::OFFSET: - $this->offset = null; - break; - case self::ORDER: - $this->order = array(); - break; - case self::COMBINE: - $this->combine = array(); - break; - } - return $this; - } - - public function setSpecification($index, $specification) - { - if (!method_exists($this, 'process' . $index)) { - throw new Exception\InvalidArgumentException('Not a valid specification name.'); - } - $this->specifications[$index] = $specification; - return $this; - } - - public function getRawState($key = null) - { - $rawState = array( - self::TABLE => $this->table, - self::QUANTIFIER => $this->quantifier, - self::COLUMNS => $this->columns, - self::JOINS => $this->joins, - self::WHERE => $this->where, - self::ORDER => $this->order, - self::GROUP => $this->group, - self::HAVING => $this->having, - self::LIMIT => $this->limit, - self::OFFSET => $this->offset, - self::COMBINE => $this->combine - ); - return (isset($key) && array_key_exists($key, $rawState)) ? $rawState[$key] : $rawState; - } - - /** - * Prepare statement - * - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - * @return void - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - // ensure statement has a ParameterContainer - $parameterContainer = $statementContainer->getParameterContainer(); - if (!$parameterContainer instanceof ParameterContainer) { - $parameterContainer = new ParameterContainer(); - $statementContainer->setParameterContainer($parameterContainer); - } - - $sqls = array(); - $parameters = array(); - $platform = $adapter->getPlatform(); - $driver = $adapter->getDriver(); - - foreach ($this->specifications as $name => $specification) { - $parameters[$name] = $this->{'process' . $name}($platform, $driver, $parameterContainer, $sqls, $parameters); - if ($specification && is_array($parameters[$name])) { - $sqls[$name] = $this->createSqlFromSpecificationAndParameters($specification, $parameters[$name]); - } - } - - $sql = implode(' ', $sqls); - - $statementContainer->setSql($sql); - return; - } - - /** - * Get SQL string for statement - * - * @param null|PlatformInterface $adapterPlatform If null, defaults to Sql92 - * @return string - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - // get platform, or create default - $adapterPlatform = ($adapterPlatform) ?: new AdapterSql92Platform; - - $sqls = array(); - $parameters = array(); - - foreach ($this->specifications as $name => $specification) { - $parameters[$name] = $this->{'process' . $name}($adapterPlatform, null, null, $sqls, $parameters); - if ($specification && is_array($parameters[$name])) { - $sqls[$name] = $this->createSqlFromSpecificationAndParameters($specification, $parameters[$name]); - } - } - - $sql = implode(' ', $sqls); - return $sql; - } - - /** - * Returns whether the table is read only or not. - * - * @return bool - */ - public function isTableReadOnly() - { - return $this->tableReadOnly; - } - - /** - * Render table with alias in from/join parts - * - * @todo move TableIdentifier concatination here - * @param string $table - * @param string $alias - * @return string - */ - protected function renderTable($table, $alias = null) - { - $sql = $table; - if ($alias) { - $sql .= ' AS ' . $alias; - } - return $sql; - } - - protected function processStatementStart(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->combine !== array()) { - return array('('); - } - } - - protected function processStatementEnd(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->combine !== array()) { - return array(')'); - } - } - - /** - * Process the select part - * - * @param PlatformInterface $platform - * @param DriverInterface $driver - * @param ParameterContainer $parameterContainer - * @return null|array - */ - protected function processSelect(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - $expr = 1; - - if ($this->table) { - $table = $this->table; - $schema = $alias = null; - - if (is_array($table)) { - $alias = key($this->table); - $table = current($this->table); - } - - // create quoted table name to use in columns processing - if ($table instanceof TableIdentifier) { - list($table, $schema) = $table->getTableAndSchema(); - } - - if ($table instanceof Select) { - $table = '(' . $this->processSubselect($table, $platform, $driver, $parameterContainer) . ')'; - } else { - $table = $platform->quoteIdentifier($table); - } - - if ($schema) { - $table = $platform->quoteIdentifier($schema) . $platform->getIdentifierSeparator() . $table; - } - - if ($alias) { - $fromTable = $platform->quoteIdentifier($alias); - $table = $this->renderTable($table, $fromTable); - } else { - $fromTable = $table; - } - } else { - $fromTable = ''; - } - - if ($this->prefixColumnsWithTable) { - $fromTable .= $platform->getIdentifierSeparator(); - } else { - $fromTable = ''; - } - - // process table columns - $columns = array(); - foreach ($this->columns as $columnIndexOrAs => $column) { - $columnName = ''; - if ($column === self::SQL_STAR) { - $columns[] = array($fromTable . self::SQL_STAR); - continue; - } - - if ($column instanceof ExpressionInterface) { - $columnParts = $this->processExpression( - $column, - $platform, - $driver, - $this->processInfo['paramPrefix'] . ((is_string($columnIndexOrAs)) ? $columnIndexOrAs : 'column') - ); - if ($parameterContainer) { - $parameterContainer->merge($columnParts->getParameterContainer()); - } - $columnName .= $columnParts->getSql(); - } else { - $columnName .= $fromTable . $platform->quoteIdentifier($column); - } - - // process As portion - if (is_string($columnIndexOrAs)) { - $columnAs = $platform->quoteIdentifier($columnIndexOrAs); - } elseif (stripos($columnName, ' as ') === false) { - $columnAs = (is_string($column)) ? $platform->quoteIdentifier($column) : 'Expression' . $expr++; - } - $columns[] = (isset($columnAs)) ? array($columnName, $columnAs) : array($columnName); - } - - $separator = $platform->getIdentifierSeparator(); - - // process join columns - foreach ($this->joins as $join) { - foreach ($join['columns'] as $jKey => $jColumn) { - $jColumns = array(); - if ($jColumn instanceof ExpressionInterface) { - $jColumnParts = $this->processExpression( - $jColumn, - $platform, - $driver, - $this->processInfo['paramPrefix'] . ((is_string($jKey)) ? $jKey : 'column') - ); - if ($parameterContainer) { - $parameterContainer->merge($jColumnParts->getParameterContainer()); - } - $jColumns[] = $jColumnParts->getSql(); - } else { - $name = (is_array($join['name'])) ? key($join['name']) : $name = $join['name']; - if ($name instanceof TableIdentifier) { - $name = ($name->hasSchema() ? $platform->quoteIdentifier($name->getSchema()) . $separator : '') . $platform->quoteIdentifier($name->getTable()); - } else { - $name = $platform->quoteIdentifier($name); - } - $jColumns[] = $name . $separator . $platform->quoteIdentifierInFragment($jColumn); - } - if (is_string($jKey)) { - $jColumns[] = $platform->quoteIdentifier($jKey); - } elseif ($jColumn !== self::SQL_STAR) { - $jColumns[] = $platform->quoteIdentifier($jColumn); - } - $columns[] = $jColumns; - } - } - - if ($this->quantifier) { - if ($this->quantifier instanceof ExpressionInterface) { - $quantifierParts = $this->processExpression($this->quantifier, $platform, $driver, 'quantifier'); - if ($parameterContainer) { - $parameterContainer->merge($quantifierParts->getParameterContainer()); - } - $quantifier = $quantifierParts->getSql(); - } else { - $quantifier = $this->quantifier; - } - } - - if (!isset($table)) { - return array($columns); - } elseif (isset($quantifier)) { - return array($quantifier, $columns, $table); - } else { - return array($columns, $table); - } - } - - protected function processJoins(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if (!$this->joins) { - return null; - } - - // process joins - $joinSpecArgArray = array(); - foreach ($this->joins as $j => $join) { - $joinSpecArgArray[$j] = array(); - $joinName = null; - $joinAs = null; - - // type - $joinSpecArgArray[$j][] = strtoupper($join['type']); - - // table name - if (is_array($join['name'])) { - $joinName = current($join['name']); - $joinAs = $platform->quoteIdentifier(key($join['name'])); - } else { - $joinName = $join['name']; - } - if ($joinName instanceof ExpressionInterface) { - $joinName = $joinName->getExpression(); - } elseif ($joinName instanceof TableIdentifier) { - $joinName = $joinName->getTableAndSchema(); - $joinName = ($joinName[1] ? $platform->quoteIdentifier($joinName[1]) . $platform->getIdentifierSeparator() : '') . $platform->quoteIdentifier($joinName[0]); - } else { - if ($joinName instanceof Select) { - $joinName = '(' . $this->processSubSelect($joinName, $platform, $driver, $parameterContainer) . ')'; - } else { - $joinName = $platform->quoteIdentifier($joinName); - } - } - $joinSpecArgArray[$j][] = (isset($joinAs)) ? $joinName . ' AS ' . $joinAs : $joinName; - - // on expression - // note: for Expression objects, pass them to processExpression with a prefix specific to each join (used for named parameters) - $joinSpecArgArray[$j][] = ($join['on'] instanceof ExpressionInterface) - ? $this->processExpression($join['on'], $platform, $driver, $this->processInfo['paramPrefix'] . 'join' . ($j+1) . 'part') - : $platform->quoteIdentifierInFragment($join['on'], array('=', 'AND', 'OR', '(', ')', 'BETWEEN', '<', '>')); // on - if ($joinSpecArgArray[$j][2] instanceof StatementContainerInterface) { - if ($parameterContainer) { - $parameterContainer->merge($joinSpecArgArray[$j][2]->getParameterContainer()); - } - $joinSpecArgArray[$j][2] = $joinSpecArgArray[$j][2]->getSql(); - } - } - - return array($joinSpecArgArray); - } - - protected function processWhere(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->where->count() == 0) { - return null; - } - $whereParts = $this->processExpression($this->where, $platform, $driver, $this->processInfo['paramPrefix'] . 'where'); - if ($parameterContainer) { - $parameterContainer->merge($whereParts->getParameterContainer()); - } - return array($whereParts->getSql()); - } - - protected function processGroup(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->group === null) { - return null; - } - // process table columns - $groups = array(); - foreach ($this->group as $column) { - $columnSql = ''; - if ($column instanceof Expression) { - $columnParts = $this->processExpression($column, $platform, $driver, $this->processInfo['paramPrefix'] . 'group'); - if ($parameterContainer) { - $parameterContainer->merge($columnParts->getParameterContainer()); - } - $columnSql .= $columnParts->getSql(); - } else { - $columnSql .= $platform->quoteIdentifierInFragment($column); - } - $groups[] = $columnSql; - } - return array($groups); - } - - protected function processHaving(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->having->count() == 0) { - return null; - } - $whereParts = $this->processExpression($this->having, $platform, $driver, $this->processInfo['paramPrefix'] . 'having'); - if ($parameterContainer) { - $parameterContainer->merge($whereParts->getParameterContainer()); - } - return array($whereParts->getSql()); - } - - protected function processOrder(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if (empty($this->order)) { - return null; - } - $orders = array(); - foreach ($this->order as $k => $v) { - if ($v instanceof Expression) { - /** @var $orderParts \Zend\Db\Adapter\StatementContainer */ - $orderParts = $this->processExpression($v, $platform, $driver); - if ($parameterContainer) { - $parameterContainer->merge($orderParts->getParameterContainer()); - } - $orders[] = array($orderParts->getSql()); - continue; - } - if (is_int($k)) { - if (strpos($v, ' ') !== false) { - list($k, $v) = preg_split('# #', $v, 2); - } else { - $k = $v; - $v = self::ORDER_ASCENDING; - } - } - if (strtoupper($v) == self::ORDER_DESCENDING) { - $orders[] = array($platform->quoteIdentifierInFragment($k), self::ORDER_DESCENDING); - } else { - $orders[] = array($platform->quoteIdentifierInFragment($k), self::ORDER_ASCENDING); - } - } - return array($orders); - } - - protected function processLimit(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->limit === null) { - return null; - } - - $limit = $this->limit; - - if ($driver) { - $sql = $driver->formatParameterName('limit'); - $parameterContainer->offsetSet('limit', $limit, ParameterContainer::TYPE_INTEGER); - } else { - $sql = $platform->quoteValue($limit); - } - - return array($sql); - } - - protected function processOffset(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->offset === null) { - return null; - } - - $offset = $this->offset; - - if ($driver) { - $parameterContainer->offsetSet('offset', $offset, ParameterContainer::TYPE_INTEGER); - return array($driver->formatParameterName('offset')); - } - - return array($platform->quoteValue($offset)); - } - - protected function processCombine(PlatformInterface $platform, DriverInterface $driver = null, ParameterContainer $parameterContainer = null) - { - if ($this->combine == array()) { - return null; - } - - $type = $this->combine['type']; - if ($this->combine['modifier']) { - $type .= ' ' . $this->combine['modifier']; - } - $type = strtoupper($type); - - if ($driver) { - $sql = $this->processSubSelect($this->combine['select'], $platform, $driver, $parameterContainer); - return array($type, $sql); - } - return array( - $type, - $this->processSubSelect($this->combine['select'], $platform) - ); - } - - /** - * Variable overloading - * - * @param string $name - * @throws Exception\InvalidArgumentException - * @return mixed - */ - public function __get($name) - { - switch (strtolower($name)) { - case 'where': - return $this->where; - case 'having': - return $this->having; - default: - throw new Exception\InvalidArgumentException('Not a valid magic property for this object'); - } - } - - /** - * __clone - * - * Resets the where object each time the Select is cloned. - * - * @return void - */ - public function __clone() - { - $this->where = clone $this->where; - $this->having = clone $this->having; - } -} diff --git a/library/Zend/Db/Sql/Sql.php b/library/Zend/Db/Sql/Sql.php deleted file mode 100755 index 17a697e2d..000000000 --- a/library/Zend/Db/Sql/Sql.php +++ /dev/null @@ -1,151 +0,0 @@ -adapter = $adapter; - if ($table) { - $this->setTable($table); - } - $this->sqlPlatform = ($sqlPlatform) ?: new Platform\Platform($adapter); - } - - /** - * @return null|\Zend\Db\Adapter\AdapterInterface - */ - public function getAdapter() - { - return $this->adapter; - } - - public function hasTable() - { - return ($this->table != null); - } - - public function setTable($table) - { - if (is_string($table) || is_array($table) || $table instanceof TableIdentifier) { - $this->table = $table; - } else { - throw new Exception\InvalidArgumentException('Table must be a string, array or instance of TableIdentifier.'); - } - return $this; - } - - public function getTable() - { - return $this->table; - } - - public function getSqlPlatform() - { - return $this->sqlPlatform; - } - - public function select($table = null) - { - if ($this->table !== null && $table !== null) { - throw new Exception\InvalidArgumentException(sprintf( - 'This Sql object is intended to work with only the table "%s" provided at construction time.', - $this->table - )); - } - return new Select(($table) ?: $this->table); - } - - public function insert($table = null) - { - if ($this->table !== null && $table !== null) { - throw new Exception\InvalidArgumentException(sprintf( - 'This Sql object is intended to work with only the table "%s" provided at construction time.', - $this->table - )); - } - return new Insert(($table) ?: $this->table); - } - - public function update($table = null) - { - if ($this->table !== null && $table !== null) { - throw new Exception\InvalidArgumentException(sprintf( - 'This Sql object is intended to work with only the table "%s" provided at construction time.', - $this->table - )); - } - return new Update(($table) ?: $this->table); - } - - public function delete($table = null) - { - if ($this->table !== null && $table !== null) { - throw new Exception\InvalidArgumentException(sprintf( - 'This Sql object is intended to work with only the table "%s" provided at construction time.', - $this->table - )); - } - return new Delete(($table) ?: $this->table); - } - - /** - * @param PreparableSqlInterface $sqlObject - * @param StatementInterface|null $statement - * @return StatementInterface - */ - public function prepareStatementForSqlObject(PreparableSqlInterface $sqlObject, StatementInterface $statement = null) - { - $statement = ($statement) ?: $this->adapter->getDriver()->createStatement(); - - if ($this->sqlPlatform) { - $this->sqlPlatform->setSubject($sqlObject); - $this->sqlPlatform->prepareStatement($this->adapter, $statement); - } else { - $sqlObject->prepareStatement($this->adapter, $statement); - } - - return $statement; - } - - /** - * Get sql string using platform or sql object - * - * @param SqlInterface $sqlObject - * @param PlatformInterface $platform - * - * @return string - */ - public function getSqlStringForSqlObject(SqlInterface $sqlObject, PlatformInterface $platform = null) - { - $platform = ($platform) ?: $this->adapter->getPlatform(); - - if ($this->sqlPlatform) { - $this->sqlPlatform->setSubject($sqlObject); - return $this->sqlPlatform->getSqlString($platform); - } - - return $sqlObject->getSqlString($platform); - } -} diff --git a/library/Zend/Db/Sql/SqlInterface.php b/library/Zend/Db/Sql/SqlInterface.php deleted file mode 100755 index f7db64c17..000000000 --- a/library/Zend/Db/Sql/SqlInterface.php +++ /dev/null @@ -1,22 +0,0 @@ -table = $table; - $this->schema = $schema; - } - - /** - * @param string $table - */ - public function setTable($table) - { - $this->table = $table; - } - - /** - * @return string - */ - public function getTable() - { - return $this->table; - } - - /** - * @return bool - */ - public function hasSchema() - { - return ($this->schema != null); - } - - /** - * @param $schema - */ - public function setSchema($schema) - { - $this->schema = $schema; - } - - /** - * @return null|string - */ - public function getSchema() - { - return $this->schema; - } - - public function getTableAndSchema() - { - return array($this->table, $this->schema); - } -} diff --git a/library/Zend/Db/Sql/Update.php b/library/Zend/Db/Sql/Update.php deleted file mode 100755 index 11e44e834..000000000 --- a/library/Zend/Db/Sql/Update.php +++ /dev/null @@ -1,271 +0,0 @@ - 'UPDATE %1$s SET %2$s', - self::SPECIFICATION_WHERE => 'WHERE %1$s' - ); - - /** - * @var string|TableIdentifier - */ - protected $table = ''; - - /** - * @var bool - */ - protected $emptyWhereProtection = true; - - /** - * @var PriorityList - */ - protected $set; - - /** - * @var string|Where - */ - protected $where = null; - - /** - * Constructor - * - * @param null|string|TableIdentifier $table - */ - public function __construct($table = null) - { - if ($table) { - $this->table($table); - } - $this->where = new Where(); - $this->set = new PriorityList(); - $this->set->isLIFO(false); - } - - /** - * Specify table for statement - * - * @param string|TableIdentifier $table - * @return Update - */ - public function table($table) - { - $this->table = $table; - return $this; - } - - /** - * Set key/value pairs to update - * - * @param array $values Associative array of key values - * @param string $flag One of the VALUES_* constants - * @throws Exception\InvalidArgumentException - * @return Update - */ - public function set(array $values, $flag = self::VALUES_SET) - { - if ($values == null) { - throw new Exception\InvalidArgumentException('set() expects an array of values'); - } - - if ($flag == self::VALUES_SET) { - $this->set->clear(); - } - $priority = is_numeric($flag) ? $flag : 0; - foreach ($values as $k => $v) { - if (!is_string($k)) { - throw new Exception\InvalidArgumentException('set() expects a string for the value key'); - } - $this->set->insert($k, $v, $priority); - } - return $this; - } - - /** - * Create where clause - * - * @param Where|\Closure|string|array $predicate - * @param string $combination One of the OP_* constants from Predicate\PredicateSet - * @throws Exception\InvalidArgumentException - * @return Select - */ - public function where($predicate, $combination = Predicate\PredicateSet::OP_AND) - { - if ($predicate instanceof Where) { - $this->where = $predicate; - } else { - $this->where->addPredicates($predicate, $combination); - } - return $this; - } - - public function getRawState($key = null) - { - $rawState = array( - 'emptyWhereProtection' => $this->emptyWhereProtection, - 'table' => $this->table, - 'set' => $this->set->toArray(), - 'where' => $this->where - ); - return (isset($key) && array_key_exists($key, $rawState)) ? $rawState[$key] : $rawState; - } - - /** - * Prepare statement - * - * @param AdapterInterface $adapter - * @param StatementContainerInterface $statementContainer - * @return void - */ - public function prepareStatement(AdapterInterface $adapter, StatementContainerInterface $statementContainer) - { - $driver = $adapter->getDriver(); - $platform = $adapter->getPlatform(); - $parameterContainer = $statementContainer->getParameterContainer(); - - if (!$parameterContainer instanceof ParameterContainer) { - $parameterContainer = new ParameterContainer(); - $statementContainer->setParameterContainer($parameterContainer); - } - - $table = $this->table; - $schema = null; - - // create quoted table name to use in update processing - if ($table instanceof TableIdentifier) { - list($table, $schema) = $table->getTableAndSchema(); - } - - $table = $platform->quoteIdentifier($table); - - if ($schema) { - $table = $platform->quoteIdentifier($schema) . $platform->getIdentifierSeparator() . $table; - } - - $setSql = array(); - foreach ($this->set as $column => $value) { - if ($value instanceof Expression) { - $exprData = $this->processExpression($value, $platform, $driver); - $setSql[] = $platform->quoteIdentifier($column) . ' = ' . $exprData->getSql(); - $parameterContainer->merge($exprData->getParameterContainer()); - } else { - $setSql[] = $platform->quoteIdentifier($column) . ' = ' . $driver->formatParameterName($column); - $parameterContainer->offsetSet($column, $value); - } - } - $set = implode(', ', $setSql); - - $sql = sprintf($this->specifications[static::SPECIFICATION_UPDATE], $table, $set); - - // process where - if ($this->where->count() > 0) { - $whereParts = $this->processExpression($this->where, $platform, $driver, 'where'); - $parameterContainer->merge($whereParts->getParameterContainer()); - $sql .= ' ' . sprintf($this->specifications[static::SPECIFICATION_WHERE], $whereParts->getSql()); - } - $statementContainer->setSql($sql); - } - - /** - * Get SQL string for statement - * - * @param null|PlatformInterface $adapterPlatform If null, defaults to Sql92 - * @return string - */ - public function getSqlString(PlatformInterface $adapterPlatform = null) - { - $adapterPlatform = ($adapterPlatform) ?: new Sql92; - $table = $this->table; - $schema = null; - - // create quoted table name to use in update processing - if ($table instanceof TableIdentifier) { - list($table, $schema) = $table->getTableAndSchema(); - } - - $table = $adapterPlatform->quoteIdentifier($table); - - if ($schema) { - $table = $adapterPlatform->quoteIdentifier($schema) . $adapterPlatform->getIdentifierSeparator() . $table; - } - - $setSql = array(); - foreach ($this->set as $column => $value) { - if ($value instanceof ExpressionInterface) { - $exprData = $this->processExpression($value, $adapterPlatform); - $setSql[] = $adapterPlatform->quoteIdentifier($column) . ' = ' . $exprData->getSql(); - } elseif ($value === null) { - $setSql[] = $adapterPlatform->quoteIdentifier($column) . ' = NULL'; - } else { - $setSql[] = $adapterPlatform->quoteIdentifier($column) . ' = ' . $adapterPlatform->quoteValue($value); - } - } - $set = implode(', ', $setSql); - - $sql = sprintf($this->specifications[static::SPECIFICATION_UPDATE], $table, $set); - if ($this->where->count() > 0) { - $whereParts = $this->processExpression($this->where, $adapterPlatform, null, 'where'); - $sql .= ' ' . sprintf($this->specifications[static::SPECIFICATION_WHERE], $whereParts->getSql()); - } - return $sql; - } - - /** - * Variable overloading - * - * Proxies to "where" only - * - * @param string $name - * @return mixed - */ - public function __get($name) - { - switch (strtolower($name)) { - case 'where': - return $this->where; - } - } - - /** - * __clone - * - * Resets the where object each time the Update is cloned. - * - * @return void - */ - public function __clone() - { - $this->where = clone $this->where; - $this->set = clone $this->set; - } -} diff --git a/library/Zend/Db/Sql/Where.php b/library/Zend/Db/Sql/Where.php deleted file mode 100755 index f50efb46f..000000000 --- a/library/Zend/Db/Sql/Where.php +++ /dev/null @@ -1,14 +0,0 @@ -isInitialized; - } - - /** - * Initialize - * - * @throws Exception\RuntimeException - * @return null - */ - public function initialize() - { - if ($this->isInitialized) { - return; - } - - if (!$this->featureSet instanceof Feature\FeatureSet) { - $this->featureSet = new Feature\FeatureSet; - } - - $this->featureSet->setTableGateway($this); - $this->featureSet->apply('preInitialize', array()); - - if (!$this->adapter instanceof AdapterInterface) { - throw new Exception\RuntimeException('This table does not have an Adapter setup'); - } - - if (!is_string($this->table) && !$this->table instanceof TableIdentifier) { - throw new Exception\RuntimeException('This table object does not have a valid table set.'); - } - - if (!$this->resultSetPrototype instanceof ResultSetInterface) { - $this->resultSetPrototype = new ResultSet; - } - - if (!$this->sql instanceof Sql) { - $this->sql = new Sql($this->adapter, $this->table); - } - - $this->featureSet->apply('postInitialize', array()); - - $this->isInitialized = true; - } - - /** - * Get table name - * - * @return string - */ - public function getTable() - { - return $this->table; - } - - /** - * Get adapter - * - * @return AdapterInterface - */ - public function getAdapter() - { - return $this->adapter; - } - - /** - * @return array - */ - public function getColumns() - { - return $this->columns; - } - - /** - * @return Feature\FeatureSet - */ - public function getFeatureSet() - { - return $this->featureSet; - } - - /** - * Get select result prototype - * - * @return ResultSet - */ - public function getResultSetPrototype() - { - return $this->resultSetPrototype; - } - - /** - * @return Sql - */ - public function getSql() - { - return $this->sql; - } - - /** - * Select - * - * @param Where|\Closure|string|array $where - * @return ResultSet - */ - public function select($where = null) - { - if (!$this->isInitialized) { - $this->initialize(); - } - - $select = $this->sql->select(); - - if ($where instanceof \Closure) { - $where($select); - } elseif ($where !== null) { - $select->where($where); - } - - return $this->selectWith($select); - } - - /** - * @param Select $select - * @return null|ResultSetInterface - * @throws \RuntimeException - */ - public function selectWith(Select $select) - { - if (!$this->isInitialized) { - $this->initialize(); - } - return $this->executeSelect($select); - } - - /** - * @param Select $select - * @return ResultSet - * @throws Exception\RuntimeException - */ - protected function executeSelect(Select $select) - { - $selectState = $select->getRawState(); - if ($selectState['table'] != $this->table && (is_array($selectState['table']) && end($selectState['table']) != $this->table)) { - throw new Exception\RuntimeException('The table name of the provided select object must match that of the table'); - } - - if ($selectState['columns'] == array(Select::SQL_STAR) - && $this->columns !== array()) { - $select->columns($this->columns); - } - - // apply preSelect features - $this->featureSet->apply('preSelect', array($select)); - - // prepare and execute - $statement = $this->sql->prepareStatementForSqlObject($select); - $result = $statement->execute(); - - // build result set - $resultSet = clone $this->resultSetPrototype; - $resultSet->initialize($result); - - // apply postSelect features - $this->featureSet->apply('postSelect', array($statement, $result, $resultSet)); - - return $resultSet; - } - - /** - * Insert - * - * @param array $set - * @return int - */ - public function insert($set) - { - if (!$this->isInitialized) { - $this->initialize(); - } - $insert = $this->sql->insert(); - $insert->values($set); - return $this->executeInsert($insert); - } - - /** - * @param Insert $insert - * @return mixed - */ - public function insertWith(Insert $insert) - { - if (!$this->isInitialized) { - $this->initialize(); - } - return $this->executeInsert($insert); - } - - /** - * @todo add $columns support - * - * @param Insert $insert - * @return mixed - * @throws Exception\RuntimeException - */ - protected function executeInsert(Insert $insert) - { - $insertState = $insert->getRawState(); - if ($insertState['table'] != $this->table) { - throw new Exception\RuntimeException('The table name of the provided Insert object must match that of the table'); - } - - // apply preInsert features - $this->featureSet->apply('preInsert', array($insert)); - - $statement = $this->sql->prepareStatementForSqlObject($insert); - $result = $statement->execute(); - $this->lastInsertValue = $this->adapter->getDriver()->getConnection()->getLastGeneratedValue(); - - // apply postInsert features - $this->featureSet->apply('postInsert', array($statement, $result)); - - return $result->getAffectedRows(); - } - - /** - * Update - * - * @param array $set - * @param string|array|\Closure $where - * @return int - */ - public function update($set, $where = null) - { - if (!$this->isInitialized) { - $this->initialize(); - } - $sql = $this->sql; - $update = $sql->update(); - $update->set($set); - if ($where !== null) { - $update->where($where); - } - return $this->executeUpdate($update); - } - - /** - * @param \Zend\Db\Sql\Update $update - * @return mixed - */ - public function updateWith(Update $update) - { - if (!$this->isInitialized) { - $this->initialize(); - } - return $this->executeUpdate($update); - } - - /** - * @todo add $columns support - * - * @param Update $update - * @return mixed - * @throws Exception\RuntimeException - */ - protected function executeUpdate(Update $update) - { - $updateState = $update->getRawState(); - if ($updateState['table'] != $this->table) { - throw new Exception\RuntimeException('The table name of the provided Update object must match that of the table'); - } - - // apply preUpdate features - $this->featureSet->apply('preUpdate', array($update)); - - $statement = $this->sql->prepareStatementForSqlObject($update); - $result = $statement->execute(); - - // apply postUpdate features - $this->featureSet->apply('postUpdate', array($statement, $result)); - - return $result->getAffectedRows(); - } - - /** - * Delete - * - * @param Where|\Closure|string|array $where - * @return int - */ - public function delete($where) - { - if (!$this->isInitialized) { - $this->initialize(); - } - $delete = $this->sql->delete(); - if ($where instanceof \Closure) { - $where($delete); - } else { - $delete->where($where); - } - return $this->executeDelete($delete); - } - - /** - * @param Delete $delete - * @return mixed - */ - public function deleteWith(Delete $delete) - { - $this->initialize(); - return $this->executeDelete($delete); - } - - /** - * @todo add $columns support - * - * @param Delete $delete - * @return mixed - * @throws Exception\RuntimeException - */ - protected function executeDelete(Delete $delete) - { - $deleteState = $delete->getRawState(); - if ($deleteState['table'] != $this->table) { - throw new Exception\RuntimeException('The table name of the provided Update object must match that of the table'); - } - - // pre delete update - $this->featureSet->apply('preDelete', array($delete)); - - $statement = $this->sql->prepareStatementForSqlObject($delete); - $result = $statement->execute(); - - // apply postDelete features - $this->featureSet->apply('postDelete', array($statement, $result)); - - return $result->getAffectedRows(); - } - - /** - * Get last insert value - * - * @return int - */ - public function getLastInsertValue() - { - return $this->lastInsertValue; - } - - /** - * __get - * - * @param string $property - * @throws Exception\InvalidArgumentException - * @return mixed - */ - public function __get($property) - { - switch (strtolower($property)) { - case 'lastinsertvalue': - return $this->lastInsertValue; - case 'adapter': - return $this->adapter; - case 'table': - return $this->table; - } - if ($this->featureSet->canCallMagicGet($property)) { - return $this->featureSet->callMagicGet($property); - } - throw new Exception\InvalidArgumentException('Invalid magic property access in ' . __CLASS__ . '::__get()'); - } - - /** - * @param string $property - * @param mixed $value - * @return mixed - * @throws Exception\InvalidArgumentException - */ - public function __set($property, $value) - { - if ($this->featureSet->canCallMagicSet($property)) { - return $this->featureSet->callMagicSet($property, $value); - } - throw new Exception\InvalidArgumentException('Invalid magic property access in ' . __CLASS__ . '::__set()'); - } - - /** - * @param $method - * @param $arguments - * @return mixed - * @throws Exception\InvalidArgumentException - */ - public function __call($method, $arguments) - { - if ($this->featureSet->canCallMagicCall($method)) { - return $this->featureSet->callMagicCall($method, $arguments); - } - throw new Exception\InvalidArgumentException('Invalid method (' . $method . ') called, caught by ' . __CLASS__ . '::__call()'); - } - - /** - * __clone - */ - public function __clone() - { - $this->resultSetPrototype = (isset($this->resultSetPrototype)) ? clone $this->resultSetPrototype : null; - $this->sql = clone $this->sql; - if (is_object($this->table)) { - $this->table = clone $this->table; - } - } -} diff --git a/library/Zend/Db/TableGateway/Exception/ExceptionInterface.php b/library/Zend/Db/TableGateway/Exception/ExceptionInterface.php deleted file mode 100755 index ecd3085ac..000000000 --- a/library/Zend/Db/TableGateway/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -tableGateway = $tableGateway; - } - - public function initialize() - { - throw new Exception\RuntimeException('This method is not intended to be called on this object.'); - } - - public function getMagicMethodSpecifications() - { - return array(); - } - - - /* - public function preInitialize(); - public function postInitialize(); - public function preSelect(Select $select); - public function postSelect(StatementInterface $statement, ResultInterface $result, ResultSetInterface $resultSet); - public function preInsert(Insert $insert); - public function postInsert(StatementInterface $statement, ResultInterface $result); - public function preUpdate(Update $update); - public function postUpdate(StatementInterface $statement, ResultInterface $result); - public function preDelete(Delete $delete); - public function postDelete(StatementInterface $statement, ResultInterface $result); - */ -} diff --git a/library/Zend/Db/TableGateway/Feature/EventFeature.php b/library/Zend/Db/TableGateway/Feature/EventFeature.php deleted file mode 100755 index 08e3cffbd..000000000 --- a/library/Zend/Db/TableGateway/Feature/EventFeature.php +++ /dev/null @@ -1,255 +0,0 @@ -eventManager = ($eventManager instanceof EventManagerInterface) - ? $eventManager - : new EventManager; - - $this->eventManager->addIdentifiers(array( - 'Zend\Db\TableGateway\TableGateway', - )); - - $this->event = ($tableGatewayEvent) ?: new EventFeature\TableGatewayEvent(); - } - - /** - * Retrieve composed event manager instance - * - * @return EventManagerInterface - */ - public function getEventManager() - { - return $this->eventManager; - } - - /** - * Retrieve composed event instance - * - * @return EventFeature\TableGatewayEvent - */ - public function getEvent() - { - return $this->event; - } - - /** - * Initialize feature and trigger "preInitialize" event - * - * Ensures that the composed TableGateway has identifiers based on the - * class name, and that the event target is set to the TableGateway - * instance. It then triggers the "preInitialize" event. - * - * @return void - */ - public function preInitialize() - { - if (get_class($this->tableGateway) != 'Zend\Db\TableGateway\TableGateway') { - $this->eventManager->addIdentifiers(get_class($this->tableGateway)); - } - - $this->event->setTarget($this->tableGateway); - $this->event->setName(__FUNCTION__); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "postInitialize" event - * - * @return void - */ - public function postInitialize() - { - $this->event->setName(__FUNCTION__); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "preSelect" event - * - * Triggers the "preSelect" event mapping the following parameters: - * - $select as "select" - * - * @param Select $select - * @return void - */ - public function preSelect(Select $select) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array('select' => $select)); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "postSelect" event - * - * Triggers the "postSelect" event mapping the following parameters: - * - $statement as "statement" - * - $result as "result" - * - $resultSet as "result_set" - * - * @param StatementInterface $statement - * @param ResultInterface $result - * @param ResultSetInterface $resultSet - * @return void - */ - public function postSelect(StatementInterface $statement, ResultInterface $result, ResultSetInterface $resultSet) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array( - 'statement' => $statement, - 'result' => $result, - 'result_set' => $resultSet - )); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "preInsert" event - * - * Triggers the "preInsert" event mapping the following parameters: - * - $insert as "insert" - * - * @param Insert $insert - * @return void - */ - public function preInsert(Insert $insert) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array('insert' => $insert)); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "postInsert" event - * - * Triggers the "postInsert" event mapping the following parameters: - * - $statement as "statement" - * - $result as "result" - * - * @param StatementInterface $statement - * @param ResultInterface $result - * @return void - */ - public function postInsert(StatementInterface $statement, ResultInterface $result) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array( - 'statement' => $statement, - 'result' => $result, - )); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "preUpdate" event - * - * Triggers the "preUpdate" event mapping the following parameters: - * - $update as "update" - * - * @param Update $update - * @return void - */ - public function preUpdate(Update $update) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array('update' => $update)); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "postUpdate" event - * - * Triggers the "postUpdate" event mapping the following parameters: - * - $statement as "statement" - * - $result as "result" - * - * @param StatementInterface $statement - * @param ResultInterface $result - * @return void - */ - public function postUpdate(StatementInterface $statement, ResultInterface $result) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array( - 'statement' => $statement, - 'result' => $result, - )); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "preDelete" event - * - * Triggers the "preDelete" event mapping the following parameters: - * - $delete as "delete" - * - * @param Delete $delete - * @return void - */ - public function preDelete(Delete $delete) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array('delete' => $delete)); - $this->eventManager->trigger($this->event); - } - - /** - * Trigger the "postDelete" event - * - * Triggers the "postDelete" event mapping the following parameters: - * - $statement as "statement" - * - $result as "result" - * - * @param StatementInterface $statement - * @param ResultInterface $result - * @return void - */ - public function postDelete(StatementInterface $statement, ResultInterface $result) - { - $this->event->setName(__FUNCTION__); - $this->event->setParams(array( - 'statement' => $statement, - 'result' => $result, - )); - $this->eventManager->trigger($this->event); - } -} diff --git a/library/Zend/Db/TableGateway/Feature/EventFeature/TableGatewayEvent.php b/library/Zend/Db/TableGateway/Feature/EventFeature/TableGatewayEvent.php deleted file mode 100755 index 1097a86fe..000000000 --- a/library/Zend/Db/TableGateway/Feature/EventFeature/TableGatewayEvent.php +++ /dev/null @@ -1,139 +0,0 @@ -name; - } - - /** - * Get target/context from which event was triggered - * - * @return null|string|object - */ - public function getTarget() - { - return $this->target; - } - - /** - * Get parameters passed to the event - * - * @return array|\ArrayAccess - */ - public function getParams() - { - return $this->params; - } - - /** - * Get a single parameter by name - * - * @param string $name - * @param mixed $default Default value to return if parameter does not exist - * @return mixed - */ - public function getParam($name, $default = null) - { - return (isset($this->params[$name]) ? $this->params[$name] : $default); - } - - /** - * Set the event name - * - * @param string $name - * @return void - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Set the event target/context - * - * @param null|string|object $target - * @return void - */ - public function setTarget($target) - { - $this->target = $target; - } - - /** - * Set event parameters - * - * @param string $params - * @return void - */ - public function setParams($params) - { - $this->params = $params; - } - - /** - * Set a single parameter by key - * - * @param string $name - * @param mixed $value - * @return void - */ - public function setParam($name, $value) - { - $this->params[$name] = $value; - } - - /** - * Indicate whether or not the parent EventManagerInterface should stop propagating events - * - * @param bool $flag - * @return void - */ - public function stopPropagation($flag = true) - { - return; - } - - /** - * Has this event indicated event propagation should stop? - * - * @return bool - */ - public function propagationIsStopped() - { - return false; - } -} diff --git a/library/Zend/Db/TableGateway/Feature/FeatureSet.php b/library/Zend/Db/TableGateway/Feature/FeatureSet.php deleted file mode 100755 index 498db1ad7..000000000 --- a/library/Zend/Db/TableGateway/Feature/FeatureSet.php +++ /dev/null @@ -1,146 +0,0 @@ -addFeatures($features); - } - } - - public function setTableGateway(AbstractTableGateway $tableGateway) - { - $this->tableGateway = $tableGateway; - foreach ($this->features as $feature) { - $feature->setTableGateway($this->tableGateway); - } - return $this; - } - - public function getFeatureByClassName($featureClassName) - { - $feature = false; - foreach ($this->features as $potentialFeature) { - if ($potentialFeature instanceof $featureClassName) { - $feature = $potentialFeature; - break; - } - } - return $feature; - } - - public function addFeatures(array $features) - { - foreach ($features as $feature) { - $this->addFeature($feature); - } - return $this; - } - - public function addFeature(AbstractFeature $feature) - { - if ($this->tableGateway instanceof TableGatewayInterface) { - $feature->setTableGateway($this->tableGateway); - } - $this->features[] = $feature; - return $this; - } - - public function apply($method, $args) - { - foreach ($this->features as $feature) { - if (method_exists($feature, $method)) { - $return = call_user_func_array(array($feature, $method), $args); - if ($return === self::APPLY_HALT) { - break; - } - } - } - } - - /** - * @param string $property - * @return bool - */ - public function canCallMagicGet($property) - { - return false; - } - - /** - * @param string $property - * @return mixed - */ - public function callMagicGet($property) - { - $return = null; - return $return; - } - - /** - * @param string $property - * @return bool - */ - public function canCallMagicSet($property) - { - return false; - } - - /** - * @param $property - * @param $value - * @return mixed - */ - public function callMagicSet($property, $value) - { - $return = null; - return $return; - } - - /** - * @param string $method - * @return bool - */ - public function canCallMagicCall($method) - { - return false; - } - - /** - * @param string $method - * @param array $arguments - * @return mixed - */ - public function callMagicCall($method, $arguments) - { - $return = null; - return $return; - } -} diff --git a/library/Zend/Db/TableGateway/Feature/GlobalAdapterFeature.php b/library/Zend/Db/TableGateway/Feature/GlobalAdapterFeature.php deleted file mode 100755 index bb8c6d60b..000000000 --- a/library/Zend/Db/TableGateway/Feature/GlobalAdapterFeature.php +++ /dev/null @@ -1,67 +0,0 @@ -tableGateway->adapter = self::getStaticAdapter(); - } -} diff --git a/library/Zend/Db/TableGateway/Feature/MasterSlaveFeature.php b/library/Zend/Db/TableGateway/Feature/MasterSlaveFeature.php deleted file mode 100755 index 255735de8..000000000 --- a/library/Zend/Db/TableGateway/Feature/MasterSlaveFeature.php +++ /dev/null @@ -1,91 +0,0 @@ -slaveAdapter = $slaveAdapter; - if ($slaveSql) { - $this->slaveSql = $slaveSql; - } - } - - public function getSlaveAdapter() - { - return $this->slaveAdapter; - } - - /** - * @return Sql - */ - public function getSlaveSql() - { - return $this->slaveSql; - } - - /** - * after initialization, retrieve the original adapter as "master" - */ - public function postInitialize() - { - $this->masterSql = $this->tableGateway->sql; - if ($this->slaveSql == null) { - $this->slaveSql = new Sql( - $this->slaveAdapter, - $this->tableGateway->sql->getTable(), - $this->tableGateway->sql->getSqlPlatform() - ); - } - } - - /** - * preSelect() - * Replace adapter with slave temporarily - */ - public function preSelect() - { - $this->tableGateway->sql = $this->slaveSql; - } - - /** - * postSelect() - * Ensure to return to the master adapter - */ - public function postSelect() - { - $this->tableGateway->sql = $this->masterSql; - } -} diff --git a/library/Zend/Db/TableGateway/Feature/MetadataFeature.php b/library/Zend/Db/TableGateway/Feature/MetadataFeature.php deleted file mode 100755 index 59393bec2..000000000 --- a/library/Zend/Db/TableGateway/Feature/MetadataFeature.php +++ /dev/null @@ -1,85 +0,0 @@ -metadata = $metadata; - } - $this->sharedData['metadata'] = array( - 'primaryKey' => null, - 'columns' => array() - ); - } - - public function postInitialize() - { - if ($this->metadata == null) { - $this->metadata = new Metadata($this->tableGateway->adapter); - } - - // localize variable for brevity - $t = $this->tableGateway; - $m = $this->metadata; - - // get column named - $columns = $m->getColumnNames($t->table); - $t->columns = $columns; - - // set locally - $this->sharedData['metadata']['columns'] = $columns; - - // process primary key only if table is a table; there are no PK constraints on views - if (!($m->getTable($t->table) instanceof TableObject)) { - return; - } - - $pkc = null; - - foreach ($m->getConstraints($t->table) as $constraint) { - /** @var $constraint \Zend\Db\Metadata\Object\ConstraintObject */ - if ($constraint->getType() == 'PRIMARY KEY') { - $pkc = $constraint; - break; - } - } - - if ($pkc === null) { - throw new Exception\RuntimeException('A primary key for this column could not be found in the metadata.'); - } - - if (count($pkc->getColumns()) == 1) { - $pkck = $pkc->getColumns(); - $primaryKey = $pkck[0]; - } else { - $primaryKey = $pkc->getColumns(); - } - - $this->sharedData['metadata']['primaryKey'] = $primaryKey; - } -} diff --git a/library/Zend/Db/TableGateway/Feature/RowGatewayFeature.php b/library/Zend/Db/TableGateway/Feature/RowGatewayFeature.php deleted file mode 100755 index 18c4fd9df..000000000 --- a/library/Zend/Db/TableGateway/Feature/RowGatewayFeature.php +++ /dev/null @@ -1,67 +0,0 @@ -constructorArguments = func_get_args(); - } - - public function postInitialize() - { - $args = $this->constructorArguments; - - /** @var $resultSetPrototype ResultSet */ - $resultSetPrototype = $this->tableGateway->resultSetPrototype; - - if (!$this->tableGateway->resultSetPrototype instanceof ResultSet) { - throw new Exception\RuntimeException( - 'This feature ' . __CLASS__ . ' expects the ResultSet to be an instance of Zend\Db\ResultSet\ResultSet' - ); - } - - if (isset($args[0])) { - if (is_string($args[0])) { - $primaryKey = $args[0]; - $rowGatewayPrototype = new RowGateway($primaryKey, $this->tableGateway->table, $this->tableGateway->adapter, $this->tableGateway->sql); - $resultSetPrototype->setArrayObjectPrototype($rowGatewayPrototype); - } elseif ($args[0] instanceof RowGatewayInterface) { - $rowGatewayPrototype = $args[0]; - $resultSetPrototype->setArrayObjectPrototype($rowGatewayPrototype); - } - } else { - // get from metadata feature - $metadata = $this->tableGateway->featureSet->getFeatureByClassName('Zend\Db\TableGateway\Feature\MetadataFeature'); - if ($metadata === false || !isset($metadata->sharedData['metadata'])) { - throw new Exception\RuntimeException( - 'No information was provided to the RowGatewayFeature and/or no MetadataFeature could be consulted to find the primary key necessary for RowGateway object creation.' - ); - } - $primaryKey = $metadata->sharedData['metadata']['primaryKey']; - $rowGatewayPrototype = new RowGateway($primaryKey, $this->tableGateway->table, $this->tableGateway->adapter, $this->tableGateway->sql); - $resultSetPrototype->setArrayObjectPrototype($rowGatewayPrototype); - } - } -} diff --git a/library/Zend/Db/TableGateway/Feature/SequenceFeature.php b/library/Zend/Db/TableGateway/Feature/SequenceFeature.php deleted file mode 100755 index 9f58d1a56..000000000 --- a/library/Zend/Db/TableGateway/Feature/SequenceFeature.php +++ /dev/null @@ -1,133 +0,0 @@ -primaryKeyField = $primaryKeyField; - $this->sequenceName = $sequenceName; - } - - /** - * @param Insert $insert - * @return Insert - */ - public function preInsert(Insert $insert) - { - $columns = $insert->getRawState('columns'); - $values = $insert->getRawState('values'); - $key = array_search($this->primaryKeyField, $columns); - if ($key !== false) { - $this->sequenceValue = $values[$key]; - return $insert; - } - - $this->sequenceValue = $this->nextSequenceId(); - if ($this->sequenceValue === null) { - return $insert; - } - - $insert->values(array($this->primaryKeyField => $this->sequenceValue), Insert::VALUES_MERGE); - return $insert; - } - - /** - * @param StatementInterface $statement - * @param ResultInterface $result - */ - public function postInsert(StatementInterface $statement, ResultInterface $result) - { - if ($this->sequenceValue !== null) { - $this->tableGateway->lastInsertValue = $this->sequenceValue; - } - } - - /** - * Generate a new value from the specified sequence in the database, and return it. - * @return int - */ - public function nextSequenceId() - { - $platform = $this->tableGateway->adapter->getPlatform(); - $platformName = $platform->getName(); - - switch ($platformName) { - case 'Oracle': - $sql = 'SELECT ' . $platform->quoteIdentifier($this->sequenceName) . '.NEXTVAL as "nextval" FROM dual'; - break; - case 'PostgreSQL': - $sql = 'SELECT NEXTVAL(\'"' . $this->sequenceName . '"\')'; - break; - default : - return null; - } - - $statement = $this->tableGateway->adapter->createStatement(); - $statement->prepare($sql); - $result = $statement->execute(); - $sequence = $result->current(); - unset($statement, $result); - return $sequence['nextval']; - } - - /** - * Return the most recent value from the specified sequence in the database. - * @return int - */ - public function lastSequenceId() - { - $platform = $this->tableGateway->adapter->getPlatform(); - $platformName = $platform->getName(); - - switch ($platformName) { - case 'Oracle': - $sql = 'SELECT ' . $platform->quoteIdentifier($this->sequenceName) . '.CURRVAL as "currval" FROM dual'; - break; - case 'PostgreSQL': - $sql = 'SELECT CURRVAL(\'' . $this->sequenceName . '\')'; - break; - default : - return null; - } - - $statement = $this->tableGateway->adapter->createStatement(); - $statement->prepare($sql); - $result = $statement->execute(); - $sequence = $result->current(); - unset($statement, $result); - return $sequence['currval']; - } -} diff --git a/library/Zend/Db/TableGateway/TableGateway.php b/library/Zend/Db/TableGateway/TableGateway.php deleted file mode 100755 index 0defd8a4d..000000000 --- a/library/Zend/Db/TableGateway/TableGateway.php +++ /dev/null @@ -1,72 +0,0 @@ -table = $table; - - // adapter - $this->adapter = $adapter; - - // process features - if ($features !== null) { - if ($features instanceof Feature\AbstractFeature) { - $features = array($features); - } - if (is_array($features)) { - $this->featureSet = new Feature\FeatureSet($features); - } elseif ($features instanceof Feature\FeatureSet) { - $this->featureSet = $features; - } else { - throw new Exception\InvalidArgumentException( - 'TableGateway expects $feature to be an instance of an AbstractFeature or a FeatureSet, or an array of AbstractFeatures' - ); - } - } else { - $this->featureSet = new Feature\FeatureSet(); - } - - // result prototype - $this->resultSetPrototype = ($resultSetPrototype) ?: new ResultSet; - - // Sql object (factory for select, insert, update, delete) - $this->sql = ($sql) ?: new Sql($this->adapter, $this->table); - - // check sql object bound to same table - if ($this->sql->getTable() != $this->table) { - throw new Exception\InvalidArgumentException('The table inside the provided Sql object must match the table of this TableGateway'); - } - - $this->initialize(); - } -} diff --git a/library/Zend/Db/TableGateway/TableGatewayInterface.php b/library/Zend/Db/TableGateway/TableGatewayInterface.php deleted file mode 100755 index 0a77e0f1d..000000000 --- a/library/Zend/Db/TableGateway/TableGatewayInterface.php +++ /dev/null @@ -1,19 +0,0 @@ -=5.3.23" - }, - "require-dev": { - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "suggest": { - "zendframework/zend-eventmanager": "Zend\\EventManager component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-stdlib": "Zend\\Stdlib component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Debug/CONTRIBUTING.md b/library/Zend/Debug/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Debug/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Debug/Debug.php b/library/Zend/Debug/Debug.php deleted file mode 100755 index f240935c8..000000000 --- a/library/Zend/Debug/Debug.php +++ /dev/null @@ -1,124 +0,0 @@ - tags, cleans up newlines and indents, and runs - * htmlentities() before output. - * - * @param mixed $var The variable to dump. - * @param string $label OPTIONAL Label to prepend to output. - * @param bool $echo OPTIONAL Echo output if true. - * @return string - */ - public static function dump($var, $label = null, $echo = true) - { - // format the label - $label = ($label===null) ? '' : rtrim($label) . ' '; - - // var_dump the variable into a buffer and keep the output - ob_start(); - var_dump($var); - $output = ob_get_clean(); - - // neaten the newlines and indents - $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output); - if (static::getSapi() == 'cli') { - $output = PHP_EOL . $label - . PHP_EOL . $output - . PHP_EOL; - } else { - if (null !== static::$escaper) { - $output = static::$escaper->escapeHtml($output); - } elseif (!extension_loaded('xdebug')) { - $output = static::getEscaper()->escapeHtml($output); - } - - $output = '

'
-                    . $label
-                    . $output
-                    . '
'; - } - - if ($echo) { - echo $output; - } - return $output; - } -} diff --git a/library/Zend/Debug/README.md b/library/Zend/Debug/README.md deleted file mode 100755 index 8797b8e21..000000000 --- a/library/Zend/Debug/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Debug Component from ZF2 -======================== - -This is the Debug component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Debug/composer.json b/library/Zend/Debug/composer.json deleted file mode 100755 index b6c18c7bf..000000000 --- a/library/Zend/Debug/composer.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "zendframework/zend-debug", - "description": " ", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "debug" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Debug\\": "" - } - }, - "target-dir": "Zend/Debug", - "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "zendframework/zend-escaper": "*" - }, - "suggest": { - "ext/xdebug": "XDebug, for better backtrace output", - "zendframework/zend-escaper": "To support escaped output" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Di/CONTRIBUTING.md b/library/Zend/Di/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Di/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Di/Config.php b/library/Zend/Di/Config.php deleted file mode 100755 index b17730504..000000000 --- a/library/Zend/Di/Config.php +++ /dev/null @@ -1,196 +0,0 @@ -data = $options; - } - - /** - * Configure - * - * @param Di $di - * @return void - */ - public function configure(Di $di) - { - if (isset($this->data['definition'])) { - $this->configureDefinition($di, $this->data['definition']); - } - if (isset($this->data['instance'])) { - $this->configureInstance($di, $this->data['instance']); - } - } - - /** - * @param Di $di - * @param array $definition - */ - public function configureDefinition(Di $di, $definition) - { - foreach ($definition as $definitionType => $definitionData) { - switch ($definitionType) { - case 'compiler': - foreach ($definitionData as $filename) { - if (is_readable($filename)) { - $di->definitions()->addDefinition(new ArrayDefinition(include $filename), false); - } - } - break; - case 'runtime': - if (isset($definitionData['enabled']) && !$definitionData['enabled']) { - // Remove runtime from definition list if not enabled - $definitions = array(); - foreach ($di->definitions() as $definition) { - if (!$definition instanceof RuntimeDefinition) { - $definitions[] = $definition; - } - } - $definitionList = new DefinitionList($definitions); - $di->setDefinitionList($definitionList); - } elseif (isset($definitionData['use_annotations']) && $definitionData['use_annotations']) { - /* @var $runtimeDefinition Definition\RuntimeDefinition */ - $runtimeDefinition = $di - ->definitions() - ->getDefinitionByType('\Zend\Di\Definition\RuntimeDefinition'); - $runtimeDefinition->getIntrospectionStrategy()->setUseAnnotations(true); - } - break; - case 'class': - foreach ($definitionData as $className => $classData) { - $classDefinitions = $di->definitions()->getDefinitionsByType('Zend\Di\Definition\ClassDefinition'); - foreach ($classDefinitions as $classDefinition) { - if (!$classDefinition->hasClass($className)) { - unset($classDefinition); - } - } - if (!isset($classDefinition)) { - $classDefinition = new Definition\ClassDefinition($className); - $di->definitions()->addDefinition($classDefinition, false); - } - foreach ($classData as $classDefKey => $classDefData) { - switch ($classDefKey) { - case 'instantiator': - $classDefinition->setInstantiator($classDefData); - break; - case 'supertypes': - $classDefinition->setSupertypes($classDefData); - break; - case 'methods': - case 'method': - foreach ($classDefData as $methodName => $methodInfo) { - if (isset($methodInfo['required'])) { - $classDefinition->addMethod($methodName, $methodInfo['required']); - unset($methodInfo['required']); - } - foreach ($methodInfo as $paramName => $paramInfo) { - $classDefinition->addMethodParameter($methodName, $paramName, $paramInfo); - } - } - break; - default: - $methodName = $classDefKey; - $methodInfo = $classDefData; - if (isset($classDefData['required'])) { - $classDefinition->addMethod($methodName, $methodInfo['required']); - unset($methodInfo['required']); - } - foreach ($methodInfo as $paramName => $paramInfo) { - $classDefinition->addMethodParameter($methodName, $paramName, $paramInfo); - } - } - } - } - } - } - } - - /** - * Configures a given Di instance - * - * @param Di $di - * @param $instanceData - */ - public function configureInstance(Di $di, $instanceData) - { - $im = $di->instanceManager(); - - foreach ($instanceData as $target => $data) { - switch (strtolower($target)) { - case 'aliases': - case 'alias': - foreach ($data as $n => $v) { - $im->addAlias($n, $v); - } - break; - case 'preferences': - case 'preference': - foreach ($data as $n => $v) { - if (is_array($v)) { - foreach ($v as $v2) { - $im->addTypePreference($n, $v2); - } - } else { - $im->addTypePreference($n, $v); - } - } - break; - default: - foreach ($data as $n => $v) { - switch ($n) { - case 'parameters': - case 'parameter': - $im->setParameters($target, $v); - break; - case 'injections': - case 'injection': - $im->setInjections($target, $v); - break; - case 'shared': - case 'share': - $im->setShared($target, $v); - break; - } - } - } - } - } -} diff --git a/library/Zend/Di/Definition/Annotation/Inject.php b/library/Zend/Di/Definition/Annotation/Inject.php deleted file mode 100755 index 8534c0215..000000000 --- a/library/Zend/Di/Definition/Annotation/Inject.php +++ /dev/null @@ -1,31 +0,0 @@ -content = $content; - } -} diff --git a/library/Zend/Di/Definition/Annotation/Instantiator.php b/library/Zend/Di/Definition/Annotation/Instantiator.php deleted file mode 100755 index d0aed5310..000000000 --- a/library/Zend/Di/Definition/Annotation/Instantiator.php +++ /dev/null @@ -1,31 +0,0 @@ -content = $content; - } -} diff --git a/library/Zend/Di/Definition/ArrayDefinition.php b/library/Zend/Di/Definition/ArrayDefinition.php deleted file mode 100755 index 5e64f5b38..000000000 --- a/library/Zend/Di/Definition/ArrayDefinition.php +++ /dev/null @@ -1,176 +0,0 @@ - $value) { - // force lower names - $dataArray[$class] = array_change_key_case($dataArray[$class], CASE_LOWER); - } - foreach ($dataArray as $class => $definition) { - if (isset($definition['methods']) && is_array($definition['methods'])) { - foreach ($definition['methods'] as $type => $requirement) { - if (!is_int($requirement)) { - $dataArray[$class]['methods'][$type] = InjectionMethod::detectMethodRequirement($requirement); - } - } - } - } - $this->dataArray = $dataArray; - } - - /** - * {@inheritDoc} - */ - public function getClasses() - { - return array_keys($this->dataArray); - } - - /** - * {@inheritDoc} - */ - public function hasClass($class) - { - return array_key_exists($class, $this->dataArray); - } - - /** - * {@inheritDoc} - */ - public function getClassSupertypes($class) - { - if (!isset($this->dataArray[$class])) { - return array(); - } - - if (!isset($this->dataArray[$class]['supertypes'])) { - return array(); - } - - return $this->dataArray[$class]['supertypes']; - } - - /** - * {@inheritDoc} - */ - public function getInstantiator($class) - { - if (!isset($this->dataArray[$class])) { - return null; - } - - if (!isset($this->dataArray[$class]['instantiator'])) { - return '__construct'; - } - - return $this->dataArray[$class]['instantiator']; - } - - /** - * {@inheritDoc} - */ - public function hasMethods($class) - { - if (!isset($this->dataArray[$class])) { - return false; - } - - if (!isset($this->dataArray[$class]['methods'])) { - return false; - } - - return (count($this->dataArray[$class]['methods']) > 0); - } - - /** - * {@inheritDoc} - */ - public function hasMethod($class, $method) - { - if (!isset($this->dataArray[$class])) { - return false; - } - - if (!isset($this->dataArray[$class]['methods'])) { - return false; - } - - return array_key_exists($method, $this->dataArray[$class]['methods']); - } - - /** - * {@inheritDoc} - */ - public function getMethods($class) - { - if (!isset($this->dataArray[$class])) { - return array(); - } - - if (!isset($this->dataArray[$class]['methods'])) { - return array(); - } - - return $this->dataArray[$class]['methods']; - } - - /** - * {@inheritDoc} - */ - public function hasMethodParameters($class, $method) - { - return isset($this->dataArray[$class]['parameters'][$method]); - } - - /** - * {@inheritDoc} - */ - public function getMethodParameters($class, $method) - { - if (!isset($this->dataArray[$class])) { - return array(); - } - - if (!isset($this->dataArray[$class]['parameters'])) { - return array(); - } - - if (!isset($this->dataArray[$class]['parameters'][$method])) { - return array(); - } - - return $this->dataArray[$class]['parameters'][$method]; - } - - /** - * @return array - */ - public function toArray() - { - return $this->dataArray; - } -} diff --git a/library/Zend/Di/Definition/Builder/InjectionMethod.php b/library/Zend/Di/Definition/Builder/InjectionMethod.php deleted file mode 100755 index a27f7b192..000000000 --- a/library/Zend/Di/Definition/Builder/InjectionMethod.php +++ /dev/null @@ -1,121 +0,0 @@ -name = $name; - - return $this; - } - - /** - * @return null|string - */ - public function getName() - { - return $this->name; - } - - /** - * @param string $name - * @param string|null $class - * @param mixed|null $isRequired - * @param mixed|null $default - * @return InjectionMethod - */ - public function addParameter($name, $class = null, $isRequired = null, $default = null) - { - $this->parameters[] = array( - $name, - $class, - self::detectMethodRequirement($isRequired), - $default, - ); - - return $this; - } - - /** - * @return array - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * - * @param mixed $requirement - * @return int - */ - public static function detectMethodRequirement($requirement) - { - if (is_bool($requirement)) { - return $requirement ? Di::METHOD_IS_REQUIRED : Di::METHOD_IS_OPTIONAL; - } - - if (null === $requirement) { - //This is mismatch to ClassDefinition::addMethod is it ok ? is optional? - return Di::METHOD_IS_REQUIRED; - } - - if (is_int($requirement)) { - return $requirement; - } - - if (is_string($requirement)) { - switch (strtolower($requirement)) { - default: - case "require": - case "required": - return Di::METHOD_IS_REQUIRED; - break; - case "aware": - return Di::METHOD_IS_AWARE; - break; - case "optional": - return Di::METHOD_IS_OPTIONAL; - break; - case "constructor": - return Di::METHOD_IS_CONSTRUCTOR; - break; - case "instantiator": - return Di::METHOD_IS_INSTANTIATOR; - break; - case "eager": - return Di::METHOD_IS_EAGER; - break; - } - } - return 0; - } -} diff --git a/library/Zend/Di/Definition/Builder/PhpClass.php b/library/Zend/Di/Definition/Builder/PhpClass.php deleted file mode 100755 index 80d4197a2..000000000 --- a/library/Zend/Di/Definition/Builder/PhpClass.php +++ /dev/null @@ -1,175 +0,0 @@ -name = $name; - - return $this; - } - - /** - * Get name - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @param string|\Callable|array $instantiator - * @return PhpClass - */ - public function setInstantiator($instantiator) - { - $this->instantiator = $instantiator; - - return $this; - } - - /** - * @return array|\Callable|string - */ - public function getInstantiator() - { - return $this->instantiator; - } - - /** - * @param string $superType - * @return PhpClass - */ - public function addSuperType($superType) - { - $this->superTypes[] = $superType; - - return $this; - } - - /** - * Get super types - * - * @return array - */ - public function getSuperTypes() - { - return $this->superTypes; - } - - /** - * Add injection method - * - * @param InjectionMethod $injectionMethod - * @return PhpClass - */ - public function addInjectionMethod(InjectionMethod $injectionMethod) - { - $this->injectionMethods[] = $injectionMethod; - - return $this; - } - - /** - * Create and register an injection method - * - * Optionally takes the method name. - * - * This method may be used in lieu of addInjectionMethod() in - * order to provide a more fluent interface for building classes with - * injection methods. - * - * @param null|string $name - * @return InjectionMethod - */ - public function createInjectionMethod($name = null) - { - $builder = $this->defaultMethodBuilder; - /* @var $method InjectionMethod */ - $method = new $builder(); - if (null !== $name) { - $method->setName($name); - } - $this->addInjectionMethod($method); - - return $method; - } - - /** - * Override which class will be used by {@link createInjectionMethod()} - * - * @param string $class - * @return PhpClass - */ - public function setMethodBuilder($class) - { - $this->defaultMethodBuilder = $class; - - return $this; - } - - /** - * Determine what class will be used by {@link createInjectionMethod()} - * - * Mainly to provide the ability to temporarily override the class used. - * - * @return string - */ - public function getMethodBuilder() - { - return $this->defaultMethodBuilder; - } - - /** - * @return InjectionMethod[] - */ - public function getInjectionMethods() - { - return $this->injectionMethods; - } -} diff --git a/library/Zend/Di/Definition/BuilderDefinition.php b/library/Zend/Di/Definition/BuilderDefinition.php deleted file mode 100755 index 6ad935a07..000000000 --- a/library/Zend/Di/Definition/BuilderDefinition.php +++ /dev/null @@ -1,321 +0,0 @@ - $classInfo) { - $class = new Builder\PhpClass(); - $class->setName($className); - foreach ($classInfo as $type => $typeData) { - switch (strtolower($type)) { - case 'supertypes': - foreach ($typeData as $superType) { - $class->addSuperType($superType); - } - break; - case 'instantiator': - $class->setInstantiator($typeData); - break; - case 'methods': - case 'method': - foreach ($typeData as $injectionMethodName => $injectionMethodData) { - $injectionMethod = new Builder\InjectionMethod(); - $injectionMethod->setName($injectionMethodName); - foreach ($injectionMethodData as $parameterName => $parameterType) { - $parameterType = ($parameterType) ?: null; // force empty string to null - $injectionMethod->addParameter($parameterName, $parameterType); - } - $class->addInjectionMethod($injectionMethod); - } - break; - - } - } - $this->addClass($class); - } - } - - /** - * Add class - * - * @param Builder\PhpClass $phpClass - * @return BuilderDefinition - */ - public function addClass(Builder\PhpClass $phpClass) - { - $this->classes[] = $phpClass; - - return $this; - } - - /** - * Create a class builder object using default class builder class - * - * This method is a factory that can be used in place of addClass(). - * - * @param null|string $name Optional name of class to assign - * @return Builder\PhpClass - */ - public function createClass($name = null) - { - $builderClass = $this->defaultClassBuilder; - /* @var $class Builder\PhpClass */ - $class = new $builderClass(); - - if (null !== $name) { - $class->setName($name); - } - - $this->addClass($class); - - return $class; - } - - /** - * Set the class to use with {@link createClass()} - * - * @param string $class - * @return BuilderDefinition - */ - public function setClassBuilder($class) - { - $this->defaultClassBuilder = $class; - - return $this; - } - - /** - * Get the class used for {@link createClass()} - * - * This is primarily to allow developers to temporarily override - * the builder strategy. - * - * @return string - */ - public function getClassBuilder() - { - return $this->defaultClassBuilder; - } - - /** - * {@inheritDoc} - */ - public function getClasses() - { - $classNames = array(); - - /* @var $class Builder\PhpClass */ - foreach ($this->classes as $class) { - $classNames[] = $class->getName(); - } - - return $classNames; - } - - /** - * {@inheritDoc} - */ - public function hasClass($class) - { - foreach ($this->classes as $classObj) { - if ($classObj->getName() === $class) { - return true; - } - } - - return false; - } - - /** - * @param string $name - * @return bool|Builder\PhpClass - */ - protected function getClass($name) - { - foreach ($this->classes as $classObj) { - if ($classObj->getName() === $name) { - return $classObj; - } - } - - return false; - } - - /** - * {@inheritDoc} - * @throws \Zend\Di\Exception\RuntimeException - */ - public function getClassSupertypes($class) - { - $class = $this->getClass($class); - - if ($class === false) { - throw new Exception\RuntimeException('Cannot find class object in this builder definition.'); - } - - return $class->getSuperTypes(); - } - - /** - * {@inheritDoc} - * @throws \Zend\Di\Exception\RuntimeException - */ - public function getInstantiator($class) - { - $class = $this->getClass($class); - if ($class === false) { - throw new Exception\RuntimeException('Cannot find class object in this builder definition.'); - } - - return $class->getInstantiator(); - } - - /** - * {@inheritDoc} - * @throws \Zend\Di\Exception\RuntimeException - */ - public function hasMethods($class) - { - /* @var $class \Zend\Di\Definition\Builder\PhpClass */ - $class = $this->getClass($class); - if ($class === false) { - throw new Exception\RuntimeException('Cannot find class object in this builder definition.'); - } - - return (count($class->getInjectionMethods()) > 0); - } - - /** - * {@inheritDoc} - * @throws \Zend\Di\Exception\RuntimeException - */ - public function getMethods($class) - { - $class = $this->getClass($class); - if ($class === false) { - throw new Exception\RuntimeException('Cannot find class object in this builder definition.'); - } - $methods = $class->getInjectionMethods(); - $methodNames = array(); - - /* @var $methodObj Builder\InjectionMethod */ - foreach ($methods as $methodObj) { - $methodNames[] = $methodObj->getName(); - } - - return $methodNames; - } - - /** - * {@inheritDoc} - * @throws \Zend\Di\Exception\RuntimeException - */ - public function hasMethod($class, $method) - { - $class = $this->getClass($class); - if ($class === false) { - throw new Exception\RuntimeException('Cannot find class object in this builder definition.'); - } - $methods = $class->getInjectionMethods(); - - /* @var $methodObj Builder\InjectionMethod */ - foreach ($methods as $methodObj) { - if ($methodObj->getName() === $method) { - return true; - } - } - - return false; - } - - /** - * {@inheritDoc} - */ - public function hasMethodParameters($class, $method) - { - $class = $this->getClass($class); - if ($class === false) { - return false; - } - $methods = $class->getInjectionMethods(); - /* @var $methodObj Builder\InjectionMethod */ - foreach ($methods as $methodObj) { - if ($methodObj->getName() === $method) { - $method = $methodObj; - } - } - if (!$method instanceof Builder\InjectionMethod) { - return false; - } - - /* @var $method Builder\InjectionMethod */ - - return (count($method->getParameters()) > 0); - } - - /** - * {@inheritDoc} - * @throws \Zend\Di\Exception\RuntimeException - */ - public function getMethodParameters($class, $method) - { - $class = $this->getClass($class); - - if ($class === false) { - throw new Exception\RuntimeException('Cannot find class object in this builder definition.'); - } - - $methods = $class->getInjectionMethods(); - - /* @var $methodObj Builder\InjectionMethod */ - foreach ($methods as $methodObj) { - if ($methodObj->getName() === $method) { - $method = $methodObj; - } - } - - if (!$method instanceof Builder\InjectionMethod) { - throw new Exception\RuntimeException('Cannot find method object for method ' . $method . ' in this builder definition.'); - } - - $methodParameters = array(); - - /* @var $method Builder\InjectionMethod */ - foreach ($method->getParameters() as $name => $info) { - $methodParameters[$class->getName() . '::' . $method->getName() . ':' . $name] = $info; - } - - return $methodParameters; - } -} diff --git a/library/Zend/Di/Definition/ClassDefinition.php b/library/Zend/Di/Definition/ClassDefinition.php deleted file mode 100755 index 2b110659d..000000000 --- a/library/Zend/Di/Definition/ClassDefinition.php +++ /dev/null @@ -1,231 +0,0 @@ -class = $class; - } - - /** - * @param null|\Callable|array|string $instantiator - * @return self - */ - public function setInstantiator($instantiator) - { - $this->instantiator = $instantiator; - - return $this; - } - - /** - * @param string[] $supertypes - * @return self - */ - public function setSupertypes(array $supertypes) - { - $this->supertypes = $supertypes; - - return $this; - } - - /** - * @param string $method - * @param mixed|bool|null $isRequired - * @return self - */ - public function addMethod($method, $isRequired = null) - { - if ($isRequired === null) { - if ($method === '__construct') { - $methodRequirementType = Di::METHOD_IS_CONSTRUCTOR; - } else { - $methodRequirementType = Di::METHOD_IS_OPTIONAL; - } - } else { - $methodRequirementType = InjectionMethod::detectMethodRequirement($isRequired); - } - - $this->methods[$method] = $methodRequirementType; - - return $this; - } - - /** - * @param $method - * @param $parameterName - * @param array $parameterInfo (keys: required, type) - * @return ClassDefinition - */ - public function addMethodParameter($method, $parameterName, array $parameterInfo) - { - if (!array_key_exists($method, $this->methods)) { - if ($method === '__construct') { - $this->methods[$method] = Di::METHOD_IS_CONSTRUCTOR; - } else { - $this->methods[$method] = Di::METHOD_IS_OPTIONAL; - } - } - - if (!array_key_exists($method, $this->methodParameters)) { - $this->methodParameters[$method] = array(); - } - - $type = (isset($parameterInfo['type'])) ? $parameterInfo['type'] : null; - $required = (isset($parameterInfo['required'])) ? (bool) $parameterInfo['required'] : false; - $default = (isset($parameterInfo['default'])) ? $parameterInfo['default'] : null; - - $fqName = $this->class . '::' . $method . ':' . $parameterName; - $this->methodParameters[$method][$fqName] = array( - $parameterName, - $type, - $required, - $default - ); - - return $this; - } - - /** - * {@inheritDoc} - */ - public function getClasses() - { - return array($this->class); - } - - /** - * {@inheritDoc} - */ - public function hasClass($class) - { - return ($class === $this->class); - } - - /** - * {@inheritDoc} - */ - public function getClassSupertypes($class) - { - if ($this->class !== $class) { - return array(); - } - return $this->supertypes; - } - - /** - * {@inheritDoc} - */ - public function getInstantiator($class) - { - if ($this->class !== $class) { - return null; - } - return $this->instantiator; - } - - /** - * {@inheritDoc} - */ - public function hasMethods($class) - { - return (count($this->methods) > 0); - } - - /** - * {@inheritDoc} - */ - public function getMethods($class) - { - if ($this->class !== $class) { - return array(); - } - return $this->methods; - } - - /** - * {@inheritDoc} - */ - public function hasMethod($class, $method) - { - if ($this->class !== $class) { - return null; - } - - if (is_array($this->methods)) { - return array_key_exists($method, $this->methods); - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function hasMethodParameters($class, $method) - { - if ($this->class !== $class) { - return false; - } - return (array_key_exists($method, $this->methodParameters)); - } - - /** - * {@inheritDoc} - */ - public function getMethodParameters($class, $method) - { - if ($this->class !== $class) { - return null; - } - - if (array_key_exists($method, $this->methodParameters)) { - return $this->methodParameters[$method]; - } - - return null; - } -} diff --git a/library/Zend/Di/Definition/CompilerDefinition.php b/library/Zend/Di/Definition/CompilerDefinition.php deleted file mode 100755 index dcecde10f..000000000 --- a/library/Zend/Di/Definition/CompilerDefinition.php +++ /dev/null @@ -1,397 +0,0 @@ -introspectionStrategy = ($introspectionStrategy) ?: new IntrospectionStrategy(); - $this->directoryScanner = new AggregateDirectoryScanner(); - } - - /** - * Set introspection strategy - * - * @param IntrospectionStrategy $introspectionStrategy - */ - public function setIntrospectionStrategy(IntrospectionStrategy $introspectionStrategy) - { - $this->introspectionStrategy = $introspectionStrategy; - } - - /** - * @param bool $allowReflectionExceptions - */ - public function setAllowReflectionExceptions($allowReflectionExceptions = true) - { - $this->allowReflectionExceptions = (bool) $allowReflectionExceptions; - } - - /** - * Get introspection strategy - * - * @return IntrospectionStrategy - */ - public function getIntrospectionStrategy() - { - return $this->introspectionStrategy; - } - - /** - * Add directory - * - * @param string $directory - */ - public function addDirectory($directory) - { - $this->addDirectoryScanner(new DirectoryScanner($directory)); - } - - /** - * Add directory scanner - * - * @param DirectoryScanner $directoryScanner - */ - public function addDirectoryScanner(DirectoryScanner $directoryScanner) - { - $this->directoryScanner->addDirectoryScanner($directoryScanner); - } - - /** - * Add code scanner file - * - * @param FileScanner $fileScanner - */ - public function addCodeScannerFile(FileScanner $fileScanner) - { - if ($this->directoryScanner == null) { - $this->directoryScanner = new DirectoryScanner(); - } - - $this->directoryScanner->addFileScanner($fileScanner); - } - - /** - * Compile - * - * @return void - */ - public function compile() - { - /* @var $classScanner DerivedClassScanner */ - foreach ($this->directoryScanner->getClassNames() as $class) { - $this->processClass($class); - } - } - - /** - * @return ArrayDefinition - */ - public function toArrayDefinition() - { - return new ArrayDefinition( - $this->classes - ); - } - - /** - * @param string $class - * @throws \ReflectionException - */ - protected function processClass($class) - { - $strategy = $this->introspectionStrategy; // localize for readability - - try { - $rClass = new Reflection\ClassReflection($class); - } catch (\ReflectionException $e) { - if (!$this->allowReflectionExceptions) { - throw $e; - } - - return; - } - $className = $rClass->getName(); - $matches = null; // used for regex below - - // setup the key in classes - $this->classes[$className] = array( - 'supertypes' => array(), - 'instantiator' => null, - 'methods' => array(), - 'parameters' => array() - ); - - $def = &$this->classes[$className]; // localize for brevity - - // class annotations? - if ($strategy->getUseAnnotations() == true) { - $annotations = $rClass->getAnnotations($strategy->getAnnotationManager()); - - if (($annotations instanceof AnnotationCollection) - && $annotations->hasAnnotation('Zend\Di\Definition\Annotation\Instantiator') - ) { - // @todo Instantiator support in annotations - } - } - - /* @var $rTarget \Zend\Code\Reflection\ClassReflection */ - $rTarget = $rClass; - $supertypes = array(); - do { - $supertypes = array_merge($supertypes, $rTarget->getInterfaceNames()); - if (!($rTargetParent = $rTarget->getParentClass())) { - break; - } - $supertypes[] = $rTargetParent->getName(); - $rTarget = $rTargetParent; - } while (true); - - $def['supertypes'] = $supertypes; - - if ($def['instantiator'] == null) { - if ($rClass->isInstantiable()) { - $def['instantiator'] = '__construct'; - } - } - - if ($rClass->hasMethod('__construct')) { - $def['methods']['__construct'] = true; // required - try { - $this->processParams($def, $rClass, $rClass->getMethod('__construct')); - } catch (\ReflectionException $e) { - if (!$this->allowReflectionExceptions) { - throw $e; - } - - return; - } - } - - foreach ($rClass->getMethods(Reflection\MethodReflection::IS_PUBLIC) as $rMethod) { - $methodName = $rMethod->getName(); - - if ($rMethod->getName() === '__construct' || $rMethod->isStatic()) { - continue; - } - - if ($strategy->getUseAnnotations() == true) { - $annotations = $rMethod->getAnnotations($strategy->getAnnotationManager()); - - if (($annotations instanceof AnnotationCollection) - && $annotations->hasAnnotation('Zend\Di\Definition\Annotation\Inject') - ) { - $def['methods'][$methodName] = true; - $this->processParams($def, $rClass, $rMethod); - continue; - } - } - - $methodPatterns = $this->introspectionStrategy->getMethodNameInclusionPatterns(); - - // matches a method injection pattern? - foreach ($methodPatterns as $methodInjectorPattern) { - preg_match($methodInjectorPattern, $methodName, $matches); - if ($matches) { - $def['methods'][$methodName] = false; // check ot see if this is required? - $this->processParams($def, $rClass, $rMethod); - continue 2; - } - } - - // method - // by annotation - // by setter pattern, - // by interface - } - - $interfaceInjectorPatterns = $this->introspectionStrategy->getInterfaceInjectionInclusionPatterns(); - - // matches the interface injection pattern - /** @var $rIface \ReflectionClass */ - foreach ($rClass->getInterfaces() as $rIface) { - foreach ($interfaceInjectorPatterns as $interfaceInjectorPattern) { - preg_match($interfaceInjectorPattern, $rIface->getName(), $matches); - if ($matches) { - foreach ($rIface->getMethods() as $rMethod) { - if (($rMethod->getName() === '__construct') || !count($rMethod->getParameters())) { - // constructor not allowed in interfaces - // ignore methods without parameters - continue; - } - $def['methods'][$rMethod->getName()] = true; - $this->processParams($def, $rClass, $rMethod); - } - continue 2; - } - } - } - } - - /** - * @param array $def - * @param \Zend\Code\Reflection\ClassReflection $rClass - * @param \Zend\Code\Reflection\MethodReflection $rMethod - */ - protected function processParams(&$def, Reflection\ClassReflection $rClass, Reflection\MethodReflection $rMethod) - { - if (count($rMethod->getParameters()) === 0) { - return; - } - - $methodName = $rMethod->getName(); - - // @todo annotations here for alternate names? - - $def['parameters'][$methodName] = array(); - - foreach ($rMethod->getParameters() as $p) { - /** @var $p \ReflectionParameter */ - $actualParamName = $p->getName(); - $fqName = $rClass->getName() . '::' . $rMethod->getName() . ':' . $p->getPosition(); - $def['parameters'][$methodName][$fqName] = array(); - - // set the class name, if it exists - $def['parameters'][$methodName][$fqName][] = $actualParamName; - $def['parameters'][$methodName][$fqName][] = ($p->getClass() !== null) ? $p->getClass()->getName() : null; - $def['parameters'][$methodName][$fqName][] = !($optional =$p->isOptional()); - $def['parameters'][$methodName][$fqName][] = $optional && $p->isDefaultValueAvailable() ? $p->getDefaultValue() : null; - } - } - - /** - * {@inheritDoc} - */ - public function getClasses() - { - return array_keys($this->classes); - } - - /** - * {@inheritDoc} - */ - public function hasClass($class) - { - return (array_key_exists($class, $this->classes)); - } - - /** - * {@inheritDoc} - */ - public function getClassSupertypes($class) - { - if (!array_key_exists($class, $this->classes)) { - $this->processClass($class); - } - - return $this->classes[$class]['supertypes']; - } - - /** - * {@inheritDoc} - */ - public function getInstantiator($class) - { - if (!array_key_exists($class, $this->classes)) { - $this->processClass($class); - } - - return $this->classes[$class]['instantiator']; - } - - /** - * {@inheritDoc} - */ - public function hasMethods($class) - { - if (!array_key_exists($class, $this->classes)) { - $this->processClass($class); - } - - return (count($this->classes[$class]['methods']) > 0); - } - - /** - * {@inheritDoc} - */ - public function hasMethod($class, $method) - { - if (!array_key_exists($class, $this->classes)) { - $this->processClass($class); - } - - return isset($this->classes[$class]['methods'][$method]); - } - - /** - * {@inheritDoc} - */ - public function getMethods($class) - { - if (!array_key_exists($class, $this->classes)) { - $this->processClass($class); - } - - return $this->classes[$class]['methods']; - } - - /** - * {@inheritDoc} - */ - public function hasMethodParameters($class, $method) - { - if (!isset($this->classes[$class])) { - return false; - } - - return (array_key_exists($method, $this->classes[$class]['parameters'])); - } - - /** - * {@inheritDoc} - */ - public function getMethodParameters($class, $method) - { - if (!is_array($this->classes[$class])) { - $this->processClass($class); - } - - return $this->classes[$class]['parameters'][$method]; - } -} diff --git a/library/Zend/Di/Definition/DefinitionInterface.php b/library/Zend/Di/Definition/DefinitionInterface.php deleted file mode 100755 index 420bb459d..000000000 --- a/library/Zend/Di/Definition/DefinitionInterface.php +++ /dev/null @@ -1,101 +0,0 @@ -annotationManager = ($annotationManager) ?: $this->createDefaultAnnotationManager(); - } - - /** - * Get annotation manager - * - * @return null|AnnotationManager - */ - public function getAnnotationManager() - { - return $this->annotationManager; - } - - /** - * Create default annotation manager - * - * @return AnnotationManager - */ - public function createDefaultAnnotationManager() - { - $annotationManager = new AnnotationManager; - $parser = new GenericAnnotationParser(); - $parser->registerAnnotation(new Annotation\Inject()); - $annotationManager->attach($parser); - - return $annotationManager; - } - - /** - * set use annotations - * - * @param bool $useAnnotations - */ - public function setUseAnnotations($useAnnotations) - { - $this->useAnnotations = (bool) $useAnnotations; - } - - /** - * Get use annotations - * - * @return bool - */ - public function getUseAnnotations() - { - return $this->useAnnotations; - } - - /** - * Set method name inclusion pattern - * - * @param array $methodNameInclusionPatterns - */ - public function setMethodNameInclusionPatterns(array $methodNameInclusionPatterns) - { - $this->methodNameInclusionPatterns = $methodNameInclusionPatterns; - } - - /** - * Get method name inclusion pattern - * - * @return array - */ - public function getMethodNameInclusionPatterns() - { - return $this->methodNameInclusionPatterns; - } - - /** - * Set interface injection inclusion patterns - * - * @param array $interfaceInjectionInclusionPatterns - */ - public function setInterfaceInjectionInclusionPatterns(array $interfaceInjectionInclusionPatterns) - { - $this->interfaceInjectionInclusionPatterns = $interfaceInjectionInclusionPatterns; - } - - /** - * Get interface injection inclusion patterns - * - * @return array - */ - public function getInterfaceInjectionInclusionPatterns() - { - return $this->interfaceInjectionInclusionPatterns; - } -} diff --git a/library/Zend/Di/Definition/PartialMarker.php b/library/Zend/Di/Definition/PartialMarker.php deleted file mode 100755 index 4a40728f0..000000000 --- a/library/Zend/Di/Definition/PartialMarker.php +++ /dev/null @@ -1,14 +0,0 @@ -introspectionStrategy = ($introspectionStrategy) ?: new IntrospectionStrategy(); - if ($explicitClasses) { - $this->setExplicitClasses($explicitClasses); - } - } - - /** - * @param IntrospectionStrategy $introspectionStrategy - * @return void - */ - public function setIntrospectionStrategy(IntrospectionStrategy $introspectionStrategy) - { - $this->introspectionStrategy = $introspectionStrategy; - } - - /** - * @return IntrospectionStrategy - */ - public function getIntrospectionStrategy() - { - return $this->introspectionStrategy; - } - - /** - * Set explicit classes - * - * @param array $explicitClasses - */ - public function setExplicitClasses(array $explicitClasses) - { - $this->explicitLookups = true; - foreach ($explicitClasses as $eClass) { - $this->classes[$eClass] = true; - } - $this->classes = $explicitClasses; - } - - /** - * @param string $class - */ - public function forceLoadClass($class) - { - $this->processClass($class, true); - } - - /** - * {@inheritDoc} - */ - public function getClasses() - { - return array_keys($this->classes); - } - - /** - * {@inheritDoc} - */ - public function hasClass($class) - { - if ($this->explicitLookups === true) { - return (array_key_exists($class, $this->classes)); - } - - return class_exists($class) || interface_exists($class); - } - - /** - * {@inheritDoc} - */ - public function getClassSupertypes($class) - { - $this->processClass($class); - return $this->classes[$class]['supertypes']; - } - - /** - * {@inheritDoc} - */ - public function getInstantiator($class) - { - $this->processClass($class); - return $this->classes[$class]['instantiator']; - } - - /** - * {@inheritDoc} - */ - public function hasMethods($class) - { - $this->processClass($class); - return (count($this->classes[$class]['methods']) > 0); - } - - /** - * {@inheritDoc} - */ - public function hasMethod($class, $method) - { - $this->processClass($class); - return isset($this->classes[$class]['methods'][$method]); - } - - /** - * {@inheritDoc} - */ - public function getMethods($class) - { - $this->processClass($class); - return $this->classes[$class]['methods']; - } - - /** - * {@inheritDoc} - */ - public function hasMethodParameters($class, $method) - { - $this->processClass($class); - return (array_key_exists($method, $this->classes[$class]['parameters'])); - } - - /** - * {@inheritDoc} - */ - public function getMethodParameters($class, $method) - { - $this->processClass($class); - return $this->classes[$class]['parameters'][$method]; - } - - /** - * @param string $class - * - * @return bool - */ - protected function hasProcessedClass($class) - { - return array_key_exists($class, $this->classes) && is_array($this->classes[$class]); - } - - /** - * @param string $class - * @param bool $forceLoad - */ - protected function processClass($class, $forceLoad = false) - { - if (!$forceLoad && $this->hasProcessedClass($class)) { - return; - } - $strategy = $this->introspectionStrategy; // localize for readability - - /** @var $rClass \Zend\Code\Reflection\ClassReflection */ - $rClass = new Reflection\ClassReflection($class); - $className = $rClass->getName(); - $matches = null; // used for regex below - - // setup the key in classes - $this->classes[$className] = array( - 'supertypes' => array(), - 'instantiator' => null, - 'methods' => array(), - 'parameters' => array() - ); - - $def = &$this->classes[$className]; // localize for brevity - - // class annotations? - if ($strategy->getUseAnnotations() == true) { - $annotations = $rClass->getAnnotations($strategy->getAnnotationManager()); - - if (($annotations instanceof AnnotationCollection) - && $annotations->hasAnnotation('Zend\Di\Definition\Annotation\Instantiator')) { - // @todo Instantiator support in annotations - } - } - - $rTarget = $rClass; - $supertypes = array(); - do { - $supertypes = array_merge($supertypes, $rTarget->getInterfaceNames()); - if (!($rTargetParent = $rTarget->getParentClass())) { - break; - } - $supertypes[] = $rTargetParent->getName(); - $rTarget = $rTargetParent; - } while (true); - - $def['supertypes'] = $supertypes; - - if ($def['instantiator'] == null) { - if ($rClass->isInstantiable()) { - $def['instantiator'] = '__construct'; - } - } - - if ($rClass->hasMethod('__construct')) { - $def['methods']['__construct'] = Di::METHOD_IS_CONSTRUCTOR; // required - $this->processParams($def, $rClass, $rClass->getMethod('__construct')); - } - - foreach ($rClass->getMethods(Reflection\MethodReflection::IS_PUBLIC) as $rMethod) { - $methodName = $rMethod->getName(); - - if ($rMethod->getName() === '__construct' || $rMethod->isStatic()) { - continue; - } - - if ($strategy->getUseAnnotations() == true) { - $annotations = $rMethod->getAnnotations($strategy->getAnnotationManager()); - - if (($annotations instanceof AnnotationCollection) - && $annotations->hasAnnotation('Zend\Di\Definition\Annotation\Inject')) { - // use '@inject' and search for parameters - $def['methods'][$methodName] = Di::METHOD_IS_EAGER; - $this->processParams($def, $rClass, $rMethod); - continue; - } - } - - $methodPatterns = $this->introspectionStrategy->getMethodNameInclusionPatterns(); - - // matches a method injection pattern? - foreach ($methodPatterns as $methodInjectorPattern) { - preg_match($methodInjectorPattern, $methodName, $matches); - if ($matches) { - $def['methods'][$methodName] = Di::METHOD_IS_OPTIONAL; // check ot see if this is required? - $this->processParams($def, $rClass, $rMethod); - continue 2; - } - } - - // method - // by annotation - // by setter pattern, - // by interface - } - - $interfaceInjectorPatterns = $this->introspectionStrategy->getInterfaceInjectionInclusionPatterns(); - - // matches the interface injection pattern - /** @var $rIface \ReflectionClass */ - foreach ($rClass->getInterfaces() as $rIface) { - foreach ($interfaceInjectorPatterns as $interfaceInjectorPattern) { - preg_match($interfaceInjectorPattern, $rIface->getName(), $matches); - if ($matches) { - foreach ($rIface->getMethods() as $rMethod) { - if (($rMethod->getName() === '__construct') || !count($rMethod->getParameters())) { - // constructor not allowed in interfaces - // Don't call interface methods without a parameter (Some aware interfaces define setters in ZF2) - continue; - } - $def['methods'][$rMethod->getName()] = Di::METHOD_IS_AWARE; - $this->processParams($def, $rClass, $rMethod); - } - continue 2; - } - } - } - } - - /** - * @param array $def - * @param \Zend\Code\Reflection\ClassReflection $rClass - * @param \Zend\Code\Reflection\MethodReflection $rMethod - */ - protected function processParams(&$def, Reflection\ClassReflection $rClass, Reflection\MethodReflection $rMethod) - { - if (count($rMethod->getParameters()) === 0) { - return; - } - - $methodName = $rMethod->getName(); - - // @todo annotations here for alternate names? - - $def['parameters'][$methodName] = array(); - - foreach ($rMethod->getParameters() as $p) { - /** @var $p \ReflectionParameter */ - $actualParamName = $p->getName(); - - $fqName = $rClass->getName() . '::' . $rMethod->getName() . ':' . $p->getPosition(); - - $def['parameters'][$methodName][$fqName] = array(); - - // set the class name, if it exists - $def['parameters'][$methodName][$fqName][] = $actualParamName; - $def['parameters'][$methodName][$fqName][] = ($p->getClass() !== null) ? $p->getClass()->getName() : null; - $def['parameters'][$methodName][$fqName][] = !($optional = $p->isOptional() && $p->isDefaultValueAvailable()); - $def['parameters'][$methodName][$fqName][] = $optional ? $p->getDefaultValue() : null; - } - } -} diff --git a/library/Zend/Di/DefinitionList.php b/library/Zend/Di/DefinitionList.php deleted file mode 100755 index efe190e57..000000000 --- a/library/Zend/Di/DefinitionList.php +++ /dev/null @@ -1,257 +0,0 @@ -push($definition); - } - } - - /** - * Add definitions - * - * @param Definition\DefinitionInterface $definition - * @param bool $addToBackOfList - * @return void - */ - public function addDefinition(Definition\DefinitionInterface $definition, $addToBackOfList = true) - { - if ($addToBackOfList) { - $this->push($definition); - } else { - $this->unshift($definition); - } - } - - /** - * @param string $type - * @return Definition\DefinitionInterface[] - */ - public function getDefinitionsByType($type) - { - $definitions = array(); - foreach ($this as $definition) { - if ($definition instanceof $type) { - $definitions[] = $definition; - } - } - - return $definitions; - } - - /** - * Get definition by type - * - * @param string $type - * @return Definition\DefinitionInterface - */ - public function getDefinitionByType($type) - { - foreach ($this as $definition) { - if ($definition instanceof $type) { - return $definition; - } - } - - return false; - } - - /** - * @param string $class - * @return bool|Definition\DefinitionInterface - */ - public function getDefinitionForClass($class) - { - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - if ($definition->hasClass($class)) { - return $definition; - } - } - - return false; - } - - /** - * @param string $class - * @return bool|Definition\DefinitionInterface - */ - public function forClass($class) - { - return $this->getDefinitionForClass($class); - } - - /** - * {@inheritDoc} - */ - public function getClasses() - { - $classes = array(); - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - $classes = array_merge($classes, $definition->getClasses()); - } - - return $classes; - } - - /** - * {@inheritDoc} - */ - public function hasClass($class) - { - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - if ($definition->hasClass($class)) { - return true; - } - } - - return false; - } - - /** - * {@inheritDoc} - */ - public function getClassSupertypes($class) - { - $supertypes = array(); - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - if ($definition->hasClass($class)) { - $supertypes = array_merge($supertypes, $definition->getClassSupertypes($class)); - if ($definition instanceof Definition\PartialMarker) { - continue; - } - - return $supertypes; - } - } - return $supertypes; - } - - /** - * {@inheritDoc} - */ - public function getInstantiator($class) - { - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - if ($definition->hasClass($class)) { - $value = $definition->getInstantiator($class); - if ($value === null && $definition instanceof Definition\PartialMarker) { - continue; - } - - return $value; - } - } - - return false; - } - - /** - * {@inheritDoc} - */ - public function hasMethods($class) - { - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - if ($definition->hasClass($class)) { - if ($definition->hasMethods($class) === false && $definition instanceof Definition\PartialMarker) { - continue; - } - - return $definition->hasMethods($class); - } - } - - return false; - } - - /** - * {@inheritDoc} - */ - public function hasMethod($class, $method) - { - if (!$this->hasMethods($class)) { - return false; - } - - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - if ($definition->hasClass($class) && $definition->hasMethod($class, $method)) { - return true; - } - } - - return false; - } - - /** - * {@inheritDoc} - */ - public function getMethods($class) - { - /** @var $definition Definition\DefinitionInterface */ - $methods = array(); - foreach ($this as $definition) { - if ($definition->hasClass($class)) { - if (!$definition instanceof Definition\PartialMarker) { - return array_merge($definition->getMethods($class), $methods); - } - - $methods = array_merge($definition->getMethods($class), $methods); - } - } - - return $methods; - } - - /** - * {@inheritDoc} - */ - public function hasMethodParameters($class, $method) - { - $methodParameters = $this->getMethodParameters($class, $method); - - return ($methodParameters !== array()); - } - - /** - * {@inheritDoc} - */ - public function getMethodParameters($class, $method) - { - /** @var $definition Definition\DefinitionInterface */ - foreach ($this as $definition) { - if ($definition->hasClass($class) && $definition->hasMethod($class, $method) && $definition->hasMethodParameters($class, $method)) { - return $definition->getMethodParameters($class, $method); - } - } - - return array(); - } -} diff --git a/library/Zend/Di/DependencyInjectionInterface.php b/library/Zend/Di/DependencyInjectionInterface.php deleted file mode 100755 index b82187613..000000000 --- a/library/Zend/Di/DependencyInjectionInterface.php +++ /dev/null @@ -1,25 +0,0 @@ -definitions = ($definitions) ?: new DefinitionList(new Definition\RuntimeDefinition()); - $this->instanceManager = ($instanceManager) ?: new InstanceManager(); - - if ($config) { - $this->configure($config); - } - } - - /** - * Provide a configuration object to configure this instance - * - * @param Config $config - * @return void - */ - public function configure(Config $config) - { - $config->configure($this); - } - - /** - * @param DefinitionList $definitions - * @return self - */ - public function setDefinitionList(DefinitionList $definitions) - { - $this->definitions = $definitions; - - return $this; - } - - /** - * @return DefinitionList - */ - public function definitions() - { - return $this->definitions; - } - - /** - * Set the instance manager - * - * @param InstanceManager $instanceManager - * @return Di - */ - public function setInstanceManager(InstanceManager $instanceManager) - { - $this->instanceManager = $instanceManager; - - return $this; - } - - /** - * - * @return InstanceManager - */ - public function instanceManager() - { - return $this->instanceManager; - } - - /** - * Utility method used to retrieve the class of a particular instance. This is here to allow extending classes to - * override how class names are resolved - * - * @internal this method is used by the ServiceLocator\DependencyInjectorProxy class to interact with instances - * and is a hack to be used internally until a major refactor does not split the `resolveMethodParameters`. Do not - * rely on its functionality. - * @param object $instance - * @return string - */ - protected function getClass($instance) - { - return get_class($instance); - } - - /** - * @param $name - * @param array $params - * @param string $method - * @return array - */ - protected function getCallParameters($name, array $params, $method = "__construct") - { - $im = $this->instanceManager; - $class = $im->hasAlias($name) ? $im->getClassFromAlias($name) : $name; - if ($this->definitions->hasClass($class)) { - $callParameters = array(); - if ($this->definitions->hasMethod($class, $method)) { - foreach ($this->definitions->getMethodParameters($class, $method) as $param) { - if (isset($params[$param[0]])) { - $callParameters[$param[0]] = $params[$param[0]]; - } - } - } - return $callParameters; - } - return $params; - } - - /** - * Lazy-load a class - * - * Attempts to load the class (or service alias) provided. If it has been - * loaded before, the previous instance will be returned (unless the service - * definition indicates shared instances should not be used). - * - * @param string $name Class name or service alias - * @param null|array $params Parameters to pass to the constructor - * @return object|null - */ - public function get($name, array $params = array()) - { - array_push($this->instanceContext, array('GET', $name, null)); - - $im = $this->instanceManager; - - $callParameters = $this->getCallParameters($name, $params); - if ($callParameters) { - $fastHash = $im->hasSharedInstanceWithParameters($name, $callParameters, true); - if ($fastHash) { - array_pop($this->instanceContext); - return $im->getSharedInstanceWithParameters(null, array(), $fastHash); - } - } - - if ($im->hasSharedInstance($name, $callParameters)) { - array_pop($this->instanceContext); - return $im->getSharedInstance($name, $callParameters); - } - - - $config = $im->getConfig($name); - $instance = $this->newInstance($name, $params, $config['shared']); - array_pop($this->instanceContext); - - return $instance; - } - - /** - * Retrieve a new instance of a class - * - * Forces retrieval of a discrete instance of the given class, using the - * constructor parameters provided. - * - * @param mixed $name Class name or service alias - * @param array $params Parameters to pass to the constructor - * @param bool $isShared - * @return object|null - * @throws Exception\ClassNotFoundException - * @throws Exception\RuntimeException - */ - public function newInstance($name, array $params = array(), $isShared = true) - { - // localize dependencies - $definitions = $this->definitions; - $instanceManager = $this->instanceManager(); - - if ($instanceManager->hasAlias($name)) { - $class = $instanceManager->getClassFromAlias($name); - $alias = $name; - } else { - $class = $name; - $alias = null; - } - - array_push($this->instanceContext, array('NEW', $class, $alias)); - - if (!$definitions->hasClass($class)) { - $aliasMsg = ($alias) ? '(specified by alias ' . $alias . ') ' : ''; - throw new Exception\ClassNotFoundException( - 'Class ' . $aliasMsg . $class . ' could not be located in provided definitions.' - ); - } - - $instantiator = $definitions->getInstantiator($class); - $injectionMethods = array(); - $injectionMethods[$class] = $definitions->getMethods($class); - - foreach ($definitions->getClassSupertypes($class) as $supertype) { - $injectionMethods[$supertype] = $definitions->getMethods($supertype); - } - - if ($instantiator === '__construct') { - $instance = $this->createInstanceViaConstructor($class, $params, $alias); - if (array_key_exists('__construct', $injectionMethods)) { - unset($injectionMethods['__construct']); - } - } elseif (is_callable($instantiator, false)) { - $instance = $this->createInstanceViaCallback($instantiator, $params, $alias); - } else { - if (is_array($instantiator)) { - $msg = sprintf( - 'Invalid instantiator: %s::%s() is not callable.', - isset($instantiator[0]) ? $instantiator[0] : 'NoClassGiven', - isset($instantiator[1]) ? $instantiator[1] : 'NoMethodGiven' - ); - } else { - $msg = sprintf( - 'Invalid instantiator of type "%s" for "%s".', - gettype($instantiator), - $name - ); - } - throw new Exception\RuntimeException($msg); - } - - if ($isShared) { - if ($callParameters = $this->getCallParameters($name, $params)) { - $this->instanceManager->addSharedInstanceWithParameters($instance, $name, $callParameters); - } else { - $this->instanceManager->addSharedInstance($instance, $name); - } - } - - $this->handleInjectDependencies($instance, $injectionMethods, $params, $class, $alias, $name); - - array_pop($this->instanceContext); - - return $instance; - } - - /** - * Inject dependencies - * - * @param object $instance - * @param array $params - * @return void - */ - public function injectDependencies($instance, array $params = array()) - { - $definitions = $this->definitions(); - $class = $this->getClass($instance); - $injectionMethods = array( - $class => ($definitions->hasClass($class)) ? $definitions->getMethods($class) : array() - ); - $parent = $class; - while ($parent = get_parent_class($parent)) { - if ($definitions->hasClass($parent)) { - $injectionMethods[$parent] = $definitions->getMethods($parent); - } - } - foreach (class_implements($class) as $interface) { - if ($definitions->hasClass($interface)) { - $injectionMethods[$interface] = $definitions->getMethods($interface); - } - } - $this->handleInjectDependencies($instance, $injectionMethods, $params, $class, null, null); - } - - /** - * @param object $instance - * @param array $injectionMethods - * @param array $params - * @param string|null $instanceClass - * @param string|null$instanceAlias - * @param string $requestedName - * @throws Exception\RuntimeException - */ - protected function handleInjectDependencies($instance, $injectionMethods, $params, $instanceClass, $instanceAlias, $requestedName) - { - // localize dependencies - $definitions = $this->definitions; - $instanceManager = $this->instanceManager(); - - $calledMethods = array('__construct' => true); - - if ($injectionMethods) { - foreach ($injectionMethods as $type => $typeInjectionMethods) { - foreach ($typeInjectionMethods as $typeInjectionMethod => $methodRequirementType) { - if (!isset($calledMethods[$typeInjectionMethod])) { - if ($this->resolveAndCallInjectionMethodForInstance($instance, $typeInjectionMethod, $params, $instanceAlias, $methodRequirementType, $type)) { - $calledMethods[$typeInjectionMethod] = true; - } - } - } - } - - if ($requestedName) { - $instanceConfig = $instanceManager->getConfig($requestedName); - - if ($instanceConfig['injections']) { - $objectsToInject = $methodsToCall = array(); - foreach ($instanceConfig['injections'] as $injectName => $injectValue) { - if (is_int($injectName) && is_string($injectValue)) { - $objectsToInject[] = $this->get($injectValue, $params); - } elseif (is_string($injectName) && is_array($injectValue)) { - if (is_string(key($injectValue))) { - $methodsToCall[] = array('method' => $injectName, 'args' => $injectValue); - } else { - foreach ($injectValue as $methodCallArgs) { - $methodsToCall[] = array('method' => $injectName, 'args' => $methodCallArgs); - } - } - } elseif (is_object($injectValue)) { - $objectsToInject[] = $injectValue; - } elseif (is_int($injectName) && is_array($injectValue)) { - throw new Exception\RuntimeException( - 'An injection was provided with a keyed index and an array of data, try using' - . ' the name of a particular method as a key for your injection data.' - ); - } - } - if ($objectsToInject) { - foreach ($objectsToInject as $objectToInject) { - $calledMethods = array('__construct' => true); - foreach ($injectionMethods as $type => $typeInjectionMethods) { - foreach ($typeInjectionMethods as $typeInjectionMethod => $methodRequirementType) { - if (!isset($calledMethods[$typeInjectionMethod])) { - $methodParams = $definitions->getMethodParameters($type, $typeInjectionMethod); - if ($methodParams) { - foreach ($methodParams as $methodParam) { - $objectToInjectClass = $this->getClass($objectToInject); - if ($objectToInjectClass == $methodParam[1] || self::isSubclassOf($objectToInjectClass, $methodParam[1])) { - if ($this->resolveAndCallInjectionMethodForInstance($instance, $typeInjectionMethod, array($methodParam[0] => $objectToInject), $instanceAlias, self::METHOD_IS_REQUIRED, $type)) { - $calledMethods[$typeInjectionMethod] = true; - } - continue 3; - } - } - } - } - } - } - } - } - if ($methodsToCall) { - foreach ($methodsToCall as $methodInfo) { - $this->resolveAndCallInjectionMethodForInstance($instance, $methodInfo['method'], $methodInfo['args'], $instanceAlias, self::METHOD_IS_REQUIRED, $instanceClass); - } - } - } - } - } - } - - /** - * Retrieve a class instance based on class name - * - * Any parameters provided will be used as constructor arguments. If any - * given parameter is a DependencyReference object, it will be fetched - * from the container so that the instance may be injected. - * - * @param string $class - * @param array $params - * @param string|null $alias - * @return object - */ - protected function createInstanceViaConstructor($class, $params, $alias = null) - { - $callParameters = array(); - if ($this->definitions->hasMethod($class, '__construct')) { - $callParameters = $this->resolveMethodParameters($class, '__construct', $params, $alias, self::METHOD_IS_CONSTRUCTOR, true); - } - - if (!class_exists($class)) { - if (interface_exists($class)) { - throw new Exception\ClassNotFoundException(sprintf( - 'Cannot instantiate interface "%s"', - $class - )); - } - throw new Exception\ClassNotFoundException(sprintf( - 'Class "%s" does not exist; cannot instantiate', - $class - )); - } - - // Hack to avoid Reflection in most common use cases - switch (count($callParameters)) { - case 0: - return new $class(); - case 1: - return new $class($callParameters[0]); - case 2: - return new $class($callParameters[0], $callParameters[1]); - case 3: - return new $class($callParameters[0], $callParameters[1], $callParameters[2]); - default: - $r = new \ReflectionClass($class); - - return $r->newInstanceArgs($callParameters); - } - } - - /** - * Get an object instance from the defined callback - * - * @param callable $callback - * @param array $params - * @param string $alias - * @return object - * @throws Exception\InvalidCallbackException - * @throws Exception\RuntimeException - */ - protected function createInstanceViaCallback($callback, $params, $alias) - { - if (!is_callable($callback)) { - throw new Exception\InvalidCallbackException('An invalid constructor callback was provided'); - } - - if (is_array($callback)) { - $class = (is_object($callback[0])) ? $this->getClass($callback[0]) : $callback[0]; - $method = $callback[1]; - } elseif (is_string($callback) && strpos($callback, '::') !== false) { - list($class, $method) = explode('::', $callback, 2); - } else { - throw new Exception\RuntimeException('Invalid callback type provided to ' . __METHOD__); - } - - $callParameters = array(); - if ($this->definitions->hasMethod($class, $method)) { - $callParameters = $this->resolveMethodParameters($class, $method, $params, $alias, self::METHOD_IS_INSTANTIATOR, true); - } - - return call_user_func_array($callback, $callParameters); - } - - /** - * This parameter will handle any injection methods and resolution of - * dependencies for such methods - * - * @param object $instance - * @param string $method - * @param array $params - * @param string $alias - * @param bool $methodRequirementType - * @param string|null $methodClass - * @return bool - */ - protected function resolveAndCallInjectionMethodForInstance($instance, $method, $params, $alias, $methodRequirementType, $methodClass = null) - { - $methodClass = ($methodClass) ?: $this->getClass($instance); - $callParameters = $this->resolveMethodParameters($methodClass, $method, $params, $alias, $methodRequirementType); - if ($callParameters == false) { - return false; - } - if ($callParameters !== array_fill(0, count($callParameters), null)) { - call_user_func_array(array($instance, $method), $callParameters); - - return true; - } - - return false; - } - - /** - * Resolve parameters referencing other services - * - * @param string $class - * @param string $method - * @param array $callTimeUserParams - * @param string $alias - * @param int|bool $methodRequirementType - * @param bool $isInstantiator - * @throws Exception\MissingPropertyException - * @throws Exception\CircularDependencyException - * @return array - */ - protected function resolveMethodParameters($class, $method, array $callTimeUserParams, $alias, $methodRequirementType, $isInstantiator = false) - { - //for BC - if (is_bool($methodRequirementType)) { - if ($isInstantiator) { - $methodRequirementType = Di::METHOD_IS_INSTANTIATOR; - } elseif ($methodRequirementType) { - $methodRequirementType = Di::METHOD_IS_REQUIRED; - } else { - $methodRequirementType = Di::METHOD_IS_OPTIONAL; - } - } - // parameters for this method, in proper order, to be returned - $resolvedParams = array(); - - // parameter requirements from the definition - $injectionMethodParameters = $this->definitions->getMethodParameters($class, $method); - - // computed parameters array - $computedParams = array( - 'value' => array(), - 'retrieval' => array(), - 'optional' => array() - ); - - // retrieve instance configurations for all contexts - $iConfig = array(); - $aliases = $this->instanceManager->getAliases(); - - // for the alias in the dependency tree - if ($alias && $this->instanceManager->hasConfig($alias)) { - $iConfig['thisAlias'] = $this->instanceManager->getConfig($alias); - } - - // for the current class in the dependency tree - if ($this->instanceManager->hasConfig($class)) { - $iConfig['thisClass'] = $this->instanceManager->getConfig($class); - } - - // for the parent class, provided we are deeper than one node - if (isset($this->instanceContext[0])) { - list($requestedClass, $requestedAlias) = ($this->instanceContext[0][0] == 'NEW') - ? array($this->instanceContext[0][1], $this->instanceContext[0][2]) - : array($this->instanceContext[1][1], $this->instanceContext[1][2]); - } else { - $requestedClass = $requestedAlias = null; - } - - if ($requestedClass != $class && $this->instanceManager->hasConfig($requestedClass)) { - $iConfig['requestedClass'] = $this->instanceManager->getConfig($requestedClass); - - if (array_key_exists('parameters', $iConfig['requestedClass'])) { - $newParameters = array(); - - foreach ($iConfig['requestedClass']['parameters'] as $name=>$parameter) { - $newParameters[$requestedClass.'::'.$method.'::'.$name] = $parameter; - } - - $iConfig['requestedClass']['parameters'] = $newParameters; - } - - if ($requestedAlias) { - $iConfig['requestedAlias'] = $this->instanceManager->getConfig($requestedAlias); - } - } - - // This is a 2 pass system for resolving parameters - // first pass will find the sources, the second pass will order them and resolve lookups if they exist - // MOST methods will only have a single parameters to resolve, so this should be fast - - foreach ($injectionMethodParameters as $fqParamPos => $info) { - list($name, $type, $isRequired) = $info; - - $fqParamName = substr_replace($fqParamPos, ':' . $info[0], strrpos($fqParamPos, ':')); - - // PRIORITY 1 - consult user provided parameters - if (isset($callTimeUserParams[$fqParamPos]) || isset($callTimeUserParams[$name])) { - if (isset($callTimeUserParams[$fqParamPos])) { - $callTimeCurValue =& $callTimeUserParams[$fqParamPos]; - } elseif (isset($callTimeUserParams[$fqParamName])) { - $callTimeCurValue =& $callTimeUserParams[$fqParamName]; - } else { - $callTimeCurValue =& $callTimeUserParams[$name]; - } - - if ($type !== false && is_string($callTimeCurValue)) { - if ($this->instanceManager->hasAlias($callTimeCurValue)) { - // was an alias provided? - $computedParams['retrieval'][$fqParamPos] = array( - $callTimeUserParams[$name], - $this->instanceManager->getClassFromAlias($callTimeCurValue) - ); - } elseif ($this->definitions->hasClass($callTimeUserParams[$name])) { - // was a known class provided? - $computedParams['retrieval'][$fqParamPos] = array( - $callTimeCurValue, - $callTimeCurValue - ); - } else { - // must be a value - $computedParams['value'][$fqParamPos] = $callTimeCurValue; - } - } else { - // int, float, null, object, etc - $computedParams['value'][$fqParamPos] = $callTimeCurValue; - } - unset($callTimeCurValue); - continue; - } - - // PRIORITY 2 -specific instance configuration (thisAlias) - this alias - // PRIORITY 3 -THEN specific instance configuration (thisClass) - this class - // PRIORITY 4 -THEN specific instance configuration (requestedAlias) - requested alias - // PRIORITY 5 -THEN specific instance configuration (requestedClass) - requested class - - foreach (array('thisAlias', 'thisClass', 'requestedAlias', 'requestedClass') as $thisIndex) { - // check the provided parameters config - if (isset($iConfig[$thisIndex]['parameters'][$fqParamPos]) - || isset($iConfig[$thisIndex]['parameters'][$fqParamName]) - || isset($iConfig[$thisIndex]['parameters'][$name])) { - if (isset($iConfig[$thisIndex]['parameters'][$fqParamPos])) { - $iConfigCurValue =& $iConfig[$thisIndex]['parameters'][$fqParamPos]; - } elseif (isset($iConfig[$thisIndex]['parameters'][$fqParamName])) { - $iConfigCurValue =& $iConfig[$thisIndex]['parameters'][$fqParamName]; - } else { - $iConfigCurValue =& $iConfig[$thisIndex]['parameters'][$name]; - } - - if ($type === false && is_string($iConfigCurValue)) { - $computedParams['value'][$fqParamPos] = $iConfigCurValue; - } elseif (is_string($iConfigCurValue) - && isset($aliases[$iConfigCurValue])) { - $computedParams['retrieval'][$fqParamPos] = array( - $iConfig[$thisIndex]['parameters'][$name], - $this->instanceManager->getClassFromAlias($iConfigCurValue) - ); - } elseif (is_string($iConfigCurValue) - && $this->definitions->hasClass($iConfigCurValue)) { - $computedParams['retrieval'][$fqParamPos] = array( - $iConfigCurValue, - $iConfigCurValue - ); - } elseif (is_object($iConfigCurValue) - && $iConfigCurValue instanceof Closure - && $type !== 'Closure') { - /* @var $iConfigCurValue Closure */ - $computedParams['value'][$fqParamPos] = $iConfigCurValue(); - } else { - $computedParams['value'][$fqParamPos] = $iConfigCurValue; - } - unset($iConfigCurValue); - continue 2; - } - } - - // PRIORITY 6 - globally preferred implementations - - // next consult alias level preferred instances - // RESOLVE_EAGER wants to inject the cross-cutting concerns. - // If you want to retrieve an instance from TypePreferences, - // use AwareInterface or specify the method requirement option METHOD_IS_EAGER at ClassDefinition - if ($methodRequirementType & self::RESOLVE_EAGER) { - if ($alias && $this->instanceManager->hasTypePreferences($alias)) { - $pInstances = $this->instanceManager->getTypePreferences($alias); - foreach ($pInstances as $pInstance) { - if (is_object($pInstance)) { - $computedParams['value'][$fqParamPos] = $pInstance; - continue 2; - } - $pInstanceClass = ($this->instanceManager->hasAlias($pInstance)) ? - $this->instanceManager->getClassFromAlias($pInstance) : $pInstance; - if ($pInstanceClass === $type || self::isSubclassOf($pInstanceClass, $type)) { - $computedParams['retrieval'][$fqParamPos] = array($pInstance, $pInstanceClass); - continue 2; - } - } - } - - // next consult class level preferred instances - if ($type && $this->instanceManager->hasTypePreferences($type)) { - $pInstances = $this->instanceManager->getTypePreferences($type); - foreach ($pInstances as $pInstance) { - if (is_object($pInstance)) { - $computedParams['value'][$fqParamPos] = $pInstance; - continue 2; - } - $pInstanceClass = ($this->instanceManager->hasAlias($pInstance)) ? - $this->instanceManager->getClassFromAlias($pInstance) : $pInstance; - if ($pInstanceClass === $type || self::isSubclassOf($pInstanceClass, $type)) { - $computedParams['retrieval'][$fqParamPos] = array($pInstance, $pInstanceClass); - continue 2; - } - } - } - } - if (!$isRequired) { - $computedParams['optional'][$fqParamPos] = true; - } - - if ($type && $isRequired && ($methodRequirementType & self::RESOLVE_EAGER)) { - $computedParams['retrieval'][$fqParamPos] = array($type, $type); - } - } - - $index = 0; - foreach ($injectionMethodParameters as $fqParamPos => $value) { - $name = $value[0]; - - if (isset($computedParams['value'][$fqParamPos])) { - // if there is a value supplied, use it - $resolvedParams[$index] = $computedParams['value'][$fqParamPos]; - } elseif (isset($computedParams['retrieval'][$fqParamPos])) { - // detect circular dependencies! (they can only happen in instantiators) - if ($isInstantiator && in_array($computedParams['retrieval'][$fqParamPos][1], $this->currentDependencies) - && (!isset($alias) || in_array($computedParams['retrieval'][$fqParamPos][0], $this->currentAliasDependenencies)) - ) { - $msg = "Circular dependency detected: $class depends on {$value[1]} and viceversa"; - if (isset($alias)) { - $msg .= " (Aliased as $alias)"; - } - throw new Exception\CircularDependencyException($msg); - } - - array_push($this->currentDependencies, $class); - if (isset($alias)) { - array_push($this->currentAliasDependenencies, $alias); - } - - $dConfig = $this->instanceManager->getConfig($computedParams['retrieval'][$fqParamPos][0]); - - try { - if ($dConfig['shared'] === false) { - $resolvedParams[$index] = $this->newInstance($computedParams['retrieval'][$fqParamPos][0], $callTimeUserParams, false); - } else { - $resolvedParams[$index] = $this->get($computedParams['retrieval'][$fqParamPos][0], $callTimeUserParams); - } - } catch (DiRuntimeException $e) { - if ($methodRequirementType & self::RESOLVE_STRICT) { - //finally ( be aware to do at the end of flow) - array_pop($this->currentDependencies); - if (isset($alias)) { - array_pop($this->currentAliasDependenencies); - } - // if this item was marked strict, - // plus it cannot be resolve, and no value exist, bail out - throw new Exception\MissingPropertyException(sprintf( - 'Missing %s for parameter ' . $name . ' for ' . $class . '::' . $method, - (($value[0] === null) ? 'value' : 'instance/object' ) - ), - $e->getCode(), - $e); - } else { - //finally ( be aware to do at the end of flow) - array_pop($this->currentDependencies); - if (isset($alias)) { - array_pop($this->currentAliasDependenencies); - } - return false; - } - } catch (ServiceManagerException $e) { - // Zend\ServiceManager\Exception\ServiceNotCreatedException - if ($methodRequirementType & self::RESOLVE_STRICT) { - //finally ( be aware to do at the end of flow) - array_pop($this->currentDependencies); - if (isset($alias)) { - array_pop($this->currentAliasDependenencies); - } - // if this item was marked strict, - // plus it cannot be resolve, and no value exist, bail out - throw new Exception\MissingPropertyException(sprintf( - 'Missing %s for parameter ' . $name . ' for ' . $class . '::' . $method, - (($value[0] === null) ? 'value' : 'instance/object' ) - ), - $e->getCode(), - $e); - } else { - //finally ( be aware to do at the end of flow) - array_pop($this->currentDependencies); - if (isset($alias)) { - array_pop($this->currentAliasDependenencies); - } - return false; - } - } - array_pop($this->currentDependencies); - if (isset($alias)) { - array_pop($this->currentAliasDependenencies); - } - } elseif (!array_key_exists($fqParamPos, $computedParams['optional'])) { - if ($methodRequirementType & self::RESOLVE_STRICT) { - // if this item was not marked as optional, - // plus it cannot be resolve, and no value exist, bail out - throw new Exception\MissingPropertyException(sprintf( - 'Missing %s for parameter ' . $name . ' for ' . $class . '::' . $method, - (($value[0] === null) ? 'value' : 'instance/object' ) - )); - } else { - return false; - } - } else { - $resolvedParams[$index] = $value[3]; - } - - $index++; - } - - return $resolvedParams; // return ordered list of parameters - } - - /** - * Checks if the object has this class as one of its parents - * - * @see https://bugs.php.net/bug.php?id=53727 - * @see https://github.com/zendframework/zf2/pull/1807 - * - * @param string $className - * @param $type - * @return bool - */ - protected static function isSubclassOf($className, $type) - { - if (is_subclass_of($className, $type)) { - return true; - } - if (PHP_VERSION_ID >= 50307) { - return false; - } - if (!interface_exists($type)) { - return false; - } - $r = new ReflectionClass($className); - - return $r->implementsInterface($type); - } -} diff --git a/library/Zend/Di/Display/Console.php b/library/Zend/Di/Display/Console.php deleted file mode 100755 index 31b861e63..000000000 --- a/library/Zend/Di/Display/Console.php +++ /dev/null @@ -1,176 +0,0 @@ -addRuntimeClasses($runtimeClasses); - $console->render($di); - } - - /** - * Constructor - * - * @param null|Di $di - */ - public function __construct(Di $di = null) - { - $this->di = ($di) ?: new Di; - } - - /** - * @param string[] $runtimeClasses - */ - public function addRuntimeClasses(array $runtimeClasses) - { - foreach ($runtimeClasses as $runtimeClass) { - $this->addRuntimeClass($runtimeClass); - } - } - - /** - * @param string $runtimeClass - */ - public function addRuntimeClass($runtimeClass) - { - $this->runtimeClasses[] = $runtimeClass; - } - - public function render() - { - $knownClasses = array(); - - echo 'Definitions' . PHP_EOL . PHP_EOL; - - foreach ($this->di->definitions() as $definition) { - $this->renderDefinition($definition); - foreach ($definition->getClasses() as $class) { - $knownClasses[] = $class; - $this->renderClassDefinition($definition, $class); - } - if (count($definition->getClasses()) == 0) { - echo PHP_EOL .' No Classes Found' . PHP_EOL . PHP_EOL; - } - } - - if ($this->runtimeClasses) { - echo ' Runtime classes:' . PHP_EOL; - } - - $unknownRuntimeClasses = array_diff($this->runtimeClasses, $knownClasses); - foreach ($unknownRuntimeClasses as $runtimeClass) { - $definition = $this->di->definitions()->getDefinitionForClass($runtimeClass); - $this->renderClassDefinition($definition, $runtimeClass); - } - - echo PHP_EOL . 'Instance Configuration Info:' . PHP_EOL; - - echo PHP_EOL . ' Aliases:' . PHP_EOL; - - $configuredTypes = array(); - foreach ($this->di->instanceManager()->getAliases() as $alias => $class) { - echo ' ' . $alias . ' [type: ' . $class . ']' . PHP_EOL; - $configuredTypes[] = $alias; - } - - echo PHP_EOL . ' Classes:' . PHP_EOL; - - foreach ($this->di->instanceManager()->getClasses() as $class) { - echo ' ' . $class . PHP_EOL; - $configuredTypes[] = $class; - } - - echo PHP_EOL . ' Configurations:' . PHP_EOL; - - foreach ($configuredTypes as $type) { - $info = $this->di->instanceManager()->getConfig($type); - echo ' ' . $type . PHP_EOL; - - if ($info['parameters']) { - echo ' parameters:' . PHP_EOL; - foreach ($info['parameters'] as $param => $value) { - echo ' ' . $param . ' = ' . $value . PHP_EOL; - } - } - - if ($info['injections']) { - echo ' injections:' . PHP_EOL; - foreach ($info['injections'] as $injection => $value) { - var_dump($injection, $value); - } - } - } - } - - /** - * @param object $definition - */ - protected function renderDefinition($definition) - { - echo ' Definition Type: ' . get_class($definition) . PHP_EOL; - $r = new \ReflectionClass($definition); - foreach ($r->getProperties(\ReflectionProperty::IS_PUBLIC | \ReflectionProperty::IS_PROTECTED) as $property) { - $property->setAccessible(true); - echo ' internal property: ' . $property->getName(); - $value = $property->getValue($definition); - if (is_object($value)) { - echo ' instance of ' . get_class($value); - } else { - echo ' = ' . $value; - } - echo PHP_EOL; - } - } - - /** - * @param \Zend\Di\Definition\DefinitionInterface $definition - * @param string $class - */ - protected function renderClassDefinition($definition, $class) - { - echo PHP_EOL . ' Parameters For Class: ' . $class . PHP_EOL; - foreach ($definition->getMethods($class) as $methodName => $methodIsRequired) { - foreach ($definition->getMethodParameters($class, $methodName) as $fqName => $pData) { - echo ' ' . $pData[0] . ' [type: '; - echo ($pData[1]) ? $pData[1] : 'scalar'; - echo ($pData[2] === true && $methodIsRequired) ? ', required' : ', not required'; - echo ', injection-method: ' . $methodName; - echo ' fq-name: ' . $fqName; - echo ']' . PHP_EOL; - } - } - echo PHP_EOL; - } -} diff --git a/library/Zend/Di/Exception/CircularDependencyException.php b/library/Zend/Di/Exception/CircularDependencyException.php deleted file mode 100755 index 8cb9eae3f..000000000 --- a/library/Zend/Di/Exception/CircularDependencyException.php +++ /dev/null @@ -1,16 +0,0 @@ - array(), 'hashLong' => array()); - - /** - * Array of class aliases - * @var array key: alias, value: class - */ - protected $aliases = array(); - - /** - * The template to use for housing configuration information - * @var array - */ - protected $configurationTemplate = array( - /** - * alias|class => alias|class - * interface|abstract => alias|class|object - * name => value - */ - 'parameters' => array(), - /** - * injection type => array of ordered method params - */ - 'injections' => array(), - /** - * alias|class => bool - */ - 'shared' => true - ); - - /** - * An array of instance configuration data - * @var array - */ - protected $configurations = array(); - - /** - * An array of globally preferred implementations for interfaces/abstracts - * @var array - */ - protected $typePreferences = array(); - - /** - * Does this instance manager have this shared instance - * @param string $classOrAlias - * @return bool - */ - public function hasSharedInstance($classOrAlias) - { - return isset($this->sharedInstances[$classOrAlias]); - } - - /** - * getSharedInstance() - */ - public function getSharedInstance($classOrAlias) - { - return $this->sharedInstances[$classOrAlias]; - } - - /** - * Add shared instance - * - * @param object $instance - * @param string $classOrAlias - * @throws Exception\InvalidArgumentException - */ - public function addSharedInstance($instance, $classOrAlias) - { - if (!is_object($instance)) { - throw new Exception\InvalidArgumentException('This method requires an object to be shared. Class or Alias given: ' . $classOrAlias); - } - - $this->sharedInstances[$classOrAlias] = $instance; - } - - /** - * hasSharedInstanceWithParameters() - * - * @param string $classOrAlias - * @param array $params - * @param bool $returnFastHashLookupKey - * @return bool|string - */ - public function hasSharedInstanceWithParameters($classOrAlias, array $params, $returnFastHashLookupKey = false) - { - ksort($params); - $hashKey = $this->createHashForKeys($classOrAlias, array_keys($params)); - if (isset($this->sharedInstancesWithParams['hashShort'][$hashKey])) { - $hashValue = $this->createHashForValues($classOrAlias, $params); - if (isset($this->sharedInstancesWithParams['hashLong'][$hashKey . '/' . $hashValue])) { - return ($returnFastHashLookupKey) ? $hashKey . '/' . $hashValue : true; - } - } - - return false; - } - - /** - * addSharedInstanceWithParameters() - * - * @param object $instance - * @param string $classOrAlias - * @param array $params - * @return void - */ - public function addSharedInstanceWithParameters($instance, $classOrAlias, array $params) - { - ksort($params); - $hashKey = $this->createHashForKeys($classOrAlias, array_keys($params)); - $hashValue = $this->createHashForValues($classOrAlias, $params); - - if (!isset($this->sharedInstancesWithParams[$hashKey]) - || !is_array($this->sharedInstancesWithParams[$hashKey])) { - $this->sharedInstancesWithParams[$hashKey] = array(); - } - - $this->sharedInstancesWithParams['hashShort'][$hashKey] = true; - $this->sharedInstancesWithParams['hashLong'][$hashKey . '/' . $hashValue] = $instance; - } - - /** - * Retrieves an instance by its name and the parameters stored at its instantiation - * - * @param string $classOrAlias - * @param array $params - * @param bool|null $fastHashFromHasLookup - * @return object|bool false if no instance was found - */ - public function getSharedInstanceWithParameters($classOrAlias, array $params, $fastHashFromHasLookup = null) - { - if ($fastHashFromHasLookup) { - return $this->sharedInstancesWithParams['hashLong'][$fastHashFromHasLookup]; - } - - ksort($params); - $hashKey = $this->createHashForKeys($classOrAlias, array_keys($params)); - if (isset($this->sharedInstancesWithParams['hashShort'][$hashKey])) { - $hashValue = $this->createHashForValues($classOrAlias, $params); - if (isset($this->sharedInstancesWithParams['hashLong'][$hashKey . '/' . $hashValue])) { - return $this->sharedInstancesWithParams['hashLong'][$hashKey . '/' . $hashValue]; - } - } - - return false; - } - - /** - * Check for an alias - * - * @param string $alias - * @return bool - */ - public function hasAlias($alias) - { - return (isset($this->aliases[$alias])); - } - - /** - * Get aliases - * - * @return array - */ - public function getAliases() - { - return $this->aliases; - } - - /** - * getClassFromAlias() - * - * @param string - * @return string|bool - * @throws Exception\RuntimeException - */ - public function getClassFromAlias($alias) - { - if (!isset($this->aliases[$alias])) { - return false; - } - $r = 0; - while (isset($this->aliases[$alias])) { - $alias = $this->aliases[$alias]; - $r++; - if ($r > 100) { - throw new Exception\RuntimeException( - sprintf('Possible infinite recursion in DI alias! Max recursion of 100 levels reached at alias "%s".', $alias) - ); - } - } - - return $alias; - } - - /** - * @param string $alias - * @return string|bool - * @throws Exception\RuntimeException - */ - protected function getBaseAlias($alias) - { - if (!$this->hasAlias($alias)) { - return false; - } - $lastAlias = false; - $r = 0; - while (isset($this->aliases[$alias])) { - $lastAlias = $alias; - $alias = $this->aliases[$alias]; - $r++; - if ($r > 100) { - throw new Exception\RuntimeException( - sprintf('Possible infinite recursion in DI alias! Max recursion of 100 levels reached at alias "%s".', $alias) - ); - } - } - - return $lastAlias; - } - - /** - * Add alias - * - * @throws Exception\InvalidArgumentException - * @param string $alias - * @param string $class - * @param array $parameters - * @return void - */ - public function addAlias($alias, $class, array $parameters = array()) - { - if (!preg_match('#^[a-zA-Z0-9-_]+$#', $alias)) { - throw new Exception\InvalidArgumentException( - 'Aliases must be alphanumeric and can contain dashes and underscores only.' - ); - } - $this->aliases[$alias] = $class; - if ($parameters) { - $this->setParameters($alias, $parameters); - } - } - - /** - * Check for configuration - * - * @param string $aliasOrClass - * @return bool - */ - public function hasConfig($aliasOrClass) - { - $key = ($this->hasAlias($aliasOrClass)) ? 'alias:' . $this->getBaseAlias($aliasOrClass) : $aliasOrClass; - if (!isset($this->configurations[$key])) { - return false; - } - if ($this->configurations[$key] === $this->configurationTemplate) { - return false; - } - - return true; - } - - /** - * Sets configuration for a single alias/class - * - * @param string $aliasOrClass - * @param array $configuration - * @param bool $append - */ - public function setConfig($aliasOrClass, array $configuration, $append = false) - { - $key = ($this->hasAlias($aliasOrClass)) ? 'alias:' . $this->getBaseAlias($aliasOrClass) : $aliasOrClass; - if (!isset($this->configurations[$key]) || !$append) { - $this->configurations[$key] = $this->configurationTemplate; - } - // Ignore anything but 'parameters' and 'injections' - $configuration = array( - 'parameters' => isset($configuration['parameters']) ? $configuration['parameters'] : array(), - 'injections' => isset($configuration['injections']) ? $configuration['injections'] : array(), - 'shared' => isset($configuration['shared']) ? $configuration['shared'] : true - ); - $this->configurations[$key] = array_replace_recursive($this->configurations[$key], $configuration); - } - - /** - * Get classes - * - * @return array - */ - public function getClasses() - { - $classes = array(); - foreach ($this->configurations as $name => $data) { - if (strpos($name, 'alias') === 0) { - continue; - } - $classes[] = $name; - } - - return $classes; - } - - /** - * @param string $aliasOrClass - * @return array - */ - public function getConfig($aliasOrClass) - { - $key = ($this->hasAlias($aliasOrClass)) ? 'alias:' . $this->getBaseAlias($aliasOrClass) : $aliasOrClass; - if (isset($this->configurations[$key])) { - return $this->configurations[$key]; - } - - return $this->configurationTemplate; - } - - /** - * setParameters() is a convenience method for: - * setConfig($type, array('parameters' => array(...)), true); - * - * @param string $aliasOrClass Alias or Class - * @param array $parameters Multi-dim array of parameters and their values - * @return void - */ - public function setParameters($aliasOrClass, array $parameters) - { - $this->setConfig($aliasOrClass, array('parameters' => $parameters), true); - } - - /** - * setInjections() is a convenience method for: - * setConfig($type, array('injections' => array(...)), true); - * - * @param string $aliasOrClass Alias or Class - * @param array $injections Multi-dim array of methods and their parameters - * @return void - */ - public function setInjections($aliasOrClass, array $injections) - { - $this->setConfig($aliasOrClass, array('injections' => $injections), true); - } - - /** - * Set shared - * - * @param string $aliasOrClass - * @param bool $isShared - * @return void - */ - public function setShared($aliasOrClass, $isShared) - { - $this->setConfig($aliasOrClass, array('shared' => (bool) $isShared), true); - } - - /** - * Check for type preferences - * - * @param string $interfaceOrAbstract - * @return bool - */ - public function hasTypePreferences($interfaceOrAbstract) - { - $key = ($this->hasAlias($interfaceOrAbstract)) ? 'alias:' . $interfaceOrAbstract : $interfaceOrAbstract; - - return (isset($this->typePreferences[$key]) && $this->typePreferences[$key]); - } - - /** - * Set type preference - * - * @param string $interfaceOrAbstract - * @param array $preferredImplementations - * @return InstanceManager - */ - public function setTypePreference($interfaceOrAbstract, array $preferredImplementations) - { - $key = ($this->hasAlias($interfaceOrAbstract)) ? 'alias:' . $interfaceOrAbstract : $interfaceOrAbstract; - foreach ($preferredImplementations as $preferredImplementation) { - $this->addTypePreference($key, $preferredImplementation); - } - - return $this; - } - - /** - * Get type preferences - * - * @param string $interfaceOrAbstract - * @return array - */ - public function getTypePreferences($interfaceOrAbstract) - { - $key = ($this->hasAlias($interfaceOrAbstract)) ? 'alias:' . $interfaceOrAbstract : $interfaceOrAbstract; - if (isset($this->typePreferences[$key])) { - return $this->typePreferences[$key]; - } - - return array(); - } - - /** - * Unset type preferences - * - * @param string $interfaceOrAbstract - * @return void - */ - public function unsetTypePreferences($interfaceOrAbstract) - { - $key = ($this->hasAlias($interfaceOrAbstract)) ? 'alias:' . $interfaceOrAbstract : $interfaceOrAbstract; - unset($this->typePreferences[$key]); - } - - /** - * Adds a type preference. A type preference is a redirection to a preferred alias or type when an abstract type - * $interfaceOrAbstract is requested - * - * @param string $interfaceOrAbstract - * @param string $preferredImplementation - * @return self - */ - public function addTypePreference($interfaceOrAbstract, $preferredImplementation) - { - $key = ($this->hasAlias($interfaceOrAbstract)) ? 'alias:' . $interfaceOrAbstract : $interfaceOrAbstract; - if (!isset($this->typePreferences[$key])) { - $this->typePreferences[$key] = array(); - } - $this->typePreferences[$key][] = $preferredImplementation; - - return $this; - } - - /** - * Removes a previously set type preference - * - * @param string $interfaceOrAbstract - * @param string $preferredType - * @return bool|self - */ - public function removeTypePreference($interfaceOrAbstract, $preferredType) - { - $key = ($this->hasAlias($interfaceOrAbstract)) ? 'alias:' . $interfaceOrAbstract : $interfaceOrAbstract; - if (!isset($this->typePreferences[$key]) || !in_array($preferredType, $this->typePreferences[$key])) { - return false; - } - unset($this->typePreferences[$key][array_search($key, $this->typePreferences)]); - - return $this; - } - - /** - * @param string $classOrAlias - * @param string[] $paramKeys - * @return string - */ - protected function createHashForKeys($classOrAlias, $paramKeys) - { - return $classOrAlias . ':' . implode('|', $paramKeys); - } - - /** - * @param string $classOrAlias - * @param array $paramValues - * @return string - */ - protected function createHashForValues($classOrAlias, $paramValues) - { - $hashValue = ''; - foreach ($paramValues as $param) { - switch (gettype($param)) { - case 'object': - $hashValue .= spl_object_hash($param) . '|'; - break; - case 'integer': - case 'string': - case 'boolean': - case 'NULL': - case 'double': - $hashValue .= $param . '|'; - break; - case 'array': - $hashValue .= 'Array|'; - break; - case 'resource': - $hashValue .= 'resource|'; - break; - } - } - - return $hashValue; - } -} diff --git a/library/Zend/Di/LocatorInterface.php b/library/Zend/Di/LocatorInterface.php deleted file mode 100755 index 88a12f6cc..000000000 --- a/library/Zend/Di/LocatorInterface.php +++ /dev/null @@ -1,22 +0,0 @@ - - * protected $map = array('foo' => 'getFoo'); - * - * - * When encountered, the return value of that method will be used. - * - * Methods mapped in this way may expect a single, array argument, the - * $params passed to {@link get()}, if any. - * - * @var array - */ - protected $map = array(); - - /** - * Registered services and cached values - * - * @var array - */ - protected $services = array(); - - /** - * {@inheritDoc} - */ - public function set($name, $service) - { - $this->services[$name] = $service; - - return $this; - } - - /** - * Retrieve a registered service - * - * Tests first if a value is registered for the service, and, if so, - * returns it. - * - * If the value returned is a non-object callback or closure, the return - * value is retrieved, stored, and returned. Parameters passed to the method - * are passed to the callback, but only on the first retrieval. - * - * If the service requested matches a method in the method map, the return - * value of that method is returned. Parameters are passed to the matching - * method. - * - * @param string $name - * @param array $params - * @return mixed - */ - public function get($name, array $params = array()) - { - if (!isset($this->services[$name])) { - if (!isset($this->map[$name])) { - return null; - } - $method = $this->map[$name]; - - return $this->$method($params); - } - - $service = $this->services[$name]; - if ($service instanceof Closure - || (!is_object($service) && is_callable($service)) - ) { - $this->services[$name] = $service = call_user_func_array($service, $params); - } - - return $service; - } -} diff --git a/library/Zend/Di/ServiceLocator/DependencyInjectorProxy.php b/library/Zend/Di/ServiceLocator/DependencyInjectorProxy.php deleted file mode 100755 index be0c3cb1d..000000000 --- a/library/Zend/Di/ServiceLocator/DependencyInjectorProxy.php +++ /dev/null @@ -1,168 +0,0 @@ -di = $di; - $this->definitions = $di->definitions(); - $this->instanceManager = $di->instanceManager(); - } - - /** - * {@inheritDoc} - * @return GeneratorInstance - */ - public function get($name, array $params = array()) - { - return parent::get($name, $params); - } - - /** - * {@inheritDoc} - * @return GeneratorInstance - */ - public function newInstance($name, array $params = array(), $isShared = true) - { - $instance = parent::newInstance($name, $params, $isShared); - - if ($instance instanceof GeneratorInstance) { - /* @var $instance GeneratorInstance */ - $instance->setShared($isShared); - - // When a callback is used, we don't know instance the class name. - // That's why we assume $name as the instance alias - if (null === $instance->getName()) { - $instance->setAlias($name); - } - } - - return $instance; - } - - /** - * {@inheritDoc} - * @return GeneratorInstance - */ - public function createInstanceViaConstructor($class, $params, $alias = null) - { - $callParameters = array(); - - if ($this->di->definitions->hasMethod($class, '__construct') - && (count($this->di->definitions->getMethodParameters($class, '__construct')) > 0) - ) { - $callParameters = $this->resolveMethodParameters($class, '__construct', $params, $alias, true, true); - $callParameters = $callParameters ?: array(); - } - - return new GeneratorInstance($class, $alias, '__construct', $callParameters); - } - - /** - * {@inheritDoc} - * @throws \Zend\Di\Exception\InvalidCallbackException - * @return GeneratorInstance - */ - public function createInstanceViaCallback($callback, $params, $alias) - { - if (is_string($callback)) { - $callback = explode('::', $callback); - } - - if (!is_callable($callback)) { - throw new Exception\InvalidCallbackException('An invalid constructor callback was provided'); - } - - if (!is_array($callback) || is_object($callback[0])) { - throw new Exception\InvalidCallbackException( - 'For purposes of service locator generation, constructor callbacks must refer to static methods only' - ); - } - - $class = $callback[0]; - $method = $callback[1]; - - $callParameters = array(); - if ($this->di->definitions->hasMethod($class, $method)) { - $callParameters = $this->resolveMethodParameters($class, $method, $params, $alias, true, true); - } - - $callParameters = $callParameters ?: array(); - - return new GeneratorInstance(null, $alias, $callback, $callParameters); - } - - /** - * {@inheritDoc} - */ - public function handleInjectionMethodForObject($class, $method, $params, $alias, $isRequired) - { - return array( - 'method' => $method, - 'params' => $this->resolveMethodParameters($class, $method, $params, $alias, $isRequired), - ); - } - - /** - * {@inheritDoc} - */ - protected function resolveAndCallInjectionMethodForInstance($instance, $method, $params, $alias, $methodIsRequired, $methodClass = null) - { - if (!$instance instanceof GeneratorInstance) { - return parent::resolveAndCallInjectionMethodForInstance($instance, $method, $params, $alias, $methodIsRequired, $methodClass); - } - - /* @var $instance GeneratorInstance */ - $methodClass = $instance->getClass(); - $callParameters = $this->resolveMethodParameters($methodClass, $method, $params, $alias, $methodIsRequired); - - if ($callParameters !== false) { - $instance->addMethod(array( - 'method' => $method, - 'params' => $callParameters, - )); - - return true; - } - - return false; - } - - /** - * {@inheritDoc} - */ - protected function getClass($instance) - { - if ($instance instanceof GeneratorInstance) { - /* @var $instance GeneratorInstance */ - - return $instance->getClass(); - } - - return parent::getClass($instance); - } -} diff --git a/library/Zend/Di/ServiceLocator/Generator.php b/library/Zend/Di/ServiceLocator/Generator.php deleted file mode 100755 index 82e8ca191..000000000 --- a/library/Zend/Di/ServiceLocator/Generator.php +++ /dev/null @@ -1,342 +0,0 @@ -injector = new DependencyInjectorProxy($injector); - } - - /** - * Set the class name for the generated service locator container - * - * @param string $name - * @return Generator - */ - public function setContainerClass($name) - { - $this->containerClass = $name; - - return $this; - } - - /** - * Set the namespace to use for the generated class file - * - * @param string $namespace - * @return Generator - */ - public function setNamespace($namespace) - { - $this->namespace = $namespace; - - return $this; - } - - /** - * Construct, configure, and return a PHP class file code generation object - * - * Creates a Zend\Code\Generator\FileGenerator object that has - * created the specified class and service locator methods. - * - * @param null|string $filename - * @throws \Zend\Di\Exception\RuntimeException - * @return FileGenerator - */ - public function getCodeGenerator($filename = null) - { - $injector = $this->injector; - $im = $injector->instanceManager(); - $indent = ' '; - $aliases = $this->reduceAliases($im->getAliases()); - $caseStatements = array(); - $getters = array(); - $definitions = $injector->definitions(); - - $fetched = array_unique(array_merge($definitions->getClasses(), $im->getAliases())); - - foreach ($fetched as $name) { - $getter = $this->normalizeAlias($name); - $meta = $injector->get($name); - $params = $meta->getParams(); - - // Build parameter list for instantiation - foreach ($params as $key => $param) { - if (null === $param || is_scalar($param) || is_array($param)) { - $string = var_export($param, 1); - if (strstr($string, '::__set_state(')) { - throw new Exception\RuntimeException('Arguments in definitions may not contain objects'); - } - $params[$key] = $string; - } elseif ($param instanceof GeneratorInstance) { - /* @var $param GeneratorInstance */ - $params[$key] = sprintf('$this->%s()', $this->normalizeAlias($param->getName())); - } else { - $message = sprintf('Unable to use object arguments when building containers. Encountered with "%s", parameter of type "%s"', $name, get_class($param)); - throw new Exception\RuntimeException($message); - } - } - - // Strip null arguments from the end of the params list - $reverseParams = array_reverse($params, true); - foreach ($reverseParams as $key => $param) { - if ('NULL' === $param) { - unset($params[$key]); - continue; - } - break; - } - - // Create instantiation code - $constructor = $meta->getConstructor(); - if ('__construct' != $constructor) { - // Constructor callback - $callback = var_export($constructor, 1); - if (strstr($callback, '::__set_state(')) { - throw new Exception\RuntimeException('Unable to build containers that use callbacks requiring object instances'); - } - if (count($params)) { - $creation = sprintf('$object = call_user_func(%s, %s);', $callback, implode(', ', $params)); - } else { - $creation = sprintf('$object = call_user_func(%s);', $callback); - } - } else { - // Normal instantiation - $className = '\\' . ltrim($name, '\\'); - $creation = sprintf('$object = new %s(%s);', $className, implode(', ', $params)); - } - - // Create method call code - $methods = ''; - foreach ($meta->getMethods() as $methodData) { - if (!isset($methodData['name']) && !isset($methodData['method'])) { - continue; - } - $methodName = isset($methodData['name']) ? $methodData['name'] : $methodData['method']; - $methodParams = $methodData['params']; - - // Create method parameter representation - foreach ($methodParams as $key => $param) { - if (null === $param || is_scalar($param) || is_array($param)) { - $string = var_export($param, 1); - if (strstr($string, '::__set_state(')) { - throw new Exception\RuntimeException('Arguments in definitions may not contain objects'); - } - $methodParams[$key] = $string; - } elseif ($param instanceof GeneratorInstance) { - $methodParams[$key] = sprintf('$this->%s()', $this->normalizeAlias($param->getName())); - } else { - $message = sprintf('Unable to use object arguments when generating method calls. Encountered with class "%s", method "%s", parameter of type "%s"', $name, $methodName, get_class($param)); - throw new Exception\RuntimeException($message); - } - } - - // Strip null arguments from the end of the params list - $reverseParams = array_reverse($methodParams, true); - foreach ($reverseParams as $key => $param) { - if ('NULL' === $param) { - unset($methodParams[$key]); - continue; - } - break; - } - - $methods .= sprintf("\$object->%s(%s);\n", $methodName, implode(', ', $methodParams)); - } - - // Generate caching statement - $storage = ''; - if ($im->hasSharedInstance($name, $params)) { - $storage = sprintf("\$this->services['%s'] = \$object;\n", $name); - } - - // Start creating getter - $getterBody = ''; - - // Create fetch of stored service - if ($im->hasSharedInstance($name, $params)) { - $getterBody .= sprintf("if (isset(\$this->services['%s'])) {\n", $name); - $getterBody .= sprintf("%sreturn \$this->services['%s'];\n}\n\n", $indent, $name); - } - - // Creation and method calls - $getterBody .= sprintf("%s\n", $creation); - $getterBody .= $methods; - - // Stored service - $getterBody .= $storage; - - // End getter body - $getterBody .= "return \$object;\n"; - - $getterDef = new MethodGenerator(); - $getterDef->setName($getter); - $getterDef->setBody($getterBody); - $getters[] = $getterDef; - - // Get cases for case statements - $cases = array($name); - if (isset($aliases[$name])) { - $cases = array_merge($aliases[$name], $cases); - } - - // Build case statement and store - $statement = ''; - foreach ($cases as $value) { - $statement .= sprintf("%scase '%s':\n", $indent, $value); - } - $statement .= sprintf("%sreturn \$this->%s();\n", str_repeat($indent, 2), $getter); - - $caseStatements[] = $statement; - } - - // Build switch statement - $switch = sprintf("switch (%s) {\n%s\n", '$name', implode("\n", $caseStatements)); - $switch .= sprintf("%sdefault:\n%sreturn parent::get(%s, %s);\n", $indent, str_repeat($indent, 2), '$name', '$params'); - $switch .= "}\n\n"; - - // Build get() method - $nameParam = new ParameterGenerator(); - $nameParam->setName('name'); - $paramsParam = new ParameterGenerator(); - $paramsParam->setName('params') - ->setType('array') - ->setDefaultValue(array()); - - $get = new MethodGenerator(); - $get->setName('get'); - $get->setParameters(array( - $nameParam, - $paramsParam, - )); - $get->setBody($switch); - - // Create getters for aliases - $aliasMethods = array(); - foreach ($aliases as $class => $classAliases) { - foreach ($classAliases as $alias) { - $aliasMethods[] = $this->getCodeGenMethodFromAlias($alias, $class); - } - } - - // Create class code generation object - $container = new ClassGenerator(); - $container->setName($this->containerClass) - ->setExtendedClass('ServiceLocator') - ->addMethodFromGenerator($get) - ->addMethods($getters) - ->addMethods($aliasMethods); - - // Create PHP file code generation object - $classFile = new FileGenerator(); - $classFile->setUse('Zend\Di\ServiceLocator') - ->setClass($container); - - if (null !== $this->namespace) { - $classFile->setNamespace($this->namespace); - } - - if (null !== $filename) { - $classFile->setFilename($filename); - } - - return $classFile; - } - - /** - * Reduces aliases - * - * Takes alias list and reduces it to a 2-dimensional array of - * class names pointing to an array of aliases that resolve to - * it. - * - * @param array $aliasList - * @return array - */ - protected function reduceAliases(array $aliasList) - { - $reduced = array(); - $aliases = array_keys($aliasList); - foreach ($aliasList as $alias => $service) { - if (in_array($service, $aliases)) { - do { - $service = $aliasList[$service]; - } while (in_array($service, $aliases)); - } - if (!isset($reduced[$service])) { - $reduced[$service] = array(); - } - $reduced[$service][] = $alias; - } - - return $reduced; - } - - /** - * Create a PhpMethod code generation object named after a given alias - * - * @param string $alias - * @param string $class Class to which alias refers - * @return MethodGenerator - */ - protected function getCodeGenMethodFromAlias($alias, $class) - { - $alias = $this->normalizeAlias($alias); - $method = new MethodGenerator(); - $method->setName($alias); - $method->setBody(sprintf('return $this->get(\'%s\');', $class)); - - return $method; - } - - /** - * Normalize an alias to a getter method name - * - * @param string $alias - * @return string - */ - protected function normalizeAlias($alias) - { - $normalized = preg_replace('/[^a-zA-Z0-9]/', ' ', $alias); - $normalized = 'get' . str_replace(' ', '', ucwords($normalized)); - - return $normalized; - } -} diff --git a/library/Zend/Di/ServiceLocator/GeneratorInstance.php b/library/Zend/Di/ServiceLocator/GeneratorInstance.php deleted file mode 100755 index aeb5f93ac..000000000 --- a/library/Zend/Di/ServiceLocator/GeneratorInstance.php +++ /dev/null @@ -1,196 +0,0 @@ -class = $class; - $this->alias = $alias; - $this->constructor = $constructor; - $this->params = $params; - } - - /** - * Retrieves the best available name for this instance (instance alias first then class name) - * - * @return string|null - */ - public function getName() - { - return $this->alias ? $this->alias : $this->class; - } - - /** - * Class of the instance. Null if class is unclear (such as when the instance is produced by a callback) - * - * @return string|null - */ - public function getClass() - { - return $this->class; - } - - /** - * Alias for the instance (if any) - * - * @return string|null - */ - public function getAlias() - { - return $this->alias; - } - - /** - * Set class name - * - * In the case of an instance created via a callback, we need to set the - * class name after creating the generator instance. - * - * @param string $class - * @return GeneratorInstance - */ - public function setClass($class) - { - $this->class = $class; - - return $this; - } - - /** - * Set instance alias - * - * @param string $alias - * @return GeneratorInstance - */ - public function setAlias($alias) - { - $this->alias = $alias; - - return $this; - } - - /** - * Get instantiator - * - * @return mixed constructor method name or callable responsible for generating instance - */ - public function getConstructor() - { - return $this->constructor; - } - - /** - * Parameters passed to the instantiator as an ordered list of parameters. Each parameter that refers to another - * instance fetched recursively is a GeneratorInstance itself - * - * @return array - */ - public function getParams() - { - return $this->params; - } - - /** - * Set methods - * - * @param array $methods - * @return GeneratorInstance - */ - public function setMethods(array $methods) - { - $this->methods = $methods; - - return $this; - } - - /** - * Add a method called on the instance - * - * @param $method - * @return GeneratorInstance - */ - public function addMethod($method) - { - $this->methods[] = $method; - - return $this; - } - - /** - * Retrieves a list of methods that are called on the instance in their call order. Each returned element has form - * array('method' => 'methodName', 'params' => array( ... ordered list of call parameters ... ), where every call - * parameter that is a recursively fetched instance is a GeneratorInstance itself - * - * @return array - */ - public function getMethods() - { - return $this->methods; - } - - /** - * @param bool $shared - */ - public function setShared($shared) - { - $this->shared = (bool) $shared; - } - - /** - * Retrieves whether the instance is shared or not - * - * @return bool - */ - public function isShared() - { - return $this->shared; - } -} diff --git a/library/Zend/Di/ServiceLocatorInterface.php b/library/Zend/Di/ServiceLocatorInterface.php deleted file mode 100755 index fe5e12572..000000000 --- a/library/Zend/Di/ServiceLocatorInterface.php +++ /dev/null @@ -1,23 +0,0 @@ - array( - 'Zend\Foo\Bar' => array( - 'public' => true, - 'methods' => array( - '__construct' => array( - 'params' => array( - 'foo' => 'bar', - ), - 'class' => 'Some\Default\Class' - ), - 'setConfig' => array( - 'params' => array( - 'bar' => 'baz', - ), - ), - ), - ), - ), - ) - -- Ability to pass configuration to a generated ServiceLocator - -- Skip optional arguments if not passed in configuration or part of definition - (current behavior is to raise an exception if *any* arguments are missing) - -- Scoped Containers: - - Described here: - http://picocontainer.org/scopes.html - - This is something that should be explored when we start using these containers - with ServiceLocators inside an application. While part of this has to do with - garbage collection in Java (something we need not worry with in PHP since there - is no persistent in-memory objects), the interesting use case would be having a - container cloned from another container that has more or less (a subset) of the - definitions available to the Container's newInstance() and get() facilities. - -- Better Strategy Management - - Currently, the strategies for determining dependencies is hard coded into the - various definitions. Ideally, we'd be able to have configurable strategies - that the definitions can then utilize to do their job: - - http://picocontainer.org/injection.html - - We currently support constructor injection and setter injection (methods prefixed - by set[A-Z]) - -- Annotation Parsing - - Ideally, at some point, Zend\Code\Scanner will support Annotation parsing. When - this is possible, we'd like to be able to use @inject similar to - http://picocontainer.org/annotated-method-injection.html - -- SuperType Resolution - - (partially done inside resolveMethodParameters with is_subtype_of()) - - If a class claims it needs a dependency of not an object, but a particular - interface, the ability to find an object that suits that dependency, either - through a concept called 'Preferred Objects' or via a 'Property'. The - following should be supported: - - The compiler also needs to be aware of other definitions when looking up SuperTypes - - $definition = new AggregateDefinition(); - $definition->addDefinition('Zend\Controller\DiDefinition'); - - $compiler = new Compiler() - $compiler->addDefinition($definition); - $compiler->addCodeScanner(__DIR__ . 'My/Blog'); - $array = $compiler->compile() - $definition->addDefinition(new ArrayDefinition($array)); - -- Performance & Benchmarking - - Zend\Code\Scanner- check memory usage, perhaps use gc_collect_cycles() to free memory, - we'll have to do this on large scan bases. - - Benchmark compiler: reflection vs. code scanner - - diff --git a/library/Zend/Di/composer.json b/library/Zend/Di/composer.json deleted file mode 100755 index 81f6cb781..000000000 --- a/library/Zend/Di/composer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "zendframework/zend-di", - "description": " ", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "di" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Di\\": "" - } - }, - "target-dir": "Zend/Di", - "require": { - "php": ">=5.3.23", - "zendframework/zend-code": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "Zend\\ServiceManager component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Dom/CONTRIBUTING.md b/library/Zend/Dom/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Dom/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Dom/Css2Xpath.php b/library/Zend/Dom/Css2Xpath.php deleted file mode 100755 index 7aa7d506c..000000000 --- a/library/Zend/Dom/Css2Xpath.php +++ /dev/null @@ -1,33 +0,0 @@ -errors = array(null); - - set_error_handler(array($this, 'addError'), \E_WARNING); - $nodeList = $this->query($expression); - restore_error_handler(); - - $exception = array_pop($this->errors); - if ($exception) { - throw $exception; - } - - return $nodeList; - } - - /** - * Adds an error to the stack of errors - * - * @param int $errno - * @param string $errstr - * @param string $errfile - * @param int $errline - * @return void - */ - public function addError($errno, $errstr = '', $errfile = '', $errline = 0) - { - $last_error = end($this->errors); - $this->errors[] = new ErrorException( - $errstr, - 0, - $errno, - $errfile, - $errline, - $last_error - ); - } -} diff --git a/library/Zend/Dom/Document.php b/library/Zend/Dom/Document.php deleted file mode 100755 index 456e17f86..000000000 --- a/library/Zend/Dom/Document.php +++ /dev/null @@ -1,310 +0,0 @@ -setStringDocument($document, $type, $encoding); - } - - /** - * Get raw set document - * - * @return string|null - */ - public function getStringDocument() - { - return $this->stringDocument; - } - - /** - * Set raw document - * - * @param string|null $document - * @param string|null $forcedType Type for the provided document (see constants) - * @param string|null $forcedEncoding Encoding for the provided document - * @return self - */ - protected function setStringDocument($document, $forcedType = null, $forcedEncoding = null) - { - $type = static::DOC_HTML; - if (strstr($document, 'DTD XHTML')) { - $type = static::DOC_XHTML; - } - - // Breaking XML declaration to make syntax highlighting work - if ('<' . '?xml' == substr(trim($document), 0, 5)) { - $type = static::DOC_XML; - if (preg_match('/]*xmlns="([^"]+)"[^>]*>/i', $document, $matches)) { - $this->xpathNamespaces[] = $matches[1]; - $type = static::DOC_XHTML; - } - } - - // Unsetting previously registered DOMDocument - $this->domDocument = null; - $this->stringDocument = !empty($document) ? $document : null; - - $this->setType($forcedType ?: (!empty($document) ? $type : null)); - $this->setEncoding($forcedEncoding); - $this->setErrors(array()); - - return $this; - } - - /** - * Get raw document type - * - * @return string|null - */ - public function getType() - { - return $this->type; - } - - /** - * Set raw document type - * - * @param string $type - * @return self - */ - protected function setType($type) - { - $this->type = $type; - - return $this; - } - - /** - * Get DOMDocument generated from set raw document - * - * @return DOMDocument - * @throws Exception\RuntimeException If cannot get DOMDocument; no document registered - */ - public function getDomDocument() - { - if (null === ($stringDocument = $this->getStringDocument())) { - throw new Exception\RuntimeException('Cannot get DOMDocument; no document registered'); - } - - if (null === $this->domDocument) { - $this->domDocument = $this->getDomDocumentFromString($stringDocument); - } - - return $this->domDocument; - } - - /** - * Set DOMDocument - * - * @param DOMDocument $domDocument - * @return self - */ - protected function setDomDocument(DOMDocument $domDocument) - { - $this->domDocument = $domDocument; - - return $this; - } - - /** - * Get set document encoding - * - * @return string|null - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set raw document encoding for DOMDocument generation - * - * @param string|null $encoding - * @return self - */ - public function setEncoding($encoding) - { - $this->encoding = $encoding; - - return $this->encoding; - } - - /** - * Get DOMDocument generation errors - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Set document errors from DOMDocument generation - * - * @param array $errors - * @return self - */ - protected function setErrors($errors) - { - $this->errors = $errors; - - return $this; - } - - /** - * Get DOMDocument from set raw document - * - * @return DOMDocument - * @throws Exception\RuntimeException - */ - protected function getDomDocumentFromString($stringDocument) - { - libxml_use_internal_errors(true); - libxml_disable_entity_loader(true); - - $encoding = $this->getEncoding(); - $domDoc = null === $encoding ? new DOMDocument('1.0') : new DOMDocument('1.0', $encoding); - $type = $this->getType(); - - switch ($type) { - case static::DOC_XML: - $success = $domDoc->loadXML($stringDocument); - foreach ($domDoc->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new Exception\RuntimeException( - 'Invalid XML: Detected use of illegal DOCTYPE' - ); - } - } - break; - case static::DOC_HTML: - case static::DOC_XHTML: - default: - $success = $domDoc->loadHTML($stringDocument); - break; - } - - $errors = libxml_get_errors(); - if (!empty($errors)) { - $this->setErrors($errors); - libxml_clear_errors(); - } - - libxml_disable_entity_loader(false); - libxml_use_internal_errors(false); - - if (!$success) { - throw new Exception\RuntimeException(sprintf('Error parsing document (type == %s)', $type)); - } - - return $domDoc; - } - - /** - * Get Document's registered XPath namespaces - * - * @return array - */ - public function getXpathNamespaces() - { - return $this->xpathNamespaces; - } - - /** - * Register XPath namespaces - * - * @param array $xpathNamespaces - * @return void - */ - public function registerXpathNamespaces($xpathNamespaces) - { - $this->xpathNamespaces = $xpathNamespaces; - } - - /** - * Get Document's registered XPath PHP Functions - * - * @return string|null - */ - public function getXpathPhpFunctions() - { - return $this->xpathPhpFunctions; - } - /** - * Register PHP Functions to use in internal DOMXPath - * - * @param bool $xpathPhpFunctions - * @return void - */ - public function registerXpathPhpFunctions($xpathPhpFunctions = true) - { - $this->xpathPhpFunctions = $xpathPhpFunctions; - } -} diff --git a/library/Zend/Dom/Document/NodeList.php b/library/Zend/Dom/Document/NodeList.php deleted file mode 100755 index 352326fe2..000000000 --- a/library/Zend/Dom/Document/NodeList.php +++ /dev/null @@ -1,160 +0,0 @@ -list = $list; - } - - /** - * Iterator: rewind to first element - * - * @return DOMNode - */ - public function rewind() - { - $this->position = 0; - - return $this->list->item(0); - } - - /** - * Iterator: is current position valid? - * - * @return bool - */ - public function valid() - { - if (in_array($this->position, range(0, $this->list->length - 1)) && $this->list->length > 0) { - return true; - } - - return false; - } - - /** - * Iterator: return current element - * - * @return DOMNode - */ - public function current() - { - return $this->list->item($this->position); - } - - /** - * Iterator: return key of current element - * - * @return int - */ - public function key() - { - return $this->position; - } - - /** - * Iterator: move to next element - * - * @return DOMNode - */ - public function next() - { - ++$this->position; - - return $this->list->item($this->position); - } - - /** - * Countable: get count - * - * @return int - */ - public function count() - { - return $this->list->length; - } - - /** - * ArrayAccess: offset exists - * - * @param int $key - * @return bool - */ - public function offsetExists($key) - { - if (in_array($key, range(0, $this->list->length - 1)) && $this->list->length > 0) { - return true; - } - return false; - } - - /** - * ArrayAccess: get offset - * - * @param int $key - * @return mixed - */ - public function offsetGet($key) - { - return $this->list->item($key); - } - - /** - * ArrayAccess: set offset - * - * @param mixed $key - * @param mixed $value - * @throws Exception\BadMethodCallException when attempting to write to a read-only item - */ - public function offsetSet($key, $value) - { - throw new Exception\BadMethodCallException('Attempting to write to a read-only list'); - } - - /** - * ArrayAccess: unset offset - * - * @param mixed $key - * @throws Exception\BadMethodCallException when attempting to unset a read-only item - */ - public function offsetUnset($key) - { - throw new Exception\BadMethodCallException('Attempting to unset on a read-only list'); - } -} diff --git a/library/Zend/Dom/Document/Query.php b/library/Zend/Dom/Document/Query.php deleted file mode 100755 index bea590328..000000000 --- a/library/Zend/Dom/Document/Query.php +++ /dev/null @@ -1,169 +0,0 @@ -getDomDocument()); - - $xpathNamespaces = $document->getXpathNamespaces(); - foreach ($xpathNamespaces as $prefix => $namespaceUri) { - $xpath->registerNamespace($prefix, $namespaceUri); - } - - if ($xpathPhpfunctions = $document->getXpathPhpFunctions()) { - $xpath->registerNamespace('php', 'http://php.net/xpath'); - ($xpathPhpfunctions === true) ? $xpath->registerPHPFunctions() : $xpath->registerPHPFunctions($xpathPhpfunctions); - } - - $nodeList = $xpath->queryWithErrorException($expression); - return new NodeList($nodeList); - } - - /** - * Transform CSS expression to XPath - * - * @param string $path - * @return string - */ - public static function cssToXpath($path) - { - $path = (string) $path; - if (strstr($path, ',')) { - $paths = explode(',', $path); - $expressions = array(); - foreach ($paths as $path) { - $xpath = static::cssToXpath(trim($path)); - if (is_string($xpath)) { - $expressions[] = $xpath; - } elseif (is_array($xpath)) { - $expressions = array_merge($expressions, $xpath); - } - } - return implode('|', $expressions); - } - - $paths = array('//'); - $path = preg_replace('|\s+>\s+|', '>', $path); - $segments = preg_split('/\s+/', $path); - foreach ($segments as $key => $segment) { - $pathSegment = static::_tokenize($segment); - if (0 == $key) { - if (0 === strpos($pathSegment, '[contains(')) { - $paths[0] .= '*' . ltrim($pathSegment, '*'); - } else { - $paths[0] .= $pathSegment; - } - continue; - } - if (0 === strpos($pathSegment, '[contains(')) { - foreach ($paths as $pathKey => $xpath) { - $paths[$pathKey] .= '//*' . ltrim($pathSegment, '*'); - $paths[] = $xpath . $pathSegment; - } - } else { - foreach ($paths as $pathKey => $xpath) { - $paths[$pathKey] .= '//' . $pathSegment; - } - } - } - - if (1 == count($paths)) { - return $paths[0]; - } - return implode('|', $paths); - } - - /** - * Tokenize CSS expressions to XPath - * - * @param string $expression - * @return string - */ - protected static function _tokenize($expression) - { - // Child selectors - $expression = str_replace('>', '/', $expression); - - // IDs - $expression = preg_replace('|#([a-z][a-z0-9_-]*)|i', '[@id=\'$1\']', $expression); - $expression = preg_replace('|(?cssQuery = $cssQuery; - $this->xpathQuery = $xpathQuery; - $this->document = $document; - $this->nodeList = $nodeList; - } - - /** - * Retrieve CSS Query - * - * @return string - */ - public function getCssQuery() - { - return $this->cssQuery; - } - - /** - * Retrieve XPath query - * - * @return string - */ - public function getXpathQuery() - { - return $this->xpathQuery; - } - - /** - * Retrieve DOMDocument - * - * @return DOMDocument - */ - public function getDocument() - { - return $this->document; - } - - /** - * Iterator: rewind to first element - * - * @return DOMNode - */ - public function rewind() - { - $this->position = 0; - - return $this->nodeList->item(0); - } - - /** - * Iterator: is current position valid? - * - * @return bool - */ - public function valid() - { - if (in_array($this->position, range(0, $this->nodeList->length - 1)) && $this->nodeList->length > 0) { - return true; - } - - return false; - } - - /** - * Iterator: return current element - * - * @return DOMNode - */ - public function current() - { - return $this->nodeList->item($this->position); - } - - /** - * Iterator: return key of current element - * - * @return int - */ - public function key() - { - return $this->position; - } - - /** - * Iterator: move to next element - * - * @return DOMNode - */ - public function next() - { - ++$this->position; - - return $this->nodeList->item($this->position); - } - - /** - * Countable: get count - * - * @return int - */ - public function count() - { - return $this->nodeList->length; - } - - /** - * ArrayAccess: offset exists - * - * @param int $key - * @return bool - */ - public function offsetExists($key) - { - if (in_array($key, range(0, $this->nodeList->length - 1)) && $this->nodeList->length > 0) { - return true; - } - return false; - } - - /** - * ArrayAccess: get offset - * - * @param int $key - * @return mixed - */ - public function offsetGet($key) - { - return $this->nodeList->item($key); - } - - /** - * ArrayAccess: set offset - * - * @param mixed $key - * @param mixed $value - * @throws Exception\BadMethodCallException when attempting to write to a read-only item - */ - public function offsetSet($key, $value) - { - throw new Exception\BadMethodCallException('Attempting to write to a read-only list'); - } - - /** - * ArrayAccess: unset offset - * - * @param mixed $key - * @throws Exception\BadMethodCallException when attempting to unset a read-only item - */ - public function offsetUnset($key) - { - throw new Exception\BadMethodCallException('Attempting to unset on a read-only list'); - } -} diff --git a/library/Zend/Dom/Query.php b/library/Zend/Dom/Query.php deleted file mode 100755 index 551429916..000000000 --- a/library/Zend/Dom/Query.php +++ /dev/null @@ -1,320 +0,0 @@ -setEncoding($encoding); - $this->setDocument($document); - } - - /** - * Set document encoding - * - * @param string $encoding - * @return Query - */ - public function setEncoding($encoding) - { - $this->encoding = (null === $encoding) ? null : (string) $encoding; - return $this; - } - - /** - * Get document encoding - * - * @return null|string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set document to query - * - * @param string $document - * @param null|string $encoding Document encoding - * @return Query - */ - public function setDocument($document, $encoding = null) - { - if (0 === strlen($document)) { - return $this; - } - // breaking XML declaration to make syntax highlighting work - if ('<' . '?xml' == substr(trim($document), 0, 5)) { - if (preg_match('/]*xmlns="([^"]+)"[^>]*>/i', $document, $matches)) { - $this->xpathNamespaces[] = $matches[1]; - return $this->setDocumentXhtml($document, $encoding); - } - return $this->setDocumentXml($document, $encoding); - } - if (strstr($document, 'DTD XHTML')) { - return $this->setDocumentXhtml($document, $encoding); - } - return $this->setDocumentHtml($document, $encoding); - } - - /** - * Register HTML document - * - * @param string $document - * @param null|string $encoding Document encoding - * @return Query - */ - public function setDocumentHtml($document, $encoding = null) - { - $this->document = (string) $document; - $this->docType = self::DOC_HTML; - if (null !== $encoding) { - $this->setEncoding($encoding); - } - return $this; - } - - /** - * Register XHTML document - * - * @param string $document - * @param null|string $encoding Document encoding - * @return Query - */ - public function setDocumentXhtml($document, $encoding = null) - { - $this->document = (string) $document; - $this->docType = self::DOC_XHTML; - if (null !== $encoding) { - $this->setEncoding($encoding); - } - return $this; - } - - /** - * Register XML document - * - * @param string $document - * @param null|string $encoding Document encoding - * @return Query - */ - public function setDocumentXml($document, $encoding = null) - { - $this->document = (string) $document; - $this->docType = self::DOC_XML; - if (null !== $encoding) { - $this->setEncoding($encoding); - } - return $this; - } - - /** - * Retrieve current document - * - * @return string - */ - public function getDocument() - { - return $this->document; - } - - /** - * Get document type - * - * @return string - */ - public function getDocumentType() - { - return $this->docType; - } - - /** - * Get any DOMDocument errors found - * - * @return false|array - */ - public function getDocumentErrors() - { - return $this->documentErrors; - } - - /** - * Perform a CSS selector query - * - * @param string $query - * @return NodeList - */ - public function execute($query) - { - $xpathQuery = Document\Query::cssToXpath($query); - return $this->queryXpath($xpathQuery, $query); - } - - /** - * Perform an XPath query - * - * @param string|array $xpathQuery - * @param string|null $query CSS selector query - * @throws Exception\RuntimeException - * @return NodeList - */ - public function queryXpath($xpathQuery, $query = null) - { - if (null === ($document = $this->getDocument())) { - throw new Exception\RuntimeException('Cannot query; no document registered'); - } - - $encoding = $this->getEncoding(); - libxml_use_internal_errors(true); - libxml_disable_entity_loader(true); - if (null === $encoding) { - $domDoc = new DOMDocument('1.0'); - } else { - $domDoc = new DOMDocument('1.0', $encoding); - } - $type = $this->getDocumentType(); - switch ($type) { - case self::DOC_XML: - $success = $domDoc->loadXML($document); - foreach ($domDoc->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new Exception\RuntimeException( - 'Invalid XML: Detected use of illegal DOCTYPE' - ); - } - } - break; - case self::DOC_HTML: - case self::DOC_XHTML: - default: - $success = $domDoc->loadHTML($document); - break; - } - $errors = libxml_get_errors(); - if (!empty($errors)) { - $this->documentErrors = $errors; - libxml_clear_errors(); - } - libxml_disable_entity_loader(false); - libxml_use_internal_errors(false); - - if (!$success) { - throw new Exception\RuntimeException(sprintf('Error parsing document (type == %s)', $type)); - } - - $nodeList = $this->getNodeList($domDoc, $xpathQuery); - return new NodeList($query, $xpathQuery, $domDoc, $nodeList); - } - - /** - * Register XPath namespaces - * - * @param array $xpathNamespaces - * @return void - */ - public function registerXpathNamespaces($xpathNamespaces) - { - $this->xpathNamespaces = $xpathNamespaces; - } - - /** - * Register PHP Functions to use in internal DOMXPath - * - * @param bool $xpathPhpFunctions - * @return void - */ - public function registerXpathPhpFunctions($xpathPhpFunctions = true) - { - $this->xpathPhpFunctions = $xpathPhpFunctions; - } - - /** - * Prepare node list - * - * @param DOMDocument $document - * @param string|array $xpathQuery - * @return array - * @throws \ErrorException If query cannot be executed - */ - protected function getNodeList($document, $xpathQuery) - { - $xpath = new DOMXPath($document); - foreach ($this->xpathNamespaces as $prefix => $namespaceUri) { - $xpath->registerNamespace($prefix, $namespaceUri); - } - if ($this->xpathPhpFunctions) { - $xpath->registerNamespace("php", "http://php.net/xpath"); - ($this->xpathPhpFunctions === true) ? - $xpath->registerPHPFunctions() - : $xpath->registerPHPFunctions($this->xpathPhpFunctions); - } - $xpathQuery = (string) $xpathQuery; - - $nodeList = $xpath->queryWithErrorException($xpathQuery); - return $nodeList; - } -} diff --git a/library/Zend/Dom/README.md b/library/Zend/Dom/README.md deleted file mode 100755 index b82c2b9ff..000000000 --- a/library/Zend/Dom/README.md +++ /dev/null @@ -1,15 +0,0 @@ -DOM Component from ZF2 -====================== - -This is the DOM component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Dom/composer.json b/library/Zend/Dom/composer.json deleted file mode 100755 index 94433c52a..000000000 --- a/library/Zend/Dom/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "zendframework/zend-dom", - "description": "provides tools for working with DOM documents and structures", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "dom" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Dom\\": "" - } - }, - "target-dir": "Zend/Dom", - "require": { - "php": ">=5.3.23" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Escaper/CONTRIBUTING.md b/library/Zend/Escaper/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Escaper/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Escaper/Escaper.php b/library/Zend/Escaper/Escaper.php deleted file mode 100755 index 3a3d30eb6..000000000 --- a/library/Zend/Escaper/Escaper.php +++ /dev/null @@ -1,387 +0,0 @@ - 'quot', // quotation mark - 38 => 'amp', // ampersand - 60 => 'lt', // less-than sign - 62 => 'gt', // greater-than sign - ); - - /** - * Current encoding for escaping. If not UTF-8, we convert strings from this encoding - * pre-escaping and back to this encoding post-escaping. - * - * @var string - */ - protected $encoding = 'utf-8'; - - /** - * Holds the value of the special flags passed as second parameter to - * htmlspecialchars(). We modify these for PHP 5.4 to take advantage - * of the new ENT_SUBSTITUTE flag for correctly dealing with invalid - * UTF-8 sequences. - * - * @var string - */ - protected $htmlSpecialCharsFlags = ENT_QUOTES; - - /** - * Static Matcher which escapes characters for HTML Attribute contexts - * - * @var callable - */ - protected $htmlAttrMatcher; - - /** - * Static Matcher which escapes characters for Javascript contexts - * - * @var callable - */ - protected $jsMatcher; - - /** - * Static Matcher which escapes characters for CSS Attribute contexts - * - * @var callable - */ - protected $cssMatcher; - - /** - * List of all encoding supported by this class - * - * @var array - */ - protected $supportedEncodings = array( - 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', - 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', - 'ibm866', '866', 'cp1251', 'windows-1251', - 'win-1251', '1251', 'cp1252', 'windows-1252', - '1252', 'koi8-r', 'koi8-ru', 'koi8r', - 'big5', '950', 'gb2312', '936', - 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', - 'cp932', '932', 'euc-jp', 'eucjp', - 'eucjp-win', 'macroman' - ); - - /** - * Constructor: Single parameter allows setting of global encoding for use by - * the current object. If PHP 5.4 is detected, additional ENT_SUBSTITUTE flag - * is set for htmlspecialchars() calls. - * - * @param string $encoding - * @throws Exception\InvalidArgumentException - */ - public function __construct($encoding = null) - { - if ($encoding !== null) { - $encoding = (string) $encoding; - if ($encoding === '') { - throw new Exception\InvalidArgumentException( - get_class($this) . ' constructor parameter does not allow a blank value' - ); - } - - $encoding = strtolower($encoding); - if (!in_array($encoding, $this->supportedEncodings)) { - throw new Exception\InvalidArgumentException( - 'Value of \'' . $encoding . '\' passed to ' . get_class($this) - . ' constructor parameter is invalid. Provide an encoding supported by htmlspecialchars()' - ); - } - - $this->encoding = $encoding; - } - - if (defined('ENT_SUBSTITUTE')) { - $this->htmlSpecialCharsFlags|= ENT_SUBSTITUTE; - } - - // set matcher callbacks - $this->htmlAttrMatcher = array($this, 'htmlAttrMatcher'); - $this->jsMatcher = array($this, 'jsMatcher'); - $this->cssMatcher = array($this, 'cssMatcher'); - } - - /** - * Return the encoding that all output/input is expected to be encoded in. - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Escape a string for the HTML Body context where there are very few characters - * of special meaning. Internally this will use htmlspecialchars(). - * - * @param string $string - * @return string - */ - public function escapeHtml($string) - { - return htmlspecialchars($string, $this->htmlSpecialCharsFlags, $this->encoding); - } - - /** - * Escape a string for the HTML Attribute context. We use an extended set of characters - * to escape that are not covered by htmlspecialchars() to cover cases where an attribute - * might be unquoted or quoted illegally (e.g. backticks are valid quotes for IE). - * - * @param string $string - * @return string - */ - public function escapeHtmlAttr($string) - { - $string = $this->toUtf8($string); - if ($string === '' || ctype_digit($string)) { - return $string; - } - - $result = preg_replace_callback('/[^a-z0-9,\.\-_]/iSu', $this->htmlAttrMatcher, $string); - return $this->fromUtf8($result); - } - - /** - * Escape a string for the Javascript context. This does not use json_encode(). An extended - * set of characters are escaped beyond ECMAScript's rules for Javascript literal string - * escaping in order to prevent misinterpretation of Javascript as HTML leading to the - * injection of special characters and entities. The escaping used should be tolerant - * of cases where HTML escaping was not applied on top of Javascript escaping correctly. - * Backslash escaping is not used as it still leaves the escaped character as-is and so - * is not useful in a HTML context. - * - * @param string $string - * @return string - */ - public function escapeJs($string) - { - $string = $this->toUtf8($string); - if ($string === '' || ctype_digit($string)) { - return $string; - } - - $result = preg_replace_callback('/[^a-z0-9,\._]/iSu', $this->jsMatcher, $string); - return $this->fromUtf8($result); - } - - /** - * Escape a string for the URI or Parameter contexts. This should not be used to escape - * an entire URI - only a subcomponent being inserted. The function is a simple proxy - * to rawurlencode() which now implements RFC 3986 since PHP 5.3 completely. - * - * @param string $string - * @return string - */ - public function escapeUrl($string) - { - return rawurlencode($string); - } - - /** - * Escape a string for the CSS context. CSS escaping can be applied to any string being - * inserted into CSS and escapes everything except alphanumerics. - * - * @param string $string - * @return string - */ - public function escapeCss($string) - { - $string = $this->toUtf8($string); - if ($string === '' || ctype_digit($string)) { - return $string; - } - - $result = preg_replace_callback('/[^a-z0-9]/iSu', $this->cssMatcher, $string); - return $this->fromUtf8($result); - } - - /** - * Callback function for preg_replace_callback that applies HTML Attribute - * escaping to all matches. - * - * @param array $matches - * @return string - */ - protected function htmlAttrMatcher($matches) - { - $chr = $matches[0]; - $ord = ord($chr); - - /** - * The following replaces characters undefined in HTML with the - * hex entity for the Unicode replacement character. - */ - if (($ord <= 0x1f && $chr != "\t" && $chr != "\n" && $chr != "\r") - || ($ord >= 0x7f && $ord <= 0x9f) - ) { - return '�'; - } - - /** - * Check if the current character to escape has a name entity we should - * replace it with while grabbing the integer value of the character. - */ - if (strlen($chr) > 1) { - $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8'); - } - - $hex = bin2hex($chr); - $ord = hexdec($hex); - if (isset(static::$htmlNamedEntityMap[$ord])) { - return '&' . static::$htmlNamedEntityMap[$ord] . ';'; - } - - /** - * Per OWASP recommendations, we'll use upper hex entities - * for any other characters where a named entity does not exist. - */ - if ($ord > 255) { - return sprintf('&#x%04X;', $ord); - } - return sprintf('&#x%02X;', $ord); - } - - /** - * Callback function for preg_replace_callback that applies Javascript - * escaping to all matches. - * - * @param array $matches - * @return string - */ - protected function jsMatcher($matches) - { - $chr = $matches[0]; - if (strlen($chr) == 1) { - return sprintf('\\x%02X', ord($chr)); - } - $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8'); - return sprintf('\\u%04s', strtoupper(bin2hex($chr))); - } - - /** - * Callback function for preg_replace_callback that applies CSS - * escaping to all matches. - * - * @param array $matches - * @return string - */ - protected function cssMatcher($matches) - { - $chr = $matches[0]; - if (strlen($chr) == 1) { - $ord = ord($chr); - } else { - $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8'); - $ord = hexdec(bin2hex($chr)); - } - return sprintf('\\%X ', $ord); - } - - /** - * Converts a string to UTF-8 from the base encoding. The base encoding is set via this - * class' constructor. - * - * @param string $string - * @throws Exception\RuntimeException - * @return string - */ - protected function toUtf8($string) - { - if ($this->getEncoding() === 'utf-8') { - $result = $string; - } else { - $result = $this->convertEncoding($string, 'UTF-8', $this->getEncoding()); - } - - if (!$this->isUtf8($result)) { - throw new Exception\RuntimeException(sprintf( - 'String to be escaped was not valid UTF-8 or could not be converted: %s', $result - )); - } - - return $result; - } - - /** - * Converts a string from UTF-8 to the base encoding. The base encoding is set via this - * class' constructor. - * @param string $string - * @return string - */ - protected function fromUtf8($string) - { - if ($this->getEncoding() === 'utf-8') { - return $string; - } - - return $this->convertEncoding($string, $this->getEncoding(), 'UTF-8'); - } - - /** - * Checks if a given string appears to be valid UTF-8 or not. - * - * @param string $string - * @return bool - */ - protected function isUtf8($string) - { - return ($string === '' || preg_match('/^./su', $string)); - } - - /** - * Encoding conversion helper which wraps iconv and mbstring where they exist or throws - * and exception where neither is available. - * - * @param string $string - * @param string $to - * @param array|string $from - * @throws Exception\RuntimeException - * @return string - */ - protected function convertEncoding($string, $to, $from) - { - if (function_exists('iconv')) { - $result = iconv($from, $to, $string); - } elseif (function_exists('mb_convert_encoding')) { - $result = mb_convert_encoding($string, $to, $from); - } else { - throw new Exception\RuntimeException( - get_class($this) - . ' requires either the iconv or mbstring extension to be installed' - . ' when escaping for non UTF-8 strings.' - ); - } - - if ($result === false) { - return ''; // return non-fatal blank string on encoding errors from users - } - return $result; - } -} diff --git a/library/Zend/Escaper/Exception/ExceptionInterface.php b/library/Zend/Escaper/Exception/ExceptionInterface.php deleted file mode 100755 index 3a7c8a3f2..000000000 --- a/library/Zend/Escaper/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -=5.3.23" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/EventManager/AbstractListenerAggregate.php b/library/Zend/EventManager/AbstractListenerAggregate.php deleted file mode 100755 index 3f4df278f..000000000 --- a/library/Zend/EventManager/AbstractListenerAggregate.php +++ /dev/null @@ -1,33 +0,0 @@ -listeners as $index => $callback) { - if ($events->detach($callback)) { - unset($this->listeners[$index]); - } - } - } -} diff --git a/library/Zend/EventManager/CONTRIBUTING.md b/library/Zend/EventManager/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/EventManager/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/EventManager/Event.php b/library/Zend/EventManager/Event.php deleted file mode 100755 index abc34e744..000000000 --- a/library/Zend/EventManager/Event.php +++ /dev/null @@ -1,209 +0,0 @@ -setName($name); - } - - if (null !== $target) { - $this->setTarget($target); - } - - if (null !== $params) { - $this->setParams($params); - } - } - - /** - * Get event name - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Get the event target - * - * This may be either an object, or the name of a static method. - * - * @return string|object - */ - public function getTarget() - { - return $this->target; - } - - /** - * Set parameters - * - * Overwrites parameters - * - * @param array|ArrayAccess|object $params - * @return Event - * @throws Exception\InvalidArgumentException - */ - public function setParams($params) - { - if (!is_array($params) && !is_object($params)) { - throw new Exception\InvalidArgumentException( - sprintf('Event parameters must be an array or object; received "%s"', gettype($params)) - ); - } - - $this->params = $params; - return $this; - } - - /** - * Get all parameters - * - * @return array|object|ArrayAccess - */ - public function getParams() - { - return $this->params; - } - - /** - * Get an individual parameter - * - * If the parameter does not exist, the $default value will be returned. - * - * @param string|int $name - * @param mixed $default - * @return mixed - */ - public function getParam($name, $default = null) - { - // Check in params that are arrays or implement array access - if (is_array($this->params) || $this->params instanceof ArrayAccess) { - if (!isset($this->params[$name])) { - return $default; - } - - return $this->params[$name]; - } - - // Check in normal objects - if (!isset($this->params->{$name})) { - return $default; - } - return $this->params->{$name}; - } - - /** - * Set the event name - * - * @param string $name - * @return Event - */ - public function setName($name) - { - $this->name = (string) $name; - return $this; - } - - /** - * Set the event target/context - * - * @param null|string|object $target - * @return Event - */ - public function setTarget($target) - { - $this->target = $target; - return $this; - } - - /** - * Set an individual parameter to a value - * - * @param string|int $name - * @param mixed $value - * @return Event - */ - public function setParam($name, $value) - { - if (is_array($this->params) || $this->params instanceof ArrayAccess) { - // Arrays or objects implementing array access - $this->params[$name] = $value; - } else { - // Objects - $this->params->{$name} = $value; - } - return $this; - } - - /** - * Stop further event propagation - * - * @param bool $flag - * @return void - */ - public function stopPropagation($flag = true) - { - $this->stopPropagation = (bool) $flag; - } - - /** - * Is propagation stopped? - * - * @return bool - */ - public function propagationIsStopped() - { - return $this->stopPropagation; - } -} diff --git a/library/Zend/EventManager/EventInterface.php b/library/Zend/EventManager/EventInterface.php deleted file mode 100755 index c1d0de701..000000000 --- a/library/Zend/EventManager/EventInterface.php +++ /dev/null @@ -1,96 +0,0 @@ -setIdentifiers($identifiers); - } - - /** - * Set the event class to utilize - * - * @param string $class - * @return EventManager - */ - public function setEventClass($class) - { - $this->eventClass = $class; - return $this; - } - - /** - * Set shared event manager - * - * @param SharedEventManagerInterface $sharedEventManager - * @return EventManager - */ - public function setSharedManager(SharedEventManagerInterface $sharedEventManager) - { - $this->sharedManager = $sharedEventManager; - StaticEventManager::setInstance($sharedEventManager); - return $this; - } - - /** - * Remove any shared event manager currently attached - * - * @return void - */ - public function unsetSharedManager() - { - $this->sharedManager = false; - } - - /** - * Get shared event manager - * - * If one is not defined, but we have a static instance in - * StaticEventManager, that one will be used and set in this instance. - * - * If none is available in the StaticEventManager, a boolean false is - * returned. - * - * @return false|SharedEventManagerInterface - */ - public function getSharedManager() - { - // "false" means "I do not want a shared manager; don't try and fetch one" - if (false === $this->sharedManager - || $this->sharedManager instanceof SharedEventManagerInterface - ) { - return $this->sharedManager; - } - - if (!StaticEventManager::hasInstance()) { - return false; - } - - $this->sharedManager = StaticEventManager::getInstance(); - return $this->sharedManager; - } - - /** - * Get the identifier(s) for this EventManager - * - * @return array - */ - public function getIdentifiers() - { - return $this->identifiers; - } - - /** - * Set the identifiers (overrides any currently set identifiers) - * - * @param string|int|array|Traversable $identifiers - * @return EventManager Provides a fluent interface - */ - public function setIdentifiers($identifiers) - { - if (is_array($identifiers) || $identifiers instanceof Traversable) { - $this->identifiers = array_unique((array) $identifiers); - } elseif ($identifiers !== null) { - $this->identifiers = array($identifiers); - } - return $this; - } - - /** - * Add some identifier(s) (appends to any currently set identifiers) - * - * @param string|int|array|Traversable $identifiers - * @return EventManager Provides a fluent interface - */ - public function addIdentifiers($identifiers) - { - if (is_array($identifiers) || $identifiers instanceof Traversable) { - $this->identifiers = array_unique(array_merge($this->identifiers, (array) $identifiers)); - } elseif ($identifiers !== null) { - $this->identifiers = array_unique(array_merge($this->identifiers, array($identifiers))); - } - return $this; - } - - /** - * Trigger all listeners for a given event - * - * Can emulate triggerUntil() if the last argument provided is a callback. - * - * @param string $event - * @param string|object $target Object calling emit, or symbol describing target (such as static method name) - * @param array|ArrayAccess $argv Array of arguments; typically, should be associative - * @param null|callable $callback - * @return ResponseCollection All listener return values - * @throws Exception\InvalidCallbackException - */ - public function trigger($event, $target = null, $argv = array(), $callback = null) - { - if ($event instanceof EventInterface) { - $e = $event; - $event = $e->getName(); - $callback = $target; - } elseif ($target instanceof EventInterface) { - $e = $target; - $e->setName($event); - $callback = $argv; - } elseif ($argv instanceof EventInterface) { - $e = $argv; - $e->setName($event); - $e->setTarget($target); - } else { - $e = new $this->eventClass(); - $e->setName($event); - $e->setTarget($target); - $e->setParams($argv); - } - - if ($callback && !is_callable($callback)) { - throw new Exception\InvalidCallbackException('Invalid callback provided'); - } - - // Initial value of stop propagation flag should be false - $e->stopPropagation(false); - - return $this->triggerListeners($event, $e, $callback); - } - - /** - * Trigger listeners until return value of one causes a callback to - * evaluate to true - * - * Triggers listeners until the provided callback evaluates the return - * value of one as true, or until all listeners have been executed. - * - * @param string $event - * @param string|object $target Object calling emit, or symbol describing target (such as static method name) - * @param array|ArrayAccess $argv Array of arguments; typically, should be associative - * @param callable $callback - * @return ResponseCollection - * @throws Exception\InvalidCallbackException if invalid callable provided - */ - public function triggerUntil($event, $target, $argv = null, $callback = null) - { - if ($event instanceof EventInterface) { - $e = $event; - $event = $e->getName(); - $callback = $target; - } elseif ($target instanceof EventInterface) { - $e = $target; - $e->setName($event); - $callback = $argv; - } elseif ($argv instanceof EventInterface) { - $e = $argv; - $e->setName($event); - $e->setTarget($target); - } else { - $e = new $this->eventClass(); - $e->setName($event); - $e->setTarget($target); - $e->setParams($argv); - } - - if (!is_callable($callback)) { - throw new Exception\InvalidCallbackException('Invalid callback provided'); - } - - // Initial value of stop propagation flag should be false - $e->stopPropagation(false); - - return $this->triggerListeners($event, $e, $callback); - } - - /** - * Attach a listener to an event - * - * The first argument is the event, and the next argument describes a - * callback that will respond to that event. A CallbackHandler instance - * describing the event listener combination will be returned. - * - * The last argument indicates a priority at which the event should be - * executed. By default, this value is 1; however, you may set it for any - * integer value. Higher values have higher priority (i.e., execute first). - * - * You can specify "*" for the event name. In such cases, the listener will - * be triggered for every event. - * - * @param string|array|ListenerAggregateInterface $event An event or array of event names. If a ListenerAggregateInterface, proxies to {@link attachAggregate()}. - * @param callable|int $callback If string $event provided, expects PHP callback; for a ListenerAggregateInterface $event, this will be the priority - * @param int $priority If provided, the priority at which to register the callable - * @return CallbackHandler|mixed CallbackHandler if attaching callable (to allow later unsubscribe); mixed if attaching aggregate - * @throws Exception\InvalidArgumentException - */ - public function attach($event, $callback = null, $priority = 1) - { - // Proxy ListenerAggregateInterface arguments to attachAggregate() - if ($event instanceof ListenerAggregateInterface) { - return $this->attachAggregate($event, $callback); - } - - // Null callback is invalid - if (null === $callback) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects a callback; none provided', - __METHOD__ - )); - } - - // Array of events should be registered individually, and return an array of all listeners - if (is_array($event)) { - $listeners = array(); - foreach ($event as $name) { - $listeners[] = $this->attach($name, $callback, $priority); - } - return $listeners; - } - - // If we don't have a priority queue for the event yet, create one - if (empty($this->events[$event])) { - $this->events[$event] = new PriorityQueue(); - } - - // Create a callback handler, setting the event and priority in its metadata - $listener = new CallbackHandler($callback, array('event' => $event, 'priority' => $priority)); - - // Inject the callback handler into the queue - $this->events[$event]->insert($listener, $priority); - return $listener; - } - - /** - * Attach a listener aggregate - * - * Listener aggregates accept an EventManagerInterface instance, and call attach() - * one or more times, typically to attach to multiple events using local - * methods. - * - * @param ListenerAggregateInterface $aggregate - * @param int $priority If provided, a suggested priority for the aggregate to use - * @return mixed return value of {@link ListenerAggregateInterface::attach()} - */ - public function attachAggregate(ListenerAggregateInterface $aggregate, $priority = 1) - { - return $aggregate->attach($this, $priority); - } - - /** - * Unsubscribe a listener from an event - * - * @param CallbackHandler|ListenerAggregateInterface $listener - * @return bool Returns true if event and listener found, and unsubscribed; returns false if either event or listener not found - * @throws Exception\InvalidArgumentException if invalid listener provided - */ - public function detach($listener) - { - if ($listener instanceof ListenerAggregateInterface) { - return $this->detachAggregate($listener); - } - - if (!$listener instanceof CallbackHandler) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expected a ListenerAggregateInterface or CallbackHandler; received "%s"', - __METHOD__, - (is_object($listener) ? get_class($listener) : gettype($listener)) - )); - } - - $event = $listener->getMetadatum('event'); - if (!$event || empty($this->events[$event])) { - return false; - } - $return = $this->events[$event]->remove($listener); - if (!$return) { - return false; - } - if (!count($this->events[$event])) { - unset($this->events[$event]); - } - return true; - } - - /** - * Detach a listener aggregate - * - * Listener aggregates accept an EventManagerInterface instance, and call detach() - * of all previously attached listeners. - * - * @param ListenerAggregateInterface $aggregate - * @return mixed return value of {@link ListenerAggregateInterface::detach()} - */ - public function detachAggregate(ListenerAggregateInterface $aggregate) - { - return $aggregate->detach($this); - } - - /** - * Retrieve all registered events - * - * @return array - */ - public function getEvents() - { - return array_keys($this->events); - } - - /** - * Retrieve all listeners for a given event - * - * @param string $event - * @return PriorityQueue - */ - public function getListeners($event) - { - if (!array_key_exists($event, $this->events)) { - return new PriorityQueue(); - } - return $this->events[$event]; - } - - /** - * Clear all listeners for a given event - * - * @param string $event - * @return void - */ - public function clearListeners($event) - { - if (!empty($this->events[$event])) { - unset($this->events[$event]); - } - } - - /** - * Prepare arguments - * - * Use this method if you want to be able to modify arguments from within a - * listener. It returns an ArrayObject of the arguments, which may then be - * passed to trigger() or triggerUntil(). - * - * @param array $args - * @return ArrayObject - */ - public function prepareArgs(array $args) - { - return new ArrayObject($args); - } - - /** - * Trigger listeners - * - * Actual functionality for triggering listeners, to which both trigger() and triggerUntil() - * delegate. - * - * @param string $event Event name - * @param EventInterface $e - * @param null|callable $callback - * @return ResponseCollection - */ - protected function triggerListeners($event, EventInterface $e, $callback = null) - { - $responses = new ResponseCollection; - $listeners = $this->getListeners($event); - - // Add shared/wildcard listeners to the list of listeners, - // but don't modify the listeners object - $sharedListeners = $this->getSharedListeners($event); - $sharedWildcardListeners = $this->getSharedListeners('*'); - $wildcardListeners = $this->getListeners('*'); - if (count($sharedListeners) || count($sharedWildcardListeners) || count($wildcardListeners)) { - $listeners = clone $listeners; - - // Shared listeners on this specific event - $this->insertListeners($listeners, $sharedListeners); - - // Shared wildcard listeners - $this->insertListeners($listeners, $sharedWildcardListeners); - - // Add wildcard listeners - $this->insertListeners($listeners, $wildcardListeners); - } - - foreach ($listeners as $listener) { - $listenerCallback = $listener->getCallback(); - - // Trigger the listener's callback, and push its result onto the - // response collection - $responses->push(call_user_func($listenerCallback, $e)); - - // If the event was asked to stop propagating, do so - if ($e->propagationIsStopped()) { - $responses->setStopped(true); - break; - } - - // If the result causes our validation callback to return true, - // stop propagation - if ($callback && call_user_func($callback, $responses->last())) { - $responses->setStopped(true); - break; - } - } - - return $responses; - } - - /** - * Get list of all listeners attached to the shared event manager for - * identifiers registered by this instance - * - * @param string $event - * @return array - */ - protected function getSharedListeners($event) - { - if (!$sharedManager = $this->getSharedManager()) { - return array(); - } - - $identifiers = $this->getIdentifiers(); - //Add wildcard id to the search, if not already added - if (!in_array('*', $identifiers)) { - $identifiers[] = '*'; - } - $sharedListeners = array(); - - foreach ($identifiers as $id) { - if (!$listeners = $sharedManager->getListeners($id, $event)) { - continue; - } - - if (!is_array($listeners) && !($listeners instanceof Traversable)) { - continue; - } - - foreach ($listeners as $listener) { - if (!$listener instanceof CallbackHandler) { - continue; - } - $sharedListeners[] = $listener; - } - } - - return $sharedListeners; - } - - /** - * Add listeners to the master queue of listeners - * - * Used to inject shared listeners and wildcard listeners. - * - * @param PriorityQueue $masterListeners - * @param PriorityQueue $listeners - * @return void - */ - protected function insertListeners($masterListeners, $listeners) - { - foreach ($listeners as $listener) { - $priority = $listener->getMetadatum('priority'); - if (null === $priority) { - $priority = 1; - } elseif (is_array($priority)) { - // If we have an array, likely using PriorityQueue. Grab first - // element of the array, as that's the actual priority. - $priority = array_shift($priority); - } - $masterListeners->insert($listener, $priority); - } - } -} diff --git a/library/Zend/EventManager/EventManagerAwareInterface.php b/library/Zend/EventManager/EventManagerAwareInterface.php deleted file mode 100755 index a5c25f25f..000000000 --- a/library/Zend/EventManager/EventManagerAwareInterface.php +++ /dev/null @@ -1,24 +0,0 @@ -eventIdentifier property. - * - * @param EventManagerInterface $events - * @return mixed - */ - public function setEventManager(EventManagerInterface $events) - { - $identifiers = array(__CLASS__, get_class($this)); - if (isset($this->eventIdentifier)) { - if ((is_string($this->eventIdentifier)) - || (is_array($this->eventIdentifier)) - || ($this->eventIdentifier instanceof Traversable) - ) { - $identifiers = array_unique(array_merge($identifiers, (array) $this->eventIdentifier)); - } elseif (is_object($this->eventIdentifier)) { - $identifiers[] = $this->eventIdentifier; - } - // silently ignore invalid eventIdentifier types - } - $events->setIdentifiers($identifiers); - $this->events = $events; - if (method_exists($this, 'attachDefaultListeners')) { - $this->attachDefaultListeners(); - } - return $this; - } - - /** - * Retrieve the event manager - * - * Lazy-loads an EventManager instance if none registered. - * - * @return EventManagerInterface - */ - public function getEventManager() - { - if (!$this->events instanceof EventManagerInterface) { - $this->setEventManager(new EventManager()); - } - return $this->events; - } -} diff --git a/library/Zend/EventManager/EventManagerInterface.php b/library/Zend/EventManager/EventManagerInterface.php deleted file mode 100755 index 6a2129f93..000000000 --- a/library/Zend/EventManager/EventManagerInterface.php +++ /dev/null @@ -1,144 +0,0 @@ -setExtractFlags(self::EXTR_BOTH); - - // Iterate and remove any matches - $removed = false; - $items = array(); - $this->rewind(); - while (!$this->isEmpty()) { - $item = $this->extract(); - if ($item['data'] === $datum) { - $removed = true; - continue; - } - $items[] = $item; - } - - // Repopulate - foreach ($items as $item) { - $this->insert($item['data'], $item['priority']); - } - - $this->setExtractFlags(self::EXTR_DATA); - return $removed; - } - - /** - * Iterate the next filter in the chain - * - * Iterates and calls the next filter in the chain. - * - * @param mixed $context - * @param array $params - * @param FilterIterator $chain - * @return mixed - */ - public function next($context = null, array $params = array(), $chain = null) - { - if (empty($context) || $chain->isEmpty()) { - return; - } - - $next = $this->extract(); - if (!$next instanceof CallbackHandler) { - return; - } - - $return = call_user_func($next->getCallback(), $context, $params, $chain); - return $return; - } -} diff --git a/library/Zend/EventManager/FilterChain.php b/library/Zend/EventManager/FilterChain.php deleted file mode 100755 index d79a5de97..000000000 --- a/library/Zend/EventManager/FilterChain.php +++ /dev/null @@ -1,120 +0,0 @@ -filters = new Filter\FilterIterator(); - } - - /** - * Apply the filters - * - * Begins iteration of the filters. - * - * @param mixed $context Object under observation - * @param mixed $argv Associative array of arguments - * @return mixed - */ - public function run($context, array $argv = array()) - { - $chain = clone $this->getFilters(); - - if ($chain->isEmpty()) { - return; - } - - $next = $chain->extract(); - if (!$next instanceof CallbackHandler) { - return; - } - - return call_user_func($next->getCallback(), $context, $argv, $chain); - } - - /** - * Connect a filter to the chain - * - * @param callable $callback PHP Callback - * @param int $priority Priority in the queue at which to execute; defaults to 1 (higher numbers == higher priority) - * @return CallbackHandler (to allow later unsubscribe) - * @throws Exception\InvalidCallbackException - */ - public function attach($callback, $priority = 1) - { - if (empty($callback)) { - throw new Exception\InvalidCallbackException('No callback provided'); - } - $filter = new CallbackHandler($callback, array('priority' => $priority)); - $this->filters->insert($filter, $priority); - return $filter; - } - - /** - * Detach a filter from the chain - * - * @param CallbackHandler $filter - * @return bool Returns true if filter found and unsubscribed; returns false otherwise - */ - public function detach(CallbackHandler $filter) - { - return $this->filters->remove($filter); - } - - /** - * Retrieve all filters - * - * @return Filter\FilterIterator - */ - public function getFilters() - { - return $this->filters; - } - - /** - * Clear all filters - * - * @return void - */ - public function clearFilters() - { - $this->filters = new Filter\FilterIterator(); - } - - /** - * Return current responses - * - * Only available while the chain is still being iterated. Returns the - * current ResponseCollection. - * - * @return null|ResponseCollection - */ - public function getResponses() - { - return null; - } -} diff --git a/library/Zend/EventManager/GlobalEventManager.php b/library/Zend/EventManager/GlobalEventManager.php deleted file mode 100755 index 4bac5b574..000000000 --- a/library/Zend/EventManager/GlobalEventManager.php +++ /dev/null @@ -1,135 +0,0 @@ -trigger($event, $context, $argv); - } - - /** - * Trigger listeners until return value of one causes a callback to evaluate - * to true. - * - * @param string $event - * @param string|object $context - * @param array|object $argv - * @param callable $callback - * @return ResponseCollection - */ - public static function triggerUntil($event, $context, $argv, $callback) - { - return static::getEventCollection()->triggerUntil($event, $context, $argv, $callback); - } - - /** - * Attach a listener to an event - * - * @param string $event - * @param callable $callback - * @param int $priority - * @return CallbackHandler - */ - public static function attach($event, $callback, $priority = 1) - { - return static::getEventCollection()->attach($event, $callback, $priority); - } - - /** - * Detach a callback from a listener - * - * @param CallbackHandler $listener - * @return bool - */ - public static function detach(CallbackHandler $listener) - { - return static::getEventCollection()->detach($listener); - } - - /** - * Retrieve list of events this object manages - * - * @return array - */ - public static function getEvents() - { - return static::getEventCollection()->getEvents(); - } - - /** - * Retrieve all listeners for a given event - * - * @param string $event - * @return PriorityQueue|array - */ - public static function getListeners($event) - { - return static::getEventCollection()->getListeners($event); - } - - /** - * Clear all listeners for a given event - * - * @param string $event - * @return void - */ - public static function clearListeners($event) - { - static::getEventCollection()->clearListeners($event); - } -} diff --git a/library/Zend/EventManager/ListenerAggregateInterface.php b/library/Zend/EventManager/ListenerAggregateInterface.php deleted file mode 100755 index cd0eef4ce..000000000 --- a/library/Zend/EventManager/ListenerAggregateInterface.php +++ /dev/null @@ -1,42 +0,0 @@ -listeners as $index => $callback) { - if ($events->detach($callback)) { - unset($this->listeners[$index]); - } - } - } -} diff --git a/library/Zend/EventManager/ProvidesEvents.php b/library/Zend/EventManager/ProvidesEvents.php deleted file mode 100755 index 0cfeb1975..000000000 --- a/library/Zend/EventManager/ProvidesEvents.php +++ /dev/null @@ -1,23 +0,0 @@ -stopped; - } - - /** - * Mark the collection as stopped (or its opposite) - * - * @param bool $flag - * @return ResponseCollection - */ - public function setStopped($flag) - { - $this->stopped = (bool) $flag; - return $this; - } - - /** - * Convenient access to the first handler return value. - * - * @return mixed The first handler return value - */ - public function first() - { - return parent::bottom(); - } - - /** - * Convenient access to the last handler return value. - * - * If the collection is empty, returns null. Otherwise, returns value - * returned by last handler. - * - * @return mixed The last handler return value - */ - public function last() - { - if (count($this) === 0) { - return null; - } - return parent::top(); - } - - /** - * Check if any of the responses match the given value. - * - * @param mixed $value The value to look for among responses - * @return bool - */ - public function contains($value) - { - foreach ($this as $response) { - if ($response === $value) { - return true; - } - } - return false; - } -} diff --git a/library/Zend/EventManager/SharedEventAggregateAwareInterface.php b/library/Zend/EventManager/SharedEventAggregateAwareInterface.php deleted file mode 100755 index 4cda8bc12..000000000 --- a/library/Zend/EventManager/SharedEventAggregateAwareInterface.php +++ /dev/null @@ -1,33 +0,0 @@ - - * $sharedEventManager = new SharedEventManager(); - * $sharedEventManager->attach( - * array('My\Resource\AbstractResource', 'My\Resource\EntityResource'), - * 'getAll', - * function ($e) use ($cache) { - * if (!$id = $e->getParam('id', false)) { - * return; - * } - * if (!$data = $cache->load(get_class($resource) . '::getOne::' . $id )) { - * return; - * } - * return $data; - * } - * ); - * - * - * @param string|array $id Identifier(s) for event emitting component(s) - * @param string $event - * @param callable $callback PHP Callback - * @param int $priority Priority at which listener should execute - * @return CallbackHandler|array Either CallbackHandler or array of CallbackHandlers - */ - public function attach($id, $event, $callback, $priority = 1) - { - $ids = (array) $id; - $listeners = array(); - foreach ($ids as $id) { - if (!array_key_exists($id, $this->identifiers)) { - $this->identifiers[$id] = new EventManager($id); - } - $listeners[] = $this->identifiers[$id]->attach($event, $callback, $priority); - } - if (count($listeners) > 1) { - return $listeners; - } - return $listeners[0]; - } - - /** - * Attach a listener aggregate - * - * Listener aggregates accept an EventManagerInterface instance, and call attachShared() - * one or more times, typically to attach to multiple events using local - * methods. - * - * @param SharedListenerAggregateInterface $aggregate - * @param int $priority If provided, a suggested priority for the aggregate to use - * @return mixed return value of {@link ListenerAggregateInterface::attachShared()} - */ - public function attachAggregate(SharedListenerAggregateInterface $aggregate, $priority = 1) - { - return $aggregate->attachShared($this, $priority); - } - - /** - * Detach a listener from an event offered by a given resource - * - * @param string|int $id - * @param CallbackHandler $listener - * @return bool Returns true if event and listener found, and unsubscribed; returns false if either event or listener not found - */ - public function detach($id, CallbackHandler $listener) - { - if (!array_key_exists($id, $this->identifiers)) { - return false; - } - return $this->identifiers[$id]->detach($listener); - } - - /** - * Detach a listener aggregate - * - * Listener aggregates accept a SharedEventManagerInterface instance, and call detachShared() - * of all previously attached listeners. - * - * @param SharedListenerAggregateInterface $aggregate - * @return mixed return value of {@link SharedListenerAggregateInterface::detachShared()} - */ - public function detachAggregate(SharedListenerAggregateInterface $aggregate) - { - return $aggregate->detachShared($this); - } - - /** - * Retrieve all registered events for a given resource - * - * @param string|int $id - * @return array - */ - public function getEvents($id) - { - if (!array_key_exists($id, $this->identifiers)) { - //Check if there are any id wildcards listeners - if ('*' != $id && array_key_exists('*', $this->identifiers)) { - return $this->identifiers['*']->getEvents(); - } - return false; - } - return $this->identifiers[$id]->getEvents(); - } - - /** - * Retrieve all listeners for a given identifier and event - * - * @param string|int $id - * @param string|int $event - * @return false|PriorityQueue - */ - public function getListeners($id, $event) - { - if (!array_key_exists($id, $this->identifiers)) { - return false; - } - return $this->identifiers[$id]->getListeners($event); - } - - /** - * Clear all listeners for a given identifier, optionally for a specific event - * - * @param string|int $id - * @param null|string $event - * @return bool - */ - public function clearListeners($id, $event = null) - { - if (!array_key_exists($id, $this->identifiers)) { - return false; - } - - if (null === $event) { - unset($this->identifiers[$id]); - return true; - } - - return $this->identifiers[$id]->clearListeners($event); - } -} diff --git a/library/Zend/EventManager/SharedEventManagerAwareInterface.php b/library/Zend/EventManager/SharedEventManagerAwareInterface.php deleted file mode 100755 index 09e5c98c1..000000000 --- a/library/Zend/EventManager/SharedEventManagerAwareInterface.php +++ /dev/null @@ -1,38 +0,0 @@ -=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Feed/CONTRIBUTING.md b/library/Zend/Feed/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Feed/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Feed/Exception/BadMethodCallException.php b/library/Zend/Feed/Exception/BadMethodCallException.php deleted file mode 100755 index 107c3e64e..000000000 --- a/library/Zend/Feed/Exception/BadMethodCallException.php +++ /dev/null @@ -1,16 +0,0 @@ -setOptions($options); - } - } - - /** - * Process any injected configuration options - * - * @param array|Traversable $options Options array or Traversable object - * @return AbstractCallback - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Array or Traversable object' - . 'expected, got ' . gettype($options)); - } - - if (is_array($options)) { - $this->setOptions($options); - } - - if (array_key_exists('storage', $options)) { - $this->setStorage($options['storage']); - } - return $this; - } - - /** - * Send the response, including all headers. - * If you wish to handle this via Zend\Http, use the getter methods - * to retrieve any data needed to be set on your HTTP Response object, or - * simply give this object the HTTP Response instance to work with for you! - * - * @return void - */ - public function sendResponse() - { - $this->getHttpResponse()->send(); - } - - /** - * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used - * to background save any verification tokens associated with a subscription - * or other. - * - * @param Model\SubscriptionPersistenceInterface $storage - * @return AbstractCallback - */ - public function setStorage(Model\SubscriptionPersistenceInterface $storage) - { - $this->storage = $storage; - return $this; - } - - /** - * Gets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used - * to background save any verification tokens associated with a subscription - * or other. - * - * @return Model\SubscriptionPersistenceInterface - * @throws Exception\RuntimeException - */ - public function getStorage() - { - if ($this->storage === null) { - throw new Exception\RuntimeException('No storage object has been' - . ' set that subclasses Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence'); - } - return $this->storage; - } - - /** - * An instance of a class handling Http Responses. This is implemented in - * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with - * (i.e. not inherited from) Zend\Controller\Response\Http. - * - * @param HttpResponse|PhpResponse $httpResponse - * @return AbstractCallback - * @throws Exception\InvalidArgumentException - */ - public function setHttpResponse($httpResponse) - { - if (!$httpResponse instanceof HttpResponse && !$httpResponse instanceof PhpResponse) { - throw new Exception\InvalidArgumentException('HTTP Response object must' - . ' implement one of Zend\Feed\Pubsubhubbub\HttpResponse or' - . ' Zend\Http\PhpEnvironment\Response'); - } - $this->httpResponse = $httpResponse; - return $this; - } - - /** - * An instance of a class handling Http Responses. This is implemented in - * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with - * (i.e. not inherited from) Zend\Controller\Response\Http. - * - * @return HttpResponse|PhpResponse - */ - public function getHttpResponse() - { - if ($this->httpResponse === null) { - $this->httpResponse = new HttpResponse; - } - return $this->httpResponse; - } - - /** - * Sets the number of Subscribers for which any updates are on behalf of. - * In other words, is this class serving one or more subscribers? How many? - * Defaults to 1 if left unchanged. - * - * @param string|int $count - * @return AbstractCallback - * @throws Exception\InvalidArgumentException - */ - public function setSubscriberCount($count) - { - $count = intval($count); - if ($count <= 0) { - throw new Exception\InvalidArgumentException('Subscriber count must be' - . ' greater than zero'); - } - $this->subscriberCount = $count; - return $this; - } - - /** - * Gets the number of Subscribers for which any updates are on behalf of. - * In other words, is this class serving one or more subscribers? How many? - * - * @return int - */ - public function getSubscriberCount() - { - return $this->subscriberCount; - } - - /** - * Attempt to detect the callback URL (specifically the path forward) - * @return string - */ - protected function _detectCallbackUrl() - { - $callbackUrl = ''; - if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) { - $callbackUrl = $_SERVER['HTTP_X_ORIGINAL_URL']; - } elseif (isset($_SERVER['HTTP_X_REWRITE_URL'])) { - $callbackUrl = $_SERVER['HTTP_X_REWRITE_URL']; - } elseif (isset($_SERVER['REQUEST_URI'])) { - $callbackUrl = $_SERVER['REQUEST_URI']; - $scheme = 'http'; - if ($_SERVER['HTTPS'] == 'on') { - $scheme = 'https'; - } - $schemeAndHttpHost = $scheme . '://' . $this->_getHttpHost(); - if (strpos($callbackUrl, $schemeAndHttpHost) === 0) { - $callbackUrl = substr($callbackUrl, strlen($schemeAndHttpHost)); - } - } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { - $callbackUrl= $_SERVER['ORIG_PATH_INFO']; - if (!empty($_SERVER['QUERY_STRING'])) { - $callbackUrl .= '?' . $_SERVER['QUERY_STRING']; - } - } - return $callbackUrl; - } - - /** - * Get the HTTP host - * - * @return string - */ - protected function _getHttpHost() - { - if (!empty($_SERVER['HTTP_HOST'])) { - return $_SERVER['HTTP_HOST']; - } - $scheme = 'http'; - if ($_SERVER['HTTPS'] == 'on') { - $scheme = 'https'; - } - $name = $_SERVER['SERVER_NAME']; - $port = $_SERVER['SERVER_PORT']; - if (($scheme == 'http' && $port == 80) - || ($scheme == 'https' && $port == 443) - ) { - return $name; - } - - return $name . ':' . $port; - } - - /** - * Retrieve a Header value from either $_SERVER or Apache - * - * @param string $header - * @return bool|string - */ - protected function _getHeader($header) - { - $temp = strtoupper(str_replace('-', '_', $header)); - if (!empty($_SERVER[$temp])) { - return $_SERVER[$temp]; - } - $temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header)); - if (!empty($_SERVER[$temp])) { - return $_SERVER[$temp]; - } - if (function_exists('apache_request_headers')) { - $headers = apache_request_headers(); - if (!empty($headers[$header])) { - return $headers[$header]; - } - } - return false; - } - - /** - * Return the raw body of the request - * - * @return string|false Raw body, or false if not present - */ - protected function _getRawBody() - { - $body = file_get_contents('php://input'); - if (strlen(trim($body)) == 0 && isset($GLOBALS['HTTP_RAW_POST_DATA'])) { - $body = $GLOBALS['HTTP_RAW_POST_DATA']; - } - if (strlen(trim($body)) > 0) { - return $body; - } - return false; - } -} diff --git a/library/Zend/Feed/PubSubHubbub/CallbackInterface.php b/library/Zend/Feed/PubSubHubbub/CallbackInterface.php deleted file mode 100755 index 8873c3db4..000000000 --- a/library/Zend/Feed/PubSubHubbub/CallbackInterface.php +++ /dev/null @@ -1,51 +0,0 @@ -sendHeaders(); - echo $this->getContent(); - } - - /** - * Send all headers - * - * Sends any headers specified. If an {@link setHttpResponseCode() HTTP response code} - * has been specified, it is sent with the first header. - * - * @return void - */ - public function sendHeaders() - { - if (count($this->headers) || (200 != $this->statusCode)) { - $this->canSendHeaders(true); - } elseif (200 == $this->statusCode) { - return; - } - $httpCodeSent = false; - foreach ($this->headers as $header) { - if (!$httpCodeSent && $this->statusCode) { - header($header['name'] . ': ' . $header['value'], $header['replace'], $this->statusCode); - $httpCodeSent = true; - } else { - header($header['name'] . ': ' . $header['value'], $header['replace']); - } - } - if (!$httpCodeSent) { - header('HTTP/1.1 ' . $this->statusCode); - } - } - - /** - * Set a header - * - * If $replace is true, replaces any headers already defined with that - * $name. - * - * @param string $name - * @param string $value - * @param bool $replace - * @return \Zend\Feed\PubSubHubbub\HttpResponse - */ - public function setHeader($name, $value, $replace = false) - { - $name = $this->_normalizeHeader($name); - $value = (string) $value; - if ($replace) { - foreach ($this->headers as $key => $header) { - if ($name == $header['name']) { - unset($this->headers[$key]); - } - } - } - $this->headers[] = array( - 'name' => $name, - 'value' => $value, - 'replace' => $replace, - ); - - return $this; - } - - /** - * Check if a specific Header is set and return its value - * - * @param string $name - * @return string|null - */ - public function getHeader($name) - { - $name = $this->_normalizeHeader($name); - foreach ($this->headers as $header) { - if ($header['name'] == $name) { - return $header['value']; - } - } - } - - /** - * Return array of headers; see {@link $headers} for format - * - * @return array - */ - public function getHeaders() - { - return $this->headers; - } - - /** - * Can we send headers? - * - * @param bool $throw Whether or not to throw an exception if headers have been sent; defaults to false - * @return HttpResponse - * @throws Exception\RuntimeException - */ - public function canSendHeaders($throw = false) - { - $ok = headers_sent($file, $line); - if ($ok && $throw) { - throw new Exception\RuntimeException('Cannot send headers; headers already sent in ' . $file . ', line ' . $line); - } - return !$ok; - } - - /** - * Set HTTP response code to use with headers - * - * @param int $code - * @return HttpResponse - * @throws Exception\InvalidArgumentException - */ - public function setStatusCode($code) - { - if (!is_int($code) || (100 > $code) || (599 < $code)) { - throw new Exception\InvalidArgumentException('Invalid HTTP response' - . ' code:' . $code); - } - $this->statusCode = $code; - return $this; - } - - /** - * Retrieve HTTP response code - * - * @return int - */ - public function getStatusCode() - { - return $this->statusCode; - } - - /** - * Set body content - * - * @param string $content - * @return \Zend\Feed\PubSubHubbub\HttpResponse - */ - public function setContent($content) - { - $this->content = (string) $content; - $this->setHeader('content-length', strlen($content)); - return $this; - } - - /** - * Return the body content - * - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * Normalizes a header name to X-Capitalized-Names - * - * @param string $name - * @return string - */ - protected function _normalizeHeader($name) - { - $filtered = str_replace(array('-', '_'), ' ', (string) $name); - $filtered = ucwords(strtolower($filtered)); - $filtered = str_replace(' ', '-', $filtered); - return $filtered; - } -} diff --git a/library/Zend/Feed/PubSubHubbub/Model/AbstractModel.php b/library/Zend/Feed/PubSubHubbub/Model/AbstractModel.php deleted file mode 100755 index 92e688133..000000000 --- a/library/Zend/Feed/PubSubHubbub/Model/AbstractModel.php +++ /dev/null @@ -1,39 +0,0 @@ -db = new TableGateway($table, null); - } else { - $this->db = $tableGateway; - } - } -} diff --git a/library/Zend/Feed/PubSubHubbub/Model/Subscription.php b/library/Zend/Feed/PubSubHubbub/Model/Subscription.php deleted file mode 100755 index 9571106a4..000000000 --- a/library/Zend/Feed/PubSubHubbub/Model/Subscription.php +++ /dev/null @@ -1,142 +0,0 @@ -db->select(array('id' => $data['id'])); - if ($result && (0 < count($result))) { - $data['created_time'] = $result->current()->created_time; - $now = $this->getNow(); - if (array_key_exists('lease_seconds', $data) - && $data['lease_seconds'] - ) { - $data['expiration_time'] = $now->add(new DateInterval('PT' . $data['lease_seconds'] . 'S')) - ->format('Y-m-d H:i:s'); - } - $this->db->update( - $data, - array('id' => $data['id']) - ); - return false; - } - - $this->db->insert($data); - return true; - } - - /** - * Get subscription by ID/key - * - * @param string $key - * @return array - * @throws PubSubHubbub\Exception\InvalidArgumentException - */ - public function getSubscription($key) - { - if (empty($key) || !is_string($key)) { - throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"' - .' of "' . $key . '" must be a non-empty string'); - } - $result = $this->db->select(array('id' => $key)); - if (count($result)) { - return $result->current()->getArrayCopy(); - } - return false; - } - - /** - * Determine if a subscription matching the key exists - * - * @param string $key - * @return bool - * @throws PubSubHubbub\Exception\InvalidArgumentException - */ - public function hasSubscription($key) - { - if (empty($key) || !is_string($key)) { - throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"' - .' of "' . $key . '" must be a non-empty string'); - } - $result = $this->db->select(array('id' => $key)); - if (count($result)) { - return true; - } - return false; - } - - /** - * Delete a subscription - * - * @param string $key - * @return bool - */ - public function deleteSubscription($key) - { - $result = $this->db->select(array('id' => $key)); - if (count($result)) { - $this->db->delete( - array('id' => $key) - ); - return true; - } - return false; - } - - /** - * Get a new DateTime or the one injected for testing - * - * @return DateTime - */ - public function getNow() - { - if (null === $this->now) { - return new DateTime(); - } - return $this->now; - } - - /** - * Set a DateTime instance for assisting with unit testing - * - * @param DateTime $now - * @return Subscription - */ - public function setNow(DateTime $now) - { - $this->now = $now; - return $this; - } -} diff --git a/library/Zend/Feed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php b/library/Zend/Feed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php deleted file mode 100755 index ccd272329..000000000 --- a/library/Zend/Feed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php +++ /dev/null @@ -1,45 +0,0 @@ -getHubs(); - } - - /** - * Allows the external environment to make ZendOAuth use a specific - * Client instance. - * - * @param Http\Client $httpClient - * @return void - */ - public static function setHttpClient(Http\Client $httpClient) - { - static::$httpClient = $httpClient; - } - - /** - * Return the singleton instance of the HTTP Client. Note that - * the instance is reset and cleared of previous parameters GET/POST. - * Headers are NOT reset but handled by this component if applicable. - * - * @return Http\Client - */ - public static function getHttpClient() - { - if (!isset(static::$httpClient)) { - static::$httpClient = new Http\Client; - } else { - static::$httpClient->resetParameters(); - } - return static::$httpClient; - } - - /** - * Simple mechanism to delete the entire singleton HTTP Client instance - * which forces a new instantiation for subsequent requests. - * - * @return void - */ - public static function clearHttpClient() - { - static::$httpClient = null; - } - - /** - * Set the Escaper instance - * - * If null, resets the instance - * - * @param null|Escaper $escaper - */ - public static function setEscaper(Escaper $escaper = null) - { - static::$escaper = $escaper; - } - - /** - * Get the Escaper instance - * - * If none registered, lazy-loads an instance. - * - * @return Escaper - */ - public static function getEscaper() - { - if (null === static::$escaper) { - static::setEscaper(new Escaper()); - } - return static::$escaper; - } - - /** - * RFC 3986 safe url encoding method - * - * @param string $string - * @return string - */ - public static function urlencode($string) - { - $escaper = static::getEscaper(); - $rawencoded = $escaper->escapeUrl($string); - $rfcencoded = str_replace('%7E', '~', $rawencoded); - return $rfcencoded; - } -} diff --git a/library/Zend/Feed/PubSubHubbub/Publisher.php b/library/Zend/Feed/PubSubHubbub/Publisher.php deleted file mode 100755 index 916ffcad5..000000000 --- a/library/Zend/Feed/PubSubHubbub/Publisher.php +++ /dev/null @@ -1,397 +0,0 @@ -setOptions($options); - } - } - - /** - * Process any injected configuration options - * - * @param array|Traversable $options Options array or Traversable object - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Array or Traversable object' - . 'expected, got ' . gettype($options)); - } - if (array_key_exists('hubUrls', $options)) { - $this->addHubUrls($options['hubUrls']); - } - if (array_key_exists('updatedTopicUrls', $options)) { - $this->addUpdatedTopicUrls($options['updatedTopicUrls']); - } - if (array_key_exists('parameters', $options)) { - $this->setParameters($options['parameters']); - } - return $this; - } - - /** - * Add a Hub Server URL supported by Publisher - * - * @param string $url - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function addHubUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . 'URL'); - } - $this->hubUrls[] = $url; - return $this; - } - - /** - * Add an array of Hub Server URLs supported by Publisher - * - * @param array $urls - * @return Publisher - */ - public function addHubUrls(array $urls) - { - foreach ($urls as $url) { - $this->addHubUrl($url); - } - return $this; - } - - /** - * Remove a Hub Server URL - * - * @param string $url - * @return Publisher - */ - public function removeHubUrl($url) - { - if (!in_array($url, $this->getHubUrls())) { - return $this; - } - $key = array_search($url, $this->hubUrls); - unset($this->hubUrls[$key]); - return $this; - } - - /** - * Return an array of unique Hub Server URLs currently available - * - * @return array - */ - public function getHubUrls() - { - $this->hubUrls = array_unique($this->hubUrls); - return $this->hubUrls; - } - - /** - * Add a URL to a topic (Atom or RSS feed) which has been updated - * - * @param string $url - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function addUpdatedTopicUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . 'URL'); - } - $this->updatedTopicUrls[] = $url; - return $this; - } - - /** - * Add an array of Topic URLs which have been updated - * - * @param array $urls - * @return Publisher - */ - public function addUpdatedTopicUrls(array $urls) - { - foreach ($urls as $url) { - $this->addUpdatedTopicUrl($url); - } - return $this; - } - - /** - * Remove an updated topic URL - * - * @param string $url - * @return Publisher - */ - public function removeUpdatedTopicUrl($url) - { - if (!in_array($url, $this->getUpdatedTopicUrls())) { - return $this; - } - $key = array_search($url, $this->updatedTopicUrls); - unset($this->updatedTopicUrls[$key]); - return $this; - } - - /** - * Return an array of unique updated topic URLs currently available - * - * @return array - */ - public function getUpdatedTopicUrls() - { - $this->updatedTopicUrls = array_unique($this->updatedTopicUrls); - return $this->updatedTopicUrls; - } - - /** - * Notifies a single Hub Server URL of changes - * - * @param string $url The Hub Server's URL - * @return void - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public function notifyHub($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . 'URL'); - } - $client = $this->_getHttpClient(); - $client->setUri($url); - $response = $client->getResponse(); - if ($response->getStatusCode() !== 204) { - throw new Exception\RuntimeException('Notification to Hub Server ' - . 'at "' . $url . '" appears to have failed with a status code of "' - . $response->getStatusCode() . '" and message "' - . $response->getContent() . '"'); - } - } - - /** - * Notifies all Hub Server URLs of changes - * - * If a Hub notification fails, certain data will be retained in an - * an array retrieved using getErrors(), if a failure occurs for any Hubs - * the isSuccess() check will return FALSE. This method is designed not - * to needlessly fail with an Exception/Error unless from Zend\Http\Client. - * - * @return void - * @throws Exception\RuntimeException - */ - public function notifyAll() - { - $client = $this->_getHttpClient(); - $hubs = $this->getHubUrls(); - if (empty($hubs)) { - throw new Exception\RuntimeException('No Hub Server URLs' - . ' have been set so no notifications can be sent'); - } - $this->errors = array(); - foreach ($hubs as $url) { - $client->setUri($url); - $response = $client->getResponse(); - if ($response->getStatusCode() !== 204) { - $this->errors[] = array( - 'response' => $response, - 'hubUrl' => $url - ); - } - } - } - - /** - * Add an optional parameter to the update notification requests - * - * @param string $name - * @param string|null $value - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function setParameter($name, $value = null) - { - if (is_array($name)) { - $this->setParameters($name); - return $this; - } - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if ($value === null) { - $this->removeParameter($name); - return $this; - } - if (empty($value) || (!is_string($value) && $value !== null)) { - throw new Exception\InvalidArgumentException('Invalid parameter "value"' - . ' of "' . $value . '" must be a non-empty string'); - } - $this->parameters[$name] = $value; - return $this; - } - - /** - * Add an optional parameter to the update notification requests - * - * @param array $parameters - * @return Publisher - */ - public function setParameters(array $parameters) - { - foreach ($parameters as $name => $value) { - $this->setParameter($name, $value); - } - return $this; - } - - /** - * Remove an optional parameter for the notification requests - * - * @param string $name - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function removeParameter($name) - { - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if (array_key_exists($name, $this->parameters)) { - unset($this->parameters[$name]); - } - return $this; - } - - /** - * Return an array of optional parameters for notification requests - * - * @return array - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * Returns a boolean indicator of whether the notifications to Hub - * Servers were ALL successful. If even one failed, FALSE is returned. - * - * @return bool - */ - public function isSuccess() - { - return !(count($this->errors) != 0); - } - - /** - * Return an array of errors met from any failures, including keys: - * 'response' => the Zend\Http\Response object from the failure - * 'hubUrl' => the URL of the Hub Server whose notification failed - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Get a basic prepared HTTP client for use - * - * @return \Zend\Http\Client - * @throws Exception\RuntimeException - */ - protected function _getHttpClient() - { - $client = PubSubHubbub::getHttpClient(); - $client->setMethod(HttpRequest::METHOD_POST); - $client->setOptions(array( - 'useragent' => 'Zend_Feed_Pubsubhubbub_Publisher/' . Version::VERSION, - )); - $params = array(); - $params[] = 'hub.mode=publish'; - $topics = $this->getUpdatedTopicUrls(); - if (empty($topics)) { - throw new Exception\RuntimeException('No updated topic URLs' - . ' have been set'); - } - foreach ($topics as $topicUrl) { - $params[] = 'hub.url=' . urlencode($topicUrl); - } - $optParams = $this->getParameters(); - foreach ($optParams as $name => $value) { - $params[] = urlencode($name) . '=' . urlencode($value); - } - $paramString = implode('&', $params); - $client->setRawBody($paramString); - return $client; - } -} diff --git a/library/Zend/Feed/PubSubHubbub/Subscriber.php b/library/Zend/Feed/PubSubHubbub/Subscriber.php deleted file mode 100755 index 265fe776b..000000000 --- a/library/Zend/Feed/PubSubHubbub/Subscriber.php +++ /dev/null @@ -1,837 +0,0 @@ -setOptions($options); - } - } - - /** - * Process any injected configuration options - * - * @param array|Traversable $options - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Array or Traversable object' - . 'expected, got ' . gettype($options)); - } - if (array_key_exists('hubUrls', $options)) { - $this->addHubUrls($options['hubUrls']); - } - if (array_key_exists('callbackUrl', $options)) { - $this->setCallbackUrl($options['callbackUrl']); - } - if (array_key_exists('topicUrl', $options)) { - $this->setTopicUrl($options['topicUrl']); - } - if (array_key_exists('storage', $options)) { - $this->setStorage($options['storage']); - } - if (array_key_exists('leaseSeconds', $options)) { - $this->setLeaseSeconds($options['leaseSeconds']); - } - if (array_key_exists('parameters', $options)) { - $this->setParameters($options['parameters']); - } - if (array_key_exists('authentications', $options)) { - $this->addAuthentications($options['authentications']); - } - if (array_key_exists('usePathParameter', $options)) { - $this->usePathParameter($options['usePathParameter']); - } - if (array_key_exists('preferredVerificationMode', $options)) { - $this->setPreferredVerificationMode( - $options['preferredVerificationMode'] - ); - } - return $this; - } - - /** - * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe - * event will relate - * - * @param string $url - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setTopicUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - .' of "' . $url . '" must be a non-empty string and a valid' - .' URL'); - } - $this->topicUrl = $url; - return $this; - } - - /** - * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe - * event will relate - * - * @return string - * @throws Exception\RuntimeException - */ - public function getTopicUrl() - { - if (empty($this->topicUrl)) { - throw new Exception\RuntimeException('A valid Topic (RSS or Atom' - . ' feed) URL MUST be set before attempting any operation'); - } - return $this->topicUrl; - } - - /** - * Set the number of seconds for which any subscription will remain valid - * - * @param int $seconds - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setLeaseSeconds($seconds) - { - $seconds = intval($seconds); - if ($seconds <= 0) { - throw new Exception\InvalidArgumentException('Expected lease seconds' - . ' must be an integer greater than zero'); - } - $this->leaseSeconds = $seconds; - return $this; - } - - /** - * Get the number of lease seconds on subscriptions - * - * @return int - */ - public function getLeaseSeconds() - { - return $this->leaseSeconds; - } - - /** - * Set the callback URL to be used by Hub Servers when communicating with - * this Subscriber - * - * @param string $url - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setCallbackUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . ' URL'); - } - $this->callbackUrl = $url; - return $this; - } - - /** - * Get the callback URL to be used by Hub Servers when communicating with - * this Subscriber - * - * @return string - * @throws Exception\RuntimeException - */ - public function getCallbackUrl() - { - if (empty($this->callbackUrl)) { - throw new Exception\RuntimeException('A valid Callback URL MUST be' - . ' set before attempting any operation'); - } - return $this->callbackUrl; - } - - /** - * Set preferred verification mode (sync or async). By default, this - * Subscriber prefers synchronous verification, but does support - * asynchronous if that's the Hub Server's utilised mode. - * - * Zend\Feed\Pubsubhubbub\Subscriber will always send both modes, whose - * order of occurrence in the parameter list determines this preference. - * - * @param string $mode Should be 'sync' or 'async' - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setPreferredVerificationMode($mode) - { - if ($mode !== PubSubHubbub::VERIFICATION_MODE_SYNC - && $mode !== PubSubHubbub::VERIFICATION_MODE_ASYNC - ) { - throw new Exception\InvalidArgumentException('Invalid preferred' - . ' mode specified: "' . $mode . '" but should be one of' - . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_SYNC or' - . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_ASYNC'); - } - $this->preferredVerificationMode = $mode; - return $this; - } - - /** - * Get preferred verification mode (sync or async). - * - * @return string - */ - public function getPreferredVerificationMode() - { - return $this->preferredVerificationMode; - } - - /** - * Add a Hub Server URL supported by Publisher - * - * @param string $url - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function addHubUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . ' URL'); - } - $this->hubUrls[] = $url; - return $this; - } - - /** - * Add an array of Hub Server URLs supported by Publisher - * - * @param array $urls - * @return Subscriber - */ - public function addHubUrls(array $urls) - { - foreach ($urls as $url) { - $this->addHubUrl($url); - } - return $this; - } - - /** - * Remove a Hub Server URL - * - * @param string $url - * @return Subscriber - */ - public function removeHubUrl($url) - { - if (!in_array($url, $this->getHubUrls())) { - return $this; - } - $key = array_search($url, $this->hubUrls); - unset($this->hubUrls[$key]); - return $this; - } - - /** - * Return an array of unique Hub Server URLs currently available - * - * @return array - */ - public function getHubUrls() - { - $this->hubUrls = array_unique($this->hubUrls); - return $this->hubUrls; - } - - /** - * Add authentication credentials for a given URL - * - * @param string $url - * @param array $authentication - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function addAuthentication($url, array $authentication) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . ' URL'); - } - $this->authentications[$url] = $authentication; - return $this; - } - - /** - * Add authentication credentials for hub URLs - * - * @param array $authentications - * @return Subscriber - */ - public function addAuthentications(array $authentications) - { - foreach ($authentications as $url => $authentication) { - $this->addAuthentication($url, $authentication); - } - return $this; - } - - /** - * Get all hub URL authentication credentials - * - * @return array - */ - public function getAuthentications() - { - return $this->authentications; - } - - /** - * Set flag indicating whether or not to use a path parameter - * - * @param bool $bool - * @return Subscriber - */ - public function usePathParameter($bool = true) - { - $this->usePathParameter = $bool; - return $this; - } - - /** - * Add an optional parameter to the (un)subscribe requests - * - * @param string $name - * @param string|null $value - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setParameter($name, $value = null) - { - if (is_array($name)) { - $this->setParameters($name); - return $this; - } - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if ($value === null) { - $this->removeParameter($name); - return $this; - } - if (empty($value) || (!is_string($value) && $value !== null)) { - throw new Exception\InvalidArgumentException('Invalid parameter "value"' - . ' of "' . $value . '" must be a non-empty string'); - } - $this->parameters[$name] = $value; - return $this; - } - - /** - * Add an optional parameter to the (un)subscribe requests - * - * @param array $parameters - * @return Subscriber - */ - public function setParameters(array $parameters) - { - foreach ($parameters as $name => $value) { - $this->setParameter($name, $value); - } - return $this; - } - - /** - * Remove an optional parameter for the (un)subscribe requests - * - * @param string $name - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function removeParameter($name) - { - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if (array_key_exists($name, $this->parameters)) { - unset($this->parameters[$name]); - } - return $this; - } - - /** - * Return an array of optional parameters for (un)subscribe requests - * - * @return array - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background - * save any verification tokens associated with a subscription or other. - * - * @param Model\SubscriptionPersistenceInterface $storage - * @return Subscriber - */ - public function setStorage(Model\SubscriptionPersistenceInterface $storage) - { - $this->storage = $storage; - return $this; - } - - /** - * Gets an instance of Zend\Feed\Pubsubhubbub\Storage\StoragePersistence used - * to background save any verification tokens associated with a subscription - * or other. - * - * @return Model\SubscriptionPersistenceInterface - * @throws Exception\RuntimeException - */ - public function getStorage() - { - if ($this->storage === null) { - throw new Exception\RuntimeException('No storage vehicle ' - . 'has been set.'); - } - return $this->storage; - } - - /** - * Subscribe to one or more Hub Servers using the stored Hub URLs - * for the given Topic URL (RSS or Atom feed) - * - * @return void - */ - public function subscribeAll() - { - $this->_doRequest('subscribe'); - } - - /** - * Unsubscribe from one or more Hub Servers using the stored Hub URLs - * for the given Topic URL (RSS or Atom feed) - * - * @return void - */ - public function unsubscribeAll() - { - $this->_doRequest('unsubscribe'); - } - - /** - * Returns a boolean indicator of whether the notifications to Hub - * Servers were ALL successful. If even one failed, FALSE is returned. - * - * @return bool - */ - public function isSuccess() - { - if (count($this->errors) > 0) { - return false; - } - return true; - } - - /** - * Return an array of errors met from any failures, including keys: - * 'response' => the Zend\Http\Response object from the failure - * 'hubUrl' => the URL of the Hub Server whose notification failed - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Return an array of Hub Server URLs who returned a response indicating - * operation in Asynchronous Verification Mode, i.e. they will not confirm - * any (un)subscription immediately but at a later time (Hubs may be - * doing this as a batch process when load balancing) - * - * @return array - */ - public function getAsyncHubs() - { - return $this->asyncHubs; - } - - /** - * Executes an (un)subscribe request - * - * @param string $mode - * @return void - * @throws Exception\RuntimeException - */ - protected function _doRequest($mode) - { - $client = $this->_getHttpClient(); - $hubs = $this->getHubUrls(); - if (empty($hubs)) { - throw new Exception\RuntimeException('No Hub Server URLs' - . ' have been set so no subscriptions can be attempted'); - } - $this->errors = array(); - $this->asyncHubs = array(); - foreach ($hubs as $url) { - if (array_key_exists($url, $this->authentications)) { - $auth = $this->authentications[$url]; - $client->setAuth($auth[0], $auth[1]); - } - $client->setUri($url); - $client->setRawBody($params = $this->_getRequestParameters($url, $mode)); - $response = $client->send(); - if ($response->getStatusCode() !== 204 - && $response->getStatusCode() !== 202 - ) { - $this->errors[] = array( - 'response' => $response, - 'hubUrl' => $url, - ); - /** - * At first I thought it was needed, but the backend storage will - * allow tracking async without any user interference. It's left - * here in case the user is interested in knowing what Hubs - * are using async verification modes so they may update Models and - * move these to asynchronous processes. - */ - } elseif ($response->getStatusCode() == 202) { - $this->asyncHubs[] = array( - 'response' => $response, - 'hubUrl' => $url, - ); - } - } - } - - /** - * Get a basic prepared HTTP client for use - * - * @return \Zend\Http\Client - */ - protected function _getHttpClient() - { - $client = PubSubHubbub::getHttpClient(); - $client->setMethod(HttpRequest::METHOD_POST); - $client->setOptions(array('useragent' => 'Zend_Feed_Pubsubhubbub_Subscriber/' - . Version::VERSION)); - return $client; - } - - /** - * Return a list of standard protocol/optional parameters for addition to - * client's POST body that are specific to the current Hub Server URL - * - * @param string $hubUrl - * @param string $mode - * @return string - * @throws Exception\InvalidArgumentException - */ - protected function _getRequestParameters($hubUrl, $mode) - { - if (!in_array($mode, array('subscribe', 'unsubscribe'))) { - throw new Exception\InvalidArgumentException('Invalid mode specified: "' - . $mode . '" which should have been "subscribe" or "unsubscribe"'); - } - - $params = array( - 'hub.mode' => $mode, - 'hub.topic' => $this->getTopicUrl(), - ); - - if ($this->getPreferredVerificationMode() - == PubSubHubbub::VERIFICATION_MODE_SYNC - ) { - $vmodes = array( - PubSubHubbub::VERIFICATION_MODE_SYNC, - PubSubHubbub::VERIFICATION_MODE_ASYNC, - ); - } else { - $vmodes = array( - PubSubHubbub::VERIFICATION_MODE_ASYNC, - PubSubHubbub::VERIFICATION_MODE_SYNC, - ); - } - $params['hub.verify'] = array(); - foreach ($vmodes as $vmode) { - $params['hub.verify'][] = $vmode; - } - - /** - * Establish a persistent verify_token and attach key to callback - * URL's path/query_string - */ - $key = $this->_generateSubscriptionKey($params, $hubUrl); - $token = $this->_generateVerifyToken(); - $params['hub.verify_token'] = $token; - - // Note: query string only usable with PuSH 0.2 Hubs - if (!$this->usePathParameter) { - $params['hub.callback'] = $this->getCallbackUrl() - . '?xhub.subscription=' . PubSubHubbub::urlencode($key); - } else { - $params['hub.callback'] = rtrim($this->getCallbackUrl(), '/') - . '/' . PubSubHubbub::urlencode($key); - } - if ($mode == 'subscribe' && $this->getLeaseSeconds() !== null) { - $params['hub.lease_seconds'] = $this->getLeaseSeconds(); - } - - // hub.secret not currently supported - $optParams = $this->getParameters(); - foreach ($optParams as $name => $value) { - $params[$name] = $value; - } - - // store subscription to storage - $now = new DateTime(); - $expires = null; - if (isset($params['hub.lease_seconds'])) { - $expires = $now->add(new DateInterval('PT' . $params['hub.lease_seconds'] . 'S')) - ->format('Y-m-d H:i:s'); - } - $data = array( - 'id' => $key, - 'topic_url' => $params['hub.topic'], - 'hub_url' => $hubUrl, - 'created_time' => $now->format('Y-m-d H:i:s'), - 'lease_seconds' => $params['hub.lease_seconds'], - 'verify_token' => hash('sha256', $params['hub.verify_token']), - 'secret' => null, - 'expiration_time' => $expires, - 'subscription_state' => ($mode == 'unsubscribe')? PubSubHubbub::SUBSCRIPTION_TODELETE : PubSubHubbub::SUBSCRIPTION_NOTVERIFIED, - ); - $this->getStorage()->setSubscription($data); - - return $this->_toByteValueOrderedString( - $this->_urlEncode($params) - ); - } - - /** - * Simple helper to generate a verification token used in (un)subscribe - * requests to a Hub Server. Follows no particular method, which means - * it might be improved/changed in future. - * - * @return string - */ - protected function _generateVerifyToken() - { - if (!empty($this->testStaticToken)) { - return $this->testStaticToken; - } - return uniqid(rand(), true) . time(); - } - - /** - * Simple helper to generate a verification token used in (un)subscribe - * requests to a Hub Server. - * - * @param array $params - * @param string $hubUrl The Hub Server URL for which this token will apply - * @return string - */ - protected function _generateSubscriptionKey(array $params, $hubUrl) - { - $keyBase = $params['hub.topic'] . $hubUrl; - $key = md5($keyBase); - - return $key; - } - - /** - * URL Encode an array of parameters - * - * @param array $params - * @return array - */ - protected function _urlEncode(array $params) - { - $encoded = array(); - foreach ($params as $key => $value) { - if (is_array($value)) { - $ekey = PubSubHubbub::urlencode($key); - $encoded[$ekey] = array(); - foreach ($value as $duplicateKey) { - $encoded[$ekey][] - = PubSubHubbub::urlencode($duplicateKey); - } - } else { - $encoded[PubSubHubbub::urlencode($key)] - = PubSubHubbub::urlencode($value); - } - } - return $encoded; - } - - /** - * Order outgoing parameters - * - * @param array $params - * @return array - */ - protected function _toByteValueOrderedString(array $params) - { - $return = array(); - uksort($params, 'strnatcmp'); - foreach ($params as $key => $value) { - if (is_array($value)) { - foreach ($value as $keyduplicate) { - $return[] = $key . '=' . $keyduplicate; - } - } else { - $return[] = $key . '=' . $value; - } - } - return implode('&', $return); - } - - /** - * This is STRICTLY for testing purposes only... - */ - protected $testStaticToken = null; - - final public function setTestStaticToken($token) - { - $this->testStaticToken = (string) $token; - } -} diff --git a/library/Zend/Feed/PubSubHubbub/Subscriber/Callback.php b/library/Zend/Feed/PubSubHubbub/Subscriber/Callback.php deleted file mode 100755 index 5ec8af2fe..000000000 --- a/library/Zend/Feed/PubSubHubbub/Subscriber/Callback.php +++ /dev/null @@ -1,316 +0,0 @@ -subscriptionKey = $key; - return $this; - } - - /** - * Handle any callback from a Hub Server responding to a subscription or - * unsubscription request. This should be the Hub Server confirming the - * the request prior to taking action on it. - * - * @param array $httpGetData GET data if available and not in $_GET - * @param bool $sendResponseNow Whether to send response now or when asked - * @return void - */ - public function handle(array $httpGetData = null, $sendResponseNow = false) - { - if ($httpGetData === null) { - $httpGetData = $_GET; - } - - /** - * Handle any feed updates (sorry for the mess :P) - * - * This DOES NOT attempt to process a feed update. Feed updates - * SHOULD be validated/processed by an asynchronous process so as - * to avoid holding up responses to the Hub. - */ - $contentType = $this->_getHeader('Content-Type'); - if (strtolower($_SERVER['REQUEST_METHOD']) == 'post' - && $this->_hasValidVerifyToken(null, false) - && (stripos($contentType, 'application/atom+xml') === 0 - || stripos($contentType, 'application/rss+xml') === 0 - || stripos($contentType, 'application/xml') === 0 - || stripos($contentType, 'text/xml') === 0 - || stripos($contentType, 'application/rdf+xml') === 0) - ) { - $this->setFeedUpdate($this->_getRawBody()); - $this->getHttpResponse()->setHeader('X-Hub-On-Behalf-Of', $this->getSubscriberCount()); - /** - * Handle any (un)subscribe confirmation requests - */ - } elseif ($this->isValidHubVerification($httpGetData)) { - $this->getHttpResponse()->setContent($httpGetData['hub_challenge']); - - switch (strtolower($httpGetData['hub_mode'])) { - case 'subscribe': - $data = $this->currentSubscriptionData; - $data['subscription_state'] = PubSubHubbub\PubSubHubbub::SUBSCRIPTION_VERIFIED; - if (isset($httpGetData['hub_lease_seconds'])) { - $data['lease_seconds'] = $httpGetData['hub_lease_seconds']; - } - $this->getStorage()->setSubscription($data); - break; - case 'unsubscribe': - $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData); - $this->getStorage()->deleteSubscription($verifyTokenKey); - break; - default: - throw new Exception\RuntimeException(sprintf( - 'Invalid hub_mode ("%s") provided', - $httpGetData['hub_mode'] - )); - } - /** - * Hey, C'mon! We tried everything else! - */ - } else { - $this->getHttpResponse()->setStatusCode(404); - } - - if ($sendResponseNow) { - $this->sendResponse(); - } - } - - /** - * Checks validity of the request simply by making a quick pass and - * confirming the presence of all REQUIRED parameters. - * - * @param array $httpGetData - * @return bool - */ - public function isValidHubVerification(array $httpGetData) - { - /** - * As per the specification, the hub.verify_token is OPTIONAL. This - * implementation of Pubsubhubbub considers it REQUIRED and will - * always send a hub.verify_token parameter to be echoed back - * by the Hub Server. Therefore, its absence is considered invalid. - */ - if (strtolower($_SERVER['REQUEST_METHOD']) !== 'get') { - return false; - } - $required = array( - 'hub_mode', - 'hub_topic', - 'hub_challenge', - 'hub_verify_token', - ); - foreach ($required as $key) { - if (!array_key_exists($key, $httpGetData)) { - return false; - } - } - if ($httpGetData['hub_mode'] !== 'subscribe' - && $httpGetData['hub_mode'] !== 'unsubscribe' - ) { - return false; - } - if ($httpGetData['hub_mode'] == 'subscribe' - && !array_key_exists('hub_lease_seconds', $httpGetData) - ) { - return false; - } - if (!Uri::factory($httpGetData['hub_topic'])->isValid()) { - return false; - } - - /** - * Attempt to retrieve any Verification Token Key attached to Callback - * URL's path by our Subscriber implementation - */ - if (!$this->_hasValidVerifyToken($httpGetData)) { - return false; - } - return true; - } - - /** - * Sets a newly received feed (Atom/RSS) sent by a Hub as an update to a - * Topic we've subscribed to. - * - * @param string $feed - * @return \Zend\Feed\PubSubHubbub\Subscriber\Callback - */ - public function setFeedUpdate($feed) - { - $this->feedUpdate = $feed; - return $this; - } - - /** - * Check if any newly received feed (Atom/RSS) update was received - * - * @return bool - */ - public function hasFeedUpdate() - { - if ($this->feedUpdate === null) { - return false; - } - return true; - } - - /** - * Gets a newly received feed (Atom/RSS) sent by a Hub as an update to a - * Topic we've subscribed to. - * - * @return string - */ - public function getFeedUpdate() - { - return $this->feedUpdate; - } - - /** - * Check for a valid verify_token. By default attempts to compare values - * with that sent from Hub, otherwise merely ascertains its existence. - * - * @param array $httpGetData - * @param bool $checkValue - * @return bool - */ - protected function _hasValidVerifyToken(array $httpGetData = null, $checkValue = true) - { - $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData); - if (empty($verifyTokenKey)) { - return false; - } - $verifyTokenExists = $this->getStorage()->hasSubscription($verifyTokenKey); - if (!$verifyTokenExists) { - return false; - } - if ($checkValue) { - $data = $this->getStorage()->getSubscription($verifyTokenKey); - $verifyToken = $data['verify_token']; - if ($verifyToken !== hash('sha256', $httpGetData['hub_verify_token'])) { - return false; - } - $this->currentSubscriptionData = $data; - return true; - } - return true; - } - - /** - * Attempt to detect the verification token key. This would be passed in - * the Callback URL (which we are handling with this class!) as a URI - * path part (the last part by convention). - * - * @param null|array $httpGetData - * @return false|string - */ - protected function _detectVerifyTokenKey(array $httpGetData = null) - { - /** - * Available when sub keys encoding in Callback URL path - */ - if (isset($this->subscriptionKey)) { - return $this->subscriptionKey; - } - - /** - * Available only if allowed by PuSH 0.2 Hubs - */ - if (is_array($httpGetData) - && isset($httpGetData['xhub_subscription']) - ) { - return $httpGetData['xhub_subscription']; - } - - /** - * Available (possibly) if corrupted in transit and not part of $_GET - */ - $params = $this->_parseQueryString(); - if (isset($params['xhub.subscription'])) { - return rawurldecode($params['xhub.subscription']); - } - - return false; - } - - /** - * Build an array of Query String parameters. - * This bypasses $_GET which munges parameter names and cannot accept - * multiple parameters with the same key. - * - * @return array|void - */ - protected function _parseQueryString() - { - $params = array(); - $queryString = ''; - if (isset($_SERVER['QUERY_STRING'])) { - $queryString = $_SERVER['QUERY_STRING']; - } - if (empty($queryString)) { - return array(); - } - $parts = explode('&', $queryString); - foreach ($parts as $kvpair) { - $pair = explode('=', $kvpair); - $key = rawurldecode($pair[0]); - $value = rawurldecode($pair[1]); - if (isset($params[$key])) { - if (is_array($params[$key])) { - $params[$key][] = $value; - } else { - $params[$key] = array($params[$key], $value); - } - } else { - $params[$key] = $value; - } - } - return $params; - } -} diff --git a/library/Zend/Feed/PubSubHubbub/Version.php b/library/Zend/Feed/PubSubHubbub/Version.php deleted file mode 100755 index edee6953b..000000000 --- a/library/Zend/Feed/PubSubHubbub/Version.php +++ /dev/null @@ -1,15 +0,0 @@ -entry = $entry; - $this->entryKey = $entryKey; - $this->domDocument = $entry->ownerDocument; - if ($type !== null) { - $this->data['type'] = $type; - } else { - $this->data['type'] = Reader::detectType($entry); - } - $this->_loadExtensions(); - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the entry element - * - * @return DOMElement - */ - public function getElement() - { - return $this->entry; - } - - /** - * Get the Entry's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get entry as xml - * - * @return string - */ - public function saveXml() - { - $dom = new DOMDocument('1.0', $this->getEncoding()); - $entry = $dom->importNode($this->getElement(), true); - $dom->appendChild($entry); - return $dom->saveXml(); - } - - /** - * Get the entry type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Get the XPath query object - * - * @return DOMXPath - */ - public function getXpath() - { - if (!$this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - return $this->xpath; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return \Zend\Feed\Reader\AbstractEntry - */ - public function setXpath(DOMXPath $xpath) - { - $this->xpath = $xpath; - return $this; - } - - /** - * Get registered extensions - * - * @return array - */ - public function getExtensions() - { - return $this->extensions; - } - - /** - * Return an Extension object with the matching name (postfixed with _Entry) - * - * @param string $name - * @return \Zend\Feed\Reader\Extension\AbstractEntry - */ - public function getExtension($name) - { - if (array_key_exists($name . '\Entry', $this->extensions)) { - return $this->extensions[$name . '\Entry']; - } - return null; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . 'does not exist and could not be located on a registered Extension'); - } - - /** - * Load extensions from Zend\Feed\Reader\Reader - * - * @return void - */ - protected function _loadExtensions() - { - $all = Reader::getExtensions(); - $feed = $all['entry']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - $className = Reader::getPluginLoader()->getClassName($extension); - $this->extensions[$extension] = new $className( - $this->getElement(), $this->entryKey, $this->data['type'] - ); - } - } -} diff --git a/library/Zend/Feed/Reader/AbstractFeed.php b/library/Zend/Feed/Reader/AbstractFeed.php deleted file mode 100755 index f8aa49d81..000000000 --- a/library/Zend/Feed/Reader/AbstractFeed.php +++ /dev/null @@ -1,300 +0,0 @@ -domDocument = $domDocument; - $this->xpath = new DOMXPath($this->domDocument); - - if ($type !== null) { - $this->data['type'] = $type; - } else { - $this->data['type'] = Reader::detectType($this->domDocument); - } - $this->registerNamespaces(); - $this->indexEntries(); - $this->loadExtensions(); - } - - /** - * Set an original source URI for the feed being parsed. This value - * is returned from getFeedLink() method if the feed does not carry - * a self-referencing URI. - * - * @param string $uri - */ - public function setOriginalSourceUri($uri) - { - $this->originalSourceUri = $uri; - } - - /** - * Get an original source URI for the feed being parsed. Returns null if - * unset or the feed was not imported from a URI. - * - * @return string|null - */ - public function getOriginalSourceUri() - { - return $this->originalSourceUri; - } - - /** - * Get the number of feed entries. - * Required by the Iterator interface. - * - * @return int - */ - public function count() - { - return count($this->entries); - } - - /** - * Return the current entry - * - * @return \Zend\Feed\Reader\AbstractEntry - */ - public function current() - { - if (substr($this->getType(), 0, 3) == 'rss') { - $reader = new Entry\RSS($this->entries[$this->key()], $this->key(), $this->getType()); - } else { - $reader = new Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType()); - } - - $reader->setXpath($this->xpath); - - return $reader; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Feed's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get feed as xml - * - * @return string - */ - public function saveXml() - { - return $this->getDomDocument()->saveXml(); - } - - /** - * Get the DOMElement representing the items/feed element - * - * @return DOMElement - */ - public function getElement() - { - return $this->getDomDocument()->documentElement; - } - - /** - * Get the DOMXPath object for this feed - * - * @return DOMXPath - */ - public function getXpath() - { - return $this->xpath; - } - - /** - * Get the feed type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Return the current feed key - * - * @return int - */ - public function key() - { - return $this->entriesKey; - } - - /** - * Move the feed pointer forward - * - */ - public function next() - { - ++$this->entriesKey; - } - - /** - * Reset the pointer in the feed object - * - */ - public function rewind() - { - $this->entriesKey = 0; - } - - /** - * Check to see if the iterator is still valid - * - * @return bool - */ - public function valid() - { - return 0 <= $this->entriesKey && $this->entriesKey < $this->count(); - } - - public function getExtensions() - { - return $this->extensions; - } - - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . 'does not exist and could not be located on a registered Extension'); - } - - /** - * Return an Extension object with the matching name (postfixed with _Feed) - * - * @param string $name - * @return \Zend\Feed\Reader\Extension\AbstractFeed - */ - public function getExtension($name) - { - if (array_key_exists($name . '\Feed', $this->extensions)) { - return $this->extensions[$name . '\Feed']; - } - return null; - } - - protected function loadExtensions() - { - $all = Reader::getExtensions(); - $manager = Reader::getExtensionManager(); - $feed = $all['feed']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - $plugin = $manager->get($extension); - $plugin->setDomDocument($this->getDomDocument()); - $plugin->setType($this->data['type']); - $plugin->setXpath($this->xpath); - $this->extensions[$extension] = $plugin; - } - } - - /** - * Read all entries to the internal entries array - * - */ - abstract protected function indexEntries(); - - /** - * Register the default namespaces for the current feed format - * - */ - abstract protected function registerNamespaces(); -} diff --git a/library/Zend/Feed/Reader/Collection.php b/library/Zend/Feed/Reader/Collection.php deleted file mode 100755 index ac1c96384..000000000 --- a/library/Zend/Feed/Reader/Collection.php +++ /dev/null @@ -1,16 +0,0 @@ -getIterator() as $element) { - $authors[] = $element['name']; - } - return array_unique($authors); - } -} diff --git a/library/Zend/Feed/Reader/Collection/Category.php b/library/Zend/Feed/Reader/Collection/Category.php deleted file mode 100755 index 34b8fdedb..000000000 --- a/library/Zend/Feed/Reader/Collection/Category.php +++ /dev/null @@ -1,34 +0,0 @@ -getIterator() as $element) { - if (isset($element['label']) && !empty($element['label'])) { - $categories[] = $element['label']; - } else { - $categories[] = $element['term']; - } - } - return array_unique($categories); - } -} diff --git a/library/Zend/Feed/Reader/Collection/Collection.php b/library/Zend/Feed/Reader/Collection/Collection.php deleted file mode 100755 index 86a29276a..000000000 --- a/library/Zend/Feed/Reader/Collection/Collection.php +++ /dev/null @@ -1,16 +0,0 @@ -entry = $entry; - $this->entryKey = $entryKey; - $this->domDocument = $entry->ownerDocument; - if ($type !== null) { - $this->data['type'] = $type; - } elseif ($this->domDocument !== null) { - $this->data['type'] = Reader\Reader::detectType($this->domDocument); - } else { - $this->data['type'] = Reader\Reader::TYPE_ANY; - } - $this->loadExtensions(); - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the entry element - * - * @return DOMElement - */ - public function getElement() - { - return $this->entry; - } - - /** - * Get the Entry's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get entry as xml - * - * @return string - */ - public function saveXml() - { - $dom = new DOMDocument('1.0', $this->getEncoding()); - $entry = $dom->importNode($this->getElement(), true); - $dom->appendChild($entry); - return $dom->saveXml(); - } - - /** - * Get the entry type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Get the XPath query object - * - * @return DOMXPath - */ - public function getXpath() - { - if (!$this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - return $this->xpath; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return AbstractEntry - */ - public function setXpath(DOMXPath $xpath) - { - $this->xpath = $xpath; - return $this; - } - - /** - * Get registered extensions - * - * @return array - */ - public function getExtensions() - { - return $this->extensions; - } - - /** - * Return an Extension object with the matching name (postfixed with _Entry) - * - * @param string $name - * @return Reader\Extension\AbstractEntry - */ - public function getExtension($name) - { - if (array_key_exists($name . '\\Entry', $this->extensions)) { - return $this->extensions[$name . '\\Entry']; - } - return null; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\RuntimeException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\RuntimeException('Method: ' . $method - . ' does not exist and could not be located on a registered Extension'); - } - - /** - * Load extensions from Zend\Feed\Reader\Reader - * - * @return void - */ - protected function loadExtensions() - { - $all = Reader\Reader::getExtensions(); - $manager = Reader\Reader::getExtensionManager(); - $feed = $all['entry']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - $plugin = $manager->get($extension); - $plugin->setEntryElement($this->getElement()); - $plugin->setEntryKey($this->entryKey); - $plugin->setType($this->data['type']); - $this->extensions[$extension] = $plugin; - } - } -} diff --git a/library/Zend/Feed/Reader/Entry/Atom.php b/library/Zend/Feed/Reader/Entry/Atom.php deleted file mode 100755 index ed61a21e5..000000000 --- a/library/Zend/Feed/Reader/Entry/Atom.php +++ /dev/null @@ -1,370 +0,0 @@ -xpathQuery = '//atom:entry[' . ($this->entryKey + 1) . ']'; - - $manager = Reader\Reader::getExtensionManager(); - $extensions = array('Atom\Entry', 'Thread\Entry', 'DublinCore\Entry'); - - foreach ($extensions as $name) { - $extension = $manager->get($name); - $extension->setEntryElement($entry); - $extension->setEntryKey($entryKey); - $extension->setType($type); - $this->extensions[$name] = $extension; - } - } - - /** - * Get the specified author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0) - { - $authors = $this->getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $people = $this->getExtension('Atom')->getAuthors(); - - $this->data['authors'] = $people; - - return $this->data['authors']; - } - - /** - * Get the entry content - * - * @return string - */ - public function getContent() - { - if (array_key_exists('content', $this->data)) { - return $this->data['content']; - } - - $content = $this->getExtension('Atom')->getContent(); - - $this->data['content'] = $content; - - return $this->data['content']; - } - - /** - * Get the entry creation date - * - * @return string - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $dateCreated = $this->getExtension('Atom')->getDateCreated(); - - $this->data['datecreated'] = $dateCreated; - - return $this->data['datecreated']; - } - - /** - * Get the entry modification date - * - * @return string - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $dateModified = $this->getExtension('Atom')->getDateModified(); - - $this->data['datemodified'] = $dateModified; - - return $this->data['datemodified']; - } - - /** - * Get the entry description - * - * @return string - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = $this->getExtension('Atom')->getDescription(); - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the entry enclosure - * - * @return string - */ - public function getEnclosure() - { - if (array_key_exists('enclosure', $this->data)) { - return $this->data['enclosure']; - } - - $enclosure = $this->getExtension('Atom')->getEnclosure(); - - $this->data['enclosure'] = $enclosure; - - return $this->data['enclosure']; - } - - /** - * Get the entry ID - * - * @return string - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = $this->getExtension('Atom')->getId(); - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get a specific link - * - * @param int $index - * @return string - */ - public function getLink($index = 0) - { - if (!array_key_exists('links', $this->data)) { - $this->getLinks(); - } - - if (isset($this->data['links'][$index])) { - return $this->data['links'][$index]; - } - - return null; - } - - /** - * Get all links - * - * @return array - */ - public function getLinks() - { - if (array_key_exists('links', $this->data)) { - return $this->data['links']; - } - - $links = $this->getExtension('Atom')->getLinks(); - - $this->data['links'] = $links; - - return $this->data['links']; - } - - /** - * Get a permalink to the entry - * - * @return string - */ - public function getPermalink() - { - return $this->getLink(0); - } - - /** - * Get the entry title - * - * @return string - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = $this->getExtension('Atom')->getTitle(); - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get the number of comments/replies for current entry - * - * @return int - */ - public function getCommentCount() - { - if (array_key_exists('commentcount', $this->data)) { - return $this->data['commentcount']; - } - - $commentcount = $this->getExtension('Thread')->getCommentCount(); - - if (!$commentcount) { - $commentcount = $this->getExtension('Atom')->getCommentCount(); - } - - $this->data['commentcount'] = $commentcount; - - return $this->data['commentcount']; - } - - /** - * Returns a URI pointing to the HTML page where comments can be made on this entry - * - * @return string - */ - public function getCommentLink() - { - if (array_key_exists('commentlink', $this->data)) { - return $this->data['commentlink']; - } - - $commentlink = $this->getExtension('Atom')->getCommentLink(); - - $this->data['commentlink'] = $commentlink; - - return $this->data['commentlink']; - } - - /** - * Returns a URI pointing to a feed of all comments for this entry - * - * @return string - */ - public function getCommentFeedLink() - { - if (array_key_exists('commentfeedlink', $this->data)) { - return $this->data['commentfeedlink']; - } - - $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink(); - - $this->data['commentfeedlink'] = $commentfeedlink; - - return $this->data['commentfeedlink']; - } - - /** - * Get category data as a Reader\Reader_Collection_Category object - * - * @return Reader\Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $categoryCollection = $this->getExtension('Atom')->getCategories(); - - if (count($categoryCollection) == 0) { - $categoryCollection = $this->getExtension('DublinCore')->getCategories(); - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Get source feed metadata from the entry - * - * @return Reader\Feed\Atom\Source|null - */ - public function getSource() - { - if (array_key_exists('source', $this->data)) { - return $this->data['source']; - } - - $source = $this->getExtension('Atom')->getSource(); - - $this->data['source'] = $source; - - return $this->data['source']; - } - - /** - * Set the XPath query (incl. on all Extensions) - * - * @param DOMXPath $xpath - * @return void - */ - public function setXpath(DOMXPath $xpath) - { - parent::setXpath($xpath); - foreach ($this->extensions as $extension) { - $extension->setXpath($this->xpath); - } - } -} diff --git a/library/Zend/Feed/Reader/Entry/EntryInterface.php b/library/Zend/Feed/Reader/Entry/EntryInterface.php deleted file mode 100755 index 86fea3ec5..000000000 --- a/library/Zend/Feed/Reader/Entry/EntryInterface.php +++ /dev/null @@ -1,129 +0,0 @@ -xpathQueryRss = '//item[' . ($this->entryKey+1) . ']'; - $this->xpathQueryRdf = '//rss:item[' . ($this->entryKey+1) . ']'; - - $manager = Reader\Reader::getExtensionManager(); - $extensions = array( - 'DublinCore\Entry', - 'Content\Entry', - 'Atom\Entry', - 'WellFormedWeb\Entry', - 'Slash\Entry', - 'Thread\Entry', - ); - foreach ($extensions as $name) { - $extension = $manager->get($name); - $extension->setEntryElement($entry); - $extension->setEntryKey($entryKey); - $extension->setType($type); - $this->extensions[$name] = $extension; - } - } - - /** - * Get an author entry - * - * @param int $index - * @return string - */ - public function getAuthor($index = 0) - { - $authors = $this->getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $authors = array(); - $authorsDc = $this->getExtension('DublinCore')->getAuthors(); - if (!empty($authorsDc)) { - foreach ($authorsDc as $author) { - $authors[] = array( - 'name' => $author['name'] - ); - } - } - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query($this->xpathQueryRss . '//author'); - } else { - $list = $this->xpath->query($this->xpathQueryRdf . '//rss:author'); - } - if ($list->length) { - foreach ($list as $author) { - $string = trim($author->nodeValue); - $email = null; - $name = null; - $data = array(); - // Pretty rough parsing - but it's a catchall - if (preg_match("/^.*@[^ ]*/", $string, $matches)) { - $data['email'] = trim($matches[0]); - if (preg_match("/\((.*)\)$/", $string, $matches)) { - $data['name'] = $matches[1]; - } - $authors[] = $data; - } - } - } - - if (count($authors) == 0) { - $authors = $this->getExtension('Atom')->getAuthors(); - } else { - $authors = new Reader\Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } - - if (count($authors) == 0) { - $authors = null; - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the entry content - * - * @return string - */ - public function getContent() - { - if (array_key_exists('content', $this->data)) { - return $this->data['content']; - } - - $content = $this->getExtension('Content')->getContent(); - - if (!$content) { - $content = $this->getDescription(); - } - - if (empty($content)) { - $content = $this->getExtension('Atom')->getContent(); - } - - $this->data['content'] = $content; - - return $this->data['content']; - } - - /** - * Get the entry's date of creation - * - * @return string - */ - public function getDateCreated() - { - return $this->getDateModified(); - } - - /** - * Get the entry's date of modification - * - * @throws Exception\RuntimeException - * @return string - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $dateModified = null; - $date = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $dateModified = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/pubDate)'); - if ($dateModified) { - $dateModifiedParsed = strtotime($dateModified); - if ($dateModifiedParsed) { - $date = new DateTime('@' . $dateModifiedParsed); - } else { - $dateStandards = array(DateTime::RSS, DateTime::RFC822, - DateTime::RFC2822, null); - foreach ($dateStandards as $standard) { - try { - $date = date_create_from_format($standard, $dateModified); - break; - } catch (\Exception $e) { - if ($standard == null) { - throw new Exception\RuntimeException( - 'Could not load date due to unrecognised' - .' format (should follow RFC 822 or 2822):' - . $e->getMessage(), - 0, $e - ); - } - } - } - } - } - } - - if (!$date) { - $date = $this->getExtension('DublinCore')->getDate(); - } - - if (!$date) { - $date = $this->getExtension('Atom')->getDateModified(); - } - - if (!$date) { - $date = null; - } - - $this->data['datemodified'] = $date; - - return $this->data['datemodified']; - } - - /** - * Get the entry description - * - * @return string - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $description = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/description)'); - } else { - $description = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:description)'); - } - - if (!$description) { - $description = $this->getExtension('DublinCore')->getDescription(); - } - - if (empty($description)) { - $description = $this->getExtension('Atom')->getDescription(); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the entry enclosure - * @return string - */ - public function getEnclosure() - { - if (array_key_exists('enclosure', $this->data)) { - return $this->data['enclosure']; - } - - $enclosure = null; - - if ($this->getType() == Reader\Reader::TYPE_RSS_20) { - $nodeList = $this->xpath->query($this->xpathQueryRss . '/enclosure'); - - if ($nodeList->length > 0) { - $enclosure = new \stdClass(); - $enclosure->url = $nodeList->item(0)->getAttribute('url'); - $enclosure->length = $nodeList->item(0)->getAttribute('length'); - $enclosure->type = $nodeList->item(0)->getAttribute('type'); - } - } - - if (!$enclosure) { - $enclosure = $this->getExtension('Atom')->getEnclosure(); - } - - $this->data['enclosure'] = $enclosure; - - return $this->data['enclosure']; - } - - /** - * Get the entry ID - * - * @return string - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $id = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/guid)'); - } - - if (!$id) { - $id = $this->getExtension('DublinCore')->getId(); - } - - if (empty($id)) { - $id = $this->getExtension('Atom')->getId(); - } - - if (!$id) { - if ($this->getPermalink()) { - $id = $this->getPermalink(); - } elseif ($this->getTitle()) { - $id = $this->getTitle(); - } else { - $id = null; - } - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get a specific link - * - * @param int $index - * @return string - */ - public function getLink($index = 0) - { - if (!array_key_exists('links', $this->data)) { - $this->getLinks(); - } - - if (isset($this->data['links'][$index])) { - return $this->data['links'][$index]; - } - - return null; - } - - /** - * Get all links - * - * @return array - */ - public function getLinks() - { - if (array_key_exists('links', $this->data)) { - return $this->data['links']; - } - - $links = array(); - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query($this->xpathQueryRss . '//link'); - } else { - $list = $this->xpath->query($this->xpathQueryRdf . '//rss:link'); - } - - if (!$list->length) { - $links = $this->getExtension('Atom')->getLinks(); - } else { - foreach ($list as $link) { - $links[] = $link->nodeValue; - } - } - - $this->data['links'] = $links; - - return $this->data['links']; - } - - /** - * Get all categories - * - * @return Reader\Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query($this->xpathQueryRss . '//category'); - } else { - $list = $this->xpath->query($this->xpathQueryRdf . '//rss:category'); - } - - if ($list->length) { - $categoryCollection = new Reader\Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->nodeValue, - 'scheme' => $category->getAttribute('domain'), - 'label' => $category->nodeValue, - ); - } - } else { - $categoryCollection = $this->getExtension('DublinCore')->getCategories(); - } - - if (count($categoryCollection) == 0) { - $categoryCollection = $this->getExtension('Atom')->getCategories(); - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Get a permalink to the entry - * - * @return string - */ - public function getPermalink() - { - return $this->getLink(0); - } - - /** - * Get the entry title - * - * @return string - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $title = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/title)'); - } else { - $title = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:title)'); - } - - if (!$title) { - $title = $this->getExtension('DublinCore')->getTitle(); - } - - if (!$title) { - $title = $this->getExtension('Atom')->getTitle(); - } - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get the number of comments/replies for current entry - * - * @return string|null - */ - public function getCommentCount() - { - if (array_key_exists('commentcount', $this->data)) { - return $this->data['commentcount']; - } - - $commentcount = $this->getExtension('Slash')->getCommentCount(); - - if (!$commentcount) { - $commentcount = $this->getExtension('Thread')->getCommentCount(); - } - - if (!$commentcount) { - $commentcount = $this->getExtension('Atom')->getCommentCount(); - } - - if (!$commentcount) { - $commentcount = null; - } - - $this->data['commentcount'] = $commentcount; - - return $this->data['commentcount']; - } - - /** - * Returns a URI pointing to the HTML page where comments can be made on this entry - * - * @return string - */ - public function getCommentLink() - { - if (array_key_exists('commentlink', $this->data)) { - return $this->data['commentlink']; - } - - $commentlink = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $commentlink = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/comments)'); - } - - if (!$commentlink) { - $commentlink = $this->getExtension('Atom')->getCommentLink(); - } - - if (!$commentlink) { - $commentlink = null; - } - - $this->data['commentlink'] = $commentlink; - - return $this->data['commentlink']; - } - - /** - * Returns a URI pointing to a feed of all comments for this entry - * - * @return string - */ - public function getCommentFeedLink() - { - if (array_key_exists('commentfeedlink', $this->data)) { - return $this->data['commentfeedlink']; - } - - $commentfeedlink = $this->getExtension('WellFormedWeb')->getCommentFeedLink(); - - if (!$commentfeedlink) { - $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rss'); - } - - if (!$commentfeedlink) { - $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rdf'); - } - - if (!$commentfeedlink) { - $commentfeedlink = null; - } - - $this->data['commentfeedlink'] = $commentfeedlink; - - return $this->data['commentfeedlink']; - } - - /** - * Set the XPath query (incl. on all Extensions) - * - * @param DOMXPath $xpath - * @return void - */ - public function setXpath(DOMXPath $xpath) - { - parent::setXpath($xpath); - foreach ($this->extensions as $extension) { - $extension->setXpath($this->xpath); - } - } -} diff --git a/library/Zend/Feed/Reader/Exception/BadMethodCallException.php b/library/Zend/Feed/Reader/Exception/BadMethodCallException.php deleted file mode 100755 index 3e265088a..000000000 --- a/library/Zend/Feed/Reader/Exception/BadMethodCallException.php +++ /dev/null @@ -1,18 +0,0 @@ -entry = $entry; - $this->domDocument = $entry->ownerDocument; - return $this; - } - - /** - * Get the entry DOMElement - * - * @return DOMElement - */ - public function getEntryElement() - { - return $this->entry; - } - - /** - * Set the entry key - * - * @param string $entryKey - * @return AbstractEntry - */ - public function setEntryKey($entryKey) - { - $this->entryKey = $entryKey; - return $this; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Entry's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - return $assumed; - } - - /** - * Set the entry type - * - * Has side effect of setting xpath prefix - * - * @param string $type - * @return AbstractEntry - */ - public function setType($type) - { - if (null === $type) { - $this->data['type'] = null; - return $this; - } - - $this->data['type'] = $type; - if ($type === Reader\Reader::TYPE_RSS_10 - || $type === Reader\Reader::TYPE_RSS_090 - ) { - $this->setXpathPrefix('//rss:item[' . ($this->entryKey + 1) . ']'); - return $this; - } - - if ($type === Reader\Reader::TYPE_ATOM_10 - || $type === Reader\Reader::TYPE_ATOM_03 - ) { - $this->setXpathPrefix('//atom:entry[' . ($this->entryKey + 1) . ']'); - return $this; - } - - $this->setXpathPrefix('//item[' . ($this->entryKey + 1) . ']'); - return $this; - } - - /** - * Get the entry type - * - * @return string - */ - public function getType() - { - $type = $this->data['type']; - if ($type === null) { - $type = Reader\Reader::detectType($this->getEntryElement(), true); - $this->setType($type); - } - - return $type; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return AbstractEntry - */ - public function setXpath(DOMXPath $xpath) - { - $this->xpath = $xpath; - $this->registerNamespaces(); - return $this; - } - - /** - * Get the XPath query object - * - * @return DOMXPath - */ - public function getXpath() - { - if (!$this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - return $this->xpath; - } - - /** - * Serialize the entry to an array - * - * @return array - */ - public function toArray() - { - return $this->data; - } - - /** - * Get the XPath prefix - * - * @return string - */ - public function getXpathPrefix() - { - return $this->xpathPrefix; - } - - /** - * Set the XPath prefix - * - * @param string $prefix - * @return AbstractEntry - */ - public function setXpathPrefix($prefix) - { - $this->xpathPrefix = $prefix; - return $this; - } - - /** - * Register XML namespaces - * - * @return void - */ - abstract protected function registerNamespaces(); -} diff --git a/library/Zend/Feed/Reader/Extension/AbstractFeed.php b/library/Zend/Feed/Reader/Extension/AbstractFeed.php deleted file mode 100755 index 1bea2e498..000000000 --- a/library/Zend/Feed/Reader/Extension/AbstractFeed.php +++ /dev/null @@ -1,176 +0,0 @@ -domDocument = $dom; - return $this; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Feed's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - return $assumed; - } - - /** - * Set the feed type - * - * @param string $type - * @return AbstractFeed - */ - public function setType($type) - { - $this->data['type'] = $type; - return $this; - } - - /** - * Get the feed type - * - * If null, it will attempt to autodetect the type. - * - * @return string - */ - public function getType() - { - $type = $this->data['type']; - if (null === $type) { - $type = Reader\Reader::detectType($this->getDomDocument()); - $this->setType($type); - } - return $type; - } - - - /** - * Return the feed as an array - * - * @return array - */ - public function toArray() // untested - { - return $this->data; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return AbstractEntry - */ - public function setXpath(DOMXPath $xpath = null) - { - if (null === $xpath) { - $this->xpath = null; - return $this; - } - - $this->xpath = $xpath; - $this->registerNamespaces(); - return $this; - } - - /** - * Get the DOMXPath object - * - * @return string - */ - public function getXpath() - { - if (null === $this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - - return $this->xpath; - } - - /** - * Get the XPath prefix - * - * @return string - */ - public function getXpathPrefix() - { - return $this->xpathPrefix; - } - - /** - * Set the XPath prefix - * - * @param string $prefix - * @return void - */ - public function setXpathPrefix($prefix) - { - $this->xpathPrefix = $prefix; - } - - /** - * Register the default namespaces for the current feed format - */ - abstract protected function registerNamespaces(); -} diff --git a/library/Zend/Feed/Reader/Extension/Atom/Entry.php b/library/Zend/Feed/Reader/Extension/Atom/Entry.php deleted file mode 100755 index 9e20321cd..000000000 --- a/library/Zend/Feed/Reader/Extension/Atom/Entry.php +++ /dev/null @@ -1,630 +0,0 @@ -getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return Collection\Author - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $authors = array(); - $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:author'); - - if (!$list->length) { - /** - * TODO: Limit query to feed level els only! - */ - $list = $this->getXpath()->query('//atom:author'); - } - - if ($list->length) { - foreach ($list as $author) { - $author = $this->getAuthorFromElement($author); - if (!empty($author)) { - $authors[] = $author; - } - } - } - - if (count($authors) == 0) { - $authors = new Collection\Author(); - } else { - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } - - $this->data['authors'] = $authors; - return $this->data['authors']; - } - - /** - * Get the entry content - * - * @return string - */ - public function getContent() - { - if (array_key_exists('content', $this->data)) { - return $this->data['content']; - } - - $content = null; - - $el = $this->getXpath()->query($this->getXpathPrefix() . '/atom:content'); - if ($el->length > 0) { - $el = $el->item(0); - $type = $el->getAttribute('type'); - switch ($type) { - case '': - case 'text': - case 'text/plain': - case 'html': - case 'text/html': - $content = $el->nodeValue; - break; - case 'xhtml': - $this->getXpath()->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml'); - $xhtml = $this->getXpath()->query( - $this->getXpathPrefix() . '/atom:content/xhtml:div' - )->item(0); - $d = new DOMDocument('1.0', $this->getEncoding()); - $xhtmls = $d->importNode($xhtml, true); - $d->appendChild($xhtmls); - $content = $this->collectXhtml( - $d->saveXML(), - $d->lookupPrefix('http://www.w3.org/1999/xhtml') - ); - break; - } - } - - if (!$content) { - $content = $this->getDescription(); - } - - $this->data['content'] = trim($content); - - return $this->data['content']; - } - - /** - * Parse out XHTML to remove the namespacing - * - * @param $xhtml - * @param $prefix - * @return mixed - */ - protected function collectXhtml($xhtml, $prefix) - { - if (!empty($prefix)) { - $prefix = $prefix . ':'; - } - $matches = array( - "/<\?xml[^<]*>[^<]*<" . $prefix . "div[^<]*/", - "/<\/" . $prefix . "div>\s*$/" - ); - $xhtml = preg_replace($matches, '', $xhtml); - if (!empty($prefix)) { - $xhtml = preg_replace("/(<[\/]?)" . $prefix . "([a-zA-Z]+)/", '$1$2', $xhtml); - } - return $xhtml; - } - - /** - * Get the entry creation date - * - * @return string - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $date = null; - - if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) { - $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)'); - } else { - $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)'); - } - - if ($dateCreated) { - $date = new DateTime($dateCreated); - } - - $this->data['datecreated'] = $date; - - return $this->data['datecreated']; - } - - /** - * Get the entry modification date - * - * @return string - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $date = null; - - if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) { - $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)'); - } else { - $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)'); - } - - if ($dateModified) { - $date = new DateTime($dateModified); - } - - $this->data['datemodified'] = $date; - - return $this->data['datemodified']; - } - - /** - * Get the entry description - * - * @return string - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:summary)'); - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the entry enclosure - * - * @return string - */ - public function getEnclosure() - { - if (array_key_exists('enclosure', $this->data)) { - return $this->data['enclosure']; - } - - $enclosure = null; - - $nodeList = $this->getXpath()->query($this->getXpathPrefix() . '/atom:link[@rel="enclosure"]'); - - if ($nodeList->length > 0) { - $enclosure = new stdClass(); - $enclosure->url = $nodeList->item(0)->getAttribute('href'); - $enclosure->length = $nodeList->item(0)->getAttribute('length'); - $enclosure->type = $nodeList->item(0)->getAttribute('type'); - } - - $this->data['enclosure'] = $enclosure; - - return $this->data['enclosure']; - } - - /** - * Get the entry ID - * - * @return string - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)'); - - if (!$id) { - if ($this->getPermalink()) { - $id = $this->getPermalink(); - } elseif ($this->getTitle()) { - $id = $this->getTitle(); - } else { - $id = null; - } - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the base URI of the feed (if set). - * - * @return string|null - */ - public function getBaseUrl() - { - if (array_key_exists('baseUrl', $this->data)) { - return $this->data['baseUrl']; - } - - $baseUrl = $this->getXpath()->evaluate('string(' - . $this->getXpathPrefix() . '/@xml:base[1]' - . ')'); - - if (!$baseUrl) { - $baseUrl = $this->getXpath()->evaluate('string(//@xml:base[1])'); - } - - if (!$baseUrl) { - $baseUrl = null; - } - - $this->data['baseUrl'] = $baseUrl; - - return $this->data['baseUrl']; - } - - /** - * Get a specific link - * - * @param int $index - * @return string - */ - public function getLink($index = 0) - { - if (!array_key_exists('links', $this->data)) { - $this->getLinks(); - } - - if (isset($this->data['links'][$index])) { - return $this->data['links'][$index]; - } - - return null; - } - - /** - * Get all links - * - * @return array - */ - public function getLinks() - { - if (array_key_exists('links', $this->data)) { - return $this->data['links']; - } - - $links = array(); - - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="alternate"]/@href' . '|' . - $this->getXpathPrefix() . '//atom:link[not(@rel)]/@href' - ); - - if ($list->length) { - foreach ($list as $link) { - $links[] = $this->absolutiseUri($link->value); - } - } - - $this->data['links'] = $links; - - return $this->data['links']; - } - - /** - * Get a permalink to the entry - * - * @return string - */ - public function getPermalink() - { - return $this->getLink(0); - } - - /** - * Get the entry title - * - * @return string - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)'); - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get the number of comments/replies for current entry - * - * @return int - */ - public function getCommentCount() - { - if (array_key_exists('commentcount', $this->data)) { - return $this->data['commentcount']; - } - - $count = null; - - $this->getXpath()->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0'); - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="replies"]/@thread10:count' - ); - - if ($list->length) { - $count = $list->item(0)->value; - } - - $this->data['commentcount'] = $count; - - return $this->data['commentcount']; - } - - /** - * Returns a URI pointing to the HTML page where comments can be made on this entry - * - * @return string - */ - public function getCommentLink() - { - if (array_key_exists('commentlink', $this->data)) { - return $this->data['commentlink']; - } - - $link = null; - - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="text/html"]/@href' - ); - - if ($list->length) { - $link = $list->item(0)->value; - $link = $this->absolutiseUri($link); - } - - $this->data['commentlink'] = $link; - - return $this->data['commentlink']; - } - - /** - * Returns a URI pointing to a feed of all comments for this entry - * - * @param string $type - * @return string - */ - public function getCommentFeedLink($type = 'atom') - { - if (array_key_exists('commentfeedlink', $this->data)) { - return $this->data['commentfeedlink']; - } - - $link = null; - - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="application/' . $type.'+xml"]/@href' - ); - - if ($list->length) { - $link = $list->item(0)->value; - $link = $this->absolutiseUri($link); - } - - $this->data['commentfeedlink'] = $link; - - return $this->data['commentfeedlink']; - } - - /** - * Get all categories - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - if ($this->getAtomType() == Reader\Reader::TYPE_ATOM_10) { - $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:category'); - } else { - /** - * Since Atom 0.3 did not support categories, it would have used the - * Dublin Core extension. However there is a small possibility Atom 0.3 - * may have been retrofitted to use Atom 1.0 instead. - */ - $this->getXpath()->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10); - $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom10:category'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->getAttribute('term'), - 'scheme' => $category->getAttribute('scheme'), - 'label' => $category->getAttribute('label') - ); - } - } else { - return new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Get source feed metadata from the entry - * - * @return Reader\Feed\Atom\Source|null - */ - public function getSource() - { - if (array_key_exists('source', $this->data)) { - return $this->data['source']; - } - - $source = null; - // TODO: Investigate why _getAtomType() fails here. Is it even needed? - if ($this->getType() == Reader\Reader::TYPE_ATOM_10) { - $list = $this->getXpath()->query($this->getXpathPrefix() . '/atom:source[1]'); - if ($list->length) { - $element = $list->item(0); - $source = new Reader\Feed\Atom\Source($element, $this->getXpathPrefix()); - } - } - - $this->data['source'] = $source; - return $this->data['source']; - } - - /** - * Attempt to absolutise the URI, i.e. if a relative URI apply the - * xml:base value as a prefix to turn into an absolute URI. - * - * @param $link - * @return string - */ - protected function absolutiseUri($link) - { - if (!Uri::factory($link)->isAbsolute()) { - if ($this->getBaseUrl() !== null) { - $link = $this->getBaseUrl() . $link; - if (!Uri::factory($link)->isValid()) { - $link = null; - } - } - } - return $link; - } - - /** - * Get an author entry - * - * @param DOMElement $element - * @return string - */ - protected function getAuthorFromElement(DOMElement $element) - { - $author = array(); - - $emailNode = $element->getElementsByTagName('email'); - $nameNode = $element->getElementsByTagName('name'); - $uriNode = $element->getElementsByTagName('uri'); - - if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) { - $author['email'] = $emailNode->item(0)->nodeValue; - } - - if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) { - $author['name'] = $nameNode->item(0)->nodeValue; - } - - if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) { - $author['uri'] = $uriNode->item(0)->nodeValue; - } - - if (empty($author)) { - return null; - } - return $author; - } - - /** - * Register the default namespaces for the current feed format - */ - protected function registerNamespaces() - { - switch ($this->getAtomType()) { - case Reader\Reader::TYPE_ATOM_03: - $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03); - break; - default: - $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10); - break; - } - } - - /** - * Detect the presence of any Atom namespaces in use - * - * @return string - */ - protected function getAtomType() - { - $dom = $this->getDomDocument(); - $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03); - $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10); - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03) - || !empty($prefixAtom03)) { - return Reader\Reader::TYPE_ATOM_03; - } - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10) - || !empty($prefixAtom10)) { - return Reader\Reader::TYPE_ATOM_10; - } - } -} diff --git a/library/Zend/Feed/Reader/Extension/Atom/Feed.php b/library/Zend/Feed/Reader/Extension/Atom/Feed.php deleted file mode 100755 index 986d23fdb..000000000 --- a/library/Zend/Feed/Reader/Extension/Atom/Feed.php +++ /dev/null @@ -1,536 +0,0 @@ -getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return Collection\Author - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $list = $this->xpath->query('//atom:author'); - - $authors = array(); - - if ($list->length) { - foreach ($list as $author) { - $author = $this->getAuthorFromElement($author); - if (!empty($author)) { - $authors[] = $author; - } - } - } - - if (count($authors) == 0) { - $authors = new Collection\Author(); - } else { - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:copyright)'); - } else { - $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:rights)'); - } - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return DateTime|null - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $date = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)'); - } else { - $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)'); - } - - if ($dateCreated) { - $date = new DateTime($dateCreated); - } - - $this->data['datecreated'] = $date; - - return $this->data['datecreated']; - } - - /** - * Get the feed modification date - * - * @return DateTime|null - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $date = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)'); - } else { - $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)'); - } - - if ($dateModified) { - $date = new DateTime($dateModified); - } - - $this->data['datemodified'] = $date; - - return $this->data['datemodified']; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:tagline)'); - } else { - $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:subtitle)'); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (array_key_exists('generator', $this->data)) { - return $this->data['generator']; - } - // TODO: Add uri support - $generator = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:generator)'); - - if (!$generator) { - $generator = null; - } - - $this->data['generator'] = $generator; - - return $this->data['generator']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)'); - - if (!$id) { - if ($this->getLink()) { - $id = $this->getLink(); - } elseif ($this->getTitle()) { - $id = $this->getTitle(); - } else { - $id = null; - } - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:lang)'); - - if (!$language) { - $language = $this->xpath->evaluate('string(//@xml:lang[1])'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get the feed image - * - * @return array|null - */ - public function getImage() - { - if (array_key_exists('image', $this->data)) { - return $this->data['image']; - } - - $imageUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:logo)'); - - if (!$imageUrl) { - $image = null; - } else { - $image = array('uri' => $imageUrl); - } - - $this->data['image'] = $image; - - return $this->data['image']; - } - - /** - * Get the base URI of the feed (if set). - * - * @return string|null - */ - public function getBaseUrl() - { - if (array_key_exists('baseUrl', $this->data)) { - return $this->data['baseUrl']; - } - - $baseUrl = $this->xpath->evaluate('string(//@xml:base[1])'); - - if (!$baseUrl) { - $baseUrl = null; - } - $this->data['baseUrl'] = $baseUrl; - - return $this->data['baseUrl']; - } - - /** - * Get a link to the source website - * - * @return string|null - */ - public function getLink() - { - if (array_key_exists('link', $this->data)) { - return $this->data['link']; - } - - $link = null; - - $list = $this->xpath->query( - $this->getXpathPrefix() . '/atom:link[@rel="alternate"]/@href' . '|' . - $this->getXpathPrefix() . '/atom:link[not(@rel)]/@href' - ); - - if ($list->length) { - $link = $list->item(0)->nodeValue; - $link = $this->absolutiseUri($link); - } - - $this->data['link'] = $link; - - return $this->data['link']; - } - - /** - * Get a link to the feed's XML Url - * - * @return string|null - */ - public function getFeedLink() - { - if (array_key_exists('feedlink', $this->data)) { - return $this->data['feedlink']; - } - - $link = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:link[@rel="self"]/@href)'); - - $link = $this->absolutiseUri($link); - - $this->data['feedlink'] = $link; - - return $this->data['feedlink']; - } - - /** - * Get an array of any supported Pusubhubbub endpoints - * - * @return array|null - */ - public function getHubs() - { - if (array_key_exists('hubs', $this->data)) { - return $this->data['hubs']; - } - $hubs = array(); - - $list = $this->xpath->query($this->getXpathPrefix() - . '//atom:link[@rel="hub"]/@href'); - - if ($list->length) { - foreach ($list as $uri) { - $hubs[] = $this->absolutiseUri($uri->nodeValue); - } - } else { - $hubs = null; - } - - $this->data['hubs'] = $hubs; - - return $this->data['hubs']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)'); - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get all categories - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - if ($this->getType() == Reader\Reader::TYPE_ATOM_10) { - $list = $this->xpath->query($this->getXpathPrefix() . '/atom:category'); - } else { - /** - * Since Atom 0.3 did not support categories, it would have used the - * Dublin Core extension. However there is a small possibility Atom 0.3 - * may have been retrofittied to use Atom 1.0 instead. - */ - $this->xpath->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10); - $list = $this->xpath->query($this->getXpathPrefix() . '/atom10:category'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->getAttribute('term'), - 'scheme' => $category->getAttribute('scheme'), - 'label' => $category->getAttribute('label') - ); - } - } else { - return new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Get an author entry in RSS format - * - * @param DOMElement $element - * @return string - */ - protected function getAuthorFromElement(DOMElement $element) - { - $author = array(); - - $emailNode = $element->getElementsByTagName('email'); - $nameNode = $element->getElementsByTagName('name'); - $uriNode = $element->getElementsByTagName('uri'); - - if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) { - $author['email'] = $emailNode->item(0)->nodeValue; - } - - if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) { - $author['name'] = $nameNode->item(0)->nodeValue; - } - - if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) { - $author['uri'] = $uriNode->item(0)->nodeValue; - } - - if (empty($author)) { - return null; - } - return $author; - } - - /** - * Attempt to absolutise the URI, i.e. if a relative URI apply the - * xml:base value as a prefix to turn into an absolute URI. - */ - protected function absolutiseUri($link) - { - if (!Uri::factory($link)->isAbsolute()) { - if ($this->getBaseUrl() !== null) { - $link = $this->getBaseUrl() . $link; - if (!Uri::factory($link)->isValid()) { - $link = null; - } - } - } - return $link; - } - - /** - * Register the default namespaces for the current feed format - */ - protected function registerNamespaces() - { - if ($this->getType() == Reader\Reader::TYPE_ATOM_10 - || $this->getType() == Reader\Reader::TYPE_ATOM_03 - ) { - return; // pre-registered at Feed level - } - $atomDetected = $this->getAtomType(); - switch ($atomDetected) { - case Reader\Reader::TYPE_ATOM_03: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03); - break; - default: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10); - break; - } - } - - /** - * Detect the presence of any Atom namespaces in use - */ - protected function getAtomType() - { - $dom = $this->getDomDocument(); - $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03); - $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10); - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10) - || !empty($prefixAtom10) - ) { - return Reader\Reader::TYPE_ATOM_10; - } - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03) - || !empty($prefixAtom03) - ) { - return Reader\Reader::TYPE_ATOM_03; - } - } -} diff --git a/library/Zend/Feed/Reader/Extension/Content/Entry.php b/library/Zend/Feed/Reader/Extension/Content/Entry.php deleted file mode 100755 index 9b5f7cb35..000000000 --- a/library/Zend/Feed/Reader/Extension/Content/Entry.php +++ /dev/null @@ -1,36 +0,0 @@ -getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)'); - } else { - $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)'); - } - return $content; - } - - /** - * Register RSS Content Module namespace - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('content', 'http://purl.org/rss/1.0/modules/content/'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/CreativeCommons/Entry.php b/library/Zend/Feed/Reader/Extension/CreativeCommons/Entry.php deleted file mode 100755 index 1883dc6be..000000000 --- a/library/Zend/Feed/Reader/Extension/CreativeCommons/Entry.php +++ /dev/null @@ -1,72 +0,0 @@ -getLicenses(); - - if (isset($licenses[$index])) { - return $licenses[$index]; - } - - return null; - } - - /** - * Get the entry licenses - * - * @return array - */ - public function getLicenses() - { - $name = 'licenses'; - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $licenses = array(); - $list = $this->xpath->evaluate($this->getXpathPrefix() . '//cc:license'); - - if ($list->length) { - foreach ($list as $license) { - $licenses[] = $license->nodeValue; - } - - $licenses = array_unique($licenses); - } else { - $cc = new Feed(); - $licenses = $cc->getLicenses(); - } - - $this->data[$name] = $licenses; - - return $this->data[$name]; - } - - /** - * Register Creative Commons namespaces - * - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/CreativeCommons/Feed.php b/library/Zend/Feed/Reader/Extension/CreativeCommons/Feed.php deleted file mode 100755 index 99977fd44..000000000 --- a/library/Zend/Feed/Reader/Extension/CreativeCommons/Feed.php +++ /dev/null @@ -1,70 +0,0 @@ -getLicenses(); - - if (isset($licenses[$index])) { - return $licenses[$index]; - } - - return null; - } - - /** - * Get the entry licenses - * - * @return array - */ - public function getLicenses() - { - $name = 'licenses'; - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $licenses = array(); - $list = $this->xpath->evaluate('channel/cc:license'); - - if ($list->length) { - foreach ($list as $license) { - $licenses[] = $license->nodeValue; - } - - $licenses = array_unique($licenses); - } - - $this->data[$name] = $licenses; - - return $this->data[$name]; - } - - /** - * Register Creative Commons namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/DublinCore/Entry.php b/library/Zend/Feed/Reader/Extension/DublinCore/Entry.php deleted file mode 100755 index 2713353ca..000000000 --- a/library/Zend/Feed/Reader/Extension/DublinCore/Entry.php +++ /dev/null @@ -1,238 +0,0 @@ -getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $authors = array(); - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:creator'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:creator'); - } - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:publisher'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:publisher'); - } - } - - if ($list->length) { - foreach ($list as $author) { - $authors[] = array( - 'name' => $author->nodeValue - ); - } - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } else { - $authors = null; - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get categories (subjects under DC) - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->nodeValue, - 'scheme' => null, - 'label' => $category->nodeValue, - ); - } - } else { - $categoryCollection = new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - return $this->data['categories']; - } - - - /** - * Get the entry content - * - * @return string - */ - public function getContent() - { - return $this->getDescription(); - } - - /** - * Get the entry description - * - * @return string - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)'); - - if (!$description) { - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)'); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the entry ID - * - * @return string - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = null; - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)'); - - if (!$id) { - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)'); - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the entry title - * - * @return string - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = null; - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)'); - - if (!$title) { - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)'); - } - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * - * - * @return DateTime|null - */ - public function getDate() - { - if (array_key_exists('date', $this->data)) { - return $this->data['date']; - } - - $d = null; - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)'); - - if (!$date) { - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)'); - } - - if ($date) { - $d = new DateTime($date); - } - - $this->data['date'] = $d; - - return $this->data['date']; - } - - /** - * Register DC namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/'); - $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/DublinCore/Feed.php b/library/Zend/Feed/Reader/Extension/DublinCore/Feed.php deleted file mode 100755 index 2738ac732..000000000 --- a/library/Zend/Feed/Reader/Extension/DublinCore/Feed.php +++ /dev/null @@ -1,281 +0,0 @@ -getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $authors = array(); - $list = $this->getXpath()->query('//dc11:creator'); - - if (!$list->length) { - $list = $this->getXpath()->query('//dc10:creator'); - } - if (!$list->length) { - $list = $this->getXpath()->query('//dc11:publisher'); - - if (!$list->length) { - $list = $this->getXpath()->query('//dc10:publisher'); - } - } - - if ($list->length) { - foreach ($list as $author) { - $authors[] = array( - 'name' => $author->nodeValue - ); - } - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } else { - $authors = null; - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = null; - $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:rights)'); - - if (!$copyright) { - $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:rights)'); - } - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)'); - - if (!$description) { - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)'); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = null; - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)'); - - if (!$id) { - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)'); - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = null; - $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:language)'); - - if (!$language) { - $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:language)'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = null; - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)'); - - if (!$title) { - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)'); - } - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * - * - * @return DateTime|null - */ - public function getDate() - { - if (array_key_exists('date', $this->data)) { - return $this->data['date']; - } - - $d = null; - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)'); - - if (!$date) { - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)'); - } - - if ($date) { - $d = new DateTime($date); - } - - $this->data['date'] = $d; - - return $this->data['date']; - } - - /** - * Get categories (subjects under DC) - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->nodeValue, - 'scheme' => null, - 'label' => $category->nodeValue, - ); - } - } else { - $categoryCollection = new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - return $this->data['categories']; - } - - /** - * Register the default namespaces for the current feed format - * - * @return void - */ - protected function registerNamespaces() - { - $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/'); - $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/Podcast/Entry.php b/library/Zend/Feed/Reader/Extension/Podcast/Entry.php deleted file mode 100755 index c97e64ff4..000000000 --- a/library/Zend/Feed/Reader/Extension/Podcast/Entry.php +++ /dev/null @@ -1,180 +0,0 @@ -data['author'])) { - return $this->data['author']; - } - - $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)'); - - if (!$author) { - $author = null; - } - - $this->data['author'] = $author; - - return $this->data['author']; - } - - /** - * Get the entry block - * - * @return string - */ - public function getBlock() - { - if (isset($this->data['block'])) { - return $this->data['block']; - } - - $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)'); - - if (!$block) { - $block = null; - } - - $this->data['block'] = $block; - - return $this->data['block']; - } - - /** - * Get the entry duration - * - * @return string - */ - public function getDuration() - { - if (isset($this->data['duration'])) { - return $this->data['duration']; - } - - $duration = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:duration)'); - - if (!$duration) { - $duration = null; - } - - $this->data['duration'] = $duration; - - return $this->data['duration']; - } - - /** - * Get the entry explicit - * - * @return string - */ - public function getExplicit() - { - if (isset($this->data['explicit'])) { - return $this->data['explicit']; - } - - $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)'); - - if (!$explicit) { - $explicit = null; - } - - $this->data['explicit'] = $explicit; - - return $this->data['explicit']; - } - - /** - * Get the entry keywords - * - * @return string - */ - public function getKeywords() - { - if (isset($this->data['keywords'])) { - return $this->data['keywords']; - } - - $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)'); - - if (!$keywords) { - $keywords = null; - } - - $this->data['keywords'] = $keywords; - - return $this->data['keywords']; - } - - /** - * Get the entry subtitle - * - * @return string - */ - public function getSubtitle() - { - if (isset($this->data['subtitle'])) { - return $this->data['subtitle']; - } - - $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)'); - - if (!$subtitle) { - $subtitle = null; - } - - $this->data['subtitle'] = $subtitle; - - return $this->data['subtitle']; - } - - /** - * Get the entry summary - * - * @return string - */ - public function getSummary() - { - if (isset($this->data['summary'])) { - return $this->data['summary']; - } - - $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)'); - - if (!$summary) { - $summary = null; - } - - $this->data['summary'] = $summary; - - return $this->data['summary']; - } - - /** - * Register iTunes namespace - * - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/Podcast/Feed.php b/library/Zend/Feed/Reader/Extension/Podcast/Feed.php deleted file mode 100755 index 66b13a48b..000000000 --- a/library/Zend/Feed/Reader/Extension/Podcast/Feed.php +++ /dev/null @@ -1,277 +0,0 @@ -data['author'])) { - return $this->data['author']; - } - - $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)'); - - if (!$author) { - $author = null; - } - - $this->data['author'] = $author; - - return $this->data['author']; - } - - /** - * Get the entry block - * - * @return string - */ - public function getBlock() - { - if (isset($this->data['block'])) { - return $this->data['block']; - } - - $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)'); - - if (!$block) { - $block = null; - } - - $this->data['block'] = $block; - - return $this->data['block']; - } - - /** - * Get the entry category - * - * @return string - */ - public function getItunesCategories() - { - if (isset($this->data['categories'])) { - return $this->data['categories']; - } - - $categoryList = $this->xpath->query($this->getXpathPrefix() . '/itunes:category'); - - $categories = array(); - - if ($categoryList->length > 0) { - foreach ($categoryList as $node) { - $children = null; - - if ($node->childNodes->length > 0) { - $children = array(); - - foreach ($node->childNodes as $childNode) { - if (!($childNode instanceof DOMText)) { - $children[$childNode->getAttribute('text')] = null; - } - } - } - - $categories[$node->getAttribute('text')] = $children; - } - } - - - if (!$categories) { - $categories = null; - } - - $this->data['categories'] = $categories; - - return $this->data['categories']; - } - - /** - * Get the entry explicit - * - * @return string - */ - public function getExplicit() - { - if (isset($this->data['explicit'])) { - return $this->data['explicit']; - } - - $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)'); - - if (!$explicit) { - $explicit = null; - } - - $this->data['explicit'] = $explicit; - - return $this->data['explicit']; - } - - /** - * Get the entry image - * - * @return string - */ - public function getItunesImage() - { - if (isset($this->data['image'])) { - return $this->data['image']; - } - - $image = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:image/@href)'); - - if (!$image) { - $image = null; - } - - $this->data['image'] = $image; - - return $this->data['image']; - } - - /** - * Get the entry keywords - * - * @return string - */ - public function getKeywords() - { - if (isset($this->data['keywords'])) { - return $this->data['keywords']; - } - - $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)'); - - if (!$keywords) { - $keywords = null; - } - - $this->data['keywords'] = $keywords; - - return $this->data['keywords']; - } - - /** - * Get the entry's new feed url - * - * @return string - */ - public function getNewFeedUrl() - { - if (isset($this->data['new-feed-url'])) { - return $this->data['new-feed-url']; - } - - $newFeedUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:new-feed-url)'); - - if (!$newFeedUrl) { - $newFeedUrl = null; - } - - $this->data['new-feed-url'] = $newFeedUrl; - - return $this->data['new-feed-url']; - } - - /** - * Get the entry owner - * - * @return string - */ - public function getOwner() - { - if (isset($this->data['owner'])) { - return $this->data['owner']; - } - - $owner = null; - - $email = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:email)'); - $name = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:name)'); - - if (!empty($email)) { - $owner = $email . (empty($name) ? '' : ' (' . $name . ')'); - } elseif (!empty($name)) { - $owner = $name; - } - - if (!$owner) { - $owner = null; - } - - $this->data['owner'] = $owner; - - return $this->data['owner']; - } - - /** - * Get the entry subtitle - * - * @return string - */ - public function getSubtitle() - { - if (isset($this->data['subtitle'])) { - return $this->data['subtitle']; - } - - $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)'); - - if (!$subtitle) { - $subtitle = null; - } - - $this->data['subtitle'] = $subtitle; - - return $this->data['subtitle']; - } - - /** - * Get the entry summary - * - * @return string - */ - public function getSummary() - { - if (isset($this->data['summary'])) { - return $this->data['summary']; - } - - $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)'); - - if (!$summary) { - $summary = null; - } - - $this->data['summary'] = $summary; - - return $this->data['summary']; - } - - /** - * Register iTunes namespace - * - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/Slash/Entry.php b/library/Zend/Feed/Reader/Extension/Slash/Entry.php deleted file mode 100755 index 9ddb862e2..000000000 --- a/library/Zend/Feed/Reader/Extension/Slash/Entry.php +++ /dev/null @@ -1,122 +0,0 @@ -getData('section'); - } - - /** - * Get the entry department - * - * @return string|null - */ - public function getDepartment() - { - return $this->getData('department'); - } - - /** - * Get the entry hit_parade - * - * @return array - */ - public function getHitParade() - { - $name = 'hit_parade'; - - if (isset($this->data[$name])) { - return $this->data[$name]; - } - - $stringParade = $this->getData($name); - $hitParade = array(); - - if (!empty($stringParade)) { - $stringParade = explode(',', $stringParade); - - foreach ($stringParade as $hit) { - $hitParade[] = $hit + 0; //cast to integer - } - } - - $this->data[$name] = $hitParade; - return $hitParade; - } - - /** - * Get the entry comments - * - * @return int - */ - public function getCommentCount() - { - $name = 'comments'; - - if (isset($this->data[$name])) { - return $this->data[$name]; - } - - $comments = $this->getData($name, 'string'); - - if (!$comments) { - $this->data[$name] = null; - return $this->data[$name]; - } - - return $comments; - } - - /** - * Get the entry data specified by name - * @param string $name - * @param string $type - * - * @return mixed|null - */ - protected function getData($name, $type = 'string') - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/slash10:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Slash namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('slash10', 'http://purl.org/rss/1.0/modules/slash/'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/Syndication/Feed.php b/library/Zend/Feed/Reader/Extension/Syndication/Feed.php deleted file mode 100755 index db1724c14..000000000 --- a/library/Zend/Feed/Reader/Extension/Syndication/Feed.php +++ /dev/null @@ -1,151 +0,0 @@ -getData($name); - - if ($period === null) { - $this->data[$name] = 'daily'; - return 'daily'; //Default specified by spec - } - - switch ($period) { - case 'hourly': - case 'daily': - case 'weekly': - case 'yearly': - return $period; - default: - throw new Reader\Exception\InvalidArgumentException("Feed specified invalid update period: '$period'." - . " Must be one of hourly, daily, weekly or yearly" - ); - } - } - - /** - * Get update frequency - * - * @return int - */ - public function getUpdateFrequency() - { - $name = 'updateFrequency'; - $freq = $this->getData($name, 'number'); - - if (!$freq || $freq < 1) { - $this->data[$name] = 1; - return 1; - } - - return $freq; - } - - /** - * Get update frequency as ticks - * - * @return int - */ - public function getUpdateFrequencyAsTicks() - { - $name = 'updateFrequency'; - $freq = $this->getData($name, 'number'); - - if (!$freq || $freq < 1) { - $this->data[$name] = 1; - $freq = 1; - } - - $period = $this->getUpdatePeriod(); - $ticks = 1; - - switch ($period) { - case 'yearly': - $ticks *= 52; //TODO: fix generalisation, how? - // no break - case 'weekly': - $ticks *= 7; - // no break - case 'daily': - $ticks *= 24; - // no break - case 'hourly': - $ticks *= 3600; - break; - default: //Never arrive here, exception thrown in getPeriod() - break; - } - - return $ticks / $freq; - } - - /** - * Get update base - * - * @return DateTime|null - */ - public function getUpdateBase() - { - $updateBase = $this->getData('updateBase'); - $date = null; - if ($updateBase) { - $date = DateTime::createFromFormat(DateTime::W3C, $updateBase); - } - return $date; - } - - /** - * Get the entry data specified by name - * - * @param string $name - * @param string $type - * @return mixed|null - */ - private function getData($name, $type = 'string') - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/syn10:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Syndication namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('syn10', 'http://purl.org/rss/1.0/modules/syndication/'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/Thread/Entry.php b/library/Zend/Feed/Reader/Extension/Thread/Entry.php deleted file mode 100755 index d3bc31587..000000000 --- a/library/Zend/Feed/Reader/Extension/Thread/Entry.php +++ /dev/null @@ -1,72 +0,0 @@ -getData('total'); - } - - /** - * Get the entry data specified by name - * - * @param string $name - * @return mixed|null - */ - protected function getData($name) - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/thread10:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Atom Thread Extension 1.0 namespace - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0'); - } -} diff --git a/library/Zend/Feed/Reader/Extension/WellFormedWeb/Entry.php b/library/Zend/Feed/Reader/Extension/WellFormedWeb/Entry.php deleted file mode 100755 index 6d5a97705..000000000 --- a/library/Zend/Feed/Reader/Extension/WellFormedWeb/Entry.php +++ /dev/null @@ -1,50 +0,0 @@ -data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/wfw:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Slash namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('wfw', 'http://wellformedweb.org/CommentAPI/'); - } -} diff --git a/library/Zend/Feed/Reader/ExtensionManager.php b/library/Zend/Feed/Reader/ExtensionManager.php deleted file mode 100755 index 9103643a3..000000000 --- a/library/Zend/Feed/Reader/ExtensionManager.php +++ /dev/null @@ -1,80 +0,0 @@ -pluginManager = $pluginManager; - } - - /** - * Method overloading - * - * Proxy to composed ExtensionPluginManager instance. - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException - */ - public function __call($method, $args) - { - if (!method_exists($this->pluginManager, $method)) { - throw new Exception\BadMethodCallException(sprintf( - 'Method by name of %s does not exist in %s', - $method, - __CLASS__ - )); - } - return call_user_func_array(array($this->pluginManager, $method), $args); - } - - /** - * Get the named extension - * - * @param string $name - * @return Extension\AbstractEntry|Extension\AbstractFeed - */ - public function get($name) - { - return $this->pluginManager->get($name); - } - - /** - * Do we have the named extension? - * - * @param string $name - * @return bool - */ - public function has($name) - { - return $this->pluginManager->has($name); - } -} diff --git a/library/Zend/Feed/Reader/ExtensionManagerInterface.php b/library/Zend/Feed/Reader/ExtensionManagerInterface.php deleted file mode 100755 index 4bbb91d9e..000000000 --- a/library/Zend/Feed/Reader/ExtensionManagerInterface.php +++ /dev/null @@ -1,29 +0,0 @@ - 'Zend\Feed\Reader\Extension\Atom\Entry', - 'atomfeed' => 'Zend\Feed\Reader\Extension\Atom\Feed', - 'contententry' => 'Zend\Feed\Reader\Extension\Content\Entry', - 'creativecommonsentry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry', - 'creativecommonsfeed' => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed', - 'dublincoreentry' => 'Zend\Feed\Reader\Extension\DublinCore\Entry', - 'dublincorefeed' => 'Zend\Feed\Reader\Extension\DublinCore\Feed', - 'podcastentry' => 'Zend\Feed\Reader\Extension\Podcast\Entry', - 'podcastfeed' => 'Zend\Feed\Reader\Extension\Podcast\Feed', - 'slashentry' => 'Zend\Feed\Reader\Extension\Slash\Entry', - 'syndicationfeed' => 'Zend\Feed\Reader\Extension\Syndication\Feed', - 'threadentry' => 'Zend\Feed\Reader\Extension\Thread\Entry', - 'wellformedwebentry' => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry', - ); - - /** - * Do not share instances - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the extension loaded is of a valid type. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Extension\AbstractEntry - || $plugin instanceof Extension\AbstractFeed - ) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed ' - . 'or %s\Extension\AbstractEntry', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__, - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Feed/Reader/Feed/AbstractFeed.php b/library/Zend/Feed/Reader/Feed/AbstractFeed.php deleted file mode 100755 index dd616bef7..000000000 --- a/library/Zend/Feed/Reader/Feed/AbstractFeed.php +++ /dev/null @@ -1,307 +0,0 @@ -domDocument = $domDocument; - $this->xpath = new DOMXPath($this->domDocument); - - if ($type !== null) { - $this->data['type'] = $type; - } else { - $this->data['type'] = Reader\Reader::detectType($this->domDocument); - } - $this->registerNamespaces(); - $this->indexEntries(); - $this->loadExtensions(); - } - - /** - * Set an original source URI for the feed being parsed. This value - * is returned from getFeedLink() method if the feed does not carry - * a self-referencing URI. - * - * @param string $uri - */ - public function setOriginalSourceUri($uri) - { - $this->originalSourceUri = $uri; - } - - /** - * Get an original source URI for the feed being parsed. Returns null if - * unset or the feed was not imported from a URI. - * - * @return string|null - */ - public function getOriginalSourceUri() - { - return $this->originalSourceUri; - } - - /** - * Get the number of feed entries. - * Required by the Iterator interface. - * - * @return int - */ - public function count() - { - return count($this->entries); - } - - /** - * Return the current entry - * - * @return \Zend\Feed\Reader\Entry\EntryInterface - */ - public function current() - { - if (substr($this->getType(), 0, 3) == 'rss') { - $reader = new Reader\Entry\Rss($this->entries[$this->key()], $this->key(), $this->getType()); - } else { - $reader = new Reader\Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType()); - } - - $reader->setXpath($this->xpath); - - return $reader; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Feed's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get feed as xml - * - * @return string - */ - public function saveXml() - { - return $this->getDomDocument()->saveXml(); - } - - /** - * Get the DOMElement representing the items/feed element - * - * @return DOMElement - */ - public function getElement() - { - return $this->getDomDocument()->documentElement; - } - - /** - * Get the DOMXPath object for this feed - * - * @return DOMXPath - */ - public function getXpath() - { - return $this->xpath; - } - - /** - * Get the feed type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Return the current feed key - * - * @return int - */ - public function key() - { - return $this->entriesKey; - } - - /** - * Move the feed pointer forward - * - */ - public function next() - { - ++$this->entriesKey; - } - - /** - * Reset the pointer in the feed object - * - */ - public function rewind() - { - $this->entriesKey = 0; - } - - /** - * Check to see if the iterator is still valid - * - * @return bool - */ - public function valid() - { - return 0 <= $this->entriesKey && $this->entriesKey < $this->count(); - } - - public function getExtensions() - { - return $this->extensions; - } - - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . 'does not exist and could not be located on a registered Extension'); - } - - /** - * Return an Extension object with the matching name (postfixed with _Feed) - * - * @param string $name - * @return \Zend\Feed\Reader\Extension\AbstractFeed - */ - public function getExtension($name) - { - if (array_key_exists($name . '\\Feed', $this->extensions)) { - return $this->extensions[$name . '\\Feed']; - } - return null; - } - - protected function loadExtensions() - { - $all = Reader\Reader::getExtensions(); - $manager = Reader\Reader::getExtensionManager(); - $feed = $all['feed']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - if (!$manager->has($extension)) { - throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; cannot find class', $extension)); - } - $plugin = $manager->get($extension); - $plugin->setDomDocument($this->getDomDocument()); - $plugin->setType($this->data['type']); - $plugin->setXpath($this->xpath); - $this->extensions[$extension] = $plugin; - } - } - - /** - * Read all entries to the internal entries array - * - */ - abstract protected function indexEntries(); - - /** - * Register the default namespaces for the current feed format - * - */ - abstract protected function registerNamespaces(); -} diff --git a/library/Zend/Feed/Reader/Feed/Atom.php b/library/Zend/Feed/Reader/Feed/Atom.php deleted file mode 100755 index 72efcf760..000000000 --- a/library/Zend/Feed/Reader/Feed/Atom.php +++ /dev/null @@ -1,408 +0,0 @@ -get('Atom\Feed'); - $atomFeed->setDomDocument($dom); - $atomFeed->setType($this->data['type']); - $atomFeed->setXpath($this->xpath); - $this->extensions['Atom\\Feed'] = $atomFeed; - - $atomFeed = $manager->get('DublinCore\Feed'); - $atomFeed->setDomDocument($dom); - $atomFeed->setType($this->data['type']); - $atomFeed->setXpath($this->xpath); - $this->extensions['DublinCore\\Feed'] = $atomFeed; - - foreach ($this->extensions as $extension) { - $extension->setXpathPrefix('/atom:feed'); - } - } - - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0) - { - $authors = $this->getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $authors = $this->getExtension('Atom')->getAuthors(); - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = $this->getExtension('Atom')->getCopyright(); - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return string|null - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $dateCreated = $this->getExtension('Atom')->getDateCreated(); - - if (!$dateCreated) { - $dateCreated = null; - } - - $this->data['datecreated'] = $dateCreated; - - return $this->data['datecreated']; - } - - /** - * Get the feed modification date - * - * @return string|null - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $dateModified = $this->getExtension('Atom')->getDateModified(); - - if (!$dateModified) { - $dateModified = null; - } - - $this->data['datemodified'] = $dateModified; - - return $this->data['datemodified']; - } - - /** - * Get the feed lastBuild date. This is not implemented in Atom. - * - * @return string|null - */ - public function getLastBuildDate() - { - return null; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = $this->getExtension('Atom')->getDescription(); - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (array_key_exists('generator', $this->data)) { - return $this->data['generator']; - } - - $generator = $this->getExtension('Atom')->getGenerator(); - - $this->data['generator'] = $generator; - - return $this->data['generator']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = $this->getExtension('Atom')->getId(); - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = $this->getExtension('Atom')->getLanguage(); - - if (!$language) { - $language = $this->xpath->evaluate('string(//@xml:lang[1])'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get a link to the source website - * - * @return string|null - */ - public function getBaseUrl() - { - if (array_key_exists('baseUrl', $this->data)) { - return $this->data['baseUrl']; - } - - $baseUrl = $this->getExtension('Atom')->getBaseUrl(); - - $this->data['baseUrl'] = $baseUrl; - - return $this->data['baseUrl']; - } - - /** - * Get a link to the source website - * - * @return string|null - */ - public function getLink() - { - if (array_key_exists('link', $this->data)) { - return $this->data['link']; - } - - $link = $this->getExtension('Atom')->getLink(); - - $this->data['link'] = $link; - - return $this->data['link']; - } - - /** - * Get feed image data - * - * @return array|null - */ - public function getImage() - { - if (array_key_exists('image', $this->data)) { - return $this->data['image']; - } - - $link = $this->getExtension('Atom')->getImage(); - - $this->data['image'] = $link; - - return $this->data['image']; - } - - /** - * Get a link to the feed's XML Url - * - * @return string|null - */ - public function getFeedLink() - { - if (array_key_exists('feedlink', $this->data)) { - return $this->data['feedlink']; - } - - $link = $this->getExtension('Atom')->getFeedLink(); - - if ($link === null || empty($link)) { - $link = $this->getOriginalSourceUri(); - } - - $this->data['feedlink'] = $link; - - return $this->data['feedlink']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = $this->getExtension('Atom')->getTitle(); - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get an array of any supported Pusubhubbub endpoints - * - * @return array|null - */ - public function getHubs() - { - if (array_key_exists('hubs', $this->data)) { - return $this->data['hubs']; - } - - $hubs = $this->getExtension('Atom')->getHubs(); - - $this->data['hubs'] = $hubs; - - return $this->data['hubs']; - } - - /** - * Get all categories - * - * @return Reader\Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $categoryCollection = $this->getExtension('Atom')->getCategories(); - - if (count($categoryCollection) == 0) { - $categoryCollection = $this->getExtension('DublinCore')->getCategories(); - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Read all entries to the internal entries array - * - * @return void - */ - protected function indexEntries() - { - if ($this->getType() == Reader\Reader::TYPE_ATOM_10 || - $this->getType() == Reader\Reader::TYPE_ATOM_03) { - $entries = $this->xpath->evaluate('//atom:entry'); - - foreach ($entries as $index => $entry) { - $this->entries[$index] = $entry; - } - } - } - - /** - * Register the default namespaces for the current feed format - * - */ - protected function registerNamespaces() - { - switch ($this->data['type']) { - case Reader\Reader::TYPE_ATOM_03: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03); - break; - case Reader\Reader::TYPE_ATOM_10: - default: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10); - } - } -} diff --git a/library/Zend/Feed/Reader/Feed/Atom/Source.php b/library/Zend/Feed/Reader/Feed/Atom/Source.php deleted file mode 100755 index 5eabd974b..000000000 --- a/library/Zend/Feed/Reader/Feed/Atom/Source.php +++ /dev/null @@ -1,107 +0,0 @@ -domDocument = $source->ownerDocument; - $this->xpath = new DOMXPath($this->domDocument); - $this->data['type'] = $type; - $this->registerNamespaces(); - $this->loadExtensions(); - - $manager = Reader\Reader::getExtensionManager(); - $extensions = array('Atom\Feed', 'DublinCore\Feed'); - - foreach ($extensions as $name) { - $extension = $manager->get($name); - $extension->setDomDocument($this->domDocument); - $extension->setType($this->data['type']); - $extension->setXpath($this->xpath); - $this->extensions[$name] = $extension; - } - - foreach ($this->extensions as $extension) { - $extension->setXpathPrefix(rtrim($xpathPrefix, '/') . '/atom:source'); - } - } - - /** - * Since this is not an Entry carrier but a vehicle for Feed metadata, any - * applicable Entry methods are stubbed out and do nothing. - */ - - /** - * @return void - */ - public function count() - { - } - - /** - * @return void - */ - public function current() - { - } - - /** - * @return void - */ - public function key() - { - } - - /** - * @return void - */ - public function next() - { - } - - /** - * @return void - */ - public function rewind() - { - } - - /** - * @return void - */ - public function valid() - { - } - - /** - * @return void - */ - protected function indexEntries() - { - } -} diff --git a/library/Zend/Feed/Reader/Feed/FeedInterface.php b/library/Zend/Feed/Reader/Feed/FeedInterface.php deleted file mode 100755 index c98a1b333..000000000 --- a/library/Zend/Feed/Reader/Feed/FeedInterface.php +++ /dev/null @@ -1,110 +0,0 @@ -get('DublinCore\Feed'); - $feed->setDomDocument($dom); - $feed->setType($this->data['type']); - $feed->setXpath($this->xpath); - $this->extensions['DublinCore\Feed'] = $feed; - - $feed = $manager->get('Atom\Feed'); - $feed->setDomDocument($dom); - $feed->setType($this->data['type']); - $feed->setXpath($this->xpath); - $this->extensions['Atom\Feed'] = $feed; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $xpathPrefix = '/rss/channel'; - } else { - $xpathPrefix = '/rdf:RDF/rss:channel'; - } - foreach ($this->extensions as $extension) { - $extension->setXpathPrefix($xpathPrefix); - } - } - - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0) - { - $authors = $this->getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $authors = array(); - $authorsDc = $this->getExtension('DublinCore')->getAuthors(); - if (!empty($authorsDc)) { - foreach ($authorsDc as $author) { - $authors[] = array( - 'name' => $author['name'] - ); - } - } - - /** - * Technically RSS doesn't specific author element use at the feed level - * but it's supported on a "just in case" basis. - */ - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query('//author'); - } else { - $list = $this->xpath->query('//rss:author'); - } - if ($list->length) { - foreach ($list as $author) { - $string = trim($author->nodeValue); - $email = null; - $name = null; - $data = array(); - // Pretty rough parsing - but it's a catchall - if (preg_match("/^.*@[^ ]*/", $string, $matches)) { - $data['email'] = trim($matches[0]); - if (preg_match("/\((.*)\)$/", $string, $matches)) { - $data['name'] = $matches[1]; - } - $authors[] = $data; - } - } - } - - if (count($authors) == 0) { - $authors = $this->getExtension('Atom')->getAuthors(); - } else { - $authors = new Reader\Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } - - if (count($authors) == 0) { - $authors = null; - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $copyright = $this->xpath->evaluate('string(/rss/channel/copyright)'); - } - - if (!$copyright && $this->getExtension('DublinCore') !== null) { - $copyright = $this->getExtension('DublinCore')->getCopyright(); - } - - if (empty($copyright)) { - $copyright = $this->getExtension('Atom')->getCopyright(); - } - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return string|null - */ - public function getDateCreated() - { - return $this->getDateModified(); - } - - /** - * Get the feed modification date - * - * @return DateTime - * @throws Exception\RuntimeException - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $dateModified = null; - $date = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $dateModified = $this->xpath->evaluate('string(/rss/channel/pubDate)'); - if (!$dateModified) { - $dateModified = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)'); - } - if ($dateModified) { - $dateModifiedParsed = strtotime($dateModified); - if ($dateModifiedParsed) { - $date = new DateTime('@' . $dateModifiedParsed); - } else { - $dateStandards = array(DateTime::RSS, DateTime::RFC822, - DateTime::RFC2822, null); - foreach ($dateStandards as $standard) { - try { - $date = DateTime::createFromFormat($standard, $dateModified); - break; - } catch (\Exception $e) { - if ($standard == null) { - throw new Exception\RuntimeException( - 'Could not load date due to unrecognised' - .' format (should follow RFC 822 or 2822):' - . $e->getMessage(), - 0, $e - ); - } - } - } - } - } - } - - if (!$date) { - $date = $this->getExtension('DublinCore')->getDate(); - } - - if (!$date) { - $date = $this->getExtension('Atom')->getDateModified(); - } - - if (!$date) { - $date = null; - } - - $this->data['datemodified'] = $date; - - return $this->data['datemodified']; - } - - /** - * Get the feed lastBuild date - * - * @throws Exception\RuntimeException - * @return DateTime - */ - public function getLastBuildDate() - { - if (array_key_exists('lastBuildDate', $this->data)) { - return $this->data['lastBuildDate']; - } - - $lastBuildDate = null; - $date = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $lastBuildDate = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)'); - if ($lastBuildDate) { - $lastBuildDateParsed = strtotime($lastBuildDate); - if ($lastBuildDateParsed) { - $date = new DateTime('@' . $lastBuildDateParsed); - } else { - $dateStandards = array(DateTime::RSS, DateTime::RFC822, - DateTime::RFC2822, null); - foreach ($dateStandards as $standard) { - try { - $date = DateTime::createFromFormat($standard, $lastBuildDateParsed); - break; - } catch (\Exception $e) { - if ($standard == null) { - throw new Exception\RuntimeException( - 'Could not load date due to unrecognised' - .' format (should follow RFC 822 or 2822):' - . $e->getMessage(), - 0, $e - ); - } - } - } - } - } - } - - if (!$date) { - $date = null; - } - - $this->data['lastBuildDate'] = $date; - - return $this->data['lastBuildDate']; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $description = $this->xpath->evaluate('string(/rss/channel/description)'); - } else { - $description = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:description)'); - } - - if (!$description && $this->getExtension('DublinCore') !== null) { - $description = $this->getExtension('DublinCore')->getDescription(); - } - - if (empty($description)) { - $description = $this->getExtension('Atom')->getDescription(); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $id = $this->xpath->evaluate('string(/rss/channel/guid)'); - } - - if (!$id && $this->getExtension('DublinCore') !== null) { - $id = $this->getExtension('DublinCore')->getId(); - } - - if (empty($id)) { - $id = $this->getExtension('Atom')->getId(); - } - - if (!$id) { - if ($this->getLink()) { - $id = $this->getLink(); - } elseif ($this->getTitle()) { - $id = $this->getTitle(); - } else { - $id = null; - } - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed image data - * - * @return array|null - */ - public function getImage() - { - if (array_key_exists('image', $this->data)) { - return $this->data['image']; - } - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query('/rss/channel/image'); - $prefix = '/rss/channel/image[1]'; - } else { - $list = $this->xpath->query('/rdf:RDF/rss:channel/rss:image'); - $prefix = '/rdf:RDF/rss:channel/rss:image[1]'; - } - if ($list->length > 0) { - $image = array(); - $value = $this->xpath->evaluate('string(' . $prefix . '/url)'); - if ($value) { - $image['uri'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/link)'); - if ($value) { - $image['link'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/title)'); - if ($value) { - $image['title'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/height)'); - if ($value) { - $image['height'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/width)'); - if ($value) { - $image['width'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/description)'); - if ($value) { - $image['description'] = $value; - } - } else { - $image = null; - } - - $this->data['image'] = $image; - - return $this->data['image']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $language = $this->xpath->evaluate('string(/rss/channel/language)'); - } - - if (!$language && $this->getExtension('DublinCore') !== null) { - $language = $this->getExtension('DublinCore')->getLanguage(); - } - - if (empty($language)) { - $language = $this->getExtension('Atom')->getLanguage(); - } - - if (!$language) { - $language = $this->xpath->evaluate('string(//@xml:lang[1])'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get a link to the feed - * - * @return string|null - */ - public function getLink() - { - if (array_key_exists('link', $this->data)) { - return $this->data['link']; - } - - $link = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $link = $this->xpath->evaluate('string(/rss/channel/link)'); - } else { - $link = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:link)'); - } - - if (empty($link)) { - $link = $this->getExtension('Atom')->getLink(); - } - - if (!$link) { - $link = null; - } - - $this->data['link'] = $link; - - return $this->data['link']; - } - - /** - * Get a link to the feed XML - * - * @return string|null - */ - public function getFeedLink() - { - if (array_key_exists('feedlink', $this->data)) { - return $this->data['feedlink']; - } - - $link = null; - - $link = $this->getExtension('Atom')->getFeedLink(); - - if ($link === null || empty($link)) { - $link = $this->getOriginalSourceUri(); - } - - $this->data['feedlink'] = $link; - - return $this->data['feedlink']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (array_key_exists('generator', $this->data)) { - return $this->data['generator']; - } - - $generator = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $generator = $this->xpath->evaluate('string(/rss/channel/generator)'); - } - - if (!$generator) { - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $generator = $this->xpath->evaluate('string(/rss/channel/atom:generator)'); - } else { - $generator = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/atom:generator)'); - } - } - - if (empty($generator)) { - $generator = $this->getExtension('Atom')->getGenerator(); - } - - if (!$generator) { - $generator = null; - } - - $this->data['generator'] = $generator; - - return $this->data['generator']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $title = $this->xpath->evaluate('string(/rss/channel/title)'); - } else { - $title = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:title)'); - } - - if (!$title && $this->getExtension('DublinCore') !== null) { - $title = $this->getExtension('DublinCore')->getTitle(); - } - - if (!$title) { - $title = $this->getExtension('Atom')->getTitle(); - } - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get an array of any supported Pusubhubbub endpoints - * - * @return array|null - */ - public function getHubs() - { - if (array_key_exists('hubs', $this->data)) { - return $this->data['hubs']; - } - - $hubs = $this->getExtension('Atom')->getHubs(); - - if (empty($hubs)) { - $hubs = null; - } else { - $hubs = array_unique($hubs); - } - - $this->data['hubs'] = $hubs; - - return $this->data['hubs']; - } - - /** - * Get all categories - * - * @return Reader\Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query('/rss/channel//category'); - } else { - $list = $this->xpath->query('/rdf:RDF/rss:channel//rss:category'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->nodeValue, - 'scheme' => $category->getAttribute('domain'), - 'label' => $category->nodeValue, - ); - } - } else { - $categoryCollection = $this->getExtension('DublinCore')->getCategories(); - } - - if (count($categoryCollection) == 0) { - $categoryCollection = $this->getExtension('Atom')->getCategories(); - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Read all entries to the internal entries array - * - */ - protected function indexEntries() - { - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $entries = $this->xpath->evaluate('//item'); - } else { - $entries = $this->xpath->evaluate('//rss:item'); - } - - foreach ($entries as $index => $entry) { - $this->entries[$index] = $entry; - } - } - - /** - * Register the default namespaces for the current feed format - * - */ - protected function registerNamespaces() - { - switch ($this->data['type']) { - case Reader\Reader::TYPE_RSS_10: - $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF); - $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_10); - break; - - case Reader\Reader::TYPE_RSS_090: - $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF); - $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_090); - break; - } - } -} diff --git a/library/Zend/Feed/Reader/FeedSet.php b/library/Zend/Feed/Reader/FeedSet.php deleted file mode 100755 index e487bc8f4..000000000 --- a/library/Zend/Feed/Reader/FeedSet.php +++ /dev/null @@ -1,126 +0,0 @@ -getAttribute('rel')) !== 'alternate' - || !$link->getAttribute('type') || !$link->getAttribute('href')) { - continue; - } - if (!isset($this->rss) && $link->getAttribute('type') == 'application/rss+xml') { - $this->rss = $this->absolutiseUri(trim($link->getAttribute('href')), $uri); - } elseif (!isset($this->atom) && $link->getAttribute('type') == 'application/atom+xml') { - $this->atom = $this->absolutiseUri(trim($link->getAttribute('href')), $uri); - } elseif (!isset($this->rdf) && $link->getAttribute('type') == 'application/rdf+xml') { - $this->rdf = $this->absolutiseUri(trim($link->getAttribute('href')), $uri); - } - $this[] = new static(array( - 'rel' => 'alternate', - 'type' => $link->getAttribute('type'), - 'href' => $this->absolutiseUri(trim($link->getAttribute('href')), $uri), - )); - } - } - - /** - * Attempt to turn a relative URI into an absolute URI - */ - protected function absolutiseUri($link, $uri = null) - { - $linkUri = Uri::factory($link); - if (!$linkUri->isAbsolute() or !$linkUri->isValid()) { - if ($uri !== null) { - $uri = Uri::factory($uri); - - if ($link[0] !== '/') { - $link = $uri->getPath() . '/' . $link; - } - - $link = $uri->getScheme() . '://' . $uri->getHost() . '/' . $this->canonicalizePath($link); - if (!Uri::factory($link)->isValid()) { - $link = null; - } - } - } - return $link; - } - - /** - * Canonicalize relative path - */ - protected function canonicalizePath($path) - { - $parts = array_filter(explode('/', $path)); - $absolutes = array(); - foreach ($parts as $part) { - if ('.' == $part) { - continue; - } - if ('..' == $part) { - array_pop($absolutes); - } else { - $absolutes[] = $part; - } - } - return implode('/', $absolutes); - } - - /** - * Supports lazy loading of feeds using Reader::import() but - * delegates any other operations to the parent class. - * - * @param string $offset - * @return mixed - */ - public function offsetGet($offset) - { - if ($offset == 'feed' && !$this->offsetExists('feed')) { - if (!$this->offsetExists('href')) { - return null; - } - $feed = Reader::import($this->offsetGet('href')); - $this->offsetSet('feed', $feed); - return $feed; - } - return parent::offsetGet($offset); - } -} diff --git a/library/Zend/Feed/Reader/Http/ClientInterface.php b/library/Zend/Feed/Reader/Http/ClientInterface.php deleted file mode 100755 index 43932f761..000000000 --- a/library/Zend/Feed/Reader/Http/ClientInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - array( - 'DublinCore\Feed', - 'Atom\Feed' - ), - 'entry' => array( - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ), - 'core' => array( - 'DublinCore\Feed', - 'Atom\Feed', - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ) - ); - - /** - * Get the Feed cache - * - * @return CacheStorage - */ - public static function getCache() - { - return static::$cache; - } - - /** - * Set the feed cache - * - * @param CacheStorage $cache - * @return void - */ - public static function setCache(CacheStorage $cache) - { - static::$cache = $cache; - } - - /** - * Set the HTTP client instance - * - * Sets the HTTP client object to use for retrieving the feeds. - * - * @param ZendHttp\Client $httpClient - * @return void - */ - public static function setHttpClient(ZendHttp\Client $httpClient) - { - static::$httpClient = $httpClient; - } - - - /** - * Gets the HTTP client object. If none is set, a new ZendHttp\Client will be used. - * - * @return ZendHttp\Client - */ - public static function getHttpClient() - { - if (!static::$httpClient instanceof ZendHttp\Client) { - static::$httpClient = new ZendHttp\Client(); - } - - return static::$httpClient; - } - - /** - * Toggle using POST instead of PUT and DELETE HTTP methods - * - * Some feed implementations do not accept PUT and DELETE HTTP - * methods, or they can't be used because of proxies or other - * measures. This allows turning on using POST where PUT and - * DELETE would normally be used; in addition, an - * X-Method-Override header will be sent with a value of PUT or - * DELETE as appropriate. - * - * @param bool $override Whether to override PUT and DELETE. - * @return void - */ - public static function setHttpMethodOverride($override = true) - { - static::$httpMethodOverride = $override; - } - - /** - * Get the HTTP override state - * - * @return bool - */ - public static function getHttpMethodOverride() - { - return static::$httpMethodOverride; - } - - /** - * Set the flag indicating whether or not to use HTTP conditional GET - * - * @param bool $bool - * @return void - */ - public static function useHttpConditionalGet($bool = true) - { - static::$httpConditionalGet = $bool; - } - - /** - * Import a feed by providing a URI - * - * @param string $uri The URI to the feed - * @param string $etag OPTIONAL Last received ETag for this resource - * @param string $lastModified OPTIONAL Last-Modified value for this resource - * @return Feed\FeedInterface - * @throws Exception\RuntimeException - */ - public static function import($uri, $etag = null, $lastModified = null) - { - $cache = self::getCache(); - $feed = null; - $client = self::getHttpClient(); - $client->resetParameters(); - $headers = new ZendHttp\Headers(); - $client->setHeaders($headers); - $client->setUri($uri); - $cacheId = 'Zend_Feed_Reader_' . md5($uri); - - if (static::$httpConditionalGet && $cache) { - $data = $cache->getItem($cacheId); - if ($data) { - if ($etag === null) { - $etag = $cache->getItem($cacheId . '_etag'); - } - if ($lastModified === null) { - $lastModified = $cache->getItem($cacheId . '_lastmodified'); - } - if ($etag) { - $headers->addHeaderLine('If-None-Match', $etag); - } - if ($lastModified) { - $headers->addHeaderLine('If-Modified-Since', $lastModified); - } - } - $response = $client->send(); - if ($response->getStatusCode() !== 200 && $response->getStatusCode() !== 304) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - if ($response->getStatusCode() == 304) { - $responseXml = $data; - } else { - $responseXml = $response->getBody(); - $cache->setItem($cacheId, $responseXml); - if ($response->getHeaders()->get('ETag')) { - $cache->setItem($cacheId . '_etag', $response->getHeaders()->get('ETag')->getFieldValue()); - } - if ($response->getHeaders()->get('Last-Modified')) { - $cache->setItem($cacheId . '_lastmodified', $response->getHeaders()->get('Last-Modified')->getFieldValue()); - } - } - return static::importString($responseXml); - } elseif ($cache) { - $data = $cache->getItem($cacheId); - if ($data) { - return static::importString($data); - } - $response = $client->send(); - if ((int) $response->getStatusCode() !== 200) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - $responseXml = $response->getBody(); - $cache->setItem($cacheId, $responseXml); - return static::importString($responseXml); - } else { - $response = $client->send(); - if ((int) $response->getStatusCode() !== 200) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - $reader = static::importString($response->getBody()); - $reader->setOriginalSourceUri($uri); - return $reader; - } - } - - /** - * Import a feed from a remote URI - * - * Performs similarly to import(), except it uses the HTTP client passed to - * the method, and does not take into account cached data. - * - * Primary purpose is to make it possible to use the Reader with alternate - * HTTP client implementations. - * - * @param string $uri - * @param Http\ClientInterface $client - * @return self - * @throws Exception\RuntimeException if response is not an Http\ResponseInterface - */ - public static function importRemoteFeed($uri, Http\ClientInterface $client) - { - $response = $client->get($uri); - if (!$response instanceof Http\ResponseInterface) { - throw new Exception\RuntimeException(sprintf( - 'Did not receive a %s\Http\ResponseInterface from the provided HTTP client; received "%s"', - __NAMESPACE__, - (is_object($response) ? get_class($response) : gettype($response)) - )); - } - - if ((int) $response->getStatusCode() !== 200) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - $reader = static::importString($response->getBody()); - $reader->setOriginalSourceUri($uri); - return $reader; - } - - /** - * Import a feed from a string - * - * @param string $string - * @return Feed\FeedInterface - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public static function importString($string) - { - $trimmed = trim($string); - if (!is_string($string) || empty($trimmed)) { - throw new Exception\InvalidArgumentException('Only non empty strings are allowed as input'); - } - - $libxmlErrflag = libxml_use_internal_errors(true); - $oldValue = libxml_disable_entity_loader(true); - $dom = new DOMDocument; - $status = $dom->loadXML(trim($string)); - foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new Exception\InvalidArgumentException( - 'Invalid XML: Detected use of illegal DOCTYPE' - ); - } - } - libxml_disable_entity_loader($oldValue); - libxml_use_internal_errors($libxmlErrflag); - - if (!$status) { - // Build error message - $error = libxml_get_last_error(); - if ($error && $error->message) { - $error->message = trim($error->message); - $errormsg = "DOMDocument cannot parse XML: {$error->message}"; - } else { - $errormsg = "DOMDocument cannot parse XML: Please check the XML document's validity"; - } - throw new Exception\RuntimeException($errormsg); - } - - $type = static::detectType($dom); - - static::registerCoreExtensions(); - - if (substr($type, 0, 3) == 'rss') { - $reader = new Feed\Rss($dom, $type); - } elseif (substr($type, 8, 5) == 'entry') { - $reader = new Entry\Atom($dom->documentElement, 0, self::TYPE_ATOM_10); - } elseif (substr($type, 0, 4) == 'atom') { - $reader = new Feed\Atom($dom, $type); - } else { - throw new Exception\RuntimeException('The URI used does not point to a ' - . 'valid Atom, RSS or RDF feed that Zend\Feed\Reader can parse.'); - } - return $reader; - } - - /** - * Imports a feed from a file located at $filename. - * - * @param string $filename - * @throws Exception\RuntimeException - * @return Feed\FeedInterface - */ - public static function importFile($filename) - { - ErrorHandler::start(); - $feed = file_get_contents($filename); - $err = ErrorHandler::stop(); - if ($feed === false) { - throw new Exception\RuntimeException("File '{$filename}' could not be loaded", 0, $err); - } - return static::importString($feed); - } - - /** - * Find feed links - * - * @param $uri - * @return FeedSet - * @throws Exception\RuntimeException - */ - public static function findFeedLinks($uri) - { - $client = static::getHttpClient(); - $client->setUri($uri); - $response = $client->send(); - if ($response->getStatusCode() !== 200) { - throw new Exception\RuntimeException("Failed to access $uri, got response code " . $response->getStatusCode()); - } - $responseHtml = $response->getBody(); - $libxmlErrflag = libxml_use_internal_errors(true); - $oldValue = libxml_disable_entity_loader(true); - $dom = new DOMDocument; - $status = $dom->loadHTML(trim($responseHtml)); - libxml_disable_entity_loader($oldValue); - libxml_use_internal_errors($libxmlErrflag); - if (!$status) { - // Build error message - $error = libxml_get_last_error(); - if ($error && $error->message) { - $error->message = trim($error->message); - $errormsg = "DOMDocument cannot parse HTML: {$error->message}"; - } else { - $errormsg = "DOMDocument cannot parse HTML: Please check the XML document's validity"; - } - throw new Exception\RuntimeException($errormsg); - } - $feedSet = new FeedSet; - $links = $dom->getElementsByTagName('link'); - $feedSet->addLinks($links, $uri); - return $feedSet; - } - - /** - * Detect the feed type of the provided feed - * - * @param Feed\AbstractFeed|DOMDocument|string $feed - * @param bool $specOnly - * @return string - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public static function detectType($feed, $specOnly = false) - { - if ($feed instanceof Feed\AbstractFeed) { - $dom = $feed->getDomDocument(); - } elseif ($feed instanceof DOMDocument) { - $dom = $feed; - } elseif (is_string($feed) && !empty($feed)) { - ErrorHandler::start(E_NOTICE|E_WARNING); - ini_set('track_errors', 1); - $oldValue = libxml_disable_entity_loader(true); - $dom = new DOMDocument; - $status = $dom->loadXML($feed); - foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new Exception\InvalidArgumentException( - 'Invalid XML: Detected use of illegal DOCTYPE' - ); - } - } - libxml_disable_entity_loader($oldValue); - ini_restore('track_errors'); - ErrorHandler::stop(); - if (!$status) { - if (!isset($phpErrormsg)) { - if (function_exists('xdebug_is_enabled')) { - $phpErrormsg = '(error message not available, when XDebug is running)'; - } else { - $phpErrormsg = '(error message not available)'; - } - } - throw new Exception\RuntimeException("DOMDocument cannot parse XML: $phpErrormsg"); - } - } else { - throw new Exception\InvalidArgumentException('Invalid object/scalar provided: must' - . ' be of type Zend\Feed\Reader\Feed, DomDocument or string'); - } - $xpath = new DOMXPath($dom); - - if ($xpath->query('/rss')->length) { - $type = self::TYPE_RSS_ANY; - $version = $xpath->evaluate('string(/rss/@version)'); - - if (strlen($version) > 0) { - switch ($version) { - case '2.0': - $type = self::TYPE_RSS_20; - break; - - case '0.94': - $type = self::TYPE_RSS_094; - break; - - case '0.93': - $type = self::TYPE_RSS_093; - break; - - case '0.92': - $type = self::TYPE_RSS_092; - break; - - case '0.91': - $type = self::TYPE_RSS_091; - break; - } - } - - return $type; - } - - $xpath->registerNamespace('rdf', self::NAMESPACE_RDF); - - if ($xpath->query('/rdf:RDF')->length) { - $xpath->registerNamespace('rss', self::NAMESPACE_RSS_10); - - if ($xpath->query('/rdf:RDF/rss:channel')->length - || $xpath->query('/rdf:RDF/rss:image')->length - || $xpath->query('/rdf:RDF/rss:item')->length - || $xpath->query('/rdf:RDF/rss:textinput')->length - ) { - return self::TYPE_RSS_10; - } - - $xpath->registerNamespace('rss', self::NAMESPACE_RSS_090); - - if ($xpath->query('/rdf:RDF/rss:channel')->length - || $xpath->query('/rdf:RDF/rss:image')->length - || $xpath->query('/rdf:RDF/rss:item')->length - || $xpath->query('/rdf:RDF/rss:textinput')->length - ) { - return self::TYPE_RSS_090; - } - } - - $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_10); - - if ($xpath->query('//atom:feed')->length) { - return self::TYPE_ATOM_10; - } - - if ($xpath->query('//atom:entry')->length) { - if ($specOnly == true) { - return self::TYPE_ATOM_10; - } else { - return self::TYPE_ATOM_10_ENTRY; - } - } - - $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_03); - - if ($xpath->query('//atom:feed')->length) { - return self::TYPE_ATOM_03; - } - - return self::TYPE_ANY; - } - - /** - * Set plugin manager for use with Extensions - * - * @param ExtensionManagerInterface $extensionManager - */ - public static function setExtensionManager(ExtensionManagerInterface $extensionManager) - { - static::$extensionManager = $extensionManager; - } - - /** - * Get plugin manager for use with Extensions - * - * @return ExtensionManagerInterface - */ - public static function getExtensionManager() - { - if (!isset(static::$extensionManager)) { - static::setExtensionManager(new ExtensionManager()); - } - return static::$extensionManager; - } - - /** - * Register an Extension by name - * - * @param string $name - * @return void - * @throws Exception\RuntimeException if unable to resolve Extension class - */ - public static function registerExtension($name) - { - $feedName = $name . '\Feed'; - $entryName = $name . '\Entry'; - $manager = static::getExtensionManager(); - if (static::isRegistered($name)) { - if ($manager->has($feedName) || $manager->has($entryName)) { - return; - } - } - - if (!$manager->has($feedName) && !$manager->has($entryName)) { - throw new Exception\RuntimeException('Could not load extension: ' . $name - . ' using Plugin Loader. Check prefix paths are configured and extension exists.'); - } - if ($manager->has($feedName)) { - static::$extensions['feed'][] = $feedName; - } - if ($manager->has($entryName)) { - static::$extensions['entry'][] = $entryName; - } - } - - /** - * Is a given named Extension registered? - * - * @param string $extensionName - * @return bool - */ - public static function isRegistered($extensionName) - { - $feedName = $extensionName . '\Feed'; - $entryName = $extensionName . '\Entry'; - if (in_array($feedName, static::$extensions['feed']) - || in_array($entryName, static::$extensions['entry']) - ) { - return true; - } - return false; - } - - /** - * Get a list of extensions - * - * @return array - */ - public static function getExtensions() - { - return static::$extensions; - } - - /** - * Reset class state to defaults - * - * @return void - */ - public static function reset() - { - static::$cache = null; - static::$httpClient = null; - static::$httpMethodOverride = false; - static::$httpConditionalGet = false; - static::$extensionManager = null; - static::$extensions = array( - 'feed' => array( - 'DublinCore\Feed', - 'Atom\Feed' - ), - 'entry' => array( - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ), - 'core' => array( - 'DublinCore\Feed', - 'Atom\Feed', - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ) - ); - } - - /** - * Register core (default) extensions - * - * @return void - */ - protected static function registerCoreExtensions() - { - static::registerExtension('DublinCore'); - static::registerExtension('Content'); - static::registerExtension('Atom'); - static::registerExtension('Slash'); - static::registerExtension('WellFormedWeb'); - static::registerExtension('Thread'); - static::registerExtension('Podcast'); - } - - /** - * Utility method to apply array_unique operation to a multidimensional - * array. - * - * @param array - * @return array - */ - public static function arrayUnique(array $array) - { - foreach ($array as &$value) { - $value = serialize($value); - } - $array = array_unique($array); - foreach ($array as &$value) { - $value = unserialize($value); - } - return $array; - } -} diff --git a/library/Zend/Feed/Uri.php b/library/Zend/Feed/Uri.php deleted file mode 100755 index 940bce11a..000000000 --- a/library/Zend/Feed/Uri.php +++ /dev/null @@ -1,184 +0,0 @@ -valid = false; - return; - } - - $this->scheme = isset($parsed['scheme']) ? $parsed['scheme'] : null; - $this->host = isset($parsed['host']) ? $parsed['host'] : null; - $this->port = isset($parsed['port']) ? $parsed['port'] : null; - $this->user = isset($parsed['user']) ? $parsed['user'] : null; - $this->pass = isset($parsed['pass']) ? $parsed['pass'] : null; - $this->path = isset($parsed['path']) ? $parsed['path'] : null; - $this->query = isset($parsed['query']) ? $parsed['query'] : null; - $this->fragment = isset($parsed['fragment']) ? $parsed['fragment'] : null; - } - - /** - * Create an instance - * - * Useful for chained validations - * - * @param string $uri - * @return self - */ - public static function factory($uri) - { - return new static($uri); - } - - /** - * Retrieve the host - * - * @return string - */ - public function getHost() - { - return $this->host; - } - - /** - * Retrieve the URI path - * - * @return string - */ - public function getPath() - { - return $this->path; - } - - /** - * Retrieve the scheme - * - * @return string - */ - public function getScheme() - { - return $this->scheme; - } - - /** - * Is the URI valid? - * - * @return bool - */ - public function isValid() - { - if (false === $this->valid) { - return false; - } - - if ($this->scheme && !in_array($this->scheme, $this->validSchemes)) { - return false; - } - - if ($this->host) { - if ($this->path && substr($this->path, 0, 1) != '/') { - return false; - } - return true; - } - - // no host, but user and/or port... what? - if ($this->user || $this->port) { - return false; - } - - if ($this->path) { - // Check path-only (no host) URI - if (substr($this->path, 0, 2) == '//') { - return false; - } - return true; - } - - if (! ($this->query || $this->fragment)) { - // No host, path, query or fragment - this is not a valid URI - return false; - } - - return true; - } - - /** - * Is the URI absolute? - * - * @return bool - */ - public function isAbsolute() - { - return ($this->scheme !== null); - } -} diff --git a/library/Zend/Feed/Writer/AbstractFeed.php b/library/Zend/Feed/Writer/AbstractFeed.php deleted file mode 100755 index 1dd6fe54b..000000000 --- a/library/Zend/Feed/Writer/AbstractFeed.php +++ /dev/null @@ -1,846 +0,0 @@ -_loadExtensions(); - } - - /** - * Set a single author - * - * The following option keys are supported: - * 'name' => (string) The name - * 'email' => (string) An optional email - * 'uri' => (string) An optional and valid URI - * - * @param array $author - * @throws Exception\InvalidArgumentException If any value of $author not follow the format. - * @return AbstractFeed - */ - public function addAuthor(array $author) - { - // Check array values - if (!array_key_exists('name', $author) - || empty($author['name']) - || !is_string($author['name']) - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: author array must include a "name" key with a non-empty string value'); - } - - if (isset($author['email'])) { - if (empty($author['email']) || !is_string($author['email'])) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "email" array value must be a non-empty string'); - } - } - if (isset($author['uri'])) { - if (empty($author['uri']) || !is_string($author['uri']) || - !Uri::factory($author['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI'); - } - } - - $this->data['authors'][] = $author; - - return $this; - } - - /** - * Set an array with feed authors - * - * @see addAuthor - * @param array $authors - * @return AbstractFeed - */ - public function addAuthors(array $authors) - { - foreach ($authors as $author) { - $this->addAuthor($author); - } - - return $this; - } - - /** - * Set the copyright entry - * - * @param string $copyright - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setCopyright($copyright) - { - if (empty($copyright) || !is_string($copyright)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['copyright'] = $copyright; - - return $this; - } - - /** - * Set the feed creation date - * - * @param null|int|DateTime - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setDateCreated($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['dateCreated'] = $date; - - return $this; - } - - /** - * Set the feed modification date - * - * @param null|int|DateTime - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setDateModified($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['dateModified'] = $date; - - return $this; - } - - /** - * Set the feed last-build date. Ignored for Atom 1.0. - * - * @param null|int|DateTime - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setLastBuildDate($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['lastBuildDate'] = $date; - - return $this; - } - - /** - * Set the feed description - * - * @param string $description - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setDescription($description) - { - if (empty($description) || !is_string($description)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['description'] = $description; - - return $this; - } - - /** - * Set the feed generator entry - * - * @param array|string $name - * @param null|string $version - * @param null|string $uri - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setGenerator($name, $version = null, $uri = null) - { - if (is_array($name)) { - $data = $name; - if (empty($data['name']) || !is_string($data['name'])) { - throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string'); - } - $generator = array('name' => $data['name']); - if (isset($data['version'])) { - if (empty($data['version']) || !is_string($data['version'])) { - throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string'); - } - $generator['version'] = $data['version']; - } - if (isset($data['uri'])) { - if (empty($data['uri']) || !is_string($data['uri']) || !Uri::factory($data['uri'])->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI'); - } - $generator['uri'] = $data['uri']; - } - } else { - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string'); - } - $generator = array('name' => $name); - if (isset($version)) { - if (empty($version) || !is_string($version)) { - throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string'); - } - $generator['version'] = $version; - } - if (isset($uri)) { - if (empty($uri) || !is_string($uri) || !Uri::factory($uri)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI'); - } - $generator['uri'] = $uri; - } - } - $this->data['generator'] = $generator; - - return $this; - } - - /** - * Set the feed ID - URI or URN (via PCRE pattern) supported - * - * @param string $id - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setId($id) - { - if ((empty($id) || !is_string($id) || !Uri::factory($id)->isValid()) - && !preg_match("#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#", $id) - && !$this->_validateTagUri($id) - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI'); - } - $this->data['id'] = $id; - - return $this; - } - - /** - * Validate a URI using the tag scheme (RFC 4151) - * - * @param string $id - * @return bool - */ - protected function _validateTagUri($id) - { - if (preg_match('/^tag:(?P.*),(?P\d{4}-?\d{0,2}-?\d{0,2}):(?P.*)(.*:)*$/', $id, $matches)) { - $dvalid = false; - $date = $matches['date']; - $d6 = strtotime($date); - if ((strlen($date) == 4) && $date <= date('Y')) { - $dvalid = true; - } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) { - $dvalid = true; - } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) { - $dvalid = true; - } - $validator = new Validator\EmailAddress; - if ($validator->isValid($matches['name'])) { - $nvalid = true; - } else { - $nvalid = $validator->isValid('info@' . $matches['name']); - } - return $dvalid && $nvalid; - } - return false; - } - - /** - * Set a feed image (URI at minimum). Parameter is a single array with the - * required key 'uri'. When rendering as RSS, the required keys are 'uri', - * 'title' and 'link'. RSS also specifies three optional parameters 'width', - * 'height' and 'description'. Only 'uri' is required and used for Atom rendering. - * - * @param array $data - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setImage(array $data) - { - if (empty($data['uri']) || !is_string($data['uri']) - || !Uri::factory($data['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter \'uri\'' - . ' must be a non-empty string and valid URI/IRI'); - } - $this->data['image'] = $data; - - return $this; - } - - /** - * Set the feed language - * - * @param string $language - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setLanguage($language) - { - if (empty($language) || !is_string($language)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['language'] = $language; - - return $this; - } - - /** - * Set a link to the HTML source - * - * @param string $link - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setLink($link) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI'); - } - $this->data['link'] = $link; - - return $this; - } - - /** - * Set a link to an XML feed for any feed type/version - * - * @param string $link - * @param string $type - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setFeedLink($link, $type) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "link"" must be a non-empty string and valid URI/IRI'); - } - if (!in_array(strtolower($type), array('rss', 'rdf', 'atom'))) { - throw new Exception\InvalidArgumentException('Invalid parameter: "type"; You must declare the type of feed the link points to, i.e. RSS, RDF or Atom'); - } - $this->data['feedLinks'][strtolower($type)] = $link; - - return $this; - } - - /** - * Set the feed title - * - * @param string $title - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setTitle($title) - { - if (empty($title) || !is_string($title)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['title'] = $title; - - return $this; - } - - /** - * Set the feed character encoding - * - * @param string $encoding - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setEncoding($encoding) - { - if (empty($encoding) || !is_string($encoding)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['encoding'] = $encoding; - - return $this; - } - - /** - * Set the feed's base URL - * - * @param string $url - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setBaseUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value' - . ' must be a non-empty string and valid URI/IRI'); - } - $this->data['baseUrl'] = $url; - - return $this; - } - - /** - * Add a Pubsubhubbub hub endpoint URL - * - * @param string $url - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function addHub($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value' - . ' must be a non-empty string and valid URI/IRI'); - } - if (!isset($this->data['hubs'])) { - $this->data['hubs'] = array(); - } - $this->data['hubs'][] = $url; - - return $this; - } - - /** - * Add Pubsubhubbub hub endpoint URLs - * - * @param array $urls - * @return AbstractFeed - */ - public function addHubs(array $urls) - { - foreach ($urls as $url) { - $this->addHub($url); - } - - return $this; - } - - /** - * Add a feed category - * - * @param array $category - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function addCategory(array $category) - { - if (!isset($category['term'])) { - throw new Exception\InvalidArgumentException('Each category must be an array and ' - . 'contain at least a "term" element containing the machine ' - . ' readable category name'); - } - if (isset($category['scheme'])) { - if (empty($category['scheme']) - || !is_string($category['scheme']) - || !Uri::factory($category['scheme'])->isValid() - ) { - throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of' - . ' a category must be a valid URI'); - } - } - if (!isset($this->data['categories'])) { - $this->data['categories'] = array(); - } - $this->data['categories'][] = $category; - - return $this; - } - - /** - * Set an array of feed categories - * - * @param array $categories - * @return AbstractFeed - */ - public function addCategories(array $categories) - { - foreach ($categories as $category) { - $this->addCategory($category); - } - - return $this; - } - - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0) - { - if (isset($this->data['authors'][$index])) { - return $this->data['authors'][$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (!array_key_exists('authors', $this->data)) { - return null; - } - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (!array_key_exists('copyright', $this->data)) { - return null; - } - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return string|null - */ - public function getDateCreated() - { - if (!array_key_exists('dateCreated', $this->data)) { - return null; - } - return $this->data['dateCreated']; - } - - /** - * Get the feed modification date - * - * @return string|null - */ - public function getDateModified() - { - if (!array_key_exists('dateModified', $this->data)) { - return null; - } - return $this->data['dateModified']; - } - - /** - * Get the feed last-build date - * - * @return string|null - */ - public function getLastBuildDate() - { - if (!array_key_exists('lastBuildDate', $this->data)) { - return null; - } - return $this->data['lastBuildDate']; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (!array_key_exists('description', $this->data)) { - return null; - } - return $this->data['description']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (!array_key_exists('generator', $this->data)) { - return null; - } - return $this->data['generator']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (!array_key_exists('id', $this->data)) { - return null; - } - return $this->data['id']; - } - - /** - * Get the feed image URI - * - * @return array - */ - public function getImage() - { - if (!array_key_exists('image', $this->data)) { - return null; - } - return $this->data['image']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (!array_key_exists('language', $this->data)) { - return null; - } - return $this->data['language']; - } - - /** - * Get a link to the HTML source - * - * @return string|null - */ - public function getLink() - { - if (!array_key_exists('link', $this->data)) { - return null; - } - return $this->data['link']; - } - - /** - * Get a link to the XML feed - * - * @return string|null - */ - public function getFeedLinks() - { - if (!array_key_exists('feedLinks', $this->data)) { - return null; - } - return $this->data['feedLinks']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (!array_key_exists('title', $this->data)) { - return null; - } - return $this->data['title']; - } - - /** - * Get the feed character encoding - * - * @return string|null - */ - public function getEncoding() - { - if (!array_key_exists('encoding', $this->data)) { - return 'UTF-8'; - } - return $this->data['encoding']; - } - - /** - * Get the feed's base url - * - * @return string|null - */ - public function getBaseUrl() - { - if (!array_key_exists('baseUrl', $this->data)) { - return null; - } - return $this->data['baseUrl']; - } - - /** - * Get the URLs used as Pubsubhubbub hubs endpoints - * - * @return string|null - */ - public function getHubs() - { - if (!array_key_exists('hubs', $this->data)) { - return null; - } - return $this->data['hubs']; - } - - /** - * Get the feed categories - * - * @return string|null - */ - public function getCategories() - { - if (!array_key_exists('categories', $this->data)) { - return null; - } - return $this->data['categories']; - } - - /** - * Resets the instance and deletes all data - * - * @return void - */ - public function reset() - { - $this->data = array(); - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - * @return AbstractFeed - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Unset a specific data point - * - * @param string $name - * @return AbstractFeed - */ - public function remove($name) - { - if (isset($this->data[$name])) { - unset($this->data[$name]); - } - return $this; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - try { - return call_user_func_array(array($extension, $method), $args); - } catch (Exception\BadMethodCallException $e) { - } - } - throw new Exception\BadMethodCallException( - 'Method: ' . $method . ' does not exist and could not be located on a registered Extension' - ); - } - - /** - * Load extensions from Zend\Feed\Writer\Writer - * - * @throws Exception\RuntimeException - * @return void - */ - protected function _loadExtensions() - { - $all = Writer::getExtensions(); - $manager = Writer::getExtensionManager(); - $exts = $all['feed']; - foreach ($exts as $ext) { - if (!$manager->has($ext)) { - throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; could not resolve to class', $ext)); - } - $this->extensions[$ext] = $manager->get($ext); - $this->extensions[$ext]->setEncoding($this->getEncoding()); - } - } -} diff --git a/library/Zend/Feed/Writer/Deleted.php b/library/Zend/Feed/Writer/Deleted.php deleted file mode 100755 index b91ee0945..000000000 --- a/library/Zend/Feed/Writer/Deleted.php +++ /dev/null @@ -1,236 +0,0 @@ -data['encoding'] = $encoding; - - return $this; - } - - /** - * Get the feed character encoding - * - * @return string|null - */ - public function getEncoding() - { - if (!array_key_exists('encoding', $this->data)) { - return 'UTF-8'; - } - return $this->data['encoding']; - } - - /** - * Unset a specific data point - * - * @param string $name - * @return Deleted - */ - public function remove($name) - { - if (isset($this->data[$name])) { - unset($this->data[$name]); - } - - return $this; - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - * @return Deleted - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Set reference - * - * @param $reference - * @throws Exception\InvalidArgumentException - * @return Deleted - */ - public function setReference($reference) - { - if (empty($reference) || !is_string($reference)) { - throw new Exception\InvalidArgumentException('Invalid parameter: reference must be a non-empty string'); - } - $this->data['reference'] = $reference; - - return $this; - } - - /** - * @return string - */ - public function getReference() - { - if (!array_key_exists('reference', $this->data)) { - return null; - } - return $this->data['reference']; - } - - /** - * Set when - * - * @param null|string|DateTime $date - * @throws Exception\InvalidArgumentException - * @return Deleted - */ - public function setWhen($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['when'] = $date; - - return $this; - } - - /** - * @return DateTime - */ - public function getWhen() - { - if (!array_key_exists('when', $this->data)) { - return null; - } - return $this->data['when']; - } - - /** - * Set by - * - * @param array $by - * @throws Exception\InvalidArgumentException - * @return Deleted - */ - public function setBy(array $by) - { - $author = array(); - if (!array_key_exists('name', $by) - || empty($by['name']) - || !is_string($by['name']) - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: author array must include a' - . ' "name" key with a non-empty string value'); - } - $author['name'] = $by['name']; - if (isset($by['email'])) { - if (empty($by['email']) || !is_string($by['email'])) { - throw new Exception\InvalidArgumentException('Invalid parameter: "email" array' - . ' value must be a non-empty string'); - } - $author['email'] = $by['email']; - } - if (isset($by['uri'])) { - if (empty($by['uri']) - || !is_string($by['uri']) - || !Uri::factory($by['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: "uri" array value must' - . ' be a non-empty string and valid URI/IRI'); - } - $author['uri'] = $by['uri']; - } - $this->data['by'] = $author; - - return $this; - } - - /** - * @return string - */ - public function getBy() - { - if (!array_key_exists('by', $this->data)) { - return null; - } - return $this->data['by']; - } - - /** - * @param string $comment - * @return Deleted - */ - public function setComment($comment) - { - $this->data['comment'] = $comment; - return $this; - } - - /** - * @return string - */ - public function getComment() - { - if (!array_key_exists('comment', $this->data)) { - return null; - } - return $this->data['comment']; - } -} diff --git a/library/Zend/Feed/Writer/Entry.php b/library/Zend/Feed/Writer/Entry.php deleted file mode 100755 index c5b1085ac..000000000 --- a/library/Zend/Feed/Writer/Entry.php +++ /dev/null @@ -1,765 +0,0 @@ -_loadExtensions(); - } - - /** - * Set a single author - * - * The following option keys are supported: - * 'name' => (string) The name - * 'email' => (string) An optional email - * 'uri' => (string) An optional and valid URI - * - * @param array $author - * @throws Exception\InvalidArgumentException If any value of $author not follow the format. - * @return Entry - */ - public function addAuthor(array $author) - { - // Check array values - if (!array_key_exists('name', $author) - || empty($author['name']) - || !is_string($author['name']) - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: author array must include a "name" key with a non-empty string value'); - } - - if (isset($author['email'])) { - if (empty($author['email']) || !is_string($author['email'])) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "email" array value must be a non-empty string'); - } - } - if (isset($author['uri'])) { - if (empty($author['uri']) || !is_string($author['uri']) || - !Uri::factory($author['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI'); - } - } - - $this->data['authors'][] = $author; - - return $this; - } - - /** - * Set an array with feed authors - * - * @see addAuthor - * @param array $authors - * @return Entry - */ - public function addAuthors(array $authors) - { - foreach ($authors as $author) { - $this->addAuthor($author); - } - - return $this; - } - - /** - * Set the feed character encoding - * - * @param string $encoding - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setEncoding($encoding) - { - if (empty($encoding) || !is_string($encoding)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['encoding'] = $encoding; - - return $this; - } - - /** - * Get the feed character encoding - * - * @return string|null - */ - public function getEncoding() - { - if (!array_key_exists('encoding', $this->data)) { - return 'UTF-8'; - } - return $this->data['encoding']; - } - - /** - * Set the copyright entry - * - * @param string $copyright - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCopyright($copyright) - { - if (empty($copyright) || !is_string($copyright)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['copyright'] = $copyright; - - return $this; - } - - /** - * Set the entry's content - * - * @param string $content - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setContent($content) - { - if (empty($content) || !is_string($content)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['content'] = $content; - - return $this; - } - - /** - * Set the feed creation date - * - * @param null|int|DateTime $date - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setDateCreated($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter'); - } - $this->data['dateCreated'] = $date; - - return $this; - } - - /** - * Set the feed modification date - * - * @param null|int|DateTime $date - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setDateModified($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter'); - } - $this->data['dateModified'] = $date; - - return $this; - } - - /** - * Set the feed description - * - * @param string $description - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setDescription($description) - { - if (empty($description) || !is_string($description)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['description'] = $description; - - return $this; - } - - /** - * Set the feed ID - * - * @param string $id - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setId($id) - { - if (empty($id) || !is_string($id)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['id'] = $id; - - return $this; - } - - /** - * Set a link to the HTML source of this entry - * - * @param string $link - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setLink($link) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI'); - } - $this->data['link'] = $link; - - return $this; - } - - /** - * Set the number of comments associated with this entry - * - * @param int $count - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCommentCount($count) - { - if (!is_numeric($count) || (int) $count != $count || (int) $count < 0) { - throw new Exception\InvalidArgumentException('Invalid parameter: "count" must be a positive integer number or zero'); - } - $this->data['commentCount'] = (int) $count; - - return $this; - } - - /** - * Set a link to a HTML page containing comments associated with this entry - * - * @param string $link - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCommentLink($link) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI'); - } - $this->data['commentLink'] = $link; - - return $this; - } - - /** - * Set a link to an XML feed for any comments associated with this entry - * - * @param array $link - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCommentFeedLink(array $link) - { - if (!isset($link['uri']) || !is_string($link['uri']) || !Uri::factory($link['uri'])->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI'); - } - if (!isset($link['type']) || !in_array($link['type'], array('atom', 'rss', 'rdf'))) { - throw new Exception\InvalidArgumentException('Invalid parameter: "type" must be one' - . ' of "atom", "rss" or "rdf"'); - } - if (!isset($this->data['commentFeedLinks'])) { - $this->data['commentFeedLinks'] = array(); - } - $this->data['commentFeedLinks'][] = $link; - - return $this; - } - - /** - * Set a links to an XML feed for any comments associated with this entry. - * Each link is an array with keys "uri" and "type", where type is one of: - * "atom", "rss" or "rdf". - * - * @param array $links - * @return Entry - */ - public function setCommentFeedLinks(array $links) - { - foreach ($links as $link) { - $this->setCommentFeedLink($link); - } - - return $this; - } - - /** - * Set the feed title - * - * @param string $title - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setTitle($title) - { - if (empty($title) || !is_string($title)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['title'] = $title; - - return $this; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (!array_key_exists('authors', $this->data)) { - return null; - } - return $this->data['authors']; - } - - /** - * Get the entry content - * - * @return string - */ - public function getContent() - { - if (!array_key_exists('content', $this->data)) { - return null; - } - return $this->data['content']; - } - - /** - * Get the entry copyright information - * - * @return string - */ - public function getCopyright() - { - if (!array_key_exists('copyright', $this->data)) { - return null; - } - return $this->data['copyright']; - } - - /** - * Get the entry creation date - * - * @return string - */ - public function getDateCreated() - { - if (!array_key_exists('dateCreated', $this->data)) { - return null; - } - return $this->data['dateCreated']; - } - - /** - * Get the entry modification date - * - * @return string - */ - public function getDateModified() - { - if (!array_key_exists('dateModified', $this->data)) { - return null; - } - return $this->data['dateModified']; - } - - /** - * Get the entry description - * - * @return string - */ - public function getDescription() - { - if (!array_key_exists('description', $this->data)) { - return null; - } - return $this->data['description']; - } - - /** - * Get the entry ID - * - * @return string - */ - public function getId() - { - if (!array_key_exists('id', $this->data)) { - return null; - } - return $this->data['id']; - } - - /** - * Get a link to the HTML source - * - * @return string|null - */ - public function getLink() - { - if (!array_key_exists('link', $this->data)) { - return null; - } - return $this->data['link']; - } - - - /** - * Get all links - * - * @return array - */ - public function getLinks() - { - if (!array_key_exists('links', $this->data)) { - return null; - } - return $this->data['links']; - } - - /** - * Get the entry title - * - * @return string - */ - public function getTitle() - { - if (!array_key_exists('title', $this->data)) { - return null; - } - return $this->data['title']; - } - - /** - * Get the number of comments/replies for current entry - * - * @return int - */ - public function getCommentCount() - { - if (!array_key_exists('commentCount', $this->data)) { - return null; - } - return $this->data['commentCount']; - } - - /** - * Returns a URI pointing to the HTML page where comments can be made on this entry - * - * @return string - */ - public function getCommentLink() - { - if (!array_key_exists('commentLink', $this->data)) { - return null; - } - return $this->data['commentLink']; - } - - /** - * Returns an array of URIs pointing to a feed of all comments for this entry - * where the array keys indicate the feed type (atom, rss or rdf). - * - * @return string - */ - public function getCommentFeedLinks() - { - if (!array_key_exists('commentFeedLinks', $this->data)) { - return null; - } - return $this->data['commentFeedLinks']; - } - - /** - * Add an entry category - * - * @param array $category - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function addCategory(array $category) - { - if (!isset($category['term'])) { - throw new Exception\InvalidArgumentException('Each category must be an array and ' - . 'contain at least a "term" element containing the machine ' - . ' readable category name'); - } - if (isset($category['scheme'])) { - if (empty($category['scheme']) - || !is_string($category['scheme']) - || !Uri::factory($category['scheme'])->isValid() - ) { - throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of' - . ' a category must be a valid URI'); - } - } - if (!isset($this->data['categories'])) { - $this->data['categories'] = array(); - } - $this->data['categories'][] = $category; - - return $this; - } - - /** - * Set an array of entry categories - * - * @param array $categories - * @return Entry - */ - public function addCategories(array $categories) - { - foreach ($categories as $category) { - $this->addCategory($category); - } - - return $this; - } - - /** - * Get the entry categories - * - * @return string|null - */ - public function getCategories() - { - if (!array_key_exists('categories', $this->data)) { - return null; - } - return $this->data['categories']; - } - - /** - * Adds an enclosure to the entry. The array parameter may contain the - * keys 'uri', 'type' and 'length'. Only 'uri' is required for Atom, though the - * others must also be provided or RSS rendering (where they are required) - * will throw an Exception. - * - * @param array $enclosure - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setEnclosure(array $enclosure) - { - if (!isset($enclosure['uri'])) { - throw new Exception\InvalidArgumentException('Enclosure "uri" is not set'); - } - if (!Uri::factory($enclosure['uri'])->isValid()) { - throw new Exception\InvalidArgumentException('Enclosure "uri" is not a valid URI/IRI'); - } - $this->data['enclosure'] = $enclosure; - - return $this; - } - - /** - * Retrieve an array of all enclosures to be added to entry. - * - * @return array - */ - public function getEnclosure() - { - if (!array_key_exists('enclosure', $this->data)) { - return null; - } - return $this->data['enclosure']; - } - - /** - * Unset a specific data point - * - * @param string $name - * @return Entry - */ - public function remove($name) - { - if (isset($this->data[$name])) { - unset($this->data[$name]); - } - - return $this; - } - - /** - * Get registered extensions - * - * @return array - */ - public function getExtensions() - { - return $this->extensions; - } - - /** - * Return an Extension object with the matching name (postfixed with _Entry) - * - * @param string $name - * @return object - */ - public function getExtension($name) - { - if (array_key_exists($name . '\\Entry', $this->extensions)) { - return $this->extensions[$name . '\\Entry']; - } - return null; - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - * @return Entry - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - try { - return call_user_func_array(array($extension, $method), $args); - } catch (\BadMethodCallException $e) { - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . ' does not exist and could not be located on a registered Extension'); - } - - /** - * Creates a new Zend\Feed\Writer\Source data container for use. This is NOT - * added to the current feed automatically, but is necessary to create a - * container with some initial values preset based on the current feed data. - * - * @return Source - */ - public function createSource() - { - $source = new Source; - if ($this->getEncoding()) { - $source->setEncoding($this->getEncoding()); - } - $source->setType($this->getType()); - return $source; - } - - /** - * Appends a Zend\Feed\Writer\Entry object representing a new entry/item - * the feed data container's internal group of entries. - * - * @param Source $source - * @return Entry - */ - public function setSource(Source $source) - { - $this->data['source'] = $source; - return $this; - } - - /** - * @return Source - */ - public function getSource() - { - if (isset($this->data['source'])) { - return $this->data['source']; - } - return null; - } - - /** - * Load extensions from Zend\Feed\Writer\Writer - * - * @return void - */ - protected function _loadExtensions() - { - $all = Writer::getExtensions(); - $manager = Writer::getExtensionManager(); - $exts = $all['entry']; - foreach ($exts as $ext) { - $this->extensions[$ext] = $manager->get($ext); - $this->extensions[$ext]->setEncoding($this->getEncoding()); - } - } -} diff --git a/library/Zend/Feed/Writer/Exception/BadMethodCallException.php b/library/Zend/Feed/Writer/Exception/BadMethodCallException.php deleted file mode 100755 index 79d1c82c7..000000000 --- a/library/Zend/Feed/Writer/Exception/BadMethodCallException.php +++ /dev/null @@ -1,23 +0,0 @@ -container = $container; - return $this; - } - - /** - * Set feed encoding - * - * @param string $enc - * @return AbstractRenderer - */ - public function setEncoding($enc) - { - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set DOMDocument and DOMElement on which to operate - * - * @param DOMDocument $dom - * @param DOMElement $base - * @return AbstractRenderer - */ - public function setDomDocument(DOMDocument $dom, DOMElement $base) - { - $this->dom = $dom; - $this->base = $base; - return $this; - } - - /** - * Get data container being rendered - * - * @return mixed - */ - public function getDataContainer() - { - return $this->container; - } - - /** - * Set feed type - * - * @param string $type - * @return AbstractRenderer - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Get feedtype - * - * @return string - */ - public function getType() - { - return $this->type; - } - - /** - * Set root element of document - * - * @param DOMElement $root - * @return AbstractRenderer - */ - public function setRootElement(DOMElement $root) - { - $this->rootElement = $root; - return $this; - } - - /** - * Get root element - * - * @return DOMElement - */ - public function getRootElement() - { - return $this->rootElement; - } - - /** - * Append namespaces to feed - * - * @return void - */ - abstract protected function _appendNamespaces(); -} diff --git a/library/Zend/Feed/Writer/Extension/Atom/Renderer/Feed.php b/library/Zend/Feed/Writer/Extension/Atom/Renderer/Feed.php deleted file mode 100755 index 6b24ec01c..000000000 --- a/library/Zend/Feed/Writer/Extension/Atom/Renderer/Feed.php +++ /dev/null @@ -1,108 +0,0 @@ -getType()) == 'atom') { - return; - } - $this->_setFeedLinks($this->dom, $this->base); - $this->_setHubs($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to root element of feed - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:atom', - 'http://www.w3.org/2005/Atom'); - } - - /** - * Set feed link elements - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setFeedLinks(DOMDocument $dom, DOMElement $root) - { - $flinks = $this->getDataContainer()->getFeedLinks(); - if (!$flinks || empty($flinks)) { - return; - } - foreach ($flinks as $type => $href) { - if (strtolower($type) == $this->getType()) { // issue 2605 - $mime = 'application/' . strtolower($type) . '+xml'; - $flink = $dom->createElement('atom:link'); - $root->appendChild($flink); - $flink->setAttribute('rel', 'self'); - $flink->setAttribute('type', $mime); - $flink->setAttribute('href', $href); - } - } - $this->called = true; - } - - /** - * Set PuSH hubs - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setHubs(DOMDocument $dom, DOMElement $root) - { - $hubs = $this->getDataContainer()->getHubs(); - if (!$hubs || empty($hubs)) { - return; - } - foreach ($hubs as $hubUrl) { - $hub = $dom->createElement('atom:link'); - $hub->setAttribute('rel', 'hub'); - $hub->setAttribute('href', $hubUrl); - $root->appendChild($hub); - } - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/Content/Renderer/Entry.php b/library/Zend/Feed/Writer/Extension/Content/Renderer/Entry.php deleted file mode 100755 index b90315169..000000000 --- a/library/Zend/Feed/Writer/Extension/Content/Renderer/Entry.php +++ /dev/null @@ -1,75 +0,0 @@ -getType()) == 'atom') { - return; - } - $this->_setContent($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to root element - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:content', - 'http://purl.org/rss/1.0/modules/content/'); - } - - /** - * Set entry content - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setContent(DOMDocument $dom, DOMElement $root) - { - $content = $this->getDataContainer()->getContent(); - if (!$content) { - return; - } - $element = $dom->createElement('content:encoded'); - $root->appendChild($element); - $cdata = $dom->createCDATASection($content); - $element->appendChild($cdata); - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Entry.php b/library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Entry.php deleted file mode 100755 index 8f9465c70..000000000 --- a/library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Entry.php +++ /dev/null @@ -1,79 +0,0 @@ -getType()) == 'atom') { - return; - } - $this->_setAuthors($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to entry - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:dc', - 'http://purl.org/dc/elements/1.1/'); - } - - /** - * Set entry author elements - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('dc:creator'); - if (array_key_exists('name', $data)) { - $text = $dom->createTextNode($data['name']); - $author->appendChild($text); - $root->appendChild($author); - } - } - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Feed.php b/library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Feed.php deleted file mode 100755 index 6e68f98e8..000000000 --- a/library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Feed.php +++ /dev/null @@ -1,79 +0,0 @@ -getType()) == 'atom') { - return; - } - $this->_setAuthors($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to feed element - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:dc', - 'http://purl.org/dc/elements/1.1/'); - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('dc:creator'); - if (array_key_exists('name', $data)) { - $text = $dom->createTextNode($data['name']); - $author->appendChild($text); - $root->appendChild($author); - } - } - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/ITunes/Entry.php b/library/Zend/Feed/Writer/Extension/ITunes/Entry.php deleted file mode 100755 index 1b7b64aa5..000000000 --- a/library/Zend/Feed/Writer/Extension/ITunes/Entry.php +++ /dev/null @@ -1,246 +0,0 @@ -stringWrapper = StringUtils::getWrapper($this->encoding); - } - - /** - * Set feed encoding - * - * @param string $enc - * @return Entry - */ - public function setEncoding($enc) - { - $this->stringWrapper = StringUtils::getWrapper($enc); - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set a block value of "yes" or "no". You may also set an empty string. - * - * @param string - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesBlock($value) - { - if (!ctype_alpha($value) && strlen($value) > 0) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain alphabetic characters'); - } - - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['block'] = $value; - } - - /** - * Add authors to itunes entry - * - * @param array $values - * @return Entry - */ - public function addItunesAuthors(array $values) - { - foreach ($values as $value) { - $this->addItunesAuthor($value); - } - return $this; - } - - /** - * Add author to itunes entry - * - * @param string $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function addItunesAuthor($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only' - . ' contain a maximum of 255 characters each'); - } - if (!isset($this->data['authors'])) { - $this->data['authors'] = array(); - } - $this->data['authors'][] = $value; - return $this; - } - - /** - * Set duration - * - * @param int $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesDuration($value) - { - $value = (string) $value; - if (!ctype_digit($value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value) - ) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only' - . ' be of a specified [[HH:]MM:]SS format'); - } - $this->data['duration'] = $value; - return $this; - } - - /** - * Set "explicit" flag - * - * @param bool $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesExplicit($value) - { - if (!in_array($value, array('yes', 'no', 'clean'))) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only' - . ' be one of "yes", "no" or "clean"'); - } - $this->data['explicit'] = $value; - return $this; - } - - /** - * Set keywords - * - * @param array $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesKeywords(array $value) - { - if (count($value) > 12) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' contain a maximum of 12 terms'); - } - - $concat = implode(',', $value); - if ($this->stringWrapper->strlen($concat) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' have a concatenated length of 255 chars where terms are delimited' - . ' by a comma'); - } - $this->data['keywords'] = $value; - return $this; - } - - /** - * Set subtitle - * - * @param string $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSubtitle($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['subtitle'] = $value; - return $this; - } - - /** - * Set summary - * - * @param string $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSummary($value) - { - if ($this->stringWrapper->strlen($value) > 4000) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only' - . ' contain a maximum of 4000 characters'); - } - $this->data['summary'] = $value; - return $this; - } - - /** - * Overloading to itunes specific setters - * - * @param string $method - * @param array $params - * @throws Writer\Exception\BadMethodCallException - * @return mixed - */ - public function __call($method, array $params) - { - $point = lcfirst(substr($method, 9)); - if (!method_exists($this, 'setItunes' . ucfirst($point)) - && !method_exists($this, 'addItunes' . ucfirst($point)) - ) { - throw new Writer\Exception\BadMethodCallException( - 'invalid method: ' . $method - ); - } - if (!array_key_exists($point, $this->data) - || empty($this->data[$point]) - ) { - return null; - } - return $this->data[$point]; - } -} diff --git a/library/Zend/Feed/Writer/Extension/ITunes/Feed.php b/library/Zend/Feed/Writer/Extension/ITunes/Feed.php deleted file mode 100755 index 22c54db6e..000000000 --- a/library/Zend/Feed/Writer/Extension/ITunes/Feed.php +++ /dev/null @@ -1,362 +0,0 @@ -stringWrapper = StringUtils::getWrapper($this->encoding); - } - - /** - * Set feed encoding - * - * @param string $enc - * @return Feed - */ - public function setEncoding($enc) - { - $this->stringWrapper = StringUtils::getWrapper($enc); - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set a block value of "yes" or "no". You may also set an empty string. - * - * @param string - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesBlock($value) - { - if (!ctype_alpha($value) && strlen($value) > 0) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain alphabetic characters'); - } - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['block'] = $value; - return $this; - } - - /** - * Add feed authors - * - * @param array $values - * @return Feed - */ - public function addItunesAuthors(array $values) - { - foreach ($values as $value) { - $this->addItunesAuthor($value); - } - return $this; - } - - /** - * Add feed author - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function addItunesAuthor($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only' - . ' contain a maximum of 255 characters each'); - } - if (!isset($this->data['authors'])) { - $this->data['authors'] = array(); - } - $this->data['authors'][] = $value; - return $this; - } - - /** - * Set feed categories - * - * @param array $values - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesCategories(array $values) - { - if (!isset($this->data['categories'])) { - $this->data['categories'] = array(); - } - foreach ($values as $key => $value) { - if (!is_array($value)) { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' - . ' contain a maximum of 255 characters each'); - } - $this->data['categories'][] = $value; - } else { - if ($this->stringWrapper->strlen($key) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' - . ' contain a maximum of 255 characters each'); - } - $this->data['categories'][$key] = array(); - foreach ($value as $val) { - if ($this->stringWrapper->strlen($val) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' - . ' contain a maximum of 255 characters each'); - } - $this->data['categories'][$key][] = $val; - } - } - } - return $this; - } - - /** - * Set feed image (icon) - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesImage($value) - { - if (!Uri::factory($value)->isValid()) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only' - . ' be a valid URI/IRI'); - } - if (!in_array(substr($value, -3), array('jpg', 'png'))) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only' - . ' use file extension "jpg" or "png" which must be the last three' - . ' characters of the URI (i.e. no query string or fragment)'); - } - $this->data['image'] = $value; - return $this; - } - - /** - * Set feed cumulative duration - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesDuration($value) - { - $value = (string) $value; - if (!ctype_digit($value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value) - ) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only' - . ' be of a specified [[HH:]MM:]SS format'); - } - $this->data['duration'] = $value; - return $this; - } - - /** - * Set "explicit" flag - * - * @param bool $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesExplicit($value) - { - if (!in_array($value, array('yes', 'no', 'clean'))) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only' - . ' be one of "yes", "no" or "clean"'); - } - $this->data['explicit'] = $value; - return $this; - } - - /** - * Set feed keywords - * - * @param array $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesKeywords(array $value) - { - if (count($value) > 12) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' contain a maximum of 12 terms'); - } - $concat = implode(',', $value); - if ($this->stringWrapper->strlen($concat) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' have a concatenated length of 255 chars where terms are delimited' - . ' by a comma'); - } - $this->data['keywords'] = $value; - return $this; - } - - /** - * Set new feed URL - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesNewFeedUrl($value) - { - if (!Uri::factory($value)->isValid()) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "newFeedUrl" may only' - . ' be a valid URI/IRI'); - } - $this->data['newFeedUrl'] = $value; - return $this; - } - - /** - * Add feed owners - * - * @param array $values - * @return Feed - */ - public function addItunesOwners(array $values) - { - foreach ($values as $value) { - $this->addItunesOwner($value); - } - return $this; - } - - /** - * Add feed owner - * - * @param array $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function addItunesOwner(array $value) - { - if (!isset($value['name']) || !isset($value['email'])) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" must' - . ' be an array containing keys "name" and "email"'); - } - if ($this->stringWrapper->strlen($value['name']) > 255 - || $this->stringWrapper->strlen($value['email']) > 255 - ) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" may only' - . ' contain a maximum of 255 characters each for "name" and "email"'); - } - if (!isset($this->data['owners'])) { - $this->data['owners'] = array(); - } - $this->data['owners'][] = $value; - return $this; - } - - /** - * Set feed subtitle - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSubtitle($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['subtitle'] = $value; - return $this; - } - - /** - * Set feed summary - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSummary($value) - { - if ($this->stringWrapper->strlen($value) > 4000) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only' - . ' contain a maximum of 4000 characters'); - } - $this->data['summary'] = $value; - return $this; - } - - /** - * Overloading: proxy to internal setters - * - * @param string $method - * @param array $params - * @return mixed - * @throws Writer\Exception\BadMethodCallException - */ - public function __call($method, array $params) - { - $point = lcfirst(substr($method, 9)); - if (!method_exists($this, 'setItunes' . ucfirst($point)) - && !method_exists($this, 'addItunes' . ucfirst($point)) - ) { - throw new Writer\Exception\BadMethodCallException( - 'invalid method: ' . $method - ); - } - if (!array_key_exists($point, $this->data) || empty($this->data[$point])) { - return null; - } - return $this->data[$point]; - } -} diff --git a/library/Zend/Feed/Writer/Extension/ITunes/Renderer/Entry.php b/library/Zend/Feed/Writer/Extension/ITunes/Renderer/Entry.php deleted file mode 100755 index bc57d1daa..000000000 --- a/library/Zend/Feed/Writer/Extension/ITunes/Renderer/Entry.php +++ /dev/null @@ -1,200 +0,0 @@ -_setAuthors($this->dom, $this->base); - $this->_setBlock($this->dom, $this->base); - $this->_setDuration($this->dom, $this->base); - $this->_setExplicit($this->dom, $this->base); - $this->_setKeywords($this->dom, $this->base); - $this->_setSubtitle($this->dom, $this->base); - $this->_setSummary($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to entry root - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:itunes', - 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getItunesAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $author) { - $el = $dom->createElement('itunes:author'); - $text = $dom->createTextNode($author); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - } - - /** - * Set itunes block - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBlock(DOMDocument $dom, DOMElement $root) - { - $block = $this->getDataContainer()->getItunesBlock(); - if ($block === null) { - return; - } - $el = $dom->createElement('itunes:block'); - $text = $dom->createTextNode($block); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry duration - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDuration(DOMDocument $dom, DOMElement $root) - { - $duration = $this->getDataContainer()->getItunesDuration(); - if (!$duration) { - return; - } - $el = $dom->createElement('itunes:duration'); - $text = $dom->createTextNode($duration); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set explicit flag - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setExplicit(DOMDocument $dom, DOMElement $root) - { - $explicit = $this->getDataContainer()->getItunesExplicit(); - if ($explicit === null) { - return; - } - $el = $dom->createElement('itunes:explicit'); - $text = $dom->createTextNode($explicit); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry keywords - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setKeywords(DOMDocument $dom, DOMElement $root) - { - $keywords = $this->getDataContainer()->getItunesKeywords(); - if (!$keywords || empty($keywords)) { - return; - } - $el = $dom->createElement('itunes:keywords'); - $text = $dom->createTextNode(implode(',', $keywords)); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry subtitle - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSubtitle(DOMDocument $dom, DOMElement $root) - { - $subtitle = $this->getDataContainer()->getItunesSubtitle(); - if (!$subtitle) { - return; - } - $el = $dom->createElement('itunes:subtitle'); - $text = $dom->createTextNode($subtitle); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry summary - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSummary(DOMDocument $dom, DOMElement $root) - { - $summary = $this->getDataContainer()->getItunesSummary(); - if (!$summary) { - return; - } - $el = $dom->createElement('itunes:summary'); - $text = $dom->createTextNode($summary); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/ITunes/Renderer/Feed.php b/library/Zend/Feed/Writer/Extension/ITunes/Renderer/Feed.php deleted file mode 100755 index e6113a22f..000000000 --- a/library/Zend/Feed/Writer/Extension/ITunes/Renderer/Feed.php +++ /dev/null @@ -1,303 +0,0 @@ -_setAuthors($this->dom, $this->base); - $this->_setBlock($this->dom, $this->base); - $this->_setCategories($this->dom, $this->base); - $this->_setImage($this->dom, $this->base); - $this->_setDuration($this->dom, $this->base); - $this->_setExplicit($this->dom, $this->base); - $this->_setKeywords($this->dom, $this->base); - $this->_setNewFeedUrl($this->dom, $this->base); - $this->_setOwners($this->dom, $this->base); - $this->_setSubtitle($this->dom, $this->base); - $this->_setSummary($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append feed namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:itunes', - 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getItunesAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $author) { - $el = $dom->createElement('itunes:author'); - $text = $dom->createTextNode($author); - $el->appendChild($text); - $root->appendChild($el); - } - $this->called = true; - } - - /** - * Set feed itunes block - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBlock(DOMDocument $dom, DOMElement $root) - { - $block = $this->getDataContainer()->getItunesBlock(); - if ($block === null) { - return; - } - $el = $dom->createElement('itunes:block'); - $text = $dom->createTextNode($block); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $cats = $this->getDataContainer()->getItunesCategories(); - if (!$cats || empty($cats)) { - return; - } - foreach ($cats as $key => $cat) { - if (!is_array($cat)) { - $el = $dom->createElement('itunes:category'); - $el->setAttribute('text', $cat); - $root->appendChild($el); - } else { - $el = $dom->createElement('itunes:category'); - $el->setAttribute('text', $key); - $root->appendChild($el); - foreach ($cat as $subcat) { - $el2 = $dom->createElement('itunes:category'); - $el2->setAttribute('text', $subcat); - $el->appendChild($el2); - } - } - } - $this->called = true; - } - - /** - * Set feed image (icon) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getItunesImage(); - if (!$image) { - return; - } - $el = $dom->createElement('itunes:image'); - $el->setAttribute('href', $image); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed cumulative duration - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDuration(DOMDocument $dom, DOMElement $root) - { - $duration = $this->getDataContainer()->getItunesDuration(); - if (!$duration) { - return; - } - $el = $dom->createElement('itunes:duration'); - $text = $dom->createTextNode($duration); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set explicit flag - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setExplicit(DOMDocument $dom, DOMElement $root) - { - $explicit = $this->getDataContainer()->getItunesExplicit(); - if ($explicit === null) { - return; - } - $el = $dom->createElement('itunes:explicit'); - $text = $dom->createTextNode($explicit); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed keywords - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setKeywords(DOMDocument $dom, DOMElement $root) - { - $keywords = $this->getDataContainer()->getItunesKeywords(); - if (!$keywords || empty($keywords)) { - return; - } - $el = $dom->createElement('itunes:keywords'); - $text = $dom->createTextNode(implode(',', $keywords)); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed's new URL - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setNewFeedUrl(DOMDocument $dom, DOMElement $root) - { - $url = $this->getDataContainer()->getItunesNewFeedUrl(); - if (!$url) { - return; - } - $el = $dom->createElement('itunes:new-feed-url'); - $text = $dom->createTextNode($url); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed owners - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setOwners(DOMDocument $dom, DOMElement $root) - { - $owners = $this->getDataContainer()->getItunesOwners(); - if (!$owners || empty($owners)) { - return; - } - foreach ($owners as $owner) { - $el = $dom->createElement('itunes:owner'); - $name = $dom->createElement('itunes:name'); - $text = $dom->createTextNode($owner['name']); - $name->appendChild($text); - $email = $dom->createElement('itunes:email'); - $text = $dom->createTextNode($owner['email']); - $email->appendChild($text); - $root->appendChild($el); - $el->appendChild($name); - $el->appendChild($email); - } - $this->called = true; - } - - /** - * Set feed subtitle - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSubtitle(DOMDocument $dom, DOMElement $root) - { - $subtitle = $this->getDataContainer()->getItunesSubtitle(); - if (!$subtitle) { - return; - } - $el = $dom->createElement('itunes:subtitle'); - $text = $dom->createTextNode($subtitle); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed summary - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSummary(DOMDocument $dom, DOMElement $root) - { - $summary = $this->getDataContainer()->getItunesSummary(); - if (!$summary) { - return; - } - $el = $dom->createElement('itunes:summary'); - $text = $dom->createTextNode($summary); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/RendererInterface.php b/library/Zend/Feed/Writer/Extension/RendererInterface.php deleted file mode 100755 index e72346c20..000000000 --- a/library/Zend/Feed/Writer/Extension/RendererInterface.php +++ /dev/null @@ -1,49 +0,0 @@ -getType()) == 'atom') { - return; // RSS 2.0 only - } - $this->_setCommentCount($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append entry namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:slash', - 'http://purl.org/rss/1.0/modules/slash/'); - } - - /** - * Set entry comment count - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentCount(DOMDocument $dom, DOMElement $root) - { - $count = $this->getDataContainer()->getCommentCount(); - if (!$count) { - $count = 0; - } - $tcount = $this->dom->createElement('slash:comments'); - $tcount->nodeValue = $count; - $root->appendChild($tcount); - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/Threading/Renderer/Entry.php b/library/Zend/Feed/Writer/Extension/Threading/Renderer/Entry.php deleted file mode 100755 index a0ea739d8..000000000 --- a/library/Zend/Feed/Writer/Extension/Threading/Renderer/Entry.php +++ /dev/null @@ -1,128 +0,0 @@ -getType()) == 'rss') { - return; // Atom 1.0 only - } - $this->_setCommentLink($this->dom, $this->base); - $this->_setCommentFeedLinks($this->dom, $this->base); - $this->_setCommentCount($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append entry namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:thr', - 'http://purl.org/syndication/thread/1.0'); - } - - /** - * Set comment link - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentLink(DOMDocument $dom, DOMElement $root) - { - $link = $this->getDataContainer()->getCommentLink(); - if (!$link) { - return; - } - $clink = $this->dom->createElement('link'); - $clink->setAttribute('rel', 'replies'); - $clink->setAttribute('type', 'text/html'); - $clink->setAttribute('href', $link); - $count = $this->getDataContainer()->getCommentCount(); - if ($count !== null) { - $clink->setAttribute('thr:count', $count); - } - $root->appendChild($clink); - $this->called = true; - } - - /** - * Set comment feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root) - { - $links = $this->getDataContainer()->getCommentFeedLinks(); - if (!$links || empty($links)) { - return; - } - foreach ($links as $link) { - $flink = $this->dom->createElement('link'); - $flink->setAttribute('rel', 'replies'); - $flink->setAttribute('type', 'application/' . $link['type'] . '+xml'); - $flink->setAttribute('href', $link['uri']); - $count = $this->getDataContainer()->getCommentCount(); - if ($count !== null) { - $flink->setAttribute('thr:count', $count); - } - $root->appendChild($flink); - $this->called = true; - } - } - - /** - * Set entry comment count - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentCount(DOMDocument $dom, DOMElement $root) - { - $count = $this->getDataContainer()->getCommentCount(); - if ($count === null) { - return; - } - $tcount = $this->dom->createElement('thr:total'); - $tcount->nodeValue = $count; - $root->appendChild($tcount); - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/Extension/WellFormedWeb/Renderer/Entry.php b/library/Zend/Feed/Writer/Extension/WellFormedWeb/Renderer/Entry.php deleted file mode 100755 index d661360a1..000000000 --- a/library/Zend/Feed/Writer/Extension/WellFormedWeb/Renderer/Entry.php +++ /dev/null @@ -1,79 +0,0 @@ -getType()) == 'atom') { - return; // RSS 2.0 only - } - $this->_setCommentFeedLinks($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append entry namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:wfw', - 'http://wellformedweb.org/CommentAPI/'); - } - - /** - * Set entry comment feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root) - { - $links = $this->getDataContainer()->getCommentFeedLinks(); - if (!$links || empty($links)) { - return; - } - foreach ($links as $link) { - if ($link['type'] == 'rss') { - $flink = $this->dom->createElement('wfw:commentRss'); - $text = $dom->createTextNode($link['uri']); - $flink->appendChild($text); - $root->appendChild($flink); - } - } - $this->called = true; - } -} diff --git a/library/Zend/Feed/Writer/ExtensionManager.php b/library/Zend/Feed/Writer/ExtensionManager.php deleted file mode 100755 index 77d49a0dc..000000000 --- a/library/Zend/Feed/Writer/ExtensionManager.php +++ /dev/null @@ -1,80 +0,0 @@ -pluginManager = $pluginManager; - } - - /** - * Method overloading - * - * Proxy to composed ExtensionPluginManager instance. - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException - */ - public function __call($method, $args) - { - if (!method_exists($this->pluginManager, $method)) { - throw new Exception\BadMethodCallException(sprintf( - 'Method by name of %s does not exist in %s', - $method, - __CLASS__ - )); - } - return call_user_func_array(array($this->pluginManager, $method), $args); - } - - /** - * Get the named extension - * - * @param string $name - * @return Extension\AbstractRenderer - */ - public function get($name) - { - return $this->pluginManager->get($name); - } - - /** - * Do we have the named extension? - * - * @param string $name - * @return bool - */ - public function has($name) - { - return $this->pluginManager->has($name); - } -} diff --git a/library/Zend/Feed/Writer/ExtensionManagerInterface.php b/library/Zend/Feed/Writer/ExtensionManagerInterface.php deleted file mode 100755 index 0f7e023fe..000000000 --- a/library/Zend/Feed/Writer/ExtensionManagerInterface.php +++ /dev/null @@ -1,29 +0,0 @@ - 'Zend\Feed\Writer\Extension\Atom\Renderer\Feed', - 'contentrendererentry' => 'Zend\Feed\Writer\Extension\Content\Renderer\Entry', - 'dublincorerendererentry' => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry', - 'dublincorerendererfeed' => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed', - 'itunesentry' => 'Zend\Feed\Writer\Extension\ITunes\Entry', - 'itunesfeed' => 'Zend\Feed\Writer\Extension\ITunes\Feed', - 'itunesrendererentry' => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Entry', - 'itunesrendererfeed' => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Feed', - 'slashrendererentry' => 'Zend\Feed\Writer\Extension\Slash\Renderer\Entry', - 'threadingrendererentry' => 'Zend\Feed\Writer\Extension\Threading\Renderer\Entry', - 'wellformedwebrendererentry' => 'Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry', - ); - - /** - * Do not share instances - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the extension loaded is of a valid type. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Extension\AbstractRenderer) { - // we're okay - return; - } - - if ('Feed' == substr(get_class($plugin), -4)) { - // we're okay - return; - } - - if ('Entry' == substr(get_class($plugin), -5)) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface ' - . 'or the classname must end in "Feed" or "Entry"', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Feed/Writer/Feed.php b/library/Zend/Feed/Writer/Feed.php deleted file mode 100755 index 36b2b3ba9..000000000 --- a/library/Zend/Feed/Writer/Feed.php +++ /dev/null @@ -1,239 +0,0 @@ -getEncoding()) { - $entry->setEncoding($this->getEncoding()); - } - $entry->setType($this->getType()); - return $entry; - } - - /** - * Appends a Zend\Feed\Writer\Deleted object representing a new entry tombstone - * to the feed data container's internal group of entries. - * - * @param Deleted $deleted - * @return void - */ - public function addTombstone(Deleted $deleted) - { - $this->entries[] = $deleted; - } - - /** - * Creates a new Zend\Feed\Writer\Deleted data container for use. This is NOT - * added to the current feed automatically, but is necessary to create a - * container with some initial values preset based on the current feed data. - * - * @return Deleted - */ - public function createTombstone() - { - $deleted = new Deleted; - if ($this->getEncoding()) { - $deleted->setEncoding($this->getEncoding()); - } - $deleted->setType($this->getType()); - return $deleted; - } - - /** - * Appends a Zend\Feed\Writer\Entry object representing a new entry/item - * the feed data container's internal group of entries. - * - * @param Entry $entry - * @return Feed - */ - public function addEntry(Entry $entry) - { - $this->entries[] = $entry; - return $this; - } - - /** - * Removes a specific indexed entry from the internal queue. Entries must be - * added to a feed container in order to be indexed. - * - * @param int $index - * @throws Exception\InvalidArgumentException - * @return Feed - */ - public function removeEntry($index) - { - if (!isset($this->entries[$index])) { - throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.'); - } - unset($this->entries[$index]); - - return $this; - } - - /** - * Retrieve a specific indexed entry from the internal queue. Entries must be - * added to a feed container in order to be indexed. - * - * @param int $index - * @throws Exception\InvalidArgumentException - */ - public function getEntry($index = 0) - { - if (isset($this->entries[$index])) { - return $this->entries[$index]; - } - throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.'); - } - - /** - * Orders all indexed entries by date, thus offering date ordered readable - * content where a parser (or Homo Sapien) ignores the generic rule that - * XML element order is irrelevant and has no intrinsic meaning. - * - * Using this method will alter the original indexation. - * - * @return Feed - */ - public function orderByDate() - { - /** - * Could do with some improvement for performance perhaps - */ - $timestamp = time(); - $entries = array(); - foreach ($this->entries as $entry) { - if ($entry->getDateModified()) { - $timestamp = (int) $entry->getDateModified()->getTimestamp(); - } elseif ($entry->getDateCreated()) { - $timestamp = (int) $entry->getDateCreated()->getTimestamp(); - } - $entries[$timestamp] = $entry; - } - krsort($entries, SORT_NUMERIC); - $this->entries = array_values($entries); - - return $this; - } - - /** - * Get the number of feed entries. - * Required by the Iterator interface. - * - * @return int - */ - public function count() - { - return count($this->entries); - } - - /** - * Return the current entry - * - * @return Entry - */ - public function current() - { - return $this->entries[$this->key()]; - } - - /** - * Return the current feed key - * - * @return mixed - */ - public function key() - { - return $this->entriesKey; - } - - /** - * Move the feed pointer forward - * - * @return void - */ - public function next() - { - ++$this->entriesKey; - } - - /** - * Reset the pointer in the feed object - * - * @return void - */ - public function rewind() - { - $this->entriesKey = 0; - } - - /** - * Check to see if the iterator is still valid - * - * @return bool - */ - public function valid() - { - return 0 <= $this->entriesKey && $this->entriesKey < $this->count(); - } - - /** - * Attempt to build and return the feed resulting from the data set - * - * @param string $type The feed type "rss" or "atom" to export as - * @param bool $ignoreExceptions - * @throws Exception\InvalidArgumentException - * @return string - */ - public function export($type, $ignoreExceptions = false) - { - $this->setType(strtolower($type)); - $type = ucfirst($this->getType()); - if ($type !== 'Rss' && $type !== 'Atom') { - throw new Exception\InvalidArgumentException('Invalid feed type specified: ' . $type . '.' - . ' Should be one of "rss" or "atom".'); - } - $renderClass = 'Zend\\Feed\\Writer\\Renderer\\Feed\\' . $type; - $renderer = new $renderClass($this); - if ($ignoreExceptions) { - $renderer->ignoreExceptions(); - } - return $renderer->render()->saveXml(); - } -} diff --git a/library/Zend/Feed/Writer/FeedFactory.php b/library/Zend/Feed/Writer/FeedFactory.php deleted file mode 100755 index 15e7a3468..000000000 --- a/library/Zend/Feed/Writer/FeedFactory.php +++ /dev/null @@ -1,127 +0,0 @@ - $value) { - // Setters - $key = static::convertKey($key); - $method = 'set' . $key; - if (method_exists($feed, $method)) { - switch ($method) { - case 'setfeedlink': - if (!is_array($value)) { - // Need an array - break; - } - if (!array_key_exists('link', $value) || !array_key_exists('type', $value)) { - // Need both keys to set this correctly - break; - } - $feed->setFeedLink($value['link'], $value['type']); - break; - default: - $feed->$method($value); - break; - } - continue; - } - - // Entries - if ('entries' == $key) { - static::createEntries($value, $feed); - continue; - } - } - - return $feed; - } - - /** - * Normalize a key - * - * @param string $key - * @return string - */ - protected static function convertKey($key) - { - $key = str_replace('_', '', strtolower($key)); - return $key; - } - - /** - * Create and attach entries to a feed - * - * @param array|Traversable $entries - * @param Feed $feed - * @throws Exception\InvalidArgumentException - * @return void - */ - protected static function createEntries($entries, Feed $feed) - { - if (!is_array($entries) && !$entries instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s::factory expects the "entries" value to be an array or Traversable; received "%s"', - get_called_class(), - (is_object($entries) ? get_class($entries) : gettype($entries)) - )); - } - - foreach ($entries as $data) { - if (!is_array($data) && !$data instanceof Traversable && !$data instanceof Entry) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects an array, Traversable, or Zend\Feed\Writer\Entry argument; received "%s"', - __METHOD__, - (is_object($data) ? get_class($data) : gettype($data)) - )); - } - - // Use case 1: Entry item - if ($data instanceof Entry) { - $feed->addEntry($data); - continue; - } - - // Use case 2: iterate item and populate entry - $entry = $feed->createEntry(); - foreach ($data as $key => $value) { - $key = static::convertKey($key); - $method = 'set' . $key; - if (!method_exists($entry, $method)) { - continue; - } - $entry->$method($value); - } - $feed->addEntry($entry); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/AbstractRenderer.php b/library/Zend/Feed/Writer/Renderer/AbstractRenderer.php deleted file mode 100755 index e10450198..000000000 --- a/library/Zend/Feed/Writer/Renderer/AbstractRenderer.php +++ /dev/null @@ -1,233 +0,0 @@ -container = $container; - $this->setType($container->getType()); - $this->_loadExtensions(); - } - - /** - * Save XML to string - * - * @return string - */ - public function saveXml() - { - return $this->getDomDocument()->saveXml(); - } - - /** - * Get DOM document - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->dom; - } - - /** - * Get document element from DOM - * - * @return DOMElement - */ - public function getElement() - { - return $this->getDomDocument()->documentElement; - } - - /** - * Get data container of items being rendered - * - * @return Writer\AbstractFeed - */ - public function getDataContainer() - { - return $this->container; - } - - /** - * Set feed encoding - * - * @param string $enc - * @return AbstractRenderer - */ - public function setEncoding($enc) - { - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Indicate whether or not to ignore exceptions - * - * @param bool $bool - * @return AbstractRenderer - * @throws Writer\Exception\InvalidArgumentException - */ - public function ignoreExceptions($bool = true) - { - if (!is_bool($bool)) { - throw new Writer\Exception\InvalidArgumentException('Invalid parameter: $bool. Should be TRUE or FALSE (defaults to TRUE if null)'); - } - $this->ignoreExceptions = $bool; - return $this; - } - - /** - * Get exception list - * - * @return array - */ - public function getExceptions() - { - return $this->exceptions; - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - */ - public function setType($type) - { - $this->type = $type; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Sets the absolute root element for the XML feed being generated. This - * helps simplify the appending of namespace declarations, but also ensures - * namespaces are added to the root element - not scattered across the entire - * XML file - may assist namespace unsafe parsers and looks pretty ;). - * - * @param DOMElement $root - */ - public function setRootElement(DOMElement $root) - { - $this->rootElement = $root; - } - - /** - * Retrieve the absolute root element for the XML feed being generated. - * - * @return DOMElement - */ - public function getRootElement() - { - return $this->rootElement; - } - - /** - * Load extensions from Zend\Feed\Writer\Writer - * - * @return void - */ - protected function _loadExtensions() - { - Writer\Writer::registerCoreExtensions(); - $manager = Writer\Writer::getExtensionManager(); - $all = Writer\Writer::getExtensions(); - if (stripos(get_class($this), 'entry')) { - $exts = $all['entryRenderer']; - } else { - $exts = $all['feedRenderer']; - } - foreach ($exts as $extension) { - $plugin = $manager->get($extension); - $plugin->setDataContainer($this->getDataContainer()); - $plugin->setEncoding($this->getEncoding()); - $this->extensions[$extension] = $plugin; - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Entry/Atom.php b/library/Zend/Feed/Writer/Renderer/Entry/Atom.php deleted file mode 100755 index 975aa7268..000000000 --- a/library/Zend/Feed/Writer/Renderer/Entry/Atom.php +++ /dev/null @@ -1,424 +0,0 @@ -dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $entry = $this->dom->createElementNS(Writer\Writer::NAMESPACE_ATOM_10, 'entry'); - $this->dom->appendChild($entry); - - $this->_setSource($this->dom, $entry); - $this->_setTitle($this->dom, $entry); - $this->_setDescription($this->dom, $entry); - $this->_setDateCreated($this->dom, $entry); - $this->_setDateModified($this->dom, $entry); - $this->_setLink($this->dom, $entry); - $this->_setId($this->dom, $entry); - $this->_setAuthors($this->dom, $entry); - $this->_setEnclosure($this->dom, $entry); - $this->_setContent($this->dom, $entry); - $this->_setCategories($this->dom, $entry); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $entry); - $ext->render(); - } - - return $this; - } - - /** - * Set entry title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one' - . ' atom:title element but a title has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $title = $dom->createElement('title'); - $root->appendChild($title); - $title->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection($this->getDataContainer()->getTitle()); - $title->appendChild($cdata); - } - - /** - * Set entry description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - return; // unless src content or base64 - } - $subtitle = $dom->createElement('summary'); - $root->appendChild($subtitle); - $subtitle->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection( - $this->getDataContainer()->getDescription() - ); - $subtitle->appendChild($cdata); - } - - /** - * Set date entry was modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one' - . ' atom:updated element but a modification date has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $updated = $dom->createElement('updated'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::ISO8601) - ); - $updated->appendChild($text); - } - - /** - * Set date entry was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - $el = $dom->createElement('published'); - $root->appendChild($el); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateCreated()->format(DateTime::ISO8601) - ); - $el->appendChild($text); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if ((!$authors || empty($authors))) { - /** - * This will actually trigger an Exception at the feed level if - * a feed level author is not set. - */ - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } - } - - /** - * Set entry enclosure - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setEnclosure(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getEnclosure(); - if ((!$data || empty($data))) { - return; - } - $enclosure = $this->dom->createElement('link'); - $enclosure->setAttribute('rel', 'enclosure'); - if (isset($data['type'])) { - $enclosure->setAttribute('type', $data['type']); - } - if (isset($data['length'])) { - $enclosure->setAttribute('length', $data['length']); - } - $enclosure->setAttribute('href', $data['uri']); - $root->appendChild($enclosure); - } - - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $link->setAttribute('rel', 'alternate'); - $link->setAttribute('type', 'text/html'); - $link->setAttribute('href', $this->getDataContainer()->getLink()); - } - - /** - * Set entry identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one ' - . 'atom:id element, or as an alternative, we can use the same ' - . 'value as atom:link however neither a suitable link nor an ' - . 'id have been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - if (!Uri::factory($this->getDataContainer()->getId())->isValid() - && !preg_match( - "#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#", - $this->getDataContainer()->getId()) - && !$this->_validateTagUri($this->getDataContainer()->getId()) - ) { - throw new Writer\Exception\InvalidArgumentException('Atom 1.0 IDs must be a valid URI/IRI'); - } - $id = $dom->createElement('id'); - $root->appendChild($id); - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - } - - /** - * Validate a URI using the tag scheme (RFC 4151) - * - * @param string $id - * @return bool - */ - protected function _validateTagUri($id) - { - if (preg_match('/^tag:(?P.*),(?P\d{4}-?\d{0,2}-?\d{0,2}):(?P.*)(.*:)*$/', $id, $matches)) { - $dvalid = false; - $date = $matches['date']; - $d6 = strtotime($date); - if ((strlen($date) == 4) && $date <= date('Y')) { - $dvalid = true; - } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) { - $dvalid = true; - } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) { - $dvalid = true; - } - $validator = new Validator\EmailAddress; - if ($validator->isValid($matches['name'])) { - $nvalid = true; - } else { - $nvalid = $validator->isValid('info@' . $matches['name']); - } - return $dvalid && $nvalid; - } - return false; - } - - /** - * Set entry content - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setContent(DOMDocument $dom, DOMElement $root) - { - $content = $this->getDataContainer()->getContent(); - if (!$content && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one ' - . 'atom:content element, or as an alternative, at least one link ' - . 'with a rel attribute of "alternate" to indicate an alternate ' - . 'method to consume the content.'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (!$content) { - return; - } - $element = $dom->createElement('content'); - $element->setAttribute('type', 'xhtml'); - $xhtmlElement = $this->_loadXhtml($content); - $xhtml = $dom->importNode($xhtmlElement, true); - $element->appendChild($xhtml); - $root->appendChild($element); - } - - /** - * Load a HTML string and attempt to normalise to XML - */ - protected function _loadXhtml($content) - { - if (class_exists('tidy', false)) { - $tidy = new \tidy; - $config = array( - 'output-xhtml' => true, - 'show-body-only' => true, - 'quote-nbsp' => false - ); - $encoding = str_replace('-', '', $this->getEncoding()); - $tidy->parseString($content, $config, $encoding); - $tidy->cleanRepair(); - $xhtml = (string) $tidy; - } else { - $xhtml = $content; - } - $xhtml = preg_replace(array( - "/(<[\/]?)([a-zA-Z]+)/" - ), '$1xhtml:$2', $xhtml); - $dom = new DOMDocument('1.0', $this->getEncoding()); - $dom->loadXML('' - . $xhtml . ''); - return $dom->documentElement; - } - - /** - * Set entry categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - $category->setAttribute('term', $cat['term']); - if (isset($cat['label'])) { - $category->setAttribute('label', $cat['label']); - } else { - $category->setAttribute('label', $cat['term']); - } - if (isset($cat['scheme'])) { - $category->setAttribute('scheme', $cat['scheme']); - } - $root->appendChild($category); - } - } - - /** - * Append Source element (Atom 1.0 Feed Metadata) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSource(DOMDocument $dom, DOMElement $root) - { - $source = $this->getDataContainer()->getSource(); - if (!$source) { - return; - } - $renderer = new Renderer\Feed\AtomSource($source); - $renderer->setType($this->getType()); - $element = $renderer->render()->getElement(); - $imported = $dom->importNode($element, true); - $root->appendChild($imported); - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Entry/Atom/Deleted.php b/library/Zend/Feed/Writer/Renderer/Entry/Atom/Deleted.php deleted file mode 100755 index 65ace00bd..000000000 --- a/library/Zend/Feed/Writer/Renderer/Entry/Atom/Deleted.php +++ /dev/null @@ -1,102 +0,0 @@ -dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $entry = $this->dom->createElement('at:deleted-entry'); - $this->dom->appendChild($entry); - - $entry->setAttribute('ref', $this->container->getReference()); - $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ISO8601)); - - $this->_setBy($this->dom, $entry); - $this->_setComment($this->dom, $entry); - - return $this; - } - - /** - * Set tombstone comment - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setComment(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getComment()) { - return; - } - $c = $dom->createElement('at:comment'); - $root->appendChild($c); - $c->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection($this->getDataContainer()->getComment()); - $c->appendChild($cdata); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBy(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getBy(); - if ((!$data || empty($data))) { - return; - } - $author = $this->dom->createElement('at:by'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Entry/AtomDeleted.php b/library/Zend/Feed/Writer/Renderer/Entry/AtomDeleted.php deleted file mode 100755 index 1ed4aa3d9..000000000 --- a/library/Zend/Feed/Writer/Renderer/Entry/AtomDeleted.php +++ /dev/null @@ -1,104 +0,0 @@ -dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $entry = $this->dom->createElement('at:deleted-entry'); - $this->dom->appendChild($entry); - - $entry->setAttribute('ref', $this->container->getReference()); - $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ISO8601)); - - $this->_setBy($this->dom, $entry); - $this->_setComment($this->dom, $entry); - - return $this; - } - - /** - * Set tombstone comment - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setComment(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getComment()) { - return; - } - $c = $dom->createElement('at:comment'); - $root->appendChild($c); - $c->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection($this->getDataContainer()->getComment()); - $c->appendChild($cdata); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBy(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getBy(); - if ((!$data || empty($data))) { - return; - } - $author = $this->dom->createElement('at:by'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Entry/Rss.php b/library/Zend/Feed/Writer/Renderer/Entry/Rss.php deleted file mode 100755 index 2338cdc21..000000000 --- a/library/Zend/Feed/Writer/Renderer/Entry/Rss.php +++ /dev/null @@ -1,329 +0,0 @@ -dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $this->dom->substituteEntities = false; - $entry = $this->dom->createElement('item'); - $this->dom->appendChild($entry); - - $this->_setTitle($this->dom, $entry); - $this->_setDescription($this->dom, $entry); - $this->_setDateCreated($this->dom, $entry); - $this->_setDateModified($this->dom, $entry); - $this->_setLink($this->dom, $entry); - $this->_setId($this->dom, $entry); - $this->_setAuthors($this->dom, $entry); - $this->_setEnclosure($this->dom, $entry); - $this->_setCommentLink($this->dom, $entry); - $this->_setCategories($this->dom, $entry); - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $entry); - $ext->render(); - } - - return $this; - } - - /** - * Set entry title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription() - && !$this->getDataContainer()->getTitle()) { - $message = 'RSS 2.0 entry elements SHOULD contain exactly one' - . ' title element but a title has not been set. In addition, there' - . ' is no description as required in the absence of a title.'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $title = $dom->createElement('title'); - $root->appendChild($title); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set entry description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription() - && !$this->getDataContainer()->getTitle()) { - $message = 'RSS 2.0 entry elements SHOULD contain exactly one' - . ' description element but a description has not been set. In' - . ' addition, there is no title element as required in the absence' - . ' of a description.'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (!$this->getDataContainer()->getDescription()) { - return; - } - $subtitle = $dom->createElement('description'); - $root->appendChild($subtitle); - $text = $dom->createCDATASection($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date entry was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - return; - } - - $updated = $dom->createElement('pubDate'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::RSS) - ); - $updated->appendChild($text); - } - - /** - * Set date entry was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if ((!$authors || empty($authors))) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $data['name']; - if (array_key_exists('email', $data)) { - $name = $data['email'] . ' (' . $data['name'] . ')'; - } - $text = $dom->createTextNode($name); - $author->appendChild($text); - $root->appendChild($author); - } - } - - /** - * Set entry enclosure - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setEnclosure(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getEnclosure(); - if ((!$data || empty($data))) { - return; - } - if (!isset($data['type'])) { - $exception = new Writer\Exception\InvalidArgumentException('Enclosure "type" is not set'); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (!isset($data['length'])) { - $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" is not set'); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (isset($data['length']) && (int) $data['length'] <= 0) { - $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" must be an integer' - . ' indicating the content\'s length in bytes'); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $enclosure = $this->dom->createElement('enclosure'); - $enclosure->setAttribute('type', $data['type']); - $enclosure->setAttribute('length', $data['length']); - $enclosure->setAttribute('url', $data['uri']); - $root->appendChild($enclosure); - } - - /** - * Set link to entry - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $text = $dom->createTextNode($this->getDataContainer()->getLink()); - $link->appendChild($text); - } - - /** - * Set entry identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - return; - } - - $id = $dom->createElement('guid'); - $root->appendChild($id); - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - if (!Uri::factory($this->getDataContainer()->getId())->isValid()) { - $id->setAttribute('isPermaLink', 'false'); - } - } - - /** - * Set link to entry comments - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentLink(DOMDocument $dom, DOMElement $root) - { - $link = $this->getDataContainer()->getCommentLink(); - if (!$link) { - return; - } - $clink = $this->dom->createElement('comments'); - $text = $dom->createTextNode($link); - $clink->appendChild($text); - $root->appendChild($clink); - } - - /** - * Set entry categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - if (isset($cat['scheme'])) { - $category->setAttribute('domain', $cat['scheme']); - } - $text = $dom->createCDATASection($cat['term']); - $category->appendChild($text); - $root->appendChild($category); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Feed/AbstractAtom.php b/library/Zend/Feed/Writer/Renderer/Feed/AbstractAtom.php deleted file mode 100755 index e7ad9f56b..000000000 --- a/library/Zend/Feed/Writer/Renderer/Feed/AbstractAtom.php +++ /dev/null @@ -1,403 +0,0 @@ -getDataContainer()->getLanguage()) { - $root->setAttribute('xml:lang', $this->getDataContainer() - ->getLanguage()); - } - } - - /** - * Set feed title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:title element but a title has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $title = $dom->createElement('title'); - $root->appendChild($title); - $title->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set feed description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - return; - } - $subtitle = $dom->createElement('subtitle'); - $root->appendChild($subtitle); - $subtitle->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date feed was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:updated element but a modification date has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $updated = $dom->createElement('updated'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::ISO8601) - ); - $updated->appendChild($text); - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - $this->getDataContainer()->setGenerator('Zend_Feed_Writer', - Version::VERSION, 'http://framework.zend.com'); - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } - - /** - * Set link to feed - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $link->setAttribute('rel', 'alternate'); - $link->setAttribute('type', 'text/html'); - $link->setAttribute('href', $this->getDataContainer()->getLink()); - } - - /** - * Set feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setFeedLinks(DOMDocument $dom, DOMElement $root) - { - $flinks = $this->getDataContainer()->getFeedLinks(); - if (!$flinks || !array_key_exists('atom', $flinks)) { - $message = 'Atom 1.0 feed elements SHOULD contain one atom:link ' - . 'element with a rel attribute value of "self". This is the ' - . 'preferred URI for retrieving Atom Feed Documents representing ' - . 'this Atom feed but a feed link has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - foreach ($flinks as $type => $href) { - $mime = 'application/' . strtolower($type) . '+xml'; - $flink = $dom->createElement('link'); - $root->appendChild($flink); - $flink->setAttribute('rel', 'self'); - $flink->setAttribute('type', $mime); - $flink->setAttribute('href', $href); - } - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if (!$authors || empty($authors)) { - /** - * Technically we should defer an exception until we can check - * that all entries contain an author. If any entry is missing - * an author, then a missing feed author element is invalid - */ - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } - } - - /** - * Set feed identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one ' - . 'atom:id element, or as an alternative, we can use the same ' - . 'value as atom:link however neither a suitable link nor an ' - . 'id have been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - $id = $dom->createElement('id'); - $root->appendChild($id); - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - } - - /** - * Set feed copyright - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCopyright(DOMDocument $dom, DOMElement $root) - { - $copyright = $this->getDataContainer()->getCopyright(); - if (!$copyright) { - return; - } - $copy = $dom->createElement('rights'); - $root->appendChild($copy); - $text = $dom->createTextNode($copyright); - $copy->appendChild($text); - } - - /** - * Set feed level logo (image) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getImage(); - if (!$image) { - return; - } - $img = $dom->createElement('logo'); - $root->appendChild($img); - $text = $dom->createTextNode($image['uri']); - $img->appendChild($text); - } - - /** - * Set date feed was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set base URL to feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBaseUrl(DOMDocument $dom, DOMElement $root) - { - $baseUrl = $this->getDataContainer()->getBaseUrl(); - if (!$baseUrl) { - return; - } - $root->setAttribute('xml:base', $baseUrl); - } - - /** - * Set hubs to which this feed pushes - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setHubs(DOMDocument $dom, DOMElement $root) - { - $hubs = $this->getDataContainer()->getHubs(); - if (!$hubs) { - return; - } - foreach ($hubs as $hubUrl) { - $hub = $dom->createElement('link'); - $hub->setAttribute('rel', 'hub'); - $hub->setAttribute('href', $hubUrl); - $root->appendChild($hub); - } - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - $category->setAttribute('term', $cat['term']); - if (isset($cat['label'])) { - $category->setAttribute('label', $cat['label']); - } else { - $category->setAttribute('label', $cat['term']); - } - if (isset($cat['scheme'])) { - $category->setAttribute('scheme', $cat['scheme']); - } - $root->appendChild($category); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Feed/Atom.php b/library/Zend/Feed/Writer/Renderer/Feed/Atom.php deleted file mode 100755 index 87b6b94ac..000000000 --- a/library/Zend/Feed/Writer/Renderer/Feed/Atom.php +++ /dev/null @@ -1,96 +0,0 @@ -container->getEncoding()) { - $this->container->setEncoding('UTF-8'); - } - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $root = $this->dom->createElementNS( - Writer\Writer::NAMESPACE_ATOM_10, 'feed' - ); - $this->setRootElement($root); - $this->dom->appendChild($root); - $this->_setLanguage($this->dom, $root); - $this->_setBaseUrl($this->dom, $root); - $this->_setTitle($this->dom, $root); - $this->_setDescription($this->dom, $root); - $this->_setImage($this->dom, $root); - $this->_setDateCreated($this->dom, $root); - $this->_setDateModified($this->dom, $root); - $this->_setGenerator($this->dom, $root); - $this->_setLink($this->dom, $root); - $this->_setFeedLinks($this->dom, $root); - $this->_setId($this->dom, $root); - $this->_setAuthors($this->dom, $root); - $this->_setCopyright($this->dom, $root); - $this->_setCategories($this->dom, $root); - $this->_setHubs($this->dom, $root); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $root); - $ext->render(); - } - - foreach ($this->container as $entry) { - if ($this->getDataContainer()->getEncoding()) { - $entry->setEncoding($this->getDataContainer()->getEncoding()); - } - if ($entry instanceof Writer\Entry) { - $renderer = new Renderer\Entry\Atom($entry); - } else { - if (!$this->dom->documentElement->hasAttribute('xmlns:at')) { - $this->dom->documentElement->setAttribute( - 'xmlns:at', 'http://purl.org/atompub/tombstones/1.0' - ); - } - $renderer = new Renderer\Entry\AtomDeleted($entry); - } - if ($this->ignoreExceptions === true) { - $renderer->ignoreExceptions(); - } - $renderer->setType($this->getType()); - $renderer->setRootElement($this->dom->documentElement); - $renderer->render(); - $element = $renderer->getElement(); - $imported = $this->dom->importNode($element, true); - $root->appendChild($imported); - } - return $this; - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Feed/Atom/AbstractAtom.php b/library/Zend/Feed/Writer/Renderer/Feed/Atom/AbstractAtom.php deleted file mode 100755 index 379cd5c9f..000000000 --- a/library/Zend/Feed/Writer/Renderer/Feed/Atom/AbstractAtom.php +++ /dev/null @@ -1,400 +0,0 @@ -getDataContainer()->getLanguage()) { - $root->setAttribute('xml:lang', $this->getDataContainer() - ->getLanguage()); - } - } - - /** - * Set feed title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:title element but a title has not been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $title = $dom->createElement('title'); - $root->appendChild($title); - $title->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set feed description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - return; - } - $subtitle = $dom->createElement('subtitle'); - $root->appendChild($subtitle); - $subtitle->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date feed was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:updated element but a modification date has not been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $updated = $dom->createElement('updated'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::ISO8601) - ); - $updated->appendChild($text); - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - $this->getDataContainer()->setGenerator('Zend_Feed_Writer', - Version::VERSION, 'http://framework.zend.com'); - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } - - /** - * Set link to feed - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $link->setAttribute('rel', 'alternate'); - $link->setAttribute('type', 'text/html'); - $link->setAttribute('href', $this->getDataContainer()->getLink()); - } - - /** - * Set feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setFeedLinks(DOMDocument $dom, DOMElement $root) - { - $flinks = $this->getDataContainer()->getFeedLinks(); - if (!$flinks || !array_key_exists('atom', $flinks)) { - $message = 'Atom 1.0 feed elements SHOULD contain one atom:link ' - . 'element with a rel attribute value of "self". This is the ' - . 'preferred URI for retrieving Atom Feed Documents representing ' - . 'this Atom feed but a feed link has not been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - foreach ($flinks as $type => $href) { - $mime = 'application/' . strtolower($type) . '+xml'; - $flink = $dom->createElement('link'); - $root->appendChild($flink); - $flink->setAttribute('rel', 'self'); - $flink->setAttribute('type', $mime); - $flink->setAttribute('href', $href); - } - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if (!$authors || empty($authors)) { - /** - * Technically we should defer an exception until we can check - * that all entries contain an author. If any entry is missing - * an author, then a missing feed author element is invalid - */ - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } - } - - /** - * Set feed identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one ' - . 'atom:id element, or as an alternative, we can use the same ' - . 'value as atom:link however neither a suitable link nor an ' - . 'id have been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - $id = $dom->createElement('id'); - $root->appendChild($id); - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - } - - /** - * Set feed copyright - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCopyright(DOMDocument $dom, DOMElement $root) - { - $copyright = $this->getDataContainer()->getCopyright(); - if (!$copyright) { - return; - } - $copy = $dom->createElement('rights'); - $root->appendChild($copy); - $text = $dom->createTextNode($copyright); - $copy->appendChild($text); - } - /** - * Set feed level logo (image) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getImage(); - if (!$image) { - return; - } - $img = $dom->createElement('logo'); - $root->appendChild($img); - $text = $dom->createTextNode($image['uri']); - $img->appendChild($text); - } - - - /** - * Set date feed was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set base URL to feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBaseUrl(DOMDocument $dom, DOMElement $root) - { - $baseUrl = $this->getDataContainer()->getBaseUrl(); - if (!$baseUrl) { - return; - } - $root->setAttribute('xml:base', $baseUrl); - } - - /** - * Set hubs to which this feed pushes - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setHubs(DOMDocument $dom, DOMElement $root) - { - $hubs = $this->getDataContainer()->getHubs(); - if (!$hubs) { - return; - } - foreach ($hubs as $hubUrl) { - $hub = $dom->createElement('link'); - $hub->setAttribute('rel', 'hub'); - $hub->setAttribute('href', $hubUrl); - $root->appendChild($hub); - } - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - $category->setAttribute('term', $cat['term']); - if (isset($cat['label'])) { - $category->setAttribute('label', $cat['label']); - } else { - $category->setAttribute('label', $cat['term']); - } - if (isset($cat['scheme'])) { - $category->setAttribute('scheme', $cat['scheme']); - } - $root->appendChild($category); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Feed/Atom/Source.php b/library/Zend/Feed/Writer/Renderer/Feed/Atom/Source.php deleted file mode 100755 index 30f576a1f..000000000 --- a/library/Zend/Feed/Writer/Renderer/Feed/Atom/Source.php +++ /dev/null @@ -1,92 +0,0 @@ -container->getEncoding()) { - $this->container->setEncoding('UTF-8'); - } - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $root = $this->dom->createElement('source'); - $this->setRootElement($root); - $this->dom->appendChild($root); - $this->_setLanguage($this->dom, $root); - $this->_setBaseUrl($this->dom, $root); - $this->_setTitle($this->dom, $root); - $this->_setDescription($this->dom, $root); - $this->_setDateCreated($this->dom, $root); - $this->_setDateModified($this->dom, $root); - $this->_setGenerator($this->dom, $root); - $this->_setLink($this->dom, $root); - $this->_setFeedLinks($this->dom, $root); - $this->_setId($this->dom, $root); - $this->_setAuthors($this->dom, $root); - $this->_setCopyright($this->dom, $root); - $this->_setCategories($this->dom, $root); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDomDocument($this->getDomDocument(), $root); - $ext->render(); - } - return $this; - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - return; - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Feed/AtomSource.php b/library/Zend/Feed/Writer/Renderer/Feed/AtomSource.php deleted file mode 100755 index bdadd4db0..000000000 --- a/library/Zend/Feed/Writer/Renderer/Feed/AtomSource.php +++ /dev/null @@ -1,94 +0,0 @@ -container->getEncoding()) { - $this->container->setEncoding('UTF-8'); - } - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $root = $this->dom->createElement('source'); - $this->setRootElement($root); - $this->dom->appendChild($root); - $this->_setLanguage($this->dom, $root); - $this->_setBaseUrl($this->dom, $root); - $this->_setTitle($this->dom, $root); - $this->_setDescription($this->dom, $root); - $this->_setDateCreated($this->dom, $root); - $this->_setDateModified($this->dom, $root); - $this->_setGenerator($this->dom, $root); - $this->_setLink($this->dom, $root); - $this->_setFeedLinks($this->dom, $root); - $this->_setId($this->dom, $root); - $this->_setAuthors($this->dom, $root); - $this->_setCopyright($this->dom, $root); - $this->_setCategories($this->dom, $root); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $root); - $ext->render(); - } - return $this; - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - return; - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/Feed/Rss.php b/library/Zend/Feed/Writer/Renderer/Feed/Rss.php deleted file mode 100755 index 75c502e32..000000000 --- a/library/Zend/Feed/Writer/Renderer/Feed/Rss.php +++ /dev/null @@ -1,484 +0,0 @@ -dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $this->dom->substituteEntities = false; - $rss = $this->dom->createElement('rss'); - $this->setRootElement($rss); - $rss->setAttribute('version', '2.0'); - - $channel = $this->dom->createElement('channel'); - $rss->appendChild($channel); - $this->dom->appendChild($rss); - $this->_setLanguage($this->dom, $channel); - $this->_setBaseUrl($this->dom, $channel); - $this->_setTitle($this->dom, $channel); - $this->_setDescription($this->dom, $channel); - $this->_setImage($this->dom, $channel); - $this->_setDateCreated($this->dom, $channel); - $this->_setDateModified($this->dom, $channel); - $this->_setLastBuildDate($this->dom, $channel); - $this->_setGenerator($this->dom, $channel); - $this->_setLink($this->dom, $channel); - $this->_setAuthors($this->dom, $channel); - $this->_setCopyright($this->dom, $channel); - $this->_setCategories($this->dom, $channel); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $channel); - $ext->render(); - } - - foreach ($this->container as $entry) { - if ($this->getDataContainer()->getEncoding()) { - $entry->setEncoding($this->getDataContainer()->getEncoding()); - } - if ($entry instanceof Writer\Entry) { - $renderer = new Renderer\Entry\Rss($entry); - } else { - continue; - } - if ($this->ignoreExceptions === true) { - $renderer->ignoreExceptions(); - } - $renderer->setType($this->getType()); - $renderer->setRootElement($this->dom->documentElement); - $renderer->render(); - $element = $renderer->getElement(); - $imported = $this->dom->importNode($element, true); - $channel->appendChild($imported); - } - return $this; - } - - /** - * Set feed language - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLanguage(DOMDocument $dom, DOMElement $root) - { - $lang = $this->getDataContainer()->getLanguage(); - if (!$lang) { - return; - } - $language = $dom->createElement('language'); - $root->appendChild($language); - $language->nodeValue = $lang; - } - - /** - * Set feed title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'RSS 2.0 feed elements MUST contain exactly one' - . ' title element but a title has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $title = $dom->createElement('title'); - $root->appendChild($title); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set feed description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - $message = 'RSS 2.0 feed elements MUST contain exactly one' - . ' description element but one has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $subtitle = $dom->createElement('description'); - $root->appendChild($subtitle); - $text = $dom->createTextNode($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date feed was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - return; - } - - $updated = $dom->createElement('pubDate'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::RSS) - ); - $updated->appendChild($text); - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - $this->getDataContainer()->setGenerator('Zend_Feed_Writer', - Version::VERSION, 'http://framework.zend.com'); - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $name = $gdata['name']; - if (array_key_exists('version', $gdata)) { - $name .= ' ' . $gdata['version']; - } - if (array_key_exists('uri', $gdata)) { - $name .= ' (' . $gdata['uri'] . ')'; - } - $text = $dom->createTextNode($name); - $generator->appendChild($text); - } - - /** - * Set link to feed - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - $value = $this->getDataContainer()->getLink(); - if (!$value) { - $message = 'RSS 2.0 feed elements MUST contain exactly one' - . ' link element but one has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $text = $dom->createTextNode($value); - $link->appendChild($text); - if (!Uri::factory($value)->isValid()) { - $link->setAttribute('isPermaLink', 'false'); - } - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $data['name']; - if (array_key_exists('email', $data)) { - $name = $data['email'] . ' (' . $data['name'] . ')'; - } - $text = $dom->createTextNode($name); - $author->appendChild($text); - $root->appendChild($author); - } - } - - /** - * Set feed copyright - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCopyright(DOMDocument $dom, DOMElement $root) - { - $copyright = $this->getDataContainer()->getCopyright(); - if (!$copyright) { - return; - } - $copy = $dom->createElement('copyright'); - $root->appendChild($copy); - $text = $dom->createTextNode($copyright); - $copy->appendChild($text); - } - - /** - * Set feed channel image - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getImage(); - if (!$image) { - return; - } - - if (!isset($image['title']) || empty($image['title']) - || !is_string($image['title']) - ) { - $message = 'RSS 2.0 feed images must include a title'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (empty($image['link']) || !is_string($image['link']) - || !Uri::factory($image['link'])->isValid() - ) { - $message = 'Invalid parameter: parameter \'link\'' - . ' must be a non-empty string and valid URI/IRI'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $img = $dom->createElement('image'); - $root->appendChild($img); - - $url = $dom->createElement('url'); - $text = $dom->createTextNode($image['uri']); - $url->appendChild($text); - - $title = $dom->createElement('title'); - $text = $dom->createTextNode($image['title']); - $title->appendChild($text); - - $link = $dom->createElement('link'); - $text = $dom->createTextNode($image['link']); - $link->appendChild($text); - - $img->appendChild($url); - $img->appendChild($title); - $img->appendChild($link); - - if (isset($image['height'])) { - if (!ctype_digit((string) $image['height']) || $image['height'] > 400) { - $message = 'Invalid parameter: parameter \'height\'' - . ' must be an integer not exceeding 400'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $height = $dom->createElement('height'); - $text = $dom->createTextNode($image['height']); - $height->appendChild($text); - $img->appendChild($height); - } - if (isset($image['width'])) { - if (!ctype_digit((string) $image['width']) || $image['width'] > 144) { - $message = 'Invalid parameter: parameter \'width\'' - . ' must be an integer not exceeding 144'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $width = $dom->createElement('width'); - $text = $dom->createTextNode($image['width']); - $width->appendChild($text); - $img->appendChild($width); - } - if (isset($image['description'])) { - if (empty($image['description']) || !is_string($image['description'])) { - $message = 'Invalid parameter: parameter \'description\'' - . ' must be a non-empty string'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $desc = $dom->createElement('description'); - $text = $dom->createTextNode($image['description']); - $desc->appendChild($text); - $img->appendChild($desc); - } - } - - /** - * Set date feed was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set date feed last build date - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLastBuildDate(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLastBuildDate()) { - return; - } - - $lastBuildDate = $dom->createElement('lastBuildDate'); - $root->appendChild($lastBuildDate); - $text = $dom->createTextNode( - $this->getDataContainer()->getLastBuildDate()->format(DateTime::RSS) - ); - $lastBuildDate->appendChild($text); - } - - /** - * Set base URL to feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBaseUrl(DOMDocument $dom, DOMElement $root) - { - $baseUrl = $this->getDataContainer()->getBaseUrl(); - if (!$baseUrl) { - return; - } - $root->setAttribute('xml:base', $baseUrl); - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - if (isset($cat['scheme'])) { - $category->setAttribute('domain', $cat['scheme']); - } - $text = $dom->createTextNode($cat['term']); - $category->appendChild($text); - $root->appendChild($category); - } - } -} diff --git a/library/Zend/Feed/Writer/Renderer/RendererInterface.php b/library/Zend/Feed/Writer/Renderer/RendererInterface.php deleted file mode 100755 index b2e0e00a3..000000000 --- a/library/Zend/Feed/Writer/Renderer/RendererInterface.php +++ /dev/null @@ -1,100 +0,0 @@ - array(), - 'feed' => array(), - 'entryRenderer' => array(), - 'feedRenderer' => array(), - ); - - /** - * Set plugin loader for use with Extensions - * - * @param ExtensionManagerInterface - */ - public static function setExtensionManager(ExtensionManagerInterface $extensionManager) - { - static::$extensionManager = $extensionManager; - } - - /** - * Get plugin manager for use with Extensions - * - * @return ExtensionManagerInterface - */ - public static function getExtensionManager() - { - if (!isset(static::$extensionManager)) { - static::setExtensionManager(new ExtensionManager()); - } - return static::$extensionManager; - } - - /** - * Register an Extension by name - * - * @param string $name - * @return void - * @throws Exception\RuntimeException if unable to resolve Extension class - */ - public static function registerExtension($name) - { - $feedName = $name . '\Feed'; - $entryName = $name . '\Entry'; - $feedRendererName = $name . '\Renderer\Feed'; - $entryRendererName = $name . '\Renderer\Entry'; - $manager = static::getExtensionManager(); - if (static::isRegistered($name)) { - if ($manager->has($feedName) - || $manager->has($entryName) - || $manager->has($feedRendererName) - || $manager->has($entryRendererName) - ) { - return; - } - } - if (!$manager->has($feedName) - && !$manager->has($entryName) - && !$manager->has($feedRendererName) - && !$manager->has($entryRendererName) - ) { - throw new Exception\RuntimeException('Could not load extension: ' . $name - . 'using Plugin Loader. Check prefix paths are configured and extension exists.'); - } - if ($manager->has($feedName)) { - static::$extensions['feed'][] = $feedName; - } - if ($manager->has($entryName)) { - static::$extensions['entry'][] = $entryName; - } - if ($manager->has($feedRendererName)) { - static::$extensions['feedRenderer'][] = $feedRendererName; - } - if ($manager->has($entryRendererName)) { - static::$extensions['entryRenderer'][] = $entryRendererName; - } - } - - /** - * Is a given named Extension registered? - * - * @param string $extensionName - * @return bool - */ - public static function isRegistered($extensionName) - { - $feedName = $extensionName . '\Feed'; - $entryName = $extensionName . '\Entry'; - $feedRendererName = $extensionName . '\Renderer\Feed'; - $entryRendererName = $extensionName . '\Renderer\Entry'; - if (in_array($feedName, static::$extensions['feed']) - || in_array($entryName, static::$extensions['entry']) - || in_array($feedRendererName, static::$extensions['feedRenderer']) - || in_array($entryRendererName, static::$extensions['entryRenderer']) - ) { - return true; - } - return false; - } - - /** - * Get a list of extensions - * - * @return array - */ - public static function getExtensions() - { - return static::$extensions; - } - - /** - * Reset class state to defaults - * - * @return void - */ - public static function reset() - { - static::$extensionManager = null; - static::$extensions = array( - 'entry' => array(), - 'feed' => array(), - 'entryRenderer' => array(), - 'feedRenderer' => array(), - ); - } - - /** - * Register core (default) extensions - * - * @return void - */ - public static function registerCoreExtensions() - { - static::registerExtension('DublinCore'); - static::registerExtension('Content'); - static::registerExtension('Atom'); - static::registerExtension('Slash'); - static::registerExtension('WellFormedWeb'); - static::registerExtension('Threading'); - static::registerExtension('ITunes'); - } - - public static function lcfirst($str) - { - $str[0] = strtolower($str[0]); - return $str; - } -} diff --git a/library/Zend/Feed/composer.json b/library/Zend/Feed/composer.json deleted file mode 100755 index 0c4d7dc18..000000000 --- a/library/Zend/Feed/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "zendframework/zend-feed", - "description": "provides functionality for consuming RSS and Atom feeds", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "feed" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Feed\\": "" - } - }, - "target-dir": "Zend/Feed", - "require": { - "php": ">=5.3.23", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-db": "self.version", - "zendframework/zend-cache": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version" - }, - "suggest": { - "zendframework/zend-cache": "Zend\\Cache component", - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations", - "zendframework/zend-validator": "Zend\\Validator component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/File/CONTRIBUTING.md b/library/Zend/File/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/File/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/File/ClassFileLocator.php b/library/Zend/File/ClassFileLocator.php deleted file mode 100755 index 9ef7821a6..000000000 --- a/library/Zend/File/ClassFileLocator.php +++ /dev/null @@ -1,160 +0,0 @@ -setInfoClass('Zend\File\PhpClassFile'); - } - - /** - * Filter for files containing PHP classes, interfaces, or abstracts - * - * @return bool - */ - public function accept() - { - $file = $this->getInnerIterator()->current(); - // If we somehow have something other than an SplFileInfo object, just - // return false - if (!$file instanceof SplFileInfo) { - return false; - } - - // If we have a directory, it's not a file, so return false - if (!$file->isFile()) { - return false; - } - - // If not a PHP file, skip - if ($file->getBasename('.php') == $file->getBasename()) { - return false; - } - - $contents = file_get_contents($file->getRealPath()); - $tokens = token_get_all($contents); - $count = count($tokens); - $t_trait = defined('T_TRAIT') ? T_TRAIT : -1; // For preserve PHP 5.3 compatibility - for ($i = 0; $i < $count; $i++) { - $token = $tokens[$i]; - if (!is_array($token)) { - // single character token found; skip - $i++; - continue; - } - switch ($token[0]) { - case T_NAMESPACE: - // Namespace found; grab it for later - $namespace = ''; - for ($i++; $i < $count; $i++) { - $token = $tokens[$i]; - if (is_string($token)) { - if (';' === $token) { - $saveNamespace = false; - break; - } - if ('{' === $token) { - $saveNamespace = true; - break; - } - continue; - } - list($type, $content, $line) = $token; - switch ($type) { - case T_STRING: - case T_NS_SEPARATOR: - $namespace .= $content; - break; - } - } - if ($saveNamespace) { - $savedNamespace = $namespace; - } - break; - case $t_trait: - case T_CLASS: - case T_INTERFACE: - // Abstract class, class, interface or trait found - - // Get the classname - for ($i++; $i < $count; $i++) { - $token = $tokens[$i]; - if (is_string($token)) { - continue; - } - list($type, $content, $line) = $token; - if (T_STRING == $type) { - // If a classname was found, set it in the object, and - // return boolean true (found) - if (!isset($namespace) || null === $namespace) { - if (isset($saveNamespace) && $saveNamespace) { - $namespace = $savedNamespace; - } else { - $namespace = null; - } - } - $class = (null === $namespace) ? $content : $namespace . '\\' . $content; - $file->addClass($class); - if ($namespace) { - $file->addNamespace($namespace); - } - $namespace = null; - break; - } - } - break; - default: - break; - } - } - $classes = $file->getClasses(); - if (!empty($classes)) { - return true; - } - // No class-type tokens found; return false - return false; - } -} diff --git a/library/Zend/File/Exception/BadMethodCallException.php b/library/Zend/File/Exception/BadMethodCallException.php deleted file mode 100755 index 04be86936..000000000 --- a/library/Zend/File/Exception/BadMethodCallException.php +++ /dev/null @@ -1,15 +0,0 @@ -classes; - } - - /** - * Get namespaces - * - * @return array - */ - public function getNamespaces() - { - return $this->namespaces; - } - - /** - * Add class - * - * @param string $class - * @return self - */ - public function addClass($class) - { - $this->classes[] = $class; - return $this; - } - - /** - * Add namespace - * - * @param string $namespace - * @return self - */ - public function addNamespace($namespace) - { - if (in_array($namespace, $this->namespaces)) { - return $this; - } - $this->namespaces[] = $namespace; - return $this; - } -} diff --git a/library/Zend/File/README.md b/library/Zend/File/README.md deleted file mode 100755 index 8e1ab787f..000000000 --- a/library/Zend/File/README.md +++ /dev/null @@ -1,15 +0,0 @@ -File Component from ZF2 -======================= - -This is the File component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/File/Transfer/Adapter/AbstractAdapter.php b/library/Zend/File/Transfer/Adapter/AbstractAdapter.php deleted file mode 100755 index a46935f69..000000000 --- a/library/Zend/File/Transfer/Adapter/AbstractAdapter.php +++ /dev/null @@ -1,1504 +0,0 @@ - array( - Form is the name within the form or, if not set the filename - * name, - Original name of this file - * type, - Mime type of this file - * size, - Filesize in bytes - * tmp_name, - Internally temporary filename for uploaded files - * error, - Error which has occurred - * destination, - New destination for this file - * validators, - Set validator names for this file - * files - Set file names for this file - * )) - * - * @var array - */ - protected $files = array(); - - /** - * TMP directory - * @var string - */ - protected $tmpDir; - - /** - * Available options for file transfers - */ - protected $options = array( - 'ignoreNoFile' => false, - 'useByteString' => true, - 'magicFile' => null, - 'detectInfos' => true, - ); - - /** - * Send file - * - * @param mixed $options - * @return bool - */ - abstract public function send($options = null); - - /** - * Receive file - * - * @param mixed $options - * @return bool - */ - abstract public function receive($options = null); - - /** - * Is file sent? - * - * @param array|string|null $files - * @return bool - */ - abstract public function isSent($files = null); - - /** - * Is file received? - * - * @param array|string|null $files - * @return bool - */ - abstract public function isReceived($files = null); - - /** - * Has a file been uploaded ? - * - * @param array|string|null $files - * @return bool - */ - abstract public function isUploaded($files = null); - - /** - * Has the file been filtered ? - * - * @param array|string|null $files - * @return bool - */ - abstract public function isFiltered($files = null); - - /** - * Adds one or more files - * - * @param string|array $file File to add - * @param string|array $validator Validators to use for this file, must be set before - * @param string|array $filter Filters to use for this file, must be set before - * @return AbstractAdapter - * @throws Exception Not implemented - */ - //abstract public function addFile($file, $validator = null, $filter = null); - - /** - * Returns all set types - * - * @return array List of set types - * @throws Exception Not implemented - */ - //abstract public function getType(); - - /** - * Adds one or more type of files - * - * @param string|array $type Type of files to add - * @param string|array $validator Validators to use for this file, must be set before - * @param string|array $filter Filters to use for this file, must be set before - * @return AbstractAdapter - * @throws Exception Not implemented - */ - //abstract public function addType($type, $validator = null, $filter = null); - - /** - * Returns all set files - * - * @return array List of set files - */ - //abstract public function getFile(); - - /** - * Set the filter plugin manager instance - * - * @param FilterPluginManager $filterManager - * @return AbstractAdapter - */ - public function setFilterManager(FilterPluginManager $filterManager) - { - $this->filterManager = $filterManager; - return $this; - } - - /** - * Get the filter plugin manager instance - * - * @return FilterPluginManager - */ - public function getFilterManager() - { - if (!$this->filterManager instanceof FilterPluginManager) { - $this->setFilterManager(new FilterPluginManager()); - } - return $this->filterManager; - } - - /** - * Set the validator plugin manager instance - * - * @param ValidatorPluginManager $validatorManager - * @return AbstractAdapter - */ - public function setValidatorManager(ValidatorPluginManager $validatorManager) - { - $this->validatorManager = $validatorManager; - return $this; - } - - /** - * Get the validator plugin manager instance - * - * @return ValidatorPluginManager - */ - public function getValidatorManager() - { - if (!$this->validatorManager instanceof ValidatorPluginManager) { - $this->setValidatorManager(new ValidatorPluginManager()); - } - return $this->validatorManager; - } - - /** - * Adds a new validator for this class - * - * @param string|Validator\ValidatorInterface $validator Type of validator to add - * @param bool $breakChainOnFailure If the validation chain should stop a failure - * @param string|array $options Options to set for the validator - * @param string|array $files Files to limit this validator to - * @return AbstractAdapter - * @throws Exception\InvalidArgumentException for invalid type - */ - public function addValidator($validator, $breakChainOnFailure = false, $options = null, $files = null) - { - if (is_string($validator)) { - $validator = $this->getValidatorManager()->get($validator, $options); - if (is_array($options) && isset($options['messages'])) { - if (is_array($options['messages'])) { - $validator->setMessages($options['messages']); - } elseif (is_string($options['messages'])) { - $validator->setMessage($options['messages']); - } - - unset($options['messages']); - } - } - - if (!$validator instanceof Validator\ValidatorInterface) { - throw new Exception\InvalidArgumentException( - 'Invalid validator provided to addValidator; ' . - 'must be string or Zend\Validator\ValidatorInterface' - ); - } - - $name = get_class($validator); - - $this->validators[$name] = $validator; - $this->break[$name] = $breakChainOnFailure; - $files = $this->getFiles($files, true, true); - foreach ($files as $file) { - if ($name == 'NotEmpty') { - $temp = $this->files[$file]['validators']; - $this->files[$file]['validators'] = array($name); - $this->files[$file]['validators'] += $temp; - } else { - $this->files[$file]['validators'][] = $name; - } - - $this->files[$file]['validated'] = false; - } - - return $this; - } - - /** - * Add Multiple validators at once - * - * @param array $validators - * @param string|array $files - * @return AbstractAdapter - * @throws Exception\InvalidArgumentException for invalid type - */ - public function addValidators(array $validators, $files = null) - { - foreach ($validators as $name => $validatorInfo) { - if ($validatorInfo instanceof Validator\ValidatorInterface) { - $this->addValidator($validatorInfo, null, null, $files); - } elseif (is_string($validatorInfo)) { - if (!is_int($name)) { - $this->addValidator($name, null, $validatorInfo, $files); - } else { - $this->addValidator($validatorInfo, null, null, $files); - } - } elseif (is_array($validatorInfo)) { - $argc = count($validatorInfo); - $breakChainOnFailure = false; - $options = array(); - if (isset($validatorInfo['validator'])) { - $validator = $validatorInfo['validator']; - if (isset($validatorInfo['breakChainOnFailure'])) { - $breakChainOnFailure = $validatorInfo['breakChainOnFailure']; - } - - if (isset($validatorInfo['options'])) { - $options = $validatorInfo['options']; - } - - $this->addValidator($validator, $breakChainOnFailure, $options, $files); - } else { - if (is_string($name)) { - $validator = $name; - $options = $validatorInfo; - $this->addValidator($validator, $breakChainOnFailure, $options, $files); - } else { - $file = $files; - switch (true) { - case (0 == $argc): - break; - case (1 <= $argc): - $validator = array_shift($validatorInfo); - case (2 <= $argc): - $breakChainOnFailure = array_shift($validatorInfo); - case (3 <= $argc): - $options = array_shift($validatorInfo); - case (4 <= $argc): - if (!empty($validatorInfo)) { - $file = array_shift($validatorInfo); - } - default: - $this->addValidator($validator, $breakChainOnFailure, $options, $file); - break; - } - } - } - } else { - throw new Exception\InvalidArgumentException('Invalid validator passed to addValidators()'); - } - } - - return $this; - } - - /** - * Sets a validator for the class, erasing all previous set - * - * @param array $validators Validators to set - * @param string|array $files Files to limit this validator to - * @return AbstractAdapter - */ - public function setValidators(array $validators, $files = null) - { - $this->clearValidators(); - return $this->addValidators($validators, $files); - } - - /** - * Determine if a given validator has already been registered - * - * @param string $name - * @return bool - */ - public function hasValidator($name) - { - return (false !== $this->getValidatorIdentifier($name)); - } - - /** - * Retrieve individual validator - * - * @param string $name - * @return Validator\ValidatorInterface|null - */ - public function getValidator($name) - { - if (false === ($identifier = $this->getValidatorIdentifier($name))) { - return null; - } - return $this->validators[$identifier]; - } - - /** - * Returns all set validators - * - * @param string|array $files (Optional) Returns the validator for this files - * @return null|array List of set validators - */ - public function getValidators($files = null) - { - if ($files == null) { - return $this->validators; - } - - $files = $this->getFiles($files, true, true); - $validators = array(); - foreach ($files as $file) { - if (!empty($this->files[$file]['validators'])) { - $validators += $this->files[$file]['validators']; - } - } - - $validators = array_unique($validators); - $result = array(); - foreach ($validators as $validator) { - $result[$validator] = $this->validators[$validator]; - } - - return $result; - } - - /** - * Remove an individual validator - * - * @param string $name - * @return AbstractAdapter - */ - public function removeValidator($name) - { - if (false === ($key = $this->getValidatorIdentifier($name))) { - return $this; - } - - unset($this->validators[$key]); - foreach (array_keys($this->files) as $file) { - if (empty($this->files[$file]['validators'])) { - continue; - } - - $index = array_search($key, $this->files[$file]['validators']); - if ($index === false) { - continue; - } - - unset($this->files[$file]['validators'][$index]); - $this->files[$file]['validated'] = false; - } - - return $this; - } - - /** - * Remove all validators - * - * @return AbstractAdapter - */ - public function clearValidators() - { - $this->validators = array(); - foreach (array_keys($this->files) as $file) { - $this->files[$file]['validators'] = array(); - $this->files[$file]['validated'] = false; - } - - return $this; - } - - /** - * Sets Options for adapters - * - * @param array $options Options to set - * @param array $files (Optional) Files to set the options for - * @return AbstractAdapter - */ - public function setOptions($options = array(), $files = null) - { - $file = $this->getFiles($files, false, true); - - if (is_array($options)) { - if (empty($file)) { - $this->options = array_merge($this->options, $options); - } - - foreach ($options as $name => $value) { - foreach ($file as $key => $content) { - switch ($name) { - case 'magicFile' : - $this->files[$key]['options'][$name] = (string) $value; - break; - - case 'ignoreNoFile' : - case 'useByteString' : - case 'detectInfos' : - $this->files[$key]['options'][$name] = (bool) $value; - break; - - default: - continue; - } - } - } - } - - return $this; - } - - /** - * Returns set options for adapters or files - * - * @param array $files (Optional) Files to return the options for - * @return array Options for given files - */ - public function getOptions($files = null) - { - $file = $this->getFiles($files, false, true); - - foreach ($file as $key => $content) { - if (isset($this->files[$key]['options'])) { - $options[$key] = $this->files[$key]['options']; - } else { - $options[$key] = array(); - } - } - - return $options; - } - - /** - * Checks if the files are valid - * - * @param string|array $files (Optional) Files to check - * @return bool True if all checks are valid - */ - public function isValid($files = null) - { - $check = $this->getFiles($files, false, true); - if (empty($check)) { - return false; - } - - $translator = $this->getTranslator(); - $this->messages = array(); - $break = false; - foreach ($check as $content) { - if (array_key_exists('validators', $content) && - in_array('Zend\Validator\File\Count', $content['validators'])) { - $validator = $this->validators['Zend\Validator\File\Count']; - $count = $content; - if (empty($content['tmp_name'])) { - continue; - } - - if (array_key_exists('destination', $content)) { - $checkit = $content['destination']; - } else { - $checkit = dirname($content['tmp_name']); - } - - $checkit .= DIRECTORY_SEPARATOR . $content['name']; - $validator->addFile($checkit); - } - } - - if (isset($count)) { - if (!$validator->isValid($count['tmp_name'], $count)) { - $this->messages += $validator->getMessages(); - } - } - - foreach ($check as $key => $content) { - $fileerrors = array(); - if (array_key_exists('validators', $content) && $content['validated']) { - continue; - } - - if (array_key_exists('validators', $content)) { - foreach ($content['validators'] as $class) { - $validator = $this->validators[$class]; - if (method_exists($validator, 'setTranslator')) { - $validator->setTranslator($translator); - } - - if (($class === 'Zend\Validator\File\Upload') && (empty($content['tmp_name']))) { - $tocheck = $key; - } else { - $tocheck = $content['tmp_name']; - } - - if (!$validator->isValid($tocheck, $content)) { - $fileerrors += $validator->getMessages(); - } - - if (!empty($content['options']['ignoreNoFile']) && (isset($fileerrors['fileUploadErrorNoFile']))) { - unset($fileerrors['fileUploadErrorNoFile']); - break; - } - - if (($class === 'Zend\Validator\File\Upload') && (count($fileerrors) > 0)) { - break; - } - - if (($this->break[$class]) && (count($fileerrors) > 0)) { - $break = true; - break; - } - } - } - - if (count($fileerrors) > 0) { - $this->files[$key]['validated'] = false; - } else { - $this->files[$key]['validated'] = true; - } - - $this->messages += $fileerrors; - if ($break) { - break; - } - } - - if (count($this->messages) > 0) { - return false; - } - - return true; - } - - /** - * Returns found validation messages - * - * @return array - */ - public function getMessages() - { - return $this->messages; - } - - /** - * Retrieve error codes - * - * @return array - */ - public function getErrors() - { - return array_keys($this->messages); - } - - /** - * Are there errors registered? - * - * @return bool - */ - public function hasErrors() - { - return (!empty($this->messages)); - } - - /** - * Adds a new filter for this class - * - * @param string|Filter\FilterInterface $filter Type of filter to add - * @param string|array $options Options to set for the filter - * @param string|array $files Files to limit this filter to - * @return AbstractAdapter - * @throws Exception\InvalidArgumentException for invalid type - */ - public function addFilter($filter, $options = null, $files = null) - { - if (is_string($filter)) { - $filter = $this->getFilterManager()->get($filter, $options); - } - - if (!$filter instanceof Filter\FilterInterface) { - throw new Exception\InvalidArgumentException('Invalid filter specified'); - } - - $class = get_class($filter); - $this->filters[$class] = $filter; - $files = $this->getFiles($files, true, true); - foreach ($files as $file) { - $this->files[$file]['filters'][] = $class; - } - - return $this; - } - - /** - * Add Multiple filters at once - * - * @param array $filters - * @param string|array $files - * @return AbstractAdapter - */ - public function addFilters(array $filters, $files = null) - { - foreach ($filters as $key => $spec) { - if ($spec instanceof Filter\FilterInterface) { - $this->addFilter($spec, null, $files); - continue; - } - - if (is_string($key)) { - $this->addFilter($key, $spec, $files); - continue; - } - - if (is_int($key)) { - if (is_string($spec)) { - $this->addFilter($spec, null, $files); - continue; - } - - if (is_array($spec)) { - if (!array_key_exists('filter', $spec)) { - continue; - } - - $filter = $spec['filter']; - unset($spec['filter']); - $this->addFilter($filter, $spec, $files); - continue; - } - - continue; - } - } - - return $this; - } - - /** - * Sets a filter for the class, erasing all previous set - * - * @param array $filters Filter to set - * @param string|array $files Files to limit this filter to - * @return Filter\AbstractFilter - */ - public function setFilters(array $filters, $files = null) - { - $this->clearFilters(); - return $this->addFilters($filters, $files); - } - - /** - * Determine if a given filter has already been registered - * - * @param string $name - * @return bool - */ - public function hasFilter($name) - { - return (false !== $this->getFilterIdentifier($name)); - } - - /** - * Retrieve individual filter - * - * @param string $name - * @return Filter\FilterInterface|null - */ - public function getFilter($name) - { - if (false === ($identifier = $this->getFilterIdentifier($name))) { - return null; - } - - return $this->filters[$identifier]; - } - - /** - * Returns all set filters - * - * @param string|array $files (Optional) Returns the filter for this files - * @return array List of set filters - * @throws Exception\RuntimeException When file not found - */ - public function getFilters($files = null) - { - if ($files === null) { - return $this->filters; - } - - $files = $this->getFiles($files, true, true); - $filters = array(); - foreach ($files as $file) { - if (!empty($this->files[$file]['filters'])) { - $filters += $this->files[$file]['filters']; - } - } - - $filters = array_unique($filters); - $result = array(); - foreach ($filters as $filter) { - $result[] = $this->filters[$filter]; - } - - return $result; - } - - /** - * Remove an individual filter - * - * @param string $name - * @return AbstractAdapter - */ - public function removeFilter($name) - { - if (false === ($key = $this->getFilterIdentifier($name))) { - return $this; - } - - unset($this->filters[$key]); - foreach (array_keys($this->files) as $file) { - if (empty($this->files[$file]['filters'])) { - continue; - } - - $index = array_search($key, $this->files[$file]['filters']); - if ($index === false) { - continue; - } - - unset($this->files[$file]['filters'][$index]); - } - return $this; - } - - /** - * Remove all filters - * - * @return AbstractAdapter - */ - public function clearFilters() - { - $this->filters = array(); - foreach (array_keys($this->files) as $file) { - $this->files[$file]['filters'] = array(); - } - - return $this; - } - - /** - * Retrieves the filename of transferred files. - * - * @param string $file (Optional) Element to return the filename for - * @param bool $path (Optional) Should the path also be returned ? - * @return string|array - */ - public function getFileName($file = null, $path = true) - { - $files = $this->getFiles($file, true, true); - $result = array(); - $directory = ""; - foreach ($files as $file) { - if (empty($this->files[$file]['name'])) { - continue; - } - - if ($path === true) { - $directory = $this->getDestination($file) . DIRECTORY_SEPARATOR; - } - - $result[$file] = $directory . $this->files[$file]['name']; - } - - if (count($result) == 1) { - return current($result); - } - - return $result; - } - - /** - * Retrieve additional internal file informations for files - * - * @param string $file (Optional) File to get informations for - * @return array - */ - public function getFileInfo($file = null) - { - return $this->getFiles($file); - } - - /** - * Sets a new destination for the given files - * - * @deprecated Will be changed to be a filter!!! - * @param string $destination New destination directory - * @param string|array $files Files to set the new destination for - * @return AbstractAdapter - * @throws Exception\InvalidArgumentException when the given destination is not a directory or does not exist - */ - public function setDestination($destination, $files = null) - { - $orig = $files; - $destination = rtrim($destination, "/\\"); - if (!is_dir($destination)) { - throw new Exception\InvalidArgumentException('The given destination is not a directory or does not exist'); - } - - if (!is_writable($destination)) { - throw new Exception\InvalidArgumentException('The given destination is not writeable'); - } - - if ($files === null) { - foreach ($this->files as $file => $content) { - $this->files[$file]['destination'] = $destination; - } - } else { - $files = $this->getFiles($files, true, true); - if (empty($files) and is_string($orig)) { - $this->files[$orig]['destination'] = $destination; - } - - foreach ($files as $file) { - $this->files[$file]['destination'] = $destination; - } - } - - return $this; - } - - /** - * Retrieve destination directory value - * - * @param null|string|array $files - * @throws Exception\InvalidArgumentException - * @return null|string|array - */ - public function getDestination($files = null) - { - $orig = $files; - $files = $this->getFiles($files, false, true); - $destinations = array(); - if (empty($files) and is_string($orig)) { - if (isset($this->files[$orig]['destination'])) { - $destinations[$orig] = $this->files[$orig]['destination']; - } else { - throw new Exception\InvalidArgumentException( - sprintf('The file transfer adapter can not find "%s"', $orig) - ); - } - } - - foreach ($files as $key => $content) { - if (isset($this->files[$key]['destination'])) { - $destinations[$key] = $this->files[$key]['destination']; - } else { - $tmpdir = $this->getTmpDir(); - $this->setDestination($tmpdir, $key); - $destinations[$key] = $tmpdir; - } - } - - if (empty($destinations)) { - $destinations = $this->getTmpDir(); - } elseif (count($destinations) == 1) { - $destinations = current($destinations); - } - - return $destinations; - } - - /** - * Sets translator to use in helper - * - * @param Translator $translator [optional] translator. - * Default is null, which sets no translator. - * @param string $textDomain [optional] text domain - * Default is null, which skips setTranslatorTextDomain - * @return AbstractAdapter - */ - public function setTranslator(Translator $translator = null, $textDomain = null) - { - $this->translator = $translator; - if (null !== $textDomain) { - $this->setTranslatorTextDomain($textDomain); - } - return $this; - } - - /** - * Retrieve localization translator object - * - * @return Translator|null - */ - public function getTranslator() - { - if ($this->isTranslatorEnabled()) { - return null; - } - - return $this->translator; - } - - /** - * Checks if the helper has a translator - * - * @return bool - */ - public function hasTranslator() - { - return (bool) $this->getTranslator(); - } - - /** - * Indicate whether or not translation should be enabled - * - * @param bool $flag - * @return AbstractAdapter - */ - public function setTranslatorEnabled($flag = true) - { - $this->translatorEnabled = (bool) $flag; - return $this; - } - - /** - * Is translation enabled? - * - * @return bool - */ - public function isTranslatorEnabled() - { - return $this->translatorEnabled; - } - - /** - * Set translation text domain - * - * @param string $textDomain - * @return AbstractAdapter - */ - public function setTranslatorTextDomain($textDomain = 'default') - { - $this->translatorTextDomain = $textDomain; - return $this; - } - - /** - * Return the translation text domain - * - * @return string - */ - public function getTranslatorTextDomain() - { - return $this->translatorTextDomain; - } - - /** - * Returns the hash for a given file - * - * @param string $hash Hash algorithm to use - * @param string|array $files Files to return the hash for - * @return string|array Hashstring - * @throws Exception\InvalidArgumentException On unknown hash algorithm - */ - public function getHash($hash = 'crc32', $files = null) - { - if (!in_array($hash, hash_algos())) { - throw new Exception\InvalidArgumentException('Unknown hash algorithm'); - } - - $files = $this->getFiles($files); - $result = array(); - foreach ($files as $key => $value) { - if (file_exists($value['name'])) { - $result[$key] = hash_file($hash, $value['name']); - } elseif (file_exists($value['tmp_name'])) { - $result[$key] = hash_file($hash, $value['tmp_name']); - } elseif (empty($value['options']['ignoreNoFile'])) { - throw new Exception\InvalidArgumentException("The file '{$value['name']}' does not exist"); - } - } - - if (count($result) == 1) { - return current($result); - } - - return $result; - } - - /** - * Returns the real filesize of the file - * - * @param string|array $files Files to get the filesize from - * @return string|array Filesize - * @throws Exception\InvalidArgumentException When the file does not exist - */ - public function getFileSize($files = null) - { - $files = $this->getFiles($files); - $result = array(); - foreach ($files as $key => $value) { - if (file_exists($value['name']) || file_exists($value['tmp_name'])) { - if ($value['options']['useByteString']) { - $result[$key] = static::toByteString($value['size']); - } else { - $result[$key] = $value['size']; - } - } elseif (empty($value['options']['ignoreNoFile'])) { - throw new Exception\InvalidArgumentException("The file '{$value['name']}' does not exist"); - } else { - continue; - } - } - - if (count($result) == 1) { - return current($result); - } - - return $result; - } - - /** - * Internal method to detect the size of a file - * - * @param array $value File infos - * @return string Filesize of given file - */ - protected function detectFileSize($value) - { - if (file_exists($value['name'])) { - $filename = $value['name']; - } elseif (file_exists($value['tmp_name'])) { - $filename = $value['tmp_name']; - } else { - return null; - } - - ErrorHandler::start(); - $filesize = filesize($filename); - $return = ErrorHandler::stop(); - if ($return instanceof ErrorException) { - $filesize = 0; - } - - return sprintf("%u", $filesize); - } - - /** - * Returns the real mimetype of the file - * Uses fileinfo, when not available mime_magic and as last fallback a manual given mimetype - * - * @param string|array $files Files to get the mimetype from - * @return string|array MimeType - * @throws Exception\InvalidArgumentException When the file does not exist - */ - public function getMimeType($files = null) - { - $files = $this->getFiles($files); - $result = array(); - foreach ($files as $key => $value) { - if (file_exists($value['name']) || file_exists($value['tmp_name'])) { - $result[$key] = $value['type']; - } elseif (empty($value['options']['ignoreNoFile'])) { - throw new Exception\InvalidArgumentException("the file '{$value['name']}' does not exist"); - } else { - continue; - } - } - - if (count($result) == 1) { - return current($result); - } - - return $result; - } - - /** - * Internal method to detect the mime type of a file - * - * @param array $value File infos - * @return string Mimetype of given file - */ - protected function detectMimeType($value) - { - if (file_exists($value['name'])) { - $file = $value['name']; - } elseif (file_exists($value['tmp_name'])) { - $file = $value['tmp_name']; - } else { - return null; - } - - if (class_exists('finfo', false)) { - if (!empty($value['options']['magicFile'])) { - ErrorHandler::start(); - $mime = finfo_open(FILEINFO_MIME_TYPE, $value['options']['magicFile']); - ErrorHandler::stop(); - } - - if (empty($mime)) { - ErrorHandler::start(); - $mime = finfo_open(FILEINFO_MIME_TYPE); - ErrorHandler::stop(); - } - - if (!empty($mime)) { - $result = finfo_file($mime, $file); - } - - unset($mime); - } - - if (empty($result) && (function_exists('mime_content_type') - && ini_get('mime_magic.magicfile'))) { - $result = mime_content_type($file); - } - - if (empty($result)) { - $result = 'application/octet-stream'; - } - - return $result; - } - - /** - * Returns the formatted size - * - * @param int $size - * @return string - */ - protected static function toByteString($size) - { - $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); - for ($i=0; $size >= 1024 && $i < 9; $i++) { - $size /= 1024; - } - - return round($size, 2) . $sizes[$i]; - } - - /** - * Internal function to filter all given files - * - * @param string|array $files (Optional) Files to check - * @return bool False on error - */ - protected function filter($files = null) - { - $check = $this->getFiles($files); - foreach ($check as $name => $content) { - if (array_key_exists('filters', $content)) { - foreach ($content['filters'] as $class) { - $filter = $this->filters[$class]; - try { - $result = $filter->filter($this->getFileName($name)); - - $this->files[$name]['destination'] = dirname($result); - $this->files[$name]['name'] = basename($result); - } catch (FilterException\ExceptionInterface $e) { - $this->messages += array($e->getMessage()); - } - } - } - } - - if (count($this->messages) > 0) { - return false; - } - - return true; - } - - /** - * Determine system TMP directory and detect if we have read access - * - * @return string - * @throws Exception\RuntimeException if unable to determine directory - */ - protected function getTmpDir() - { - if (null === $this->tmpDir) { - $tmpdir = array(); - if (function_exists('sys_get_temp_dir')) { - $tmpdir[] = sys_get_temp_dir(); - } - - if (!empty($_ENV['TMP'])) { - $tmpdir[] = realpath($_ENV['TMP']); - } - - if (!empty($_ENV['TMPDIR'])) { - $tmpdir[] = realpath($_ENV['TMPDIR']); - } - - if (!empty($_ENV['TEMP'])) { - $tmpdir[] = realpath($_ENV['TEMP']); - } - - $upload = ini_get('upload_tmp_dir'); - if ($upload) { - $tmpdir[] = realpath($upload); - } - - foreach ($tmpdir as $directory) { - if ($this->isPathWriteable($directory)) { - $this->tmpDir = $directory; - } - } - - if (empty($this->tmpDir)) { - // Attemp to detect by creating a temporary file - $tempFile = tempnam(md5(uniqid(rand(), true)), ''); - if ($tempFile) { - $this->tmpDir = realpath(dirname($tempFile)); - unlink($tempFile); - } else { - throw new Exception\RuntimeException('Could not determine a temporary directory'); - } - } - - $this->tmpDir = rtrim($this->tmpDir, "/\\"); - } - return $this->tmpDir; - } - - /** - * Tries to detect if we can read and write to the given path - * - * @param string $path - * @return bool - */ - protected function isPathWriteable($path) - { - $tempFile = rtrim($path, "/\\"); - $tempFile .= '/' . 'test.1'; - - ErrorHandler::start(); - $result = file_put_contents($tempFile, 'TEST'); - ErrorHandler::stop(); - - if ($result == false) { - return false; - } - - ErrorHandler::start(); - $result = unlink($tempFile); - ErrorHandler::stop(); - - if ($result == false) { - return false; - } - - return true; - } - - /** - * Returns found files based on internal file array and given files - * - * @param string|array $files (Optional) Files to return - * @param bool $names (Optional) Returns only names on true, else complete info - * @param bool $noexception (Optional) Allows throwing an exception, otherwise returns an empty array - * @return array Found files - * @throws Exception\RuntimeException On false filename - */ - protected function getFiles($files, $names = false, $noexception = false) - { - $check = array(); - - if (is_string($files)) { - $files = array($files); - } - - if (is_array($files)) { - foreach ($files as $find) { - $found = array(); - foreach ($this->files as $file => $content) { - if (!isset($content['name'])) { - continue; - } - - if (($content['name'] === $find) && isset($content['multifiles'])) { - foreach ($content['multifiles'] as $multifile) { - $found[] = $multifile; - } - break; - } - - if ($file === $find) { - $found[] = $file; - break; - } - - if ($content['name'] === $find) { - $found[] = $file; - break; - } - } - - if (empty($found)) { - if ($noexception !== false) { - return array(); - } - - throw new Exception\RuntimeException(sprintf('The file transfer adapter can not find "%s"', $find)); - } - - foreach ($found as $checked) { - $check[$checked] = $this->files[$checked]; - } - } - } - - if ($files === null) { - $check = $this->files; - $keys = array_keys($check); - foreach ($keys as $key) { - if (isset($check[$key]['multifiles'])) { - unset($check[$key]); - } - } - } - - if ($names) { - $check = array_keys($check); - } - - return $check; - } - - /** - * Retrieve internal identifier for a named validator - * - * @param string $name - * @return string - */ - protected function getValidatorIdentifier($name) - { - if (array_key_exists($name, $this->validators)) { - return $name; - } - - foreach (array_keys($this->validators) as $test) { - if (preg_match('/' . preg_quote($name) . '$/i', $test)) { - return $test; - } - } - - return false; - } - - /** - * Retrieve internal identifier for a named filter - * - * @param string $name - * @return string - */ - protected function getFilterIdentifier($name) - { - if (array_key_exists($name, $this->filters)) { - return $name; - } - - foreach (array_keys($this->filters) as $test) { - if (preg_match('/' . preg_quote($name) . '$/i', $test)) { - return $test; - } - } - - return false; - } -} diff --git a/library/Zend/File/Transfer/Adapter/FilterPluginManager.php b/library/Zend/File/Transfer/Adapter/FilterPluginManager.php deleted file mode 100755 index 28da7ee4a..000000000 --- a/library/Zend/File/Transfer/Adapter/FilterPluginManager.php +++ /dev/null @@ -1,35 +0,0 @@ - 'filedecrypt', - 'encrypt' => 'fileencrypt', - 'lowercase' => 'filelowercase', - 'rename' => 'filerename', - 'uppercase' => 'fileuppercase', - ); -} diff --git a/library/Zend/File/Transfer/Adapter/Http.php b/library/Zend/File/Transfer/Adapter/Http.php deleted file mode 100755 index 3cba2184d..000000000 --- a/library/Zend/File/Transfer/Adapter/Http.php +++ /dev/null @@ -1,464 +0,0 @@ -setOptions($options); - $this->prepareFiles(); - $this->addValidator('Upload', false, $this->files); - } - - /** - * Sets a validator for the class, erasing all previous set - * - * @param array $validators Validator to set - * @param string|array $files Files to limit this validator to - * @return AbstractAdapter - */ - public function setValidators(array $validators, $files = null) - { - $this->clearValidators(); - return $this->addValidators($validators, $files); - } - - /** - * Remove an individual validator - * - * @param string $name - * @return AbstractAdapter - */ - public function removeValidator($name) - { - if ($name == 'Upload') { - return $this; - } - - return parent::removeValidator($name); - } - - /** - * Clear the validators - * - * @return AbstractAdapter - */ - public function clearValidators() - { - parent::clearValidators(); - $this->addValidator('Upload', false, $this->files); - - return $this; - } - - /** - * Send the file to the client (Download) - * - * @param string|array $options Options for the file(s) to send - * @return void - * @throws Exception\BadMethodCallException Not implemented - */ - public function send($options = null) - { - throw new Exception\BadMethodCallException('Method not implemented'); - } - - /** - * Checks if the files are valid - * - * @param string|array $files (Optional) Files to check - * @return bool True if all checks are valid - */ - public function isValid($files = null) - { - // Workaround for WebServer not conforming HTTP and omitting CONTENT_LENGTH - $content = 0; - if (isset($_SERVER['CONTENT_LENGTH'])) { - $content = $_SERVER['CONTENT_LENGTH']; - } elseif (!empty($_POST)) { - $content = serialize($_POST); - } - - // Workaround for a PHP error returning empty $_FILES when form data exceeds php settings - if (empty($this->files) && ($content > 0)) { - if (is_array($files)) { - $files = current($files); - } - - $temp = array($files => array( - 'name' => $files, - 'error' => 1)); - $validator = $this->validators['Zend\Validator\File\Upload']; - $validator->setTranslator($this->getTranslator()) - ->setFiles($temp) - ->isValid($files, null); - $this->messages += $validator->getMessages(); - return false; - } - - return parent::isValid($files); - } - - /** - * Receive the file from the client (Upload) - * - * @param string|array $files (Optional) Files to receive - * @return bool - */ - public function receive($files = null) - { - if (!$this->isValid($files)) { - return false; - } - - $check = $this->getFiles($files); - foreach ($check as $file => $content) { - if (!$content['received']) { - $directory = ''; - $destination = $this->getDestination($file); - if ($destination !== null) { - $directory = $destination . DIRECTORY_SEPARATOR; - } - - $filename = $directory . $content['name']; - $rename = $this->getFilter('Rename'); - if ($rename !== null) { - $tmp = $rename->getNewName($content['tmp_name']); - if ($tmp != $content['tmp_name']) { - $filename = $tmp; - } - - if (dirname($filename) == '.') { - $filename = $directory . $filename; - } - - $key = array_search(get_class($rename), $this->files[$file]['filters']); - unset($this->files[$file]['filters'][$key]); - } - - // Should never return false when it's tested by the upload validator - if (!move_uploaded_file($content['tmp_name'], $filename)) { - if ($content['options']['ignoreNoFile']) { - $this->files[$file]['received'] = true; - $this->files[$file]['filtered'] = true; - continue; - } - - $this->files[$file]['received'] = false; - return false; - } - - if ($rename !== null) { - $this->files[$file]['destination'] = dirname($filename); - $this->files[$file]['name'] = basename($filename); - } - - $this->files[$file]['tmp_name'] = $filename; - $this->files[$file]['received'] = true; - } - - if (!$content['filtered']) { - if (!$this->filter($file)) { - $this->files[$file]['filtered'] = false; - return false; - } - - $this->files[$file]['filtered'] = true; - } - } - - return true; - } - - /** - * Checks if the file was already sent - * - * @param string|array $files Files to check - * @return bool - * @throws Exception\BadMethodCallException Not implemented - */ - public function isSent($files = null) - { - throw new Exception\BadMethodCallException('Method not implemented'); - } - - /** - * Checks if the file was already received - * - * @param string|array $files (Optional) Files to check - * @return bool - */ - public function isReceived($files = null) - { - $files = $this->getFiles($files, false, true); - if (empty($files)) { - return false; - } - - foreach ($files as $content) { - if ($content['received'] !== true) { - return false; - } - } - - return true; - } - - /** - * Checks if the file was already filtered - * - * @param string|array $files (Optional) Files to check - * @return bool - */ - public function isFiltered($files = null) - { - $files = $this->getFiles($files, false, true); - if (empty($files)) { - return false; - } - - foreach ($files as $content) { - if ($content['filtered'] !== true) { - return false; - } - } - - return true; - } - - /** - * Has a file been uploaded ? - * - * @param array|string|null $files - * @return bool - */ - public function isUploaded($files = null) - { - $files = $this->getFiles($files, false, true); - if (empty($files)) { - return false; - } - - foreach ($files as $file) { - if (empty($file['name'])) { - return false; - } - } - - return true; - } - - /** - * Returns the actual progress of file up-/downloads - * - * @param string|array $id The upload to get the progress for - * @return array|null - * @throws Exception\PhpEnvironmentException whether APC nor UploadProgress extension installed - * @throws Exception\RuntimeException - */ - public static function getProgress($id = null) - { - if (!static::isApcAvailable() && !static::isUploadProgressAvailable()) { - throw new Exception\PhpEnvironmentException('Neither APC nor UploadProgress extension installed'); - } - - $session = 'Zend\File\Transfer\Adapter\Http\ProgressBar'; - $status = array( - 'total' => 0, - 'current' => 0, - 'rate' => 0, - 'message' => '', - 'done' => false - ); - - if (is_array($id)) { - if (isset($id['progress'])) { - $adapter = $id['progress']; - } - - if (isset($id['session'])) { - $session = $id['session']; - } - - if (isset($id['id'])) { - $id = $id['id']; - } else { - unset($id); - } - } - - if (!empty($id) && (($id instanceof Adapter\AbstractAdapter) || ($id instanceof ProgressBar\ProgressBar))) { - $adapter = $id; - unset($id); - } - - if (empty($id)) { - if (!isset($_GET['progress_key'])) { - $status['message'] = 'No upload in progress'; - $status['done'] = true; - } else { - $id = $_GET['progress_key']; - } - } - - if (!empty($id)) { - if (static::isApcAvailable()) { - $call = call_user_func(static::$callbackApc, ini_get('apc.rfc1867_prefix') . $id); - if (is_array($call)) { - $status = $call + $status; - } - } elseif (static::isUploadProgressAvailable()) { - $call = call_user_func(static::$callbackUploadProgress, $id); - if (is_array($call)) { - $status = $call + $status; - $status['total'] = $status['bytes_total']; - $status['current'] = $status['bytes_uploaded']; - $status['rate'] = $status['speed_average']; - if ($status['total'] == $status['current']) { - $status['done'] = true; - } - } - } - - if (!is_array($call)) { - $status['done'] = true; - $status['message'] = 'Failure while retrieving the upload progress'; - } elseif (!empty($status['cancel_upload'])) { - $status['done'] = true; - $status['message'] = 'The upload has been canceled'; - } else { - $status['message'] = static::toByteString($status['current']) . " - " . static::toByteString($status['total']); - } - - $status['id'] = $id; - } - - if (isset($adapter) && isset($status['id'])) { - if ($adapter instanceof Adapter\AbstractAdapter) { - $adapter = new ProgressBar\ProgressBar($adapter, 0, $status['total'], $session); - } - - if (!($adapter instanceof ProgressBar\ProgressBar)) { - throw new Exception\RuntimeException('Unknown Adapter given'); - } - - if ($status['done']) { - $adapter->finish(); - } else { - $adapter->update($status['current'], $status['message']); - } - - $status['progress'] = $adapter; - } - - return $status; - } - - /** - * Checks the APC extension for progress information - * - * @return bool - */ - public static function isApcAvailable() - { - return (bool) ini_get('apc.enabled') && (bool) ini_get('apc.rfc1867') && is_callable(static::$callbackApc); - } - - /** - * Checks the UploadProgress extension for progress information - * - * @return bool - */ - public static function isUploadProgressAvailable() - { - return is_callable(static::$callbackUploadProgress); - } - - /** - * Prepare the $_FILES array to match the internal syntax of one file per entry - * - * @return Http - */ - protected function prepareFiles() - { - $this->files = array(); - foreach ($_FILES as $form => $content) { - if (is_array($content['name'])) { - foreach ($content as $param => $file) { - foreach ($file as $number => $target) { - $this->files[$form . '_' . $number . '_'][$param] = $target; - $this->files[$form]['multifiles'][$number] = $form . '_' . $number . '_'; - } - } - - $this->files[$form]['name'] = $form; - foreach ($this->files[$form]['multifiles'] as $key => $value) { - $this->files[$value]['options'] = $this->options; - $this->files[$value]['validated'] = false; - $this->files[$value]['received'] = false; - $this->files[$value]['filtered'] = false; - - $mimetype = $this->detectMimeType($this->files[$value]); - $this->files[$value]['type'] = $mimetype; - - $filesize = $this->detectFileSize($this->files[$value]); - $this->files[$value]['size'] = $filesize; - - if ($this->options['detectInfos']) { - $_FILES[$form]['type'][$key] = $mimetype; - $_FILES[$form]['size'][$key] = $filesize; - } - } - } else { - $this->files[$form] = $content; - $this->files[$form]['options'] = $this->options; - $this->files[$form]['validated'] = false; - $this->files[$form]['received'] = false; - $this->files[$form]['filtered'] = false; - - $mimetype = $this->detectMimeType($this->files[$form]); - $this->files[$form]['type'] = $mimetype; - - $filesize = $this->detectFileSize($this->files[$form]); - $this->files[$form]['size'] = $filesize; - - if ($this->options['detectInfos']) { - $_FILES[$form]['type'] = $mimetype; - $_FILES[$form]['size'] = $filesize; - } - } - } - - return $this; - } -} diff --git a/library/Zend/File/Transfer/Adapter/ValidatorPluginManager.php b/library/Zend/File/Transfer/Adapter/ValidatorPluginManager.php deleted file mode 100755 index f24f5d459..000000000 --- a/library/Zend/File/Transfer/Adapter/ValidatorPluginManager.php +++ /dev/null @@ -1,36 +0,0 @@ - 'filecount', - 'crc32' => 'filecrc32', - 'excludeextension' => 'fileexcludeextension', - 'excludemimetype' => 'fileexcludemimetype', - 'exists' => 'fileexists', - 'extension' => 'fileextension', - 'filessize' => 'filefilessize', - 'hash' => 'filehash', - 'imagesize' => 'fileimagesize', - 'iscompressed' => 'fileiscompressed', - 'isimage' => 'fileisimage', - 'md5' => 'filemd5', - 'mimetype' => 'filemimetype', - 'notexists' => 'filenotexists', - 'sha1' => 'filesha1', - 'size' => 'filesize', - 'upload' => 'fileupload', - 'wordcount' => 'filewordcount', - ); -} diff --git a/library/Zend/File/Transfer/Exception/BadMethodCallException.php b/library/Zend/File/Transfer/Exception/BadMethodCallException.php deleted file mode 100755 index 0d47a905b..000000000 --- a/library/Zend/File/Transfer/Exception/BadMethodCallException.php +++ /dev/null @@ -1,17 +0,0 @@ -setAdapter($adapter, $direction, $options); - } - - /** - * Sets a new adapter - * - * @param string $adapter Adapter to use - * @param bool $direction OPTIONAL False means Download, true means upload - * @param array $options OPTIONAL Options to set for this adapter - * @return Transfer - * @throws Exception\InvalidArgumentException - */ - public function setAdapter($adapter, $direction = false, $options = array()) - { - if (!is_string($adapter)) { - throw new Exception\InvalidArgumentException('Adapter must be a string'); - } - - if ($adapter[0] != '\\') { - $adapter = '\Zend\File\Transfer\Adapter\\' . ucfirst($adapter); - } - - $direction = (int) $direction; - $this->adapter[$direction] = new $adapter($options); - if (!$this->adapter[$direction] instanceof Adapter\AbstractAdapter) { - throw new Exception\InvalidArgumentException( - 'Adapter ' . $adapter . ' does not extend Zend\File\Transfer\Adapter\AbstractAdapter' - ); - } - - return $this; - } - - /** - * Returns all set adapters - * - * @param bool $direction On null, all directions are returned - * On false, download direction is returned - * On true, upload direction is returned - * @return array|Adapter\AbstractAdapter - */ - public function getAdapter($direction = null) - { - if ($direction === null) { - return $this->adapter; - } - - $direction = (int) $direction; - return $this->adapter[$direction]; - } - - /** - * Calls all methods from the adapter - * - * @param string $method Method to call - * @param array $options Options for this method - * @throws Exception\BadMethodCallException if unknown method - * @return mixed - */ - public function __call($method, array $options) - { - if (array_key_exists('direction', $options)) { - $direction = (int) $options['direction']; - } else { - $direction = 0; - } - - if (method_exists($this->adapter[$direction], $method)) { - return call_user_func_array(array($this->adapter[$direction], $method), $options); - } - - throw new Exception\BadMethodCallException("Unknown method '" . $method . "' called!"); - } -} diff --git a/library/Zend/File/composer.json b/library/Zend/File/composer.json deleted file mode 100755 index d3d86cea9..000000000 --- a/library/Zend/File/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "zendframework/zend-file", - "description": " ", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "file" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\File\\": "" - } - }, - "target-dir": "Zend/File", - "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-validator": "self.version" - }, - "suggest": { - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-validator": "Zend\\Validator component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/Filter/AbstractFilter.php b/library/Zend/Filter/AbstractFilter.php deleted file mode 100755 index a52bcfa73..000000000 --- a/library/Zend/Filter/AbstractFilter.php +++ /dev/null @@ -1,96 +0,0 @@ - $value) { - $setter = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key))); - if (method_exists($this, $setter)) { - $this->{$setter}($value); - } elseif (array_key_exists($key, $this->options)) { - $this->options[$key] = $value; - } else { - throw new Exception\InvalidArgumentException(sprintf( - 'The option "%s" does not have a matching %s setter method or options[%s] array key', - $key, $setter, $key - )); - } - } - return $this; - } - - /** - * Retrieve options representing object state - * - * @return array - */ - public function getOptions() - { - return $this->options; - } - - /** - * Invoke filter as a command - * - * Proxies to {@link filter()} - * - * @param mixed $value - * @throws Exception\ExceptionInterface If filtering $value is impossible - * @return mixed - */ - public function __invoke($value) - { - return $this->filter($value); - } - - /** - * @param mixed $options - * @return bool - */ - protected static function isOptions($options) - { - return (is_array($options) || $options instanceof Traversable); - } -} diff --git a/library/Zend/Filter/AbstractUnicode.php b/library/Zend/Filter/AbstractUnicode.php deleted file mode 100755 index 685608f7d..000000000 --- a/library/Zend/Filter/AbstractUnicode.php +++ /dev/null @@ -1,59 +0,0 @@ -options['encoding'] = $encoding; - return $this; - } - - /** - * Returns the set encoding - * - * @return string - */ - public function getEncoding() - { - if ($this->options['encoding'] === null && function_exists('mb_internal_encoding')) { - $this->options['encoding'] = mb_internal_encoding(); - } - - return $this->options['encoding']; - } -} diff --git a/library/Zend/Filter/BaseName.php b/library/Zend/Filter/BaseName.php deleted file mode 100755 index 48807ca41..000000000 --- a/library/Zend/Filter/BaseName.php +++ /dev/null @@ -1,33 +0,0 @@ - 'boolean', - self::TYPE_INTEGER => 'integer', - self::TYPE_FLOAT => 'float', - self::TYPE_STRING => 'string', - self::TYPE_ZERO_STRING => 'zero', - self::TYPE_EMPTY_ARRAY => 'array', - self::TYPE_NULL => 'null', - self::TYPE_PHP => 'php', - self::TYPE_FALSE_STRING => 'false', - self::TYPE_LOCALIZED => 'localized', - self::TYPE_ALL => 'all', - ); - - /** - * @var array - */ - protected $options = array( - 'type' => self::TYPE_PHP, - 'casting' => true, - 'translations' => array(), - ); - - /** - * Constructor - * - * @param array|Traversable|int|null $typeOrOptions - * @param bool $casting - * @param array $translations - */ - public function __construct($typeOrOptions = null, $casting = true, $translations = array()) - { - if ($typeOrOptions !== null) { - if ($typeOrOptions instanceof Traversable) { - $typeOrOptions = ArrayUtils::iteratorToArray($typeOrOptions); - } - - if (is_array($typeOrOptions)) { - if (isset($typeOrOptions['type']) - || isset($typeOrOptions['casting']) - || isset($typeOrOptions['translations']) - ) { - $this->setOptions($typeOrOptions); - } else { - $this->setType($typeOrOptions); - $this->setCasting($casting); - $this->setTranslations($translations); - } - } else { - $this->setType($typeOrOptions); - $this->setCasting($casting); - $this->setTranslations($translations); - } - } - } - - /** - * Set boolean types - * - * @param int|array $type - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setType($type = null) - { - if (is_array($type)) { - $detected = 0; - foreach ($type as $value) { - if (is_int($value)) { - $detected += $value; - } elseif (in_array($value, $this->constants)) { - $detected += array_search($value, $this->constants); - } - } - - $type = $detected; - } elseif (is_string($type) && in_array($type, $this->constants)) { - $type = array_search($type, $this->constants); - } - - if (!is_int($type) || ($type < 0) || ($type > self::TYPE_ALL)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Unknown type value "%s" (%s)', - $type, - gettype($type) - )); - } - - $this->options['type'] = $type; - return $this; - } - - /** - * Returns defined boolean types - * - * @return int - */ - public function getType() - { - return $this->options['type']; - } - - /** - * Set the working mode - * - * @param bool $flag When true this filter works like cast - * When false it recognises only true and false - * and all other values are returned as is - * @return self - */ - public function setCasting($flag = true) - { - $this->options['casting'] = (bool) $flag; - return $this; - } - - /** - * Returns the casting option - * - * @return bool - */ - public function getCasting() - { - return $this->options['casting']; - } - - /** - * @param array|Traversable $translations - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setTranslations($translations) - { - if (!is_array($translations) && !$translations instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '"%s" expects an array or Traversable; received "%s"', - __METHOD__, - (is_object($translations) ? get_class($translations) : gettype($translations)) - )); - } - - foreach ($translations as $message => $flag) { - $this->options['translations'][$message] = (bool) $flag; - } - - return $this; - } - - /** - * @return array - */ - public function getTranslations() - { - return $this->options['translations']; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Returns a boolean representation of $value - * - * @param string $value - * @return string - */ - public function filter($value) - { - $type = $this->getType(); - $casting = $this->getCasting(); - - // LOCALIZED - if ($type >= self::TYPE_LOCALIZED) { - $type -= self::TYPE_LOCALIZED; - if (is_string($value)) { - if (isset($this->options['translations'][$value])) { - return (bool) $this->options['translations'][$value]; - } - } - } - - // FALSE_STRING ('false') - if ($type >= self::TYPE_FALSE_STRING) { - $type -= self::TYPE_FALSE_STRING; - if (is_string($value) && (strtolower($value) == 'false')) { - return false; - } - - if (!$casting && is_string($value) && (strtolower($value) == 'true')) { - return true; - } - } - - // NULL (null) - if ($type >= self::TYPE_NULL) { - $type -= self::TYPE_NULL; - if ($value === null) { - return false; - } - } - - // EMPTY_ARRAY (array()) - if ($type >= self::TYPE_EMPTY_ARRAY) { - $type -= self::TYPE_EMPTY_ARRAY; - if (is_array($value) && ($value == array())) { - return false; - } - } - - // ZERO_STRING ('0') - if ($type >= self::TYPE_ZERO_STRING) { - $type -= self::TYPE_ZERO_STRING; - if (is_string($value) && ($value == '0')) { - return false; - } - - if (!$casting && (is_string($value)) && ($value == '1')) { - return true; - } - } - - // STRING ('') - if ($type >= self::TYPE_STRING) { - $type -= self::TYPE_STRING; - if (is_string($value) && ($value == '')) { - return false; - } - } - - // FLOAT (0.0) - if ($type >= self::TYPE_FLOAT) { - $type -= self::TYPE_FLOAT; - if (is_float($value) && ($value == 0.0)) { - return false; - } - - if (!$casting && is_float($value) && ($value == 1.0)) { - return true; - } - } - - // INTEGER (0) - if ($type >= self::TYPE_INTEGER) { - $type -= self::TYPE_INTEGER; - if (is_int($value) && ($value == 0)) { - return false; - } - - if (!$casting && is_int($value) && ($value == 1)) { - return true; - } - } - - // BOOLEAN (false) - if ($type >= self::TYPE_BOOLEAN) { - $type -= self::TYPE_BOOLEAN; - if (is_bool($value)) { - return $value; - } - } - - if ($casting) { - return true; - } - - return $value; - } -} diff --git a/library/Zend/Filter/CONTRIBUTING.md b/library/Zend/Filter/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/Filter/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/Filter/Callback.php b/library/Zend/Filter/Callback.php deleted file mode 100755 index 51392e166..000000000 --- a/library/Zend/Filter/Callback.php +++ /dev/null @@ -1,102 +0,0 @@ - null, - 'callback_params' => array() - ); - - /** - * @param callable|array|Traversable $callbackOrOptions - * @param array $callbackParams - */ - public function __construct($callbackOrOptions, $callbackParams = array()) - { - if (is_callable($callbackOrOptions)) { - $this->setCallback($callbackOrOptions); - $this->setCallbackParams($callbackParams); - } else { - $this->setOptions($callbackOrOptions); - } - } - - /** - * Sets a new callback for this filter - * - * @param callable $callback - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setCallback($callback) - { - if (!is_callable($callback)) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter for callback: must be callable' - ); - } - - $this->options['callback'] = $callback; - return $this; - } - - /** - * Returns the set callback - * - * @return callable - */ - public function getCallback() - { - return $this->options['callback']; - } - - /** - * Sets parameters for the callback - * - * @param array $params - * @return self - */ - public function setCallbackParams($params) - { - $this->options['callback_params'] = (array) $params; - return $this; - } - - /** - * Get parameters for the callback - * - * @return array - */ - public function getCallbackParams() - { - return $this->options['callback_params']; - } - - /** - * Calls the filter per callback - * - * @param mixed $value Options for the set callable - * @return mixed Result from the filter which was called - */ - public function filter($value) - { - $params = (array) $this->options['callback_params']; - array_unshift($params, $value); - - return call_user_func_array($this->options['callback'], $params); - } -} diff --git a/library/Zend/Filter/Compress.php b/library/Zend/Filter/Compress.php deleted file mode 100755 index f6a49e779..000000000 --- a/library/Zend/Filter/Compress.php +++ /dev/null @@ -1,210 +0,0 @@ -setAdapter($options); - } elseif ($options instanceof Compress\CompressionAlgorithmInterface) { - $this->setAdapter($options); - } elseif (is_array($options)) { - $this->setOptions($options); - } - } - - /** - * Set filter setate - * - * @param array $options - * @throws Exception\InvalidArgumentException if options is not an array or Traversable - * @return self - */ - public function setOptions($options) - { - if (!is_array($options) && !$options instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '"%s" expects an array or Traversable; received "%s"', - __METHOD__, - (is_object($options) ? get_class($options) : gettype($options)) - )); - } - - foreach ($options as $key => $value) { - if ($key == 'options') { - $key = 'adapterOptions'; - } - $method = 'set' . ucfirst($key); - if (method_exists($this, $method)) { - $this->$method($value); - } - } - return $this; - } - - /** - * Returns the current adapter, instantiating it if necessary - * - * @throws Exception\RuntimeException - * @throws Exception\InvalidArgumentException - * @return Compress\CompressionAlgorithmInterface - */ - public function getAdapter() - { - if ($this->adapter instanceof Compress\CompressionAlgorithmInterface) { - return $this->adapter; - } - - $adapter = $this->adapter; - $options = $this->getAdapterOptions(); - if (!class_exists($adapter)) { - $adapter = 'Zend\\Filter\\Compress\\' . ucfirst($adapter); - if (!class_exists($adapter)) { - throw new Exception\RuntimeException(sprintf( - '%s unable to load adapter; class "%s" not found', - __METHOD__, - $this->adapter - )); - } - } - - $this->adapter = new $adapter($options); - if (!$this->adapter instanceof Compress\CompressionAlgorithmInterface) { - throw new Exception\InvalidArgumentException("Compression adapter '" . $adapter . "' does not implement Zend\\Filter\\Compress\\CompressionAlgorithmInterface"); - } - return $this->adapter; - } - - /** - * Retrieve adapter name - * - * @return string - */ - public function getAdapterName() - { - return $this->getAdapter()->toString(); - } - - /** - * Sets compression adapter - * - * @param string|Compress\CompressionAlgorithmInterface $adapter Adapter to use - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setAdapter($adapter) - { - if ($adapter instanceof Compress\CompressionAlgorithmInterface) { - $this->adapter = $adapter; - return $this; - } - if (!is_string($adapter)) { - throw new Exception\InvalidArgumentException('Invalid adapter provided; must be string or instance of Zend\\Filter\\Compress\\CompressionAlgorithmInterface'); - } - $this->adapter = $adapter; - - return $this; - } - - /** - * Retrieve adapter options - * - * @return array - */ - public function getAdapterOptions() - { - return $this->adapterOptions; - } - - /** - * Set adapter options - * - * @param array $options - * @return self - */ - public function setAdapterOptions(array $options) - { - $this->adapterOptions = $options; - return $this; - } - - /** - * Get individual or all options from underlying adapter - * - * @param null|string $option - * @return mixed - */ - public function getOptions($option = null) - { - $adapter = $this->getAdapter(); - return $adapter->getOptions($option); - } - - /** - * Calls adapter methods - * - * @param string $method Method to call - * @param string|array $options Options for this method - * @return mixed - * @throws Exception\BadMethodCallException - */ - public function __call($method, $options) - { - $adapter = $this->getAdapter(); - if (!method_exists($adapter, $method)) { - throw new Exception\BadMethodCallException("Unknown method '{$method}'"); - } - - return call_user_func_array(array($adapter, $method), $options); - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Compresses the content $value with the defined settings - * - * @param string $value Content to compress - * @return string The compressed content - */ - public function filter($value) - { - if (!is_string($value)) { - return $value; - } - - return $this->getAdapter()->compress($value); - } -} diff --git a/library/Zend/Filter/Compress/AbstractCompressionAlgorithm.php b/library/Zend/Filter/Compress/AbstractCompressionAlgorithm.php deleted file mode 100755 index b97e68cf1..000000000 --- a/library/Zend/Filter/Compress/AbstractCompressionAlgorithm.php +++ /dev/null @@ -1,77 +0,0 @@ -setOptions($options); - } - } - - /** - * Returns one or all set options - * - * @param string $option (Optional) Option to return - * @return mixed - */ - public function getOptions($option = null) - { - if ($option === null) { - return $this->options; - } - - if (!array_key_exists($option, $this->options)) { - return null; - } - - return $this->options[$option]; - } - - /** - * Sets all or one option - * - * @param array $options - * @return self - */ - public function setOptions(array $options) - { - foreach ($options as $key => $option) { - $method = 'set' . $key; - if (method_exists($this, $method)) { - $this->$method($option); - } - } - - return $this; - } -} diff --git a/library/Zend/Filter/Compress/Bz2.php b/library/Zend/Filter/Compress/Bz2.php deleted file mode 100755 index 79716118b..000000000 --- a/library/Zend/Filter/Compress/Bz2.php +++ /dev/null @@ -1,170 +0,0 @@ - Blocksize to use from 0-9 - * 'archive' => Archive to use - * ) - * - * @var array - */ - protected $options = array( - 'blocksize' => 4, - 'archive' => null, - ); - - /** - * Class constructor - * - * @param null|array|\Traversable $options (Optional) Options to set - * @throws Exception\ExtensionNotLoadedException if bz2 extension not loaded - */ - public function __construct($options = null) - { - if (!extension_loaded('bz2')) { - throw new Exception\ExtensionNotLoadedException('This filter needs the bz2 extension'); - } - parent::__construct($options); - } - - /** - * Returns the set blocksize - * - * @return int - */ - public function getBlocksize() - { - return $this->options['blocksize']; - } - - /** - * Sets a new blocksize - * - * @param int $blocksize - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setBlocksize($blocksize) - { - if (($blocksize < 0) || ($blocksize > 9)) { - throw new Exception\InvalidArgumentException('Blocksize must be between 0 and 9'); - } - - $this->options['blocksize'] = (int) $blocksize; - return $this; - } - - /** - * Returns the set archive - * - * @return string - */ - public function getArchive() - { - return $this->options['archive']; - } - - /** - * Sets the archive to use for de-/compression - * - * @param string $archive Archive to use - * @return self - */ - public function setArchive($archive) - { - $this->options['archive'] = (string) $archive; - return $this; - } - - /** - * Compresses the given content - * - * @param string $content - * @return string - * @throws Exception\RuntimeException - */ - public function compress($content) - { - $archive = $this->getArchive(); - if (!empty($archive)) { - $file = bzopen($archive, 'w'); - if (!$file) { - throw new Exception\RuntimeException("Error opening the archive '" . $archive . "'"); - } - - bzwrite($file, $content); - bzclose($file); - $compressed = true; - } else { - $compressed = bzcompress($content, $this->getBlocksize()); - } - - if (is_int($compressed)) { - throw new Exception\RuntimeException('Error during compression'); - } - - return $compressed; - } - - /** - * Decompresses the given content - * - * @param string $content - * @return string - * @throws Exception\RuntimeException - */ - public function decompress($content) - { - $archive = $this->getArchive(); - - //check if there are null byte characters before doing a file_exists check - if (!strstr($content, "\0") && file_exists($content)) { - $archive = $content; - } - - if (file_exists($archive)) { - $file = bzopen($archive, 'r'); - if (!$file) { - throw new Exception\RuntimeException("Error opening the archive '" . $content . "'"); - } - - $compressed = bzread($file); - bzclose($file); - } else { - $compressed = bzdecompress($content); - } - - if (is_int($compressed)) { - throw new Exception\RuntimeException('Error during decompression'); - } - - return $compressed; - } - - /** - * Returns the adapter name - * - * @return string - */ - public function toString() - { - return 'Bz2'; - } -} diff --git a/library/Zend/Filter/Compress/CompressionAlgorithmInterface.php b/library/Zend/Filter/Compress/CompressionAlgorithmInterface.php deleted file mode 100755 index cf4e5f3cb..000000000 --- a/library/Zend/Filter/Compress/CompressionAlgorithmInterface.php +++ /dev/null @@ -1,39 +0,0 @@ - Compression level 0-9 - * 'mode' => Compression mode, can be 'compress', 'deflate' - * 'archive' => Archive to use - * ) - * - * @var array - */ - protected $options = array( - 'level' => 9, - 'mode' => 'compress', - 'archive' => null, - ); - - /** - * Class constructor - * - * @param null|array|\Traversable $options (Optional) Options to set - * @throws Exception\ExtensionNotLoadedException if zlib extension not loaded - */ - public function __construct($options = null) - { - if (!extension_loaded('zlib')) { - throw new Exception\ExtensionNotLoadedException('This filter needs the zlib extension'); - } - parent::__construct($options); - } - - /** - * Returns the set compression level - * - * @return int - */ - public function getLevel() - { - return $this->options['level']; - } - - /** - * Sets a new compression level - * - * @param int $level - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setLevel($level) - { - if (($level < 0) || ($level > 9)) { - throw new Exception\InvalidArgumentException('Level must be between 0 and 9'); - } - - $this->options['level'] = (int) $level; - return $this; - } - - /** - * Returns the set compression mode - * - * @return string - */ - public function getMode() - { - return $this->options['mode']; - } - - /** - * Sets a new compression mode - * - * @param string $mode Supported are 'compress', 'deflate' and 'file' - * @return self - * @throws Exception\InvalidArgumentException for invalid $mode value - */ - public function setMode($mode) - { - if (($mode != 'compress') && ($mode != 'deflate')) { - throw new Exception\InvalidArgumentException('Given compression mode not supported'); - } - - $this->options['mode'] = $mode; - return $this; - } - - /** - * Returns the set archive - * - * @return string - */ - public function getArchive() - { - return $this->options['archive']; - } - - /** - * Sets the archive to use for de-/compression - * - * @param string $archive Archive to use - * @return self - */ - public function setArchive($archive) - { - $this->options['archive'] = (string) $archive; - return $this; - } - - /** - * Compresses the given content - * - * @param string $content - * @return string - * @throws Exception\RuntimeException if unable to open archive or error during decompression - */ - public function compress($content) - { - $archive = $this->getArchive(); - if (!empty($archive)) { - $file = gzopen($archive, 'w' . $this->getLevel()); - if (!$file) { - throw new Exception\RuntimeException("Error opening the archive '" . $this->options['archive'] . "'"); - } - - gzwrite($file, $content); - gzclose($file); - $compressed = true; - } elseif ($this->options['mode'] == 'deflate') { - $compressed = gzdeflate($content, $this->getLevel()); - } else { - $compressed = gzcompress($content, $this->getLevel()); - } - - if (!$compressed) { - throw new Exception\RuntimeException('Error during compression'); - } - - return $compressed; - } - - /** - * Decompresses the given content - * - * @param string $content - * @return string - * @throws Exception\RuntimeException if unable to open archive or error during decompression - */ - public function decompress($content) - { - $archive = $this->getArchive(); - $mode = $this->getMode(); - - //check if there are null byte characters before doing a file_exists check - if (!strstr($content, "\0") && file_exists($content)) { - $archive = $content; - } - - if (file_exists($archive)) { - $handler = fopen($archive, "rb"); - if (!$handler) { - throw new Exception\RuntimeException("Error opening the archive '" . $archive . "'"); - } - - fseek($handler, -4, SEEK_END); - $packet = fread($handler, 4); - $bytes = unpack("V", $packet); - $size = end($bytes); - fclose($handler); - - $file = gzopen($archive, 'r'); - $compressed = gzread($file, $size); - gzclose($file); - } elseif ($mode == 'deflate') { - $compressed = gzinflate($content); - } else { - $compressed = gzuncompress($content); - } - - if ($compressed === false) { - throw new Exception\RuntimeException('Error during decompression'); - } - - return $compressed; - } - - /** - * Returns the adapter name - * - * @return string - */ - public function toString() - { - return 'Gz'; - } -} diff --git a/library/Zend/Filter/Compress/Lzf.php b/library/Zend/Filter/Compress/Lzf.php deleted file mode 100755 index ea4fd0c60..000000000 --- a/library/Zend/Filter/Compress/Lzf.php +++ /dev/null @@ -1,75 +0,0 @@ - Callback for compression - * 'archive' => Archive to use - * 'password' => Password to use - * 'target' => Target to write the files to - * ) - * - * @var array - */ - protected $options = array( - 'callback' => null, - 'archive' => null, - 'password' => null, - 'target' => '.', - ); - - /** - * Class constructor - * - * @param array $options (Optional) Options to set - * @throws Exception\ExtensionNotLoadedException if rar extension not loaded - */ - public function __construct($options = null) - { - if (!extension_loaded('rar')) { - throw new Exception\ExtensionNotLoadedException('This filter needs the rar extension'); - } - parent::__construct($options); - } - - /** - * Returns the set callback for compression - * - * @return string - */ - public function getCallback() - { - return $this->options['callback']; - } - - /** - * Sets the callback to use - * - * @param string $callback - * @return self - * @throws Exception\InvalidArgumentException if invalid callback provided - */ - public function setCallback($callback) - { - if (!is_callable($callback)) { - throw new Exception\InvalidArgumentException('Invalid callback provided'); - } - - $this->options['callback'] = $callback; - return $this; - } - - /** - * Returns the set archive - * - * @return string - */ - public function getArchive() - { - return $this->options['archive']; - } - - /** - * Sets the archive to use for de-/compression - * - * @param string $archive Archive to use - * @return self - */ - public function setArchive($archive) - { - $archive = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $archive); - $this->options['archive'] = (string) $archive; - - return $this; - } - - /** - * Returns the set password - * - * @return string - */ - public function getPassword() - { - return $this->options['password']; - } - - /** - * Sets the password to use - * - * @param string $password - * @return self - */ - public function setPassword($password) - { - $this->options['password'] = (string) $password; - return $this; - } - - /** - * Returns the set targetpath - * - * @return string - */ - public function getTarget() - { - return $this->options['target']; - } - - /** - * Sets the targetpath to use - * - * @param string $target - * @return self - * @throws Exception\InvalidArgumentException if specified target directory does not exist - */ - public function setTarget($target) - { - if (!file_exists(dirname($target))) { - throw new Exception\InvalidArgumentException("The directory '$target' does not exist"); - } - - $target = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, (string) $target); - $this->options['target'] = $target; - return $this; - } - - /** - * Compresses the given content - * - * @param string|array $content - * @return string - * @throws Exception\RuntimeException if no callback available, or error during compression - */ - public function compress($content) - { - $callback = $this->getCallback(); - if ($callback === null) { - throw new Exception\RuntimeException('No compression callback available'); - } - - $options = $this->getOptions(); - unset($options['callback']); - - $result = call_user_func($callback, $options, $content); - if ($result !== true) { - throw new Exception\RuntimeException('Error compressing the RAR Archive'); - } - - return $this->getArchive(); - } - - /** - * Decompresses the given content - * - * @param string $content - * @return bool - * @throws Exception\RuntimeException if archive not found, cannot be opened, - * or error during decompression - */ - public function decompress($content) - { - if (!file_exists($content)) { - throw new Exception\RuntimeException('RAR Archive not found'); - } - - $archive = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, realpath($content)); - $password = $this->getPassword(); - if ($password !== null) { - $archive = rar_open($archive, $password); - } else { - $archive = rar_open($archive); - } - - if (!$archive) { - throw new Exception\RuntimeException("Error opening the RAR Archive"); - } - - $target = $this->getTarget(); - if (!is_dir($target)) { - $target = dirname($target); - } - - $filelist = rar_list($archive); - if (!$filelist) { - throw new Exception\RuntimeException("Error reading the RAR Archive"); - } - - foreach ($filelist as $file) { - $file->extract($target); - } - - rar_close($archive); - return true; - } - - /** - * Returns the adapter name - * - * @return string - */ - public function toString() - { - return 'Rar'; - } -} diff --git a/library/Zend/Filter/Compress/Snappy.php b/library/Zend/Filter/Compress/Snappy.php deleted file mode 100755 index 33a9c6162..000000000 --- a/library/Zend/Filter/Compress/Snappy.php +++ /dev/null @@ -1,77 +0,0 @@ - Archive to use - * 'target' => Target to write the files to - * ) - * - * @var array - */ - protected $options = array( - 'archive' => null, - 'target' => '.', - 'mode' => null, - ); - - /** - * Class constructor - * - * @param array $options (Optional) Options to set - * @throws Exception\ExtensionNotLoadedException if Archive_Tar component not available - */ - public function __construct($options = null) - { - if (!class_exists('Archive_Tar')) { - throw new Exception\ExtensionNotLoadedException( - 'This filter needs PEAR\'s Archive_Tar component. ' - . 'Ensure loading Archive_Tar (registering autoload or require_once)'); - } - - parent::__construct($options); - } - - /** - * Returns the set archive - * - * @return string - */ - public function getArchive() - { - return $this->options['archive']; - } - - /** - * Sets the archive to use for de-/compression - * - * @param string $archive Archive to use - * @return self - */ - public function setArchive($archive) - { - $archive = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, (string) $archive); - $this->options['archive'] = $archive; - - return $this; - } - - /** - * Returns the set target path - * - * @return string - */ - public function getTarget() - { - return $this->options['target']; - } - - /** - * Sets the target path to use - * - * @param string $target - * @return self - * @throws Exception\InvalidArgumentException if target path does not exist - */ - public function setTarget($target) - { - if (!file_exists(dirname($target))) { - throw new Exception\InvalidArgumentException("The directory '$target' does not exist"); - } - - $target = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, (string) $target); - $this->options['target'] = $target; - return $this; - } - - /** - * Returns the set compression mode - * - * @return string - */ - public function getMode() - { - return $this->options['mode']; - } - - /** - * Compression mode to use - * - * Either Gz or Bz2. - * - * @param string $mode - * @return self - * @throws Exception\InvalidArgumentException for invalid $mode values - * @throws Exception\ExtensionNotLoadedException if bz2 mode selected but extension not loaded - * @throws Exception\ExtensionNotLoadedException if gz mode selected but extension not loaded - */ - public function setMode($mode) - { - $mode = strtolower($mode); - if (($mode != 'bz2') && ($mode != 'gz')) { - throw new Exception\InvalidArgumentException("The mode '$mode' is unknown"); - } - - if (($mode == 'bz2') && (!extension_loaded('bz2'))) { - throw new Exception\ExtensionNotLoadedException('This mode needs the bz2 extension'); - } - - if (($mode == 'gz') && (!extension_loaded('zlib'))) { - throw new Exception\ExtensionNotLoadedException('This mode needs the zlib extension'); - } - - $this->options['mode'] = $mode; - return $this; - } - - /** - * Compresses the given content - * - * @param string $content - * @return string - * @throws Exception\RuntimeException if unable to create temporary file - * @throws Exception\RuntimeException if unable to create archive - */ - public function compress($content) - { - $archive = new Archive_Tar($this->getArchive(), $this->getMode()); - if (!file_exists($content)) { - $file = $this->getTarget(); - if (is_dir($file)) { - $file .= DIRECTORY_SEPARATOR . "tar.tmp"; - } - - $result = file_put_contents($file, $content); - if ($result === false) { - throw new Exception\RuntimeException('Error creating the temporary file'); - } - - $content = $file; - } - - if (is_dir($content)) { - // collect all file infos - foreach (new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($content, RecursiveDirectoryIterator::KEY_AS_PATHNAME), - RecursiveIteratorIterator::SELF_FIRST - ) as $directory => $info - ) { - if ($info->isFile()) { - $file[] = $directory; - } - } - - $content = $file; - } - - $result = $archive->create($content); - if ($result === false) { - throw new Exception\RuntimeException('Error creating the Tar archive'); - } - - return $this->getArchive(); - } - - /** - * Decompresses the given content - * - * @param string $content - * @return string - * @throws Exception\RuntimeException if unable to find archive - * @throws Exception\RuntimeException if error occurs decompressing archive - */ - public function decompress($content) - { - $archive = $this->getArchive(); - if (empty($archive) || !file_exists($archive)) { - throw new Exception\RuntimeException('Tar Archive not found'); - } - - $archive = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, realpath($content)); - $archive = new Archive_Tar($archive, $this->getMode()); - $target = $this->getTarget(); - if (!is_dir($target)) { - $target = dirname($target) . DIRECTORY_SEPARATOR; - } - - $result = $archive->extract($target); - if ($result === false) { - throw new Exception\RuntimeException('Error while extracting the Tar archive'); - } - - return $target; - } - - /** - * Returns the adapter name - * - * @return string - */ - public function toString() - { - return 'Tar'; - } -} diff --git a/library/Zend/Filter/Compress/Zip.php b/library/Zend/Filter/Compress/Zip.php deleted file mode 100755 index 5a6f01a09..000000000 --- a/library/Zend/Filter/Compress/Zip.php +++ /dev/null @@ -1,314 +0,0 @@ - Archive to use - * 'password' => Password to use - * 'target' => Target to write the files to - * ) - * - * @var array - */ - protected $options = array( - 'archive' => null, - 'target' => null, - ); - - /** - * Class constructor - * - * @param null|array|\Traversable $options (Optional) Options to set - * @throws Exception\ExtensionNotLoadedException if zip extension not loaded - */ - public function __construct($options = null) - { - if (!extension_loaded('zip')) { - throw new Exception\ExtensionNotLoadedException('This filter needs the zip extension'); - } - parent::__construct($options); - } - - /** - * Returns the set archive - * - * @return string - */ - public function getArchive() - { - return $this->options['archive']; - } - - /** - * Sets the archive to use for de-/compression - * - * @param string $archive Archive to use - * @return self - */ - public function setArchive($archive) - { - $archive = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, (string) $archive); - $this->options['archive'] = $archive; - - return $this; - } - - /** - * Returns the set targetpath - * - * @return string - */ - public function getTarget() - { - return $this->options['target']; - } - - /** - * Sets the target to use - * - * @param string $target - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setTarget($target) - { - if (!file_exists(dirname($target))) { - throw new Exception\InvalidArgumentException("The directory '$target' does not exist"); - } - - $target = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, (string) $target); - $this->options['target'] = $target; - return $this; - } - - /** - * Compresses the given content - * - * @param string $content - * @return string Compressed archive - * @throws Exception\RuntimeException if unable to open zip archive, or error during compression - */ - public function compress($content) - { - $zip = new ZipArchive(); - $res = $zip->open($this->getArchive(), ZipArchive::CREATE | ZipArchive::OVERWRITE); - - if ($res !== true) { - throw new Exception\RuntimeException($this->errorString($res)); - } - - if (file_exists($content)) { - $content = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, realpath($content)); - $basename = substr($content, strrpos($content, DIRECTORY_SEPARATOR) + 1); - if (is_dir($content)) { - $index = strrpos($content, DIRECTORY_SEPARATOR) + 1; - $content .= DIRECTORY_SEPARATOR; - $stack = array($content); - while (!empty($stack)) { - $current = array_pop($stack); - $files = array(); - - $dir = dir($current); - while (false !== ($node = $dir->read())) { - if (($node == '.') || ($node == '..')) { - continue; - } - - if (is_dir($current . $node)) { - array_push($stack, $current . $node . DIRECTORY_SEPARATOR); - } - - if (is_file($current . $node)) { - $files[] = $node; - } - } - - $local = substr($current, $index); - $zip->addEmptyDir(substr($local, 0, -1)); - - foreach ($files as $file) { - $zip->addFile($current . $file, $local . $file); - if ($res !== true) { - throw new Exception\RuntimeException($this->errorString($res)); - } - } - } - } else { - $res = $zip->addFile($content, $basename); - if ($res !== true) { - throw new Exception\RuntimeException($this->errorString($res)); - } - } - } else { - $file = $this->getTarget(); - if (!is_dir($file)) { - $file = basename($file); - } else { - $file = "zip.tmp"; - } - - $res = $zip->addFromString($file, $content); - if ($res !== true) { - throw new Exception\RuntimeException($this->errorString($res)); - } - } - - $zip->close(); - return $this->options['archive']; - } - - /** - * Decompresses the given content - * - * @param string $content - * @return string - * @throws Exception\RuntimeException If archive file not found, target directory not found, - * or error during decompression - */ - public function decompress($content) - { - $archive = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, realpath($content)); - - if (empty($archive) || !file_exists($archive)) { - throw new Exception\RuntimeException('ZIP Archive not found'); - } - - $zip = new ZipArchive(); - $res = $zip->open($archive); - - $target = $this->getTarget(); - if (!empty($target) && !is_dir($target)) { - $target = dirname($target); - } - - if (!empty($target)) { - $target = rtrim($target, '/\\') . DIRECTORY_SEPARATOR; - } - - if (empty($target) || !is_dir($target)) { - throw new Exception\RuntimeException('No target for ZIP decompression set'); - } - - if ($res !== true) { - throw new Exception\RuntimeException($this->errorString($res)); - } - - $res = $zip->extractTo($target); - if ($res !== true) { - throw new Exception\RuntimeException($this->errorString($res)); - } - - $zip->close(); - return $target; - } - - /** - * Returns the proper string based on the given error constant - * - * @param string $error - * @return string - */ - public function errorString($error) - { - switch ($error) { - case ZipArchive::ER_MULTIDISK : - return 'Multidisk ZIP Archives not supported'; - - case ZipArchive::ER_RENAME : - return 'Failed to rename the temporary file for ZIP'; - - case ZipArchive::ER_CLOSE : - return 'Failed to close the ZIP Archive'; - - case ZipArchive::ER_SEEK : - return 'Failure while seeking the ZIP Archive'; - - case ZipArchive::ER_READ : - return 'Failure while reading the ZIP Archive'; - - case ZipArchive::ER_WRITE : - return 'Failure while writing the ZIP Archive'; - - case ZipArchive::ER_CRC : - return 'CRC failure within the ZIP Archive'; - - case ZipArchive::ER_ZIPCLOSED : - return 'ZIP Archive already closed'; - - case ZipArchive::ER_NOENT : - return 'No such file within the ZIP Archive'; - - case ZipArchive::ER_EXISTS : - return 'ZIP Archive already exists'; - - case ZipArchive::ER_OPEN : - return 'Can not open ZIP Archive'; - - case ZipArchive::ER_TMPOPEN : - return 'Failure creating temporary ZIP Archive'; - - case ZipArchive::ER_ZLIB : - return 'ZLib Problem'; - - case ZipArchive::ER_MEMORY : - return 'Memory allocation problem while working on a ZIP Archive'; - - case ZipArchive::ER_CHANGED : - return 'ZIP Entry has been changed'; - - case ZipArchive::ER_COMPNOTSUPP : - return 'Compression method not supported within ZLib'; - - case ZipArchive::ER_EOF : - return 'Premature EOF within ZIP Archive'; - - case ZipArchive::ER_INVAL : - return 'Invalid argument for ZLIB'; - - case ZipArchive::ER_NOZIP : - return 'Given file is no zip archive'; - - case ZipArchive::ER_INTERNAL : - return 'Internal error while working on a ZIP Archive'; - - case ZipArchive::ER_INCONS : - return 'Inconsistent ZIP archive'; - - case ZipArchive::ER_REMOVE : - return 'Can not remove ZIP Archive'; - - case ZipArchive::ER_DELETED : - return 'ZIP Entry has been deleted'; - - default : - return 'Unknown error within ZIP Archive'; - } - } - - /** - * Returns the adapter name - * - * @return string - */ - public function toString() - { - return 'Zip'; - } -} diff --git a/library/Zend/Filter/DateTimeFormatter.php b/library/Zend/Filter/DateTimeFormatter.php deleted file mode 100755 index b24897b2f..000000000 --- a/library/Zend/Filter/DateTimeFormatter.php +++ /dev/null @@ -1,96 +0,0 @@ -setOptions($options); - } - } - - /** - * Set the format string accepted by date() to use when formatting a string - * - * @param string $format - * @return self - */ - public function setFormat($format) - { - $this->format = $format; - - return $this; - } - - /** - * Filter a datetime string by normalizing it to the filters specified format - * - * @param DateTime|string|integer $value - * @throws Exception\InvalidArgumentException - * @return string - */ - public function filter($value) - { - try { - $result = $this->normalizeDateTime($value); - } catch (\Exception $e) { - // DateTime threw an exception, an invalid date string was provided - throw new Exception\InvalidArgumentException('Invalid date string provided', $e->getCode(), $e); - } - - if ($result === false) { - return $value; - } - - return $result; - } - - /** - * Normalize the provided value to a formatted string - * - * @param string|int|DateTime $value - * @return string - */ - protected function normalizeDateTime($value) - { - if ($value === '' || $value === null) { - return $value; - } - - if (!is_string($value) && !is_int($value) && !$value instanceof DateTime) { - return $value; - } - - if (is_int($value)) { - //timestamp - $value = new DateTime('@' . $value); - } elseif (!$value instanceof DateTime) { - $value = new DateTime($value); - } - - return $value->format($this->format); - } -} diff --git a/library/Zend/Filter/Decompress.php b/library/Zend/Filter/Decompress.php deleted file mode 100755 index 3489c70c1..000000000 --- a/library/Zend/Filter/Decompress.php +++ /dev/null @@ -1,46 +0,0 @@ -filter($value); - } - - /** - * Defined by FilterInterface - * - * Decompresses the content $value with the defined settings - * - * @param string $value Content to decompress - * @return string The decompressed content - */ - public function filter($value) - { - if (!is_string($value) && $value !== null) { - return $value; - } - - return $this->getAdapter()->decompress($value); - } -} diff --git a/library/Zend/Filter/Decrypt.php b/library/Zend/Filter/Decrypt.php deleted file mode 100755 index 9c8e8492b..000000000 --- a/library/Zend/Filter/Decrypt.php +++ /dev/null @@ -1,33 +0,0 @@ -adapter->decrypt($value); - } -} diff --git a/library/Zend/Filter/Digits.php b/library/Zend/Filter/Digits.php deleted file mode 100755 index c5e856fbd..000000000 --- a/library/Zend/Filter/Digits.php +++ /dev/null @@ -1,49 +0,0 @@ -setAdapter($options); - } - - /** - * Returns the name of the set adapter - * @todo inconsitent: get adapter should return the adapter and not the name - * - * @return string - */ - public function getAdapter() - { - return $this->adapter->toString(); - } - - /** - * Sets new encryption options - * - * @param string|array $options (Optional) Encryption options - * @return self - * @throws Exception\DomainException - * @throws Exception\InvalidArgumentException - */ - public function setAdapter($options = null) - { - if (is_string($options)) { - $adapter = $options; - } elseif (isset($options['adapter'])) { - $adapter = $options['adapter']; - unset($options['adapter']); - } else { - $adapter = 'BlockCipher'; - } - - if (!is_array($options)) { - $options = array(); - } - - if (class_exists('Zend\Filter\Encrypt\\' . ucfirst($adapter))) { - $adapter = 'Zend\Filter\Encrypt\\' . ucfirst($adapter); - } elseif (!class_exists($adapter)) { - throw new Exception\DomainException( - sprintf('%s expects a valid registry class name; received "%s", which did not resolve', - __METHOD__, - $adapter - )); - } - - $this->adapter = new $adapter($options); - if (!$this->adapter instanceof Encrypt\EncryptionAlgorithmInterface) { - throw new Exception\InvalidArgumentException( - "Encoding adapter '" . $adapter - . "' does not implement Zend\\Filter\\Encrypt\\EncryptionAlgorithmInterface"); - } - - return $this; - } - - /** - * Calls adapter methods - * - * @param string $method Method to call - * @param string|array $options Options for this method - * @return mixed - * @throws Exception\BadMethodCallException - */ - public function __call($method, $options) - { - $part = substr($method, 0, 3); - if ((($part != 'get') && ($part != 'set')) || !method_exists($this->adapter, $method)) { - throw new Exception\BadMethodCallException("Unknown method '{$method}'"); - } - - return call_user_func_array(array($this->adapter, $method), $options); - } - - /** - * Defined by Zend\Filter\Filter - * - * Encrypts the content $value with the defined settings - * - * @param string $value Content to encrypt - * @return string The encrypted content - */ - public function filter($value) - { - if (!is_string($value)) { - return $value; - } - - return $this->adapter->encrypt($value); - } -} diff --git a/library/Zend/Filter/Encrypt/BlockCipher.php b/library/Zend/Filter/Encrypt/BlockCipher.php deleted file mode 100755 index 5b7c13664..000000000 --- a/library/Zend/Filter/Encrypt/BlockCipher.php +++ /dev/null @@ -1,288 +0,0 @@ - encryption key string - * 'key_iteration' => the number of iterations for the PBKDF2 key generation - * 'algorithm => cipher algorithm to use - * 'hash' => algorithm to use for the authentication - * 'vector' => initialization vector - * ) - */ - protected $encryption = array( - 'key_iteration' => 5000, - 'algorithm' => 'aes', - 'hash' => 'sha256', - ); - - /** - * BlockCipher - * - * @var BlockCipher - */ - protected $blockCipher; - - /** - * Internal compression - * - * @var array - */ - protected $compression; - - /** - * Class constructor - * - * @param string|array|Traversable $options Encryption Options - * @throws Exception\RuntimeException - * @throws Exception\InvalidArgumentException - */ - public function __construct($options) - { - try { - $this->blockCipher = CryptBlockCipher::factory('mcrypt', $this->encryption); - } catch (SymmetricException\RuntimeException $e) { - throw new Exception\RuntimeException('The BlockCipher cannot be used without the Mcrypt extension'); - } - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (is_string($options)) { - $options = array('key' => $options); - } elseif (!is_array($options)) { - throw new Exception\InvalidArgumentException('Invalid options argument provided to filter'); - } - - if (array_key_exists('compression', $options)) { - $this->setCompression($options['compression']); - unset($options['compress']); - } - - $this->setEncryption($options); - } - - /** - * Returns the set encryption options - * - * @return array - */ - public function getEncryption() - { - return $this->encryption; - } - - /** - * Sets new encryption options - * - * @param string|array $options Encryption options - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setEncryption($options) - { - if (is_string($options)) { - $this->blockCipher->setKey($options); - $this->encryption['key'] = $options; - return $this; - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Invalid options argument provided to filter'); - } - - $options = $options + $this->encryption; - - if (isset($options['key'])) { - $this->blockCipher->setKey($options['key']); - } - - if (isset($options['algorithm'])) { - try { - $this->blockCipher->setCipherAlgorithm($options['algorithm']); - } catch (CryptException\InvalidArgumentException $e) { - throw new Exception\InvalidArgumentException("The algorithm '{$options['algorithm']}' is not supported"); - } - } - - if (isset($options['hash'])) { - try { - $this->blockCipher->setHashAlgorithm($options['hash']); - } catch (CryptException\InvalidArgumentException $e) { - throw new Exception\InvalidArgumentException("The algorithm '{$options['hash']}' is not supported"); - } - } - - if (isset($options['vector'])) { - $this->setVector($options['vector']); - } - - if (isset($options['key_iteration'])) { - $this->blockCipher->setKeyIteration($options['key_iteration']); - } - - $this->encryption = $options; - - return $this; - } - - /** - * Returns the initialization vector - * - * @return string - */ - public function getVector() - { - return $this->encryption['vector']; - } - - /** - * Set the inizialization vector - * - * @param string $vector - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setVector($vector) - { - try { - $this->blockCipher->setSalt($vector); - } catch (CryptException\InvalidArgumentException $e) { - throw new Exception\InvalidArgumentException($e->getMessage()); - } - $this->encryption['vector'] = $vector; - return $this; - } - - /** - * Set the encryption key - * - * @param string $key - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setKey($key) - { - try { - $this->blockCipher->setKey($key); - } catch (CryptException\InvalidArgumentException $e) { - throw new Exception\InvalidArgumentException($e->getMessage()); - } - $this->encryption['key'] = $key; - return $this; - } - - /** - * Get the encryption key - * - * @return string - */ - public function getKey() - { - return $this->encryption['key']; - } - - /** - * Returns the compression - * - * @return array - */ - public function getCompression() - { - return $this->compression; - } - - /** - * Sets an internal compression for values to encrypt - * - * @param string|array $compression - * @return self - */ - public function setCompression($compression) - { - if (is_string($this->compression)) { - $compression = array('adapter' => $compression); - } - - $this->compression = $compression; - return $this; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Encrypts $value with the defined settings - * - * @param string $value The content to encrypt - * @throws Exception\InvalidArgumentException - * @return string The encrypted content - */ - public function encrypt($value) - { - // compress prior to encryption - if (!empty($this->compression)) { - $compress = new Compress($this->compression); - $value = $compress($value); - } - - try { - $encrypted = $this->blockCipher->encrypt($value); - } catch (CryptException\InvalidArgumentException $e) { - throw new Exception\InvalidArgumentException($e->getMessage()); - } - return $encrypted; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Decrypts $value with the defined settings - * - * @param string $value Content to decrypt - * @return string The decrypted content - */ - public function decrypt($value) - { - $decrypted = $this->blockCipher->decrypt($value); - - // decompress after decryption - if (!empty($this->compression)) { - $decompress = new Decompress($this->compression); - $decrypted = $decompress($decrypted); - } - - return $decrypted; - } - - /** - * Returns the adapter name - * - * @return string - */ - public function toString() - { - return 'BlockCipher'; - } -} diff --git a/library/Zend/Filter/Encrypt/EncryptionAlgorithmInterface.php b/library/Zend/Filter/Encrypt/EncryptionAlgorithmInterface.php deleted file mode 100755 index faf0c518c..000000000 --- a/library/Zend/Filter/Encrypt/EncryptionAlgorithmInterface.php +++ /dev/null @@ -1,39 +0,0 @@ - public keys - * 'private' => private keys - * 'envelope' => resulting envelope keys - * ) - */ - protected $keys = array( - 'public' => array(), - 'private' => array(), - 'envelope' => array(), - ); - - /** - * Internal passphrase - * - * @var string - */ - protected $passphrase; - - /** - * Internal compression - * - * @var array - */ - protected $compression; - - /** - * Internal create package - * - * @var bool - */ - protected $package = false; - - /** - * Class constructor - * Available options - * 'public' => public key - * 'private' => private key - * 'envelope' => envelope key - * 'passphrase' => passphrase - * 'compression' => compress value with this compression adapter - * 'package' => pack envelope keys into encrypted string, simplifies decryption - * - * @param string|array|Traversable $options Options for this adapter - * @throws Exception\ExtensionNotLoadedException - */ - public function __construct($options = array()) - { - if (!extension_loaded('openssl')) { - throw new Exception\ExtensionNotLoadedException('This filter needs the openssl extension'); - } - - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - $options = array('public' => $options); - } - - if (array_key_exists('passphrase', $options)) { - $this->setPassphrase($options['passphrase']); - unset($options['passphrase']); - } - - if (array_key_exists('compression', $options)) { - $this->setCompression($options['compression']); - unset($options['compress']); - } - - if (array_key_exists('package', $options)) { - $this->setPackage($options['package']); - unset($options['package']); - } - - $this->_setKeys($options); - } - - /** - * Sets the encryption keys - * - * @param string|array $keys Key with type association - * @return self - * @throws Exception\InvalidArgumentException - */ - protected function _setKeys($keys) - { - if (!is_array($keys)) { - throw new Exception\InvalidArgumentException('Invalid options argument provided to filter'); - } - - foreach ($keys as $type => $key) { - if (is_file($key) and is_readable($key)) { - $file = fopen($key, 'r'); - $cert = fread($file, 8192); - fclose($file); - } else { - $cert = $key; - $key = count($this->keys[$type]); - } - - switch ($type) { - case 'public': - $test = openssl_pkey_get_public($cert); - if ($test === false) { - throw new Exception\InvalidArgumentException("Public key '{$cert}' not valid"); - } - - openssl_free_key($test); - $this->keys['public'][$key] = $cert; - break; - case 'private': - $test = openssl_pkey_get_private($cert, $this->passphrase); - if ($test === false) { - throw new Exception\InvalidArgumentException("Private key '{$cert}' not valid"); - } - - openssl_free_key($test); - $this->keys['private'][$key] = $cert; - break; - case 'envelope': - $this->keys['envelope'][$key] = $cert; - break; - default: - break; - } - } - - return $this; - } - - /** - * Returns all public keys - * - * @return array - */ - public function getPublicKey() - { - $key = $this->keys['public']; - return $key; - } - - /** - * Sets public keys - * - * @param string|array $key Public keys - * @return self - */ - public function setPublicKey($key) - { - if (is_array($key)) { - foreach ($key as $type => $option) { - if ($type !== 'public') { - $key['public'] = $option; - unset($key[$type]); - } - } - } else { - $key = array('public' => $key); - } - - return $this->_setKeys($key); - } - - /** - * Returns all private keys - * - * @return array - */ - public function getPrivateKey() - { - $key = $this->keys['private']; - return $key; - } - - /** - * Sets private keys - * - * @param string $key Private key - * @param string $passphrase - * @return self - */ - public function setPrivateKey($key, $passphrase = null) - { - if (is_array($key)) { - foreach ($key as $type => $option) { - if ($type !== 'private') { - $key['private'] = $option; - unset($key[$type]); - } - } - } else { - $key = array('private' => $key); - } - - if ($passphrase !== null) { - $this->setPassphrase($passphrase); - } - - return $this->_setKeys($key); - } - - /** - * Returns all envelope keys - * - * @return array - */ - public function getEnvelopeKey() - { - $key = $this->keys['envelope']; - return $key; - } - - /** - * Sets envelope keys - * - * @param string|array $key Envelope keys - * @return self - */ - public function setEnvelopeKey($key) - { - if (is_array($key)) { - foreach ($key as $type => $option) { - if ($type !== 'envelope') { - $key['envelope'] = $option; - unset($key[$type]); - } - } - } else { - $key = array('envelope' => $key); - } - - return $this->_setKeys($key); - } - - /** - * Returns the passphrase - * - * @return string - */ - public function getPassphrase() - { - return $this->passphrase; - } - - /** - * Sets a new passphrase - * - * @param string $passphrase - * @return self - */ - public function setPassphrase($passphrase) - { - $this->passphrase = $passphrase; - return $this; - } - - /** - * Returns the compression - * - * @return array - */ - public function getCompression() - { - return $this->compression; - } - - /** - * Sets an internal compression for values to encrypt - * - * @param string|array $compression - * @return self - */ - public function setCompression($compression) - { - if (is_string($this->compression)) { - $compression = array('adapter' => $compression); - } - - $this->compression = $compression; - return $this; - } - - /** - * Returns if header should be packaged - * - * @return bool - */ - public function getPackage() - { - return $this->package; - } - - /** - * Sets if the envelope keys should be included in the encrypted value - * - * @param bool $package - * @return self - */ - public function setPackage($package) - { - $this->package = (bool) $package; - return $this; - } - - /** - * Encrypts $value with the defined settings - * Note that you also need the "encrypted" keys to be able to decrypt - * - * @param string $value Content to encrypt - * @return string The encrypted content - * @throws Exception\RuntimeException - */ - public function encrypt($value) - { - $encrypted = array(); - $encryptedkeys = array(); - - if (count($this->keys['public']) == 0) { - throw new Exception\RuntimeException('Openssl can not encrypt without public keys'); - } - - $keys = array(); - $fingerprints = array(); - $count = -1; - foreach ($this->keys['public'] as $key => $cert) { - $keys[$key] = openssl_pkey_get_public($cert); - if ($this->package) { - $details = openssl_pkey_get_details($keys[$key]); - if ($details === false) { - $details = array('key' => 'ZendFramework'); - } - - ++$count; - $fingerprints[$count] = md5($details['key']); - } - } - - // compress prior to encryption - if (!empty($this->compression)) { - $compress = new Compress($this->compression); - $value = $compress($value); - } - - $crypt = openssl_seal($value, $encrypted, $encryptedkeys, $keys); - foreach ($keys as $key) { - openssl_free_key($key); - } - - if ($crypt === false) { - throw new Exception\RuntimeException('Openssl was not able to encrypt your content with the given options'); - } - - $this->keys['envelope'] = $encryptedkeys; - - // Pack data and envelope keys into single string - if ($this->package) { - $header = pack('n', count($this->keys['envelope'])); - foreach ($this->keys['envelope'] as $key => $envKey) { - $header .= pack('H32n', $fingerprints[$key], strlen($envKey)) . $envKey; - } - - $encrypted = $header . $encrypted; - } - - return $encrypted; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Decrypts $value with the defined settings - * - * @param string $value Content to decrypt - * @return string The decrypted content - * @throws Exception\RuntimeException - */ - public function decrypt($value) - { - $decrypted = ""; - $envelope = current($this->getEnvelopeKey()); - - if (count($this->keys['private']) !== 1) { - throw new Exception\RuntimeException('Please give a private key for decryption with Openssl'); - } - - if (!$this->package && empty($envelope)) { - throw new Exception\RuntimeException('Please give an envelope key for decryption with Openssl'); - } - - foreach ($this->keys['private'] as $cert) { - $keys = openssl_pkey_get_private($cert, $this->getPassphrase()); - } - - if ($this->package) { - $details = openssl_pkey_get_details($keys); - if ($details !== false) { - $fingerprint = md5($details['key']); - } else { - $fingerprint = md5("ZendFramework"); - } - - $count = unpack('ncount', $value); - $count = $count['count']; - $length = 2; - for ($i = $count; $i > 0; --$i) { - $header = unpack('H32print/nsize', substr($value, $length, 18)); - $length += 18; - if ($header['print'] == $fingerprint) { - $envelope = substr($value, $length, $header['size']); - } - - $length += $header['size']; - } - - // remainder of string is the value to decrypt - $value = substr($value, $length); - } - - $crypt = openssl_open($value, $decrypted, $envelope, $keys); - openssl_free_key($keys); - - if ($crypt === false) { - throw new Exception\RuntimeException('Openssl was not able to decrypt you content with the given options'); - } - - // decompress after decryption - if (!empty($this->compression)) { - $decompress = new Decompress($this->compression); - $decrypted = $decompress($decrypted); - } - - return $decrypted; - } - - /** - * Returns the adapter name - * - * @return string - */ - public function toString() - { - return 'Openssl'; - } -} diff --git a/library/Zend/Filter/Exception/BadMethodCallException.php b/library/Zend/Filter/Exception/BadMethodCallException.php deleted file mode 100755 index ae0d3f843..000000000 --- a/library/Zend/Filter/Exception/BadMethodCallException.php +++ /dev/null @@ -1,14 +0,0 @@ -filename; - } - - /** - * Sets the new filename where the content will be stored - * - * @param string $filename (Optional) New filename to set - * @return self - */ - public function setFilename($filename = null) - { - $this->filename = $filename; - return $this; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Decrypts the file $value with the defined settings - * - * @param string|array $value Full path of file to change or $_FILES data array - * @return string|array The filename which has been set - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public function filter($value) - { - if (!is_scalar($value) && !is_array($value)) { - return $value; - } - - // An uploaded file? Retrieve the 'tmp_name' - $isFileUpload = false; - if (is_array($value)) { - if (!isset($value['tmp_name'])) { - return $value; - } - - $isFileUpload = true; - $uploadData = $value; - $value = $value['tmp_name']; - } - - - if (!file_exists($value)) { - throw new Exception\InvalidArgumentException("File '$value' not found"); - } - - if (!isset($this->filename)) { - $this->filename = $value; - } - - if (file_exists($this->filename) and !is_writable($this->filename)) { - throw new Exception\RuntimeException("File '{$this->filename}' is not writable"); - } - - $content = file_get_contents($value); - if (!$content) { - throw new Exception\RuntimeException("Problem while reading file '$value'"); - } - - $decrypted = parent::filter($content); - $result = file_put_contents($this->filename, $decrypted); - - if (!$result) { - throw new Exception\RuntimeException("Problem while writing file '{$this->filename}'"); - } - - if ($isFileUpload) { - $uploadData['tmp_name'] = $this->filename; - return $uploadData; - } - return $this->filename; - } -} diff --git a/library/Zend/Filter/File/Encrypt.php b/library/Zend/Filter/File/Encrypt.php deleted file mode 100755 index 9e32b4ce7..000000000 --- a/library/Zend/Filter/File/Encrypt.php +++ /dev/null @@ -1,107 +0,0 @@ -filename; - } - - /** - * Sets the new filename where the content will be stored - * - * @param string $filename (Optional) New filename to set - * @return self - */ - public function setFilename($filename = null) - { - $this->filename = $filename; - return $this; - } - - /** - * Defined by Zend\Filter\Filter - * - * Encrypts the file $value with the defined settings - * - * @param string|array $value Full path of file to change or $_FILES data array - * @return string|array The filename which has been set, or false when there were errors - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public function filter($value) - { - if (!is_scalar($value) && !is_array($value)) { - return $value; - } - - // An uploaded file? Retrieve the 'tmp_name' - $isFileUpload = false; - if (is_array($value)) { - if (!isset($value['tmp_name'])) { - return $value; - } - - $isFileUpload = true; - $uploadData = $value; - $value = $value['tmp_name']; - } - - if (!file_exists($value)) { - throw new Exception\InvalidArgumentException("File '$value' not found"); - } - - if (!isset($this->filename)) { - $this->filename = $value; - } - - if (file_exists($this->filename) and !is_writable($this->filename)) { - throw new Exception\RuntimeException("File '{$this->filename}' is not writable"); - } - - $content = file_get_contents($value); - if (!$content) { - throw new Exception\RuntimeException("Problem while reading file '$value'"); - } - - $encrypted = parent::filter($content); - $result = file_put_contents($this->filename, $encrypted); - - if (!$result) { - throw new Exception\RuntimeException("Problem while writing file '{$this->filename}'"); - } - - if ($isFileUpload) { - $uploadData['tmp_name'] = $this->filename; - return $uploadData; - } - return $this->filename; - } -} diff --git a/library/Zend/Filter/File/LowerCase.php b/library/Zend/Filter/File/LowerCase.php deleted file mode 100755 index 15d31482e..000000000 --- a/library/Zend/Filter/File/LowerCase.php +++ /dev/null @@ -1,70 +0,0 @@ - Source filename or directory which will be renamed - * 'target' => Target filename or directory, the new name of the source file - * 'overwrite' => Shall existing files be overwritten ? - * 'randomize' => Shall target files have a random postfix attached? - * - * @param string|array|Traversable $options Target file or directory to be renamed - * @throws Exception\InvalidArgumentException - */ - public function __construct($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } elseif (is_string($options)) { - $options = array('target' => $options); - } elseif (!is_array($options)) { - throw new Exception\InvalidArgumentException( - 'Invalid options argument provided to filter' - ); - } - - $this->setFile($options); - } - - /** - * Returns the files to rename and their new name and location - * - * @return array - */ - public function getFile() - { - return $this->files; - } - - /** - * Sets a new file or directory as target, deleting existing ones - * - * Array accepts the following keys: - * 'source' => Source filename or directory which will be renamed - * 'target' => Target filename or directory, the new name of the sourcefile - * 'overwrite' => Shall existing files be overwritten? - * 'randomize' => Shall target files have a random postfix attached? - * - * @param string|array $options Old file or directory to be rewritten - * @return self - */ - public function setFile($options) - { - $this->files = array(); - $this->addFile($options); - - return $this; - } - - /** - * Adds a new file or directory as target to the existing ones - * - * Array accepts the following keys: - * 'source' => Source filename or directory which will be renamed - * 'target' => Target filename or directory, the new name of the sourcefile - * 'overwrite' => Shall existing files be overwritten? - * 'randomize' => Shall target files have a random postfix attached? - * - * @param string|array $options Old file or directory to be rewritten - * @return Rename - * @throws Exception\InvalidArgumentException - */ - public function addFile($options) - { - if (is_string($options)) { - $options = array('target' => $options); - } elseif (!is_array($options)) { - throw new Exception\InvalidArgumentException( - 'Invalid options to rename filter provided' - ); - } - - $this->_convertOptions($options); - - return $this; - } - - /** - * Returns only the new filename without moving it - * But existing files will be erased when the overwrite option is true - * - * @param string $value Full path of file to change - * @param bool $source Return internal informations - * @return string The new filename which has been set - * @throws Exception\InvalidArgumentException If the target file already exists. - */ - public function getNewName($value, $source = false) - { - $file = $this->_getFileName($value); - if (!is_array($file)) { - return $file; - } - - if ($file['source'] == $file['target']) { - return $value; - } - - if (!file_exists($file['source'])) { - return $value; - } - - if ($file['overwrite'] && file_exists($file['target'])) { - unlink($file['target']); - } - - if (file_exists($file['target'])) { - throw new Exception\InvalidArgumentException( - sprintf("File '%s' could not be renamed. It already exists.", $value) - ); - } - - if ($source) { - return $file; - } - - return $file['target']; - } - - /** - * Defined by Zend\Filter\Filter - * - * Renames the file $value to the new name set before - * Returns the file $value, removing all but digit characters - * - * @param string|array $value Full path of file to change or $_FILES data array - * @throws Exception\RuntimeException - * @return string|array The new filename which has been set - */ - public function filter($value) - { - if (!is_scalar($value) && !is_array($value)) { - return $value; - } - - // An uploaded file? Retrieve the 'tmp_name' - $isFileUpload = false; - if (is_array($value)) { - if (!isset($value['tmp_name'])) { - return $value; - } - - $isFileUpload = true; - $uploadData = $value; - $value = $value['tmp_name']; - } - - $file = $this->getNewName($value, true); - if (is_string($file)) { - if ($isFileUpload) { - return $uploadData; - } else { - return $file; - } - } - - $result = rename($file['source'], $file['target']); - - if ($result !== true) { - throw new Exception\RuntimeException( - sprintf( - "File '%s' could not be renamed. " . - "An error occurred while processing the file.", - $value - ) - ); - } - - if ($isFileUpload) { - $uploadData['tmp_name'] = $file['target']; - return $uploadData; - } - return $file['target']; - } - - /** - * Internal method for creating the file array - * Supports single and nested arrays - * - * @param array $options - * @return array - */ - protected function _convertOptions($options) - { - $files = array(); - foreach ($options as $key => $value) { - if (is_array($value)) { - $this->_convertOptions($value); - continue; - } - - switch ($key) { - case "source": - $files['source'] = (string) $value; - break; - - case 'target' : - $files['target'] = (string) $value; - break; - - case 'overwrite' : - $files['overwrite'] = (bool) $value; - break; - - case 'randomize' : - $files['randomize'] = (bool) $value; - break; - - default: - break; - } - } - - if (empty($files)) { - return $this; - } - - if (empty($files['source'])) { - $files['source'] = '*'; - } - - if (empty($files['target'])) { - $files['target'] = '*'; - } - - if (empty($files['overwrite'])) { - $files['overwrite'] = false; - } - - if (empty($files['randomize'])) { - $files['randomize'] = false; - } - - $found = false; - foreach ($this->files as $key => $value) { - if ($value['source'] == $files['source']) { - $this->files[$key] = $files; - $found = true; - } - } - - if (!$found) { - $count = count($this->files); - $this->files[$count] = $files; - } - - return $this; - } - - /** - * Internal method to resolve the requested source - * and return all other related parameters - * - * @param string $file Filename to get the informations for - * @return array|string - */ - protected function _getFileName($file) - { - $rename = array(); - foreach ($this->files as $value) { - if ($value['source'] == '*') { - if (!isset($rename['source'])) { - $rename = $value; - $rename['source'] = $file; - } - } - - if ($value['source'] == $file) { - $rename = $value; - break; - } - } - - if (!isset($rename['source'])) { - return $file; - } - - if (!isset($rename['target']) || $rename['target'] == '*') { - $rename['target'] = $rename['source']; - } - - if (is_dir($rename['target'])) { - $name = basename($rename['source']); - $last = $rename['target'][strlen($rename['target']) - 1]; - if (($last != '/') && ($last != '\\')) { - $rename['target'] .= DIRECTORY_SEPARATOR; - } - - $rename['target'] .= $name; - } - - if ($rename['randomize']) { - $info = pathinfo($rename['target']); - $newTarget = $info['dirname'] . DIRECTORY_SEPARATOR . - $info['filename'] . uniqid('_'); - if (isset($info['extension'])) { - $newTarget .= '.' . $info['extension']; - } - $rename['target'] = $newTarget; - } - - return $rename; - } -} diff --git a/library/Zend/Filter/File/RenameUpload.php b/library/Zend/Filter/File/RenameUpload.php deleted file mode 100755 index e0b5d0b5e..000000000 --- a/library/Zend/Filter/File/RenameUpload.php +++ /dev/null @@ -1,313 +0,0 @@ - null, - 'use_upload_name' => false, - 'use_upload_extension' => false, - 'overwrite' => false, - 'randomize' => false, - ); - - /** - * Store already filtered values, so we can filter multiple - * times the same file without being block by move_uploaded_file - * internal checks - * - * @var array - */ - protected $alreadyFiltered = array(); - - /** - * Constructor - * - * @param array|string $targetOrOptions The target file path or an options array - */ - public function __construct($targetOrOptions) - { - if (is_array($targetOrOptions)) { - $this->setOptions($targetOrOptions); - } else { - $this->setTarget($targetOrOptions); - } - } - - /** - * @param string $target Target file path or directory - * @return self - */ - public function setTarget($target) - { - if (!is_string($target)) { - throw new Exception\InvalidArgumentException( - 'Invalid target, must be a string' - ); - } - $this->options['target'] = $target; - return $this; - } - - /** - * @return string Target file path or directory - */ - public function getTarget() - { - return $this->options['target']; - } - - /** - * @param bool $flag When true, this filter will use the $_FILES['name'] - * as the target filename. - * Otherwise, it uses the default 'target' rules. - * @return self - */ - public function setUseUploadName($flag = true) - { - $this->options['use_upload_name'] = (bool) $flag; - return $this; - } - - /** - * @return bool - */ - public function getUseUploadName() - { - return $this->options['use_upload_name']; - } - - /** - * @param bool $flag When true, this filter will use the original file - * extension for the target filename - * @return self - */ - public function setUseUploadExtension($flag = true) - { - $this->options['use_upload_extension'] = (bool) $flag; - return $this; - } - - /** - * @return bool - */ - public function getUseUploadExtension() - { - return $this->options['use_upload_extension']; - } - - /** - * @param bool $flag Shall existing files be overwritten? - * @return self - */ - public function setOverwrite($flag = true) - { - $this->options['overwrite'] = (bool) $flag; - return $this; - } - - /** - * @return bool - */ - public function getOverwrite() - { - return $this->options['overwrite']; - } - - /** - * @param bool $flag Shall target files have a random postfix attached? - * @return self - */ - public function setRandomize($flag = true) - { - $this->options['randomize'] = (bool) $flag; - return $this; - } - - /** - * @return bool - */ - public function getRandomize() - { - return $this->options['randomize']; - } - - /** - * Defined by Zend\Filter\Filter - * - * Renames the file $value to the new name set before - * Returns the file $value, removing all but digit characters - * - * @param string|array $value Full path of file to change or $_FILES data array - * @throws Exception\RuntimeException - * @return string|array The new filename which has been set, or false when there were errors - */ - public function filter($value) - { - if (!is_scalar($value) && !is_array($value)) { - return $value; - } - - // An uploaded file? Retrieve the 'tmp_name' - $isFileUpload = false; - if (is_array($value)) { - if (!isset($value['tmp_name'])) { - return $value; - } - - $isFileUpload = true; - $uploadData = $value; - $sourceFile = $value['tmp_name']; - } else { - $uploadData = array( - 'tmp_name' => $value, - 'name' => $value, - ); - $sourceFile = $value; - } - - if (isset($this->alreadyFiltered[$sourceFile])) { - return $this->alreadyFiltered[$sourceFile]; - } - - $targetFile = $this->getFinalTarget($uploadData); - if (!file_exists($sourceFile) || $sourceFile == $targetFile) { - return $value; - } - - $this->checkFileExists($targetFile); - $this->moveUploadedFile($sourceFile, $targetFile); - - $return = $targetFile; - if ($isFileUpload) { - $return = $uploadData; - $return['tmp_name'] = $targetFile; - } - - $this->alreadyFiltered[$sourceFile] = $return; - - return $return; - } - - /** - * @param string $sourceFile Source file path - * @param string $targetFile Target file path - * @throws Exception\RuntimeException - * @return bool - */ - protected function moveUploadedFile($sourceFile, $targetFile) - { - ErrorHandler::start(); - $result = move_uploaded_file($sourceFile, $targetFile); - $warningException = ErrorHandler::stop(); - if (!$result || null !== $warningException) { - throw new Exception\RuntimeException( - sprintf("File '%s' could not be renamed. An error occurred while processing the file.", $sourceFile), - 0, $warningException - ); - } - - return $result; - } - - /** - * @param string $targetFile Target file path - * @throws Exception\InvalidArgumentException - */ - protected function checkFileExists($targetFile) - { - if (file_exists($targetFile)) { - if ($this->getOverwrite()) { - unlink($targetFile); - } else { - throw new Exception\InvalidArgumentException( - sprintf("File '%s' could not be renamed. It already exists.", $targetFile) - ); - } - } - } - - /** - * @param array $uploadData $_FILES array - * @return string - */ - protected function getFinalTarget($uploadData) - { - $source = $uploadData['tmp_name']; - $target = $this->getTarget(); - if (!isset($target) || $target == '*') { - $target = $source; - } - - // Get the target directory - if (is_dir($target)) { - $targetDir = $target; - $last = $target[strlen($target) - 1]; - if (($last != '/') && ($last != '\\')) { - $targetDir .= DIRECTORY_SEPARATOR; - } - } else { - $info = pathinfo($target); - $targetDir = $info['dirname'] . DIRECTORY_SEPARATOR; - } - - // Get the target filename - if ($this->getUseUploadName()) { - $targetFile = basename($uploadData['name']); - } elseif (!is_dir($target)) { - $targetFile = basename($target); - if ($this->getUseUploadExtension() && !$this->getRandomize()) { - $targetInfo = pathinfo($targetFile); - $sourceinfo = pathinfo($uploadData['name']); - if (isset($sourceinfo['extension'])) { - $targetFile = $targetInfo['filename'] . '.' . $sourceinfo['extension']; - } - } - } else { - $targetFile = basename($source); - } - - if ($this->getRandomize()) { - $targetFile = $this->applyRandomToFilename($uploadData['name'], $targetFile); - } - - return $targetDir . $targetFile; - } - - /** - * @param string $source - * @param string $filename - * @return string - */ - protected function applyRandomToFilename($source, $filename) - { - $info = pathinfo($filename); - $filename = $info['filename'] . uniqid('_'); - - $sourceinfo = pathinfo($source); - - $extension = ''; - if ($this->getUseUploadExtension() === true && isset($sourceinfo['extension'])) { - $extension .= '.' . $sourceinfo['extension']; - } elseif (isset($info['extension'])) { - $extension .= '.' . $info['extension']; - } - - return $filename . $extension; - } -} diff --git a/library/Zend/Filter/File/UpperCase.php b/library/Zend/Filter/File/UpperCase.php deleted file mode 100755 index 22bf09279..000000000 --- a/library/Zend/Filter/File/UpperCase.php +++ /dev/null @@ -1,70 +0,0 @@ -filters = new PriorityQueue(); - - if (null !== $options) { - $this->setOptions($options); - } - } - - /** - * @param array|Traversable $options - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if (!is_array($options) && !$options instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - 'Expected array or Traversable; received "%s"', - (is_object($options) ? get_class($options) : gettype($options)) - )); - } - - foreach ($options as $key => $value) { - switch (strtolower($key)) { - case 'callbacks': - foreach ($value as $spec) { - $callback = isset($spec['callback']) ? $spec['callback'] : false; - $priority = isset($spec['priority']) ? $spec['priority'] : static::DEFAULT_PRIORITY; - if ($callback) { - $this->attach($callback, $priority); - } - } - break; - case 'filters': - foreach ($value as $spec) { - $name = isset($spec['name']) ? $spec['name'] : false; - $options = isset($spec['options']) ? $spec['options'] : array(); - $priority = isset($spec['priority']) ? $spec['priority'] : static::DEFAULT_PRIORITY; - if ($name) { - $this->attachByName($name, $options, $priority); - } - } - break; - default: - // ignore other options - break; - } - } - - return $this; - } - - /** - * Return the count of attached filters - * - * @return int - */ - public function count() - { - return count($this->filters); - } - - /** - * Get plugin manager instance - * - * @return FilterPluginManager - */ - public function getPluginManager() - { - if (!$this->plugins) { - $this->setPluginManager(new FilterPluginManager()); - } - return $this->plugins; - } - - /** - * Set plugin manager instance - * - * @param FilterPluginManager $plugins - * @return self - */ - public function setPluginManager(FilterPluginManager $plugins) - { - $this->plugins = $plugins; - return $this; - } - - /** - * Retrieve a filter plugin by name - * - * @param mixed $name - * @param array $options - * @return FilterInterface - */ - public function plugin($name, array $options = array()) - { - $plugins = $this->getPluginManager(); - return $plugins->get($name, $options); - } - - /** - * Attach a filter to the chain - * - * @param callable|FilterInterface $callback A Filter implementation or valid PHP callback - * @param int $priority Priority at which to enqueue filter; defaults to 1000 (higher executes earlier) - * @throws Exception\InvalidArgumentException - * @return self - */ - public function attach($callback, $priority = self::DEFAULT_PRIORITY) - { - if (!is_callable($callback)) { - if (!$callback instanceof FilterInterface) { - throw new Exception\InvalidArgumentException(sprintf( - 'Expected a valid PHP callback; received "%s"', - (is_object($callback) ? get_class($callback) : gettype($callback)) - )); - } - $callback = array($callback, 'filter'); - } - $this->filters->insert($callback, $priority); - return $this; - } - - /** - * Attach a filter to the chain using a short name - * - * Retrieves the filter from the attached plugin manager, and then calls attach() - * with the retrieved instance. - * - * @param string $name - * @param mixed $options - * @param int $priority Priority at which to enqueue filter; defaults to 1000 (higher executes earlier) - * @return self - */ - public function attachByName($name, $options = array(), $priority = self::DEFAULT_PRIORITY) - { - if (!is_array($options)) { - $options = (array) $options; - } elseif (empty($options)) { - $options = null; - } - $filter = $this->getPluginManager()->get($name, $options); - return $this->attach($filter, $priority); - } - - /** - * Merge the filter chain with the one given in parameter - * - * @param FilterChain $filterChain - * @return self - */ - public function merge(FilterChain $filterChain) - { - foreach ($filterChain->filters->toArray(PriorityQueue::EXTR_BOTH) as $item) { - $this->attach($item['data'], $item['priority']); - } - - return $this; - } - - /** - * Get all the filters - * - * @return PriorityQueue - */ - public function getFilters() - { - return $this->filters; - } - - /** - * Returns $value filtered through each filter in the chain - * - * Filters are run in the order in which they were added to the chain (FIFO) - * - * @param mixed $value - * @return mixed - */ - public function filter($value) - { - $chain = clone $this->filters; - - $valueFiltered = $value; - foreach ($chain as $filter) { - $valueFiltered = call_user_func($filter, $valueFiltered); - } - - return $valueFiltered; - } - - /** - * Clone filters - */ - public function __clone() - { - $this->filters = clone $this->filters; - } - - /** - * Prepare filter chain for serialization - * - * Plugin manager (property 'plugins') cannot - * be serialized. On wakeup the property remains unset - * and next invocation to getPluginManager() sets - * the default plugin manager instance (FilterPluginManager). - */ - public function __sleep() - { - return array('filters'); - } -} diff --git a/library/Zend/Filter/FilterInterface.php b/library/Zend/Filter/FilterInterface.php deleted file mode 100755 index 2b3c16353..000000000 --- a/library/Zend/Filter/FilterInterface.php +++ /dev/null @@ -1,22 +0,0 @@ - 'Zend\I18n\Filter\Alnum', - 'alpha' => 'Zend\I18n\Filter\Alpha', - 'basename' => 'Zend\Filter\BaseName', - 'boolean' => 'Zend\Filter\Boolean', - 'callback' => 'Zend\Filter\Callback', - 'compress' => 'Zend\Filter\Compress', - 'compressbz2' => 'Zend\Filter\Compress\Bz2', - 'compressgz' => 'Zend\Filter\Compress\Gz', - 'compresslzf' => 'Zend\Filter\Compress\Lzf', - 'compressrar' => 'Zend\Filter\Compress\Rar', - 'compresssnappy' => 'Zend\Filter\Compress\Snappy', - 'compresstar' => 'Zend\Filter\Compress\Tar', - 'compresszip' => 'Zend\Filter\Compress\Zip', - 'datetimeformatter' => 'Zend\Filter\DateTimeFormatter', - 'decompress' => 'Zend\Filter\Decompress', - 'decrypt' => 'Zend\Filter\Decrypt', - 'digits' => 'Zend\Filter\Digits', - 'dir' => 'Zend\Filter\Dir', - 'encrypt' => 'Zend\Filter\Encrypt', - 'encryptblockcipher' => 'Zend\Filter\Encrypt\BlockCipher', - 'encryptopenssl' => 'Zend\Filter\Encrypt\Openssl', - 'filedecrypt' => 'Zend\Filter\File\Decrypt', - 'fileencrypt' => 'Zend\Filter\File\Encrypt', - 'filelowercase' => 'Zend\Filter\File\LowerCase', - 'filerename' => 'Zend\Filter\File\Rename', - 'filerenameupload' => 'Zend\Filter\File\RenameUpload', - 'fileuppercase' => 'Zend\Filter\File\UpperCase', - 'htmlentities' => 'Zend\Filter\HtmlEntities', - 'inflector' => 'Zend\Filter\Inflector', - 'int' => 'Zend\Filter\Int', - 'null' => 'Zend\Filter\Null', - 'numberformat' => 'Zend\I18n\Filter\NumberFormat', - 'numberparse' => 'Zend\I18n\Filter\NumberParse', - 'pregreplace' => 'Zend\Filter\PregReplace', - 'realpath' => 'Zend\Filter\RealPath', - 'stringtolower' => 'Zend\Filter\StringToLower', - 'stringtoupper' => 'Zend\Filter\StringToUpper', - 'stringtrim' => 'Zend\Filter\StringTrim', - 'stripnewlines' => 'Zend\Filter\StripNewlines', - 'striptags' => 'Zend\Filter\StripTags', - 'urinormalize' => 'Zend\Filter\UriNormalize', - 'wordcamelcasetodash' => 'Zend\Filter\Word\CamelCaseToDash', - 'wordcamelcasetoseparator' => 'Zend\Filter\Word\CamelCaseToSeparator', - 'wordcamelcasetounderscore' => 'Zend\Filter\Word\CamelCaseToUnderscore', - 'worddashtocamelcase' => 'Zend\Filter\Word\DashToCamelCase', - 'worddashtoseparator' => 'Zend\Filter\Word\DashToSeparator', - 'worddashtounderscore' => 'Zend\Filter\Word\DashToUnderscore', - 'wordseparatortocamelcase' => 'Zend\Filter\Word\SeparatorToCamelCase', - 'wordseparatortodash' => 'Zend\Filter\Word\SeparatorToDash', - 'wordseparatortoseparator' => 'Zend\Filter\Word\SeparatorToSeparator', - 'wordunderscoretocamelcase' => 'Zend\Filter\Word\UnderscoreToCamelCase', - 'wordunderscoretodash' => 'Zend\Filter\Word\UnderscoreToDash', - 'wordunderscoretoseparator' => 'Zend\Filter\Word\UnderscoreToSeparator', - ); - - /** - * Whether or not to share by default; default to false - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the filter loaded is either a valid callback or an instance - * of FilterInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\RuntimeException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof FilterInterface) { - // we're okay - return; - } - if (is_callable($plugin)) { - // also okay - return; - } - - throw new Exception\RuntimeException(sprintf( - 'Plugin of type %s is invalid; must implement %s\FilterInterface or be callable', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/Filter/HtmlEntities.php b/library/Zend/Filter/HtmlEntities.php deleted file mode 100755 index 2abff010b..000000000 --- a/library/Zend/Filter/HtmlEntities.php +++ /dev/null @@ -1,203 +0,0 @@ -setQuoteStyle($options['quotestyle']); - $this->setEncoding($options['encoding']); - $this->setDoubleQuote($options['doublequote']); - } - - /** - * Returns the quoteStyle option - * - * @return int - */ - public function getQuoteStyle() - { - return $this->quoteStyle; - } - - /** - * Sets the quoteStyle option - * - * @param int $quoteStyle - * @return self Provides a fluent interface - */ - public function setQuoteStyle($quoteStyle) - { - $this->quoteStyle = $quoteStyle; - return $this; - } - - - /** - * Get encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set encoding - * - * @param string $value - * @return self - */ - public function setEncoding($value) - { - $this->encoding = (string) $value; - return $this; - } - - /** - * Returns the charSet option - * - * Proxies to {@link getEncoding()} - * - * @return string - */ - public function getCharSet() - { - return $this->getEncoding(); - } - - /** - * Sets the charSet option - * - * Proxies to {@link setEncoding()} - * - * @param string $charSet - * @return self Provides a fluent interface - */ - public function setCharSet($charSet) - { - return $this->setEncoding($charSet); - } - - /** - * Returns the doubleQuote option - * - * @return bool - */ - public function getDoubleQuote() - { - return $this->doubleQuote; - } - - /** - * Sets the doubleQuote option - * - * @param bool $doubleQuote - * @return self Provides a fluent interface - */ - public function setDoubleQuote($doubleQuote) - { - $this->doubleQuote = (bool) $doubleQuote; - return $this; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Returns the string $value, converting characters to their corresponding HTML entity - * equivalents where they exist - * - * If the value provided is non-scalar, the value will remain unfiltered - * - * @param string $value - * @return string|mixed - * @throws Exception\DomainException on encoding mismatches - */ - public function filter($value) - { - if (!is_scalar($value)) { - return $value; - } - $value = (string) $value; - - $filtered = htmlentities($value, $this->getQuoteStyle(), $this->getEncoding(), $this->getDoubleQuote()); - if (strlen($value) && !strlen($filtered)) { - if (!function_exists('iconv')) { - throw new Exception\DomainException('Encoding mismatch has resulted in htmlentities errors'); - } - $enc = $this->getEncoding(); - $value = iconv('', $this->getEncoding() . '//IGNORE', $value); - $filtered = htmlentities($value, $this->getQuoteStyle(), $enc, $this->getDoubleQuote()); - if (!strlen($filtered)) { - throw new Exception\DomainException('Encoding mismatch has resulted in htmlentities errors'); - } - } - return $filtered; - } -} diff --git a/library/Zend/Filter/Inflector.php b/library/Zend/Filter/Inflector.php deleted file mode 100755 index 4120a68f2..000000000 --- a/library/Zend/Filter/Inflector.php +++ /dev/null @@ -1,472 +0,0 @@ -setOptions($options); - } - - /** - * Retrieve plugin manager - * - * @return FilterPluginManager - */ - public function getPluginManager() - { - if (!$this->pluginManager instanceof FilterPluginManager) { - $this->setPluginManager(new FilterPluginManager()); - } - - return $this->pluginManager; - } - - /** - * Set plugin manager - * - * @param FilterPluginManager $manager - * @return self - */ - public function setPluginManager(FilterPluginManager $manager) - { - $this->pluginManager = $manager; - return $this; - } - - /** - * Set options - * - * @param array|Traversable $options - * @return self - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - // Set plugin manager - if (array_key_exists('pluginManager', $options)) { - if (is_scalar($options['pluginManager']) && class_exists($options['pluginManager'])) { - $options['pluginManager'] = new $options['pluginManager']; - } - $this->setPluginManager($options['pluginManager']); - } - - if (array_key_exists('throwTargetExceptionsOn', $options)) { - $this->setThrowTargetExceptionsOn($options['throwTargetExceptionsOn']); - } - - if (array_key_exists('targetReplacementIdentifier', $options)) { - $this->setTargetReplacementIdentifier($options['targetReplacementIdentifier']); - } - - if (array_key_exists('target', $options)) { - $this->setTarget($options['target']); - } - - if (array_key_exists('rules', $options)) { - $this->addRules($options['rules']); - } - - return $this; - } - - /** - * Set Whether or not the inflector should throw an exception when a replacement - * identifier is still found within an inflected target. - * - * @param bool $throwTargetExceptionsOn - * @return self - */ - public function setThrowTargetExceptionsOn($throwTargetExceptionsOn) - { - $this->throwTargetExceptionsOn = ($throwTargetExceptionsOn == true) ? true : false; - return $this; - } - - /** - * Will exceptions be thrown? - * - * @return bool - */ - public function isThrowTargetExceptionsOn() - { - return $this->throwTargetExceptionsOn; - } - - /** - * Set the Target Replacement Identifier, by default ':' - * - * @param string $targetReplacementIdentifier - * @return self - */ - public function setTargetReplacementIdentifier($targetReplacementIdentifier) - { - if ($targetReplacementIdentifier) { - $this->targetReplacementIdentifier = (string) $targetReplacementIdentifier; - } - - return $this; - } - - /** - * Get Target Replacement Identifier - * - * @return string - */ - public function getTargetReplacementIdentifier() - { - return $this->targetReplacementIdentifier; - } - - /** - * Set a Target - * ex: 'scripts/:controller/:action.:suffix' - * - * @param string $target - * @return self - */ - public function setTarget($target) - { - $this->target = (string) $target; - return $this; - } - - /** - * Retrieve target - * - * @return string - */ - public function getTarget() - { - return $this->target; - } - - /** - * Set Target Reference - * - * @param string $target - * @return self - */ - public function setTargetReference(&$target) - { - $this->target =& $target; - return $this; - } - - /** - * Is the same as calling addRules() with the exception that it - * clears the rules before adding them. - * - * @param array $rules - * @return self - */ - public function setRules(array $rules) - { - $this->clearRules(); - $this->addRules($rules); - return $this; - } - - /** - * Multi-call to setting filter rules. - * - * If prefixed with a ":" (colon), a filter rule will be added. If not - * prefixed, a static replacement will be added. - * - * ex: - * array( - * ':controller' => array('CamelCaseToUnderscore', 'StringToLower'), - * ':action' => array('CamelCaseToUnderscore', 'StringToLower'), - * 'suffix' => 'phtml' - * ); - * - * @param array $rules - * @return self - */ - public function addRules(array $rules) - { - $keys = array_keys($rules); - foreach ($keys as $spec) { - if ($spec[0] == ':') { - $this->addFilterRule($spec, $rules[$spec]); - } else { - $this->setStaticRule($spec, $rules[$spec]); - } - } - - return $this; - } - - /** - * Get rules - * - * By default, returns all rules. If a $spec is provided, will return those - * rules if found, false otherwise. - * - * @param string $spec - * @return array|false - */ - public function getRules($spec = null) - { - if (null !== $spec) { - $spec = $this->_normalizeSpec($spec); - if (isset($this->rules[$spec])) { - return $this->rules[$spec]; - } - return false; - } - - return $this->rules; - } - - /** - * Returns a rule set by setFilterRule(), a numeric index must be provided - * - * @param string $spec - * @param int $index - * @return FilterInterface|false - */ - public function getRule($spec, $index) - { - $spec = $this->_normalizeSpec($spec); - if (isset($this->rules[$spec]) && is_array($this->rules[$spec])) { - if (isset($this->rules[$spec][$index])) { - return $this->rules[$spec][$index]; - } - } - return false; - } - - /** - * Clears the rules currently in the inflector - * - * @return self - */ - public function clearRules() - { - $this->rules = array(); - return $this; - } - - /** - * Set a filtering rule for a spec. $ruleSet can be a string, Filter object - * or an array of strings or filter objects. - * - * @param string $spec - * @param array|string|\Zend\Filter\FilterInterface $ruleSet - * @return self - */ - public function setFilterRule($spec, $ruleSet) - { - $spec = $this->_normalizeSpec($spec); - $this->rules[$spec] = array(); - return $this->addFilterRule($spec, $ruleSet); - } - - /** - * Add a filter rule for a spec - * - * @param mixed $spec - * @param mixed $ruleSet - * @return self - */ - public function addFilterRule($spec, $ruleSet) - { - $spec = $this->_normalizeSpec($spec); - if (!isset($this->rules[$spec])) { - $this->rules[$spec] = array(); - } - - if (!is_array($ruleSet)) { - $ruleSet = array($ruleSet); - } - - if (is_string($this->rules[$spec])) { - $temp = $this->rules[$spec]; - $this->rules[$spec] = array(); - $this->rules[$spec][] = $temp; - } - - foreach ($ruleSet as $rule) { - $this->rules[$spec][] = $this->_getRule($rule); - } - - return $this; - } - - /** - * Set a static rule for a spec. This is a single string value - * - * @param string $name - * @param string $value - * @return self - */ - public function setStaticRule($name, $value) - { - $name = $this->_normalizeSpec($name); - $this->rules[$name] = (string) $value; - return $this; - } - - /** - * Set Static Rule Reference. - * - * This allows a consuming class to pass a property or variable - * in to be referenced when its time to build the output string from the - * target. - * - * @param string $name - * @param mixed $reference - * @return self - */ - public function setStaticRuleReference($name, &$reference) - { - $name = $this->_normalizeSpec($name); - $this->rules[$name] =& $reference; - return $this; - } - - /** - * Inflect - * - * @param string|array $source - * @throws Exception\RuntimeException - * @return string - */ - public function filter($source) - { - // clean source - foreach ((array) $source as $sourceName => $sourceValue) { - $source[ltrim($sourceName, ':')] = $sourceValue; - } - - $pregQuotedTargetReplacementIdentifier = preg_quote($this->targetReplacementIdentifier, '#'); - $processedParts = array(); - - foreach ($this->rules as $ruleName => $ruleValue) { - if (isset($source[$ruleName])) { - if (is_string($ruleValue)) { - // overriding the set rule - $processedParts['#' . $pregQuotedTargetReplacementIdentifier . $ruleName . '#'] = str_replace('\\', '\\\\', $source[$ruleName]); - } elseif (is_array($ruleValue)) { - $processedPart = $source[$ruleName]; - foreach ($ruleValue as $ruleFilter) { - $processedPart = $ruleFilter($processedPart); - } - $processedParts['#' . $pregQuotedTargetReplacementIdentifier . $ruleName . '#'] = str_replace('\\', '\\\\', $processedPart); - } - } elseif (is_string($ruleValue)) { - $processedParts['#' . $pregQuotedTargetReplacementIdentifier . $ruleName . '#'] = str_replace('\\', '\\\\', $ruleValue); - } - } - - // all of the values of processedParts would have been str_replace('\\', '\\\\', ..)'d to disable preg_replace backreferences - $inflectedTarget = preg_replace(array_keys($processedParts), array_values($processedParts), $this->target); - - if ($this->throwTargetExceptionsOn && (preg_match('#(?=' . $pregQuotedTargetReplacementIdentifier.'[A-Za-z]{1})#', $inflectedTarget) == true)) { - throw new Exception\RuntimeException('A replacement identifier ' . $this->targetReplacementIdentifier . ' was found inside the inflected target, perhaps a rule was not satisfied with a target source? Unsatisfied inflected target: ' . $inflectedTarget); - } - - return $inflectedTarget; - } - - /** - * Normalize spec string - * - * @param string $spec - * @return string - */ - protected function _normalizeSpec($spec) - { - return ltrim((string) $spec, ':&'); - } - - /** - * Resolve named filters and convert them to filter objects. - * - * @param string $rule - * @return FilterInterface - */ - protected function _getRule($rule) - { - if ($rule instanceof FilterInterface) { - return $rule; - } - - $rule = (string) $rule; - return $this->getPluginManager()->get($rule); - } -} diff --git a/library/Zend/Filter/Int.php b/library/Zend/Filter/Int.php deleted file mode 100755 index 0f2b80dba..000000000 --- a/library/Zend/Filter/Int.php +++ /dev/null @@ -1,33 +0,0 @@ - 'boolean', - self::TYPE_INTEGER => 'integer', - self::TYPE_EMPTY_ARRAY => 'array', - self::TYPE_STRING => 'string', - self::TYPE_ZERO_STRING => 'zero', - self::TYPE_FLOAT => 'float', - self::TYPE_ALL => 'all', - ); - - /** - * @var array - */ - protected $options = array( - 'type' => self::TYPE_ALL, - ); - - /** - * Constructor - * - * @param string|array|Traversable $typeOrOptions OPTIONAL - */ - public function __construct($typeOrOptions = null) - { - if ($typeOrOptions !== null) { - if ($typeOrOptions instanceof Traversable) { - $typeOrOptions = iterator_to_array($typeOrOptions); - } - - if (is_array($typeOrOptions)) { - if (isset($typeOrOptions['type'])) { - $this->setOptions($typeOrOptions); - } else { - $this->setType($typeOrOptions); - } - } else { - $this->setType($typeOrOptions); - } - } - } - - /** - * Set boolean types - * - * @param int|array $type - * @throws Exception\InvalidArgumentException - * @return self - */ - public function setType($type = null) - { - if (is_array($type)) { - $detected = 0; - foreach ($type as $value) { - if (is_int($value)) { - $detected += $value; - } elseif (in_array($value, $this->constants)) { - $detected += array_search($value, $this->constants); - } - } - - $type = $detected; - } elseif (is_string($type) && in_array($type, $this->constants)) { - $type = array_search($type, $this->constants); - } - - if (!is_int($type) || ($type < 0) || ($type > self::TYPE_ALL)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Unknown type value "%s" (%s)', - $type, - gettype($type) - )); - } - - $this->options['type'] = $type; - return $this; - } - - /** - * Returns defined boolean types - * - * @return int - */ - public function getType() - { - return $this->options['type']; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Returns null representation of $value, if value is empty and matches - * types that should be considered null. - * - * @param string $value - * @return string - */ - public function filter($value) - { - $type = $this->getType(); - - // FLOAT (0.0) - if ($type >= self::TYPE_FLOAT) { - $type -= self::TYPE_FLOAT; - if (is_float($value) && ($value == 0.0)) { - return null; - } - } - - // STRING ZERO ('0') - if ($type >= self::TYPE_ZERO_STRING) { - $type -= self::TYPE_ZERO_STRING; - if (is_string($value) && ($value == '0')) { - return null; - } - } - - // STRING ('') - if ($type >= self::TYPE_STRING) { - $type -= self::TYPE_STRING; - if (is_string($value) && ($value == '')) { - return null; - } - } - - // EMPTY_ARRAY (array()) - if ($type >= self::TYPE_EMPTY_ARRAY) { - $type -= self::TYPE_EMPTY_ARRAY; - if (is_array($value) && ($value == array())) { - return null; - } - } - - // INTEGER (0) - if ($type >= self::TYPE_INTEGER) { - $type -= self::TYPE_INTEGER; - if (is_int($value) && ($value == 0)) { - return null; - } - } - - // BOOLEAN (false) - if ($type >= self::TYPE_BOOLEAN) { - $type -= self::TYPE_BOOLEAN; - if (is_bool($value) && ($value == false)) { - return null; - } - } - - return $value; - } -} diff --git a/library/Zend/Filter/PregReplace.php b/library/Zend/Filter/PregReplace.php deleted file mode 100755 index 9a7e3f3ad..000000000 --- a/library/Zend/Filter/PregReplace.php +++ /dev/null @@ -1,166 +0,0 @@ - null, - 'replacement' => '', - ); - - /** - * Constructor - * Supported options are - * 'pattern' => matching pattern - * 'replacement' => replace with this - * - * @param array|Traversable|string|null $options - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = iterator_to_array($options); - } - - if (!is_array($options) - || (!isset($options['pattern']) && !isset($options['replacement'])) - ) { - $args = func_get_args(); - if (isset($args[0])) { - $this->setPattern($args[0]); - } - if (isset($args[1])) { - $this->setReplacement($args[1]); - } - } else { - $this->setOptions($options); - } - } - - /** - * Set the regex pattern to search for - * @see preg_replace() - * - * @param string|array $pattern - same as the first argument of preg_replace - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setPattern($pattern) - { - if (!is_array($pattern) && !is_string($pattern)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects pattern to be array or string; received "%s"', - __METHOD__, - (is_object($pattern) ? get_class($pattern) : gettype($pattern)) - )); - } - - if (is_array($pattern)) { - foreach ($pattern as $p) { - $this->validatePattern($p); - } - } - - if (is_string($pattern)) { - $this->validatePattern($pattern); - } - - $this->options['pattern'] = $pattern; - return $this; - } - - /** - * Get currently set match pattern - * - * @return string|array - */ - public function getPattern() - { - return $this->options['pattern']; - } - - /** - * Set the replacement array/string - * @see preg_replace() - * - * @param array|string $replacement - same as the second argument of preg_replace - * @return self - * @throws Exception\InvalidArgumentException - */ - public function setReplacement($replacement) - { - if (!is_array($replacement) && !is_string($replacement)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects replacement to be array or string; received "%s"', - __METHOD__, - (is_object($replacement) ? get_class($replacement) : gettype($replacement)) - )); - } - $this->options['replacement'] = $replacement; - return $this; - } - - /** - * Get currently set replacement value - * - * @return string|array - */ - public function getReplacement() - { - return $this->options['replacement']; - } - - /** - * Perform regexp replacement as filter - * - * @param mixed $value - * @return mixed - * @throws Exception\RuntimeException - */ - public function filter($value) - { - if (!is_scalar($value) && !is_array($value)) { - return $value; - } - - if ($this->options['pattern'] === null) { - throw new Exception\RuntimeException(sprintf( - 'Filter %s does not have a valid pattern set', - get_class($this) - )); - } - - return preg_replace($this->options['pattern'], $this->options['replacement'], $value); - } - - /** - * Validate a pattern and ensure it does not contain the "e" modifier - * - * @param string $pattern - * @return bool - * @throws Exception\InvalidArgumentException - */ - protected function validatePattern($pattern) - { - if (!preg_match('/(?[imsxeADSUXJu]+)$/', $pattern, $matches)) { - return true; - } - - if (false !== strstr($matches['modifier'], 'e')) { - throw new Exception\InvalidArgumentException(sprintf( - 'Pattern for a PregReplace filter may not contain the "e" pattern modifier; received "%s"', - $pattern - )); - } - } -} diff --git a/library/Zend/Filter/README.md b/library/Zend/Filter/README.md deleted file mode 100755 index 2aeb60bf2..000000000 --- a/library/Zend/Filter/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Filter Component from ZF2 -========================= - -This is the Filter component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/Filter/RealPath.php b/library/Zend/Filter/RealPath.php deleted file mode 100755 index 00633d5c9..000000000 --- a/library/Zend/Filter/RealPath.php +++ /dev/null @@ -1,122 +0,0 @@ - true - ); - - /** - * Class constructor - * - * @param bool|Traversable $existsOrOptions Options to set - */ - public function __construct($existsOrOptions = true) - { - if ($existsOrOptions !== null) { - if (!static::isOptions($existsOrOptions)) { - $this->setExists($existsOrOptions); - } else { - $this->setOptions($existsOrOptions); - } - } - } - - /** - * Sets if the path has to exist - * TRUE when the path must exist - * FALSE when not existing paths can be given - * - * @param bool $flag Path must exist - * @return self - */ - public function setExists($flag = true) - { - $this->options['exists'] = (bool) $flag; - return $this; - } - - /** - * Returns true if the filtered path must exist - * - * @return bool - */ - public function getExists() - { - return $this->options['exists']; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Returns realpath($value) - * - * If the value provided is non-scalar, the value will remain unfiltered - * - * @param string $value - * @return string|mixed - */ - public function filter($value) - { - if (!is_string($value)) { - return $value; - } - $path = (string) $value; - - if ($this->options['exists']) { - return realpath($path); - } - - ErrorHandler::start(); - $realpath = realpath($path); - ErrorHandler::stop(); - if ($realpath) { - return $realpath; - } - - $drive = ''; - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $path = preg_replace('/[\\\\\/]/', DIRECTORY_SEPARATOR, $path); - if (preg_match('/([a-zA-Z]\:)(.*)/', $path, $matches)) { - list(, $drive, $path) = $matches; - } else { - $cwd = getcwd(); - $drive = substr($cwd, 0, 2); - if (substr($path, 0, 1) != DIRECTORY_SEPARATOR) { - $path = substr($cwd, 3) . DIRECTORY_SEPARATOR . $path; - } - } - } elseif (substr($path, 0, 1) != DIRECTORY_SEPARATOR) { - $path = getcwd() . DIRECTORY_SEPARATOR . $path; - } - - $stack = array(); - $parts = explode(DIRECTORY_SEPARATOR, $path); - foreach ($parts as $dir) { - if (strlen($dir) && $dir !== '.') { - if ($dir == '..') { - array_pop($stack); - } else { - array_push($stack, $dir); - } - } - } - - return $drive . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $stack); - } -} diff --git a/library/Zend/Filter/StaticFilter.php b/library/Zend/Filter/StaticFilter.php deleted file mode 100755 index 2847137b6..000000000 --- a/library/Zend/Filter/StaticFilter.php +++ /dev/null @@ -1,70 +0,0 @@ -setShareByDefault(false); - } - static::$plugins = $manager; - } - - /** - * Get plugin manager for loading filter classes - * - * @return FilterPluginManager - */ - public static function getPluginManager() - { - if (null === static::$plugins) { - static::setPluginManager(new FilterPluginManager()); - } - return static::$plugins; - } - - /** - * Returns a value filtered through a specified filter class, without requiring separate - * instantiation of the filter object. - * - * The first argument of this method is a data input value, that you would have filtered. - * The second argument is a string, which corresponds to the basename of the filter class, - * relative to the Zend\Filter namespace. This method automatically loads the class, - * creates an instance, and applies the filter() method to the data input. You can also pass - * an array of constructor arguments, if they are needed for the filter class. - * - * @param mixed $value - * @param string $classBaseName - * @param array $args OPTIONAL - * @return mixed - * @throws Exception\ExceptionInterface - */ - public static function execute($value, $classBaseName, array $args = array()) - { - $plugins = static::getPluginManager(); - - $filter = $plugins->get($classBaseName, $args); - return $filter->filter($value); - } -} diff --git a/library/Zend/Filter/StringToLower.php b/library/Zend/Filter/StringToLower.php deleted file mode 100755 index 3d6f66a46..000000000 --- a/library/Zend/Filter/StringToLower.php +++ /dev/null @@ -1,62 +0,0 @@ - null, - ); - - /** - * Constructor - * - * @param string|array|Traversable $encodingOrOptions OPTIONAL - */ - public function __construct($encodingOrOptions = null) - { - if ($encodingOrOptions !== null) { - if (!static::isOptions($encodingOrOptions)) { - $this->setEncoding($encodingOrOptions); - } else { - $this->setOptions($encodingOrOptions); - } - } - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Returns the string $value, converting characters to lowercase as necessary - * - * If the value provided is non-scalar, the value will remain unfiltered - * - * @param string $value - * @return string|mixed - */ - public function filter($value) - { - if (!is_scalar($value)) { - return $value; - } - $value = (string) $value; - - if ($this->options['encoding'] !== null) { - return mb_strtolower($value, $this->options['encoding']); - } - - return strtolower($value); - } -} diff --git a/library/Zend/Filter/StringToUpper.php b/library/Zend/Filter/StringToUpper.php deleted file mode 100755 index 7f4c78e12..000000000 --- a/library/Zend/Filter/StringToUpper.php +++ /dev/null @@ -1,62 +0,0 @@ - null, - ); - - /** - * Constructor - * - * @param string|array|Traversable $encodingOrOptions OPTIONAL - */ - public function __construct($encodingOrOptions = null) - { - if ($encodingOrOptions !== null) { - if (!static::isOptions($encodingOrOptions)) { - $this->setEncoding($encodingOrOptions); - } else { - $this->setOptions($encodingOrOptions); - } - } - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Returns the string $value, converting characters to uppercase as necessary - * - * If the value provided is non-scalar, the value will remain unfiltered - * - * @param string $value - * @return string|mixed - */ - public function filter($value) - { - if (!is_scalar($value)) { - return $value; - } - $value = (string) $value; - - if ($this->options['encoding'] !== null) { - return mb_strtoupper($value, $this->options['encoding']); - } - - return strtoupper($value); - } -} diff --git a/library/Zend/Filter/StringTrim.php b/library/Zend/Filter/StringTrim.php deleted file mode 100755 index 2eae7fa36..000000000 --- a/library/Zend/Filter/StringTrim.php +++ /dev/null @@ -1,110 +0,0 @@ - null, - ); - - /** - * Sets filter options - * - * @param string|array|Traversable $charlistOrOptions - */ - public function __construct($charlistOrOptions = null) - { - if ($charlistOrOptions !== null) { - if (!is_array($charlistOrOptions) - && !$charlistOrOptions instanceof Traversable - ) { - $this->setCharList($charlistOrOptions); - } else { - $this->setOptions($charlistOrOptions); - } - } - } - - /** - * Sets the charList option - * - * @param string $charList - * @return self Provides a fluent interface - */ - public function setCharList($charList) - { - if (! strlen($charList)) { - $charList = null; - } - - $this->options['charlist'] = $charList; - - return $this; - } - - /** - * Returns the charList option - * - * @return string|null - */ - public function getCharList() - { - return $this->options['charlist']; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * Returns the string $value with characters stripped from the beginning and end - * - * @param string $value - * @return string - */ - public function filter($value) - { - if (!is_string($value)) { - return $value; - } - $value = (string) $value; - - if (null === $this->options['charlist']) { - return $this->unicodeTrim($value); - } - - return $this->unicodeTrim($value, $this->options['charlist']); - } - - /** - * Unicode aware trim method - * Fixes a PHP problem - * - * @param string $value - * @param string $charlist - * @return string - */ - protected function unicodeTrim($value, $charlist = '\\\\s') - { - $chars = preg_replace( - array('/[\^\-\]\\\]/S', '/\\\{4}/S', '/\//'), - array('\\\\\\0', '\\', '\/'), - $charlist - ); - - $pattern = '/^[' . $chars . ']+|[' . $chars . ']+$/usSD'; - - return preg_replace($pattern, '', $value); - } -} diff --git a/library/Zend/Filter/StripNewlines.php b/library/Zend/Filter/StripNewlines.php deleted file mode 100755 index 481facaa8..000000000 --- a/library/Zend/Filter/StripNewlines.php +++ /dev/null @@ -1,29 +0,0 @@ - Tags which are allowed - * 'allowAttribs' => Attributes which are allowed - * 'allowComments' => Are comments allowed ? - * - * @param string|array|Traversable $options - */ - public function __construct($options = null) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - if ((!is_array($options)) || (is_array($options) && !array_key_exists('allowTags', $options) && - !array_key_exists('allowAttribs', $options) && !array_key_exists('allowComments', $options))) { - $options = func_get_args(); - $temp['allowTags'] = array_shift($options); - if (!empty($options)) { - $temp['allowAttribs'] = array_shift($options); - } - - if (!empty($options)) { - $temp['allowComments'] = array_shift($options); - } - - $options = $temp; - } - - if (array_key_exists('allowTags', $options)) { - $this->setTagsAllowed($options['allowTags']); - } - - if (array_key_exists('allowAttribs', $options)) { - $this->setAttributesAllowed($options['allowAttribs']); - } - } - - /** - * Returns the tagsAllowed option - * - * @return array - */ - public function getTagsAllowed() - { - return $this->tagsAllowed; - } - - /** - * Sets the tagsAllowed option - * - * @param array|string $tagsAllowed - * @return self Provides a fluent interface - */ - public function setTagsAllowed($tagsAllowed) - { - if (!is_array($tagsAllowed)) { - $tagsAllowed = array($tagsAllowed); - } - - foreach ($tagsAllowed as $index => $element) { - // If the tag was provided without attributes - if (is_int($index) && is_string($element)) { - // Canonicalize the tag name - $tagName = strtolower($element); - // Store the tag as allowed with no attributes - $this->tagsAllowed[$tagName] = array(); - } - // Otherwise, if a tag was provided with attributes - elseif (is_string($index) && (is_array($element) || is_string($element))) { - // Canonicalize the tag name - $tagName = strtolower($index); - // Canonicalize the attributes - if (is_string($element)) { - $element = array($element); - } - // Store the tag as allowed with the provided attributes - $this->tagsAllowed[$tagName] = array(); - foreach ($element as $attribute) { - if (is_string($attribute)) { - // Canonicalize the attribute name - $attributeName = strtolower($attribute); - $this->tagsAllowed[$tagName][$attributeName] = null; - } - } - } - } - - return $this; - } - - /** - * Returns the attributesAllowed option - * - * @return array - */ - public function getAttributesAllowed() - { - return $this->attributesAllowed; - } - - /** - * Sets the attributesAllowed option - * - * @param array|string $attributesAllowed - * @return self Provides a fluent interface - */ - public function setAttributesAllowed($attributesAllowed) - { - if (!is_array($attributesAllowed)) { - $attributesAllowed = array($attributesAllowed); - } - - // Store each attribute as allowed - foreach ($attributesAllowed as $attribute) { - if (is_string($attribute)) { - // Canonicalize the attribute name - $attributeName = strtolower($attribute); - $this->attributesAllowed[$attributeName] = null; - } - } - - return $this; - } - - /** - * Defined by Zend\Filter\FilterInterface - * - * If the value provided is non-scalar, the value will remain unfiltered - * - * @todo improve docblock descriptions - * @param string $value - * @return string|mixed - */ - public function filter($value) - { - if (!is_scalar($value)) { - return $value; - } - $value = (string) $value; - - // Strip HTML comments first - while (strpos($value, '' . $link . ''; - } - - return $link; - } - - /** - * Render link elements as string - * - * @param string|int $indent - * @return string - */ - public function toString($indent = null) - { - $indent = (null !== $indent) - ? $this->getWhitespace($indent) - : $this->getIndent(); - - $items = array(); - $this->getContainer()->ksort(); - foreach ($this as $item) { - $items[] = $this->itemToString($item); - } - - return $indent . implode($this->escape($this->getSeparator()) . $indent, $items); - } - - /** - * Create data item for stack - * - * @param array $attributes - * @return stdClass - */ - public function createData(array $attributes) - { - return (object) $attributes; - } - - /** - * Create item for stylesheet link item - * - * @param array $args - * @return stdClass|false Returns false if stylesheet is a duplicate - */ - public function createDataStylesheet(array $args) - { - $rel = 'stylesheet'; - $type = 'text/css'; - $media = 'screen'; - $conditionalStylesheet = false; - $href = array_shift($args); - - if ($this->isDuplicateStylesheet($href)) { - return false; - } - - if (0 < count($args)) { - $media = array_shift($args); - if (is_array($media)) { - $media = implode(',', $media); - } else { - $media = (string) $media; - } - } - if (0 < count($args)) { - $conditionalStylesheet = array_shift($args); - if (!empty($conditionalStylesheet) && is_string($conditionalStylesheet)) { - $conditionalStylesheet = (string) $conditionalStylesheet; - } else { - $conditionalStylesheet = null; - } - } - - if (0 < count($args) && is_array($args[0])) { - $extras = array_shift($args); - $extras = (array) $extras; - } - - $attributes = compact('rel', 'type', 'href', 'media', 'conditionalStylesheet', 'extras'); - - return $this->createData($attributes); - } - - /** - * Is the linked stylesheet a duplicate? - * - * @param string $uri - * @return bool - */ - protected function isDuplicateStylesheet($uri) - { - foreach ($this->getContainer() as $item) { - if (($item->rel == 'stylesheet') && ($item->href == $uri)) { - return true; - } - } - - return false; - } - - /** - * Create item for alternate link item - * - * @param array $args - * @throws Exception\InvalidArgumentException - * @return stdClass - */ - public function createDataAlternate(array $args) - { - if (3 > count($args)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Alternate tags require 3 arguments; %s provided', - count($args) - )); - } - - $rel = 'alternate'; - $href = array_shift($args); - $type = array_shift($args); - $title = array_shift($args); - - if (0 < count($args) && is_array($args[0])) { - $extras = array_shift($args); - $extras = (array) $extras; - - if (isset($extras['media']) && is_array($extras['media'])) { - $extras['media'] = implode(',', $extras['media']); - } - } - - $href = (string) $href; - $type = (string) $type; - $title = (string) $title; - - $attributes = compact('rel', 'href', 'type', 'title', 'extras'); - - return $this->createData($attributes); - } - - /** - * Create item for a prev relationship (mainly used for pagination) - * - * @param array $args - * @return stdClass - */ - public function createDataPrev(array $args) - { - $rel = 'prev'; - $href = (string) array_shift($args); - - $attributes = compact('rel', 'href'); - - return $this->createData($attributes); - } - - /** - * Create item for a prev relationship (mainly used for pagination) - * - * @param array $args - * @return stdClass - */ - public function createDataNext(array $args) - { - $rel = 'next'; - $href = (string) array_shift($args); - - $attributes = compact('rel', 'href'); - - return $this->createData($attributes); - } -} diff --git a/library/Zend/View/Helper/HeadMeta.php b/library/Zend/View/Helper/HeadMeta.php deleted file mode 100755 index 66a0dff59..000000000 --- a/library/Zend/View/Helper/HeadMeta.php +++ /dev/null @@ -1,453 +0,0 @@ -setSeparator(PHP_EOL); - } - - /** - * Retrieve object instance; optionally add meta tag - * - * @param string $content - * @param string $keyValue - * @param string $keyType - * @param array $modifiers - * @param string $placement - * @return HeadMeta - */ - public function __invoke($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Placeholder\Container\AbstractContainer::APPEND) - { - if ((null !== $content) && (null !== $keyValue)) { - $item = $this->createData($keyType, $keyValue, $content, $modifiers); - $action = strtolower($placement); - switch ($action) { - case 'append': - case 'prepend': - case 'set': - $this->$action($item); - break; - default: - $this->append($item); - break; - } - } - - return $this; - } - - /** - * Overload method access - * - * @param string $method - * @param array $args - * @throws Exception\BadMethodCallException - * @return HeadMeta - */ - public function __call($method, $args) - { - if (preg_match('/^(?Pset|(pre|ap)pend|offsetSet)(?PName|HttpEquiv|Property|Itemprop)$/', $method, $matches)) { - $action = $matches['action']; - $type = $this->normalizeType($matches['type']); - $argc = count($args); - $index = null; - - if ('offsetSet' == $action) { - if (0 < $argc) { - $index = array_shift($args); - --$argc; - } - } - - if (2 > $argc) { - throw new Exception\BadMethodCallException( - 'Too few arguments provided; requires key value, and content' - ); - } - - if (3 > $argc) { - $args[] = array(); - } - - $item = $this->createData($type, $args[0], $args[1], $args[2]); - - if ('offsetSet' == $action) { - return $this->offsetSet($index, $item); - } - - $this->$action($item); - - return $this; - } - - return parent::__call($method, $args); - } - - /** - * Render placeholder as string - * - * @param string|int $indent - * @return string - */ - public function toString($indent = null) - { - $indent = (null !== $indent) - ? $this->getWhitespace($indent) - : $this->getIndent(); - - $items = array(); - $this->getContainer()->ksort(); - - try { - foreach ($this as $item) { - $items[] = $this->itemToString($item); - } - } catch (Exception\InvalidArgumentException $e) { - trigger_error($e->getMessage(), E_USER_WARNING); - return ''; - } - - return $indent . implode($this->escape($this->getSeparator()) . $indent, $items); - } - - /** - * Create data item for inserting into stack - * - * @param string $type - * @param string $typeValue - * @param string $content - * @param array $modifiers - * @return stdClass - */ - public function createData($type, $typeValue, $content, array $modifiers) - { - $data = new stdClass; - $data->type = $type; - $data->$type = $typeValue; - $data->content = $content; - $data->modifiers = $modifiers; - - return $data; - } - - /** - * Build meta HTML string - * - * @param stdClass $item - * @throws Exception\InvalidArgumentException - * @return string - */ - public function itemToString(stdClass $item) - { - if (!in_array($item->type, $this->typeKeys)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid type "%s" provided for meta', - $item->type - )); - } - $type = $item->type; - - $modifiersString = ''; - foreach ($item->modifiers as $key => $value) { - if ($this->view->plugin('doctype')->isHtml5() - && $key == 'scheme' - ) { - throw new Exception\InvalidArgumentException( - 'Invalid modifier "scheme" provided; not supported by HTML5' - ); - } - if (!in_array($key, $this->modifierKeys)) { - continue; - } - $modifiersString .= $key . '="' . $this->escape($value) . '" '; - } - - $modifiersString = rtrim($modifiersString); - - if ('' != $modifiersString) { - $modifiersString = ' ' . $modifiersString; - } - - if (method_exists($this->view, 'plugin')) { - if ($this->view->plugin('doctype')->isHtml5() - && $type == 'charset' - ) { - $tpl = ($this->view->plugin('doctype')->isXhtml()) - ? '' - : ''; - } elseif ($this->view->plugin('doctype')->isXhtml()) { - $tpl = ''; - } else { - $tpl = ''; - } - } else { - $tpl = ''; - } - - $meta = sprintf( - $tpl, - $type, - $this->escape($item->$type), - $this->escape($item->content), - $modifiersString - ); - - if (isset($item->modifiers['conditional']) && !empty($item->modifiers['conditional']) && is_string($item->modifiers['conditional'])) { - // inner wrap with comment end and start if !IE - if (str_replace(' ', '', $item->modifiers['conditional']) === '!IE') { - $meta = '' . $meta . ''; - } - - return $meta; - } - - /** - * Normalize type attribute of meta - * - * @param string $type type in CamelCase - * @throws Exception\DomainException - * @return string - */ - protected function normalizeType($type) - { - switch ($type) { - case 'Name': - return 'name'; - case 'HttpEquiv': - return 'http-equiv'; - case 'Property': - return 'property'; - case 'Itemprop': - return 'itemprop'; - default: - throw new Exception\DomainException(sprintf( - 'Invalid type "%s" passed to normalizeType', - $type - )); - } - } - - /** - * Determine if item is valid - * - * @param mixed $item - * @return bool - */ - protected function isValid($item) - { - if ((!$item instanceof stdClass) - || !isset($item->type) - || !isset($item->modifiers) - ) { - return false; - } - - if (!isset($item->content) - && (! $this->view->plugin('doctype')->isHtml5() - || (! $this->view->plugin('doctype')->isHtml5() && $item->type !== 'charset')) - ) { - return false; - } - - // is only supported with doctype html - if (! $this->view->plugin('doctype')->isHtml5() - && $item->type === 'itemprop' - ) { - return false; - } - - // is only supported with doctype RDFa - if (!$this->view->plugin('doctype')->isRdfa() - && $item->type === 'property' - ) { - return false; - } - - return true; - } - - /** - * Append - * - * @param string $value - * @return void - * @throws Exception\InvalidArgumentException - */ - public function append($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid value passed to append; please use appendMeta()' - ); - } - - return $this->getContainer()->append($value); - } - - /** - * OffsetSet - * - * @param string|int $index - * @param string $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function offsetSet($index, $value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid value passed to offsetSet; please use offsetSetName() or offsetSetHttpEquiv()' - ); - } - - return $this->getContainer()->offsetSet($index, $value); - } - - /** - * OffsetUnset - * - * @param string|int $index - * @throws Exception\InvalidArgumentException - * @return void - */ - public function offsetUnset($index) - { - if (!in_array($index, $this->getContainer()->getKeys())) { - throw new Exception\InvalidArgumentException('Invalid index passed to offsetUnset()'); - } - - return $this->getContainer()->offsetUnset($index); - } - - /** - * Prepend - * - * @param string $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function prepend($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid value passed to prepend; please use prependMeta()' - ); - } - - return $this->getContainer()->prepend($value); - } - - /** - * Set - * - * @param string $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function set($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException('Invalid value passed to set; please use setMeta()'); - } - - $container = $this->getContainer(); - foreach ($container->getArrayCopy() as $index => $item) { - if ($item->type == $value->type && $item->{$item->type} == $value->{$value->type}) { - $this->offsetUnset($index); - } - } - - return $this->append($value); - } - - /** - * Create an HTML5-style meta charset tag. Something like - * - * Not valid in a non-HTML5 doctype - * - * @param string $charset - * @return HeadMeta Provides a fluent interface - */ - public function setCharset($charset) - { - $item = new stdClass; - $item->type = 'charset'; - $item->charset = $charset; - $item->content = null; - $item->modifiers = array(); - $this->set($item); - - return $this; - } -} diff --git a/library/Zend/View/Helper/HeadScript.php b/library/Zend/View/Helper/HeadScript.php deleted file mode 100755 index eca0475d3..000000000 --- a/library/Zend/View/Helper/HeadScript.php +++ /dev/null @@ -1,507 +0,0 @@ -setSeparator(PHP_EOL); - } - - /** - * Return headScript object - * - * Returns headScript helper object; optionally, allows specifying a script - * or script file to include. - * - * @param string $mode Script or file - * @param string $spec Script/url - * @param string $placement Append, prepend, or set - * @param array $attrs Array of script attributes - * @param string $type Script type and/or array of script attributes - * @return HeadScript - */ - public function __invoke($mode = self::FILE, $spec = null, $placement = 'APPEND', array $attrs = array(), $type = 'text/javascript') - { - if ((null !== $spec) && is_string($spec)) { - $action = ucfirst(strtolower($mode)); - $placement = strtolower($placement); - switch ($placement) { - case 'set': - case 'prepend': - case 'append': - $action = $placement . $action; - break; - default: - $action = 'append' . $action; - break; - } - $this->$action($spec, $type, $attrs); - } - - return $this; - } - - /** - * Overload method access - * - * @param string $method Method to call - * @param array $args Arguments of method - * @throws Exception\BadMethodCallException if too few arguments or invalid method - * @return HeadScript - */ - public function __call($method, $args) - { - if (preg_match('/^(?Pset|(ap|pre)pend|offsetSet)(?PFile|Script)$/', $method, $matches)) { - if (1 > count($args)) { - throw new Exception\BadMethodCallException(sprintf( - 'Method "%s" requires at least one argument', - $method - )); - } - - $action = $matches['action']; - $mode = strtolower($matches['mode']); - $type = 'text/javascript'; - $attrs = array(); - - if ('offsetSet' == $action) { - $index = array_shift($args); - if (1 > count($args)) { - throw new Exception\BadMethodCallException(sprintf( - 'Method "%s" requires at least two arguments, an index and source', - $method - )); - } - } - - $content = $args[0]; - - if (isset($args[1])) { - $type = (string) $args[1]; - } - if (isset($args[2])) { - $attrs = (array) $args[2]; - } - - switch ($mode) { - case 'script': - $item = $this->createData($type, $attrs, $content); - if ('offsetSet' == $action) { - $this->offsetSet($index, $item); - } else { - $this->$action($item); - } - break; - case 'file': - default: - if (!$this->isDuplicate($content)) { - $attrs['src'] = $content; - $item = $this->createData($type, $attrs); - if ('offsetSet' == $action) { - $this->offsetSet($index, $item); - } else { - $this->$action($item); - } - } - break; - } - - return $this; - } - - return parent::__call($method, $args); - } - - /** - * Retrieve string representation - * - * @param string|int $indent Amount of whitespaces or string to use for indention - * @return string - */ - public function toString($indent = null) - { - $indent = (null !== $indent) - ? $this->getWhitespace($indent) - : $this->getIndent(); - - if ($this->view) { - $useCdata = $this->view->plugin('doctype')->isXhtml() ? true : false; - } else { - $useCdata = $this->useCdata ? true : false; - } - - $escapeStart = ($useCdata) ? '//' : '//-->'; - - $items = array(); - $this->getContainer()->ksort(); - foreach ($this as $item) { - if (!$this->isValid($item)) { - continue; - } - - $items[] = $this->itemToString($item, $indent, $escapeStart, $escapeEnd); - } - - return implode($this->getSeparator(), $items); - } - - /** - * Start capture action - * - * @param mixed $captureType Type of capture - * @param string $type Type of script - * @param array $attrs Attributes of capture - * @throws Exception\RuntimeException - * @return void - */ - public function captureStart($captureType = Placeholder\Container\AbstractContainer::APPEND, $type = 'text/javascript', $attrs = array()) - { - if ($this->captureLock) { - throw new Exception\RuntimeException('Cannot nest headScript captures'); - } - - $this->captureLock = true; - $this->captureType = $captureType; - $this->captureScriptType = $type; - $this->captureScriptAttrs = $attrs; - ob_start(); - } - - /** - * End capture action and store - * - * @return void - */ - public function captureEnd() - { - $content = ob_get_clean(); - $type = $this->captureScriptType; - $attrs = $this->captureScriptAttrs; - $this->captureScriptType = null; - $this->captureScriptAttrs = null; - $this->captureLock = false; - - switch ($this->captureType) { - case Placeholder\Container\AbstractContainer::SET: - case Placeholder\Container\AbstractContainer::PREPEND: - case Placeholder\Container\AbstractContainer::APPEND: - $action = strtolower($this->captureType) . 'Script'; - break; - default: - $action = 'appendScript'; - break; - } - - $this->$action($content, $type, $attrs); - } - - /** - * Create data item containing all necessary components of script - * - * @param string $type Type of data - * @param array $attributes Attributes of data - * @param string $content Content of data - * @return stdClass - */ - public function createData($type, array $attributes, $content = null) - { - $data = new stdClass(); - $data->type = $type; - $data->attributes = $attributes; - $data->source = $content; - - return $data; - } - - /** - * Is the file specified a duplicate? - * - * @param string $file Name of file to check - * @return bool - */ - protected function isDuplicate($file) - { - foreach ($this->getContainer() as $item) { - if (($item->source === null) && array_key_exists('src', $item->attributes) && ($file == $item->attributes['src'])) { - return true; - } - } - - return false; - } - - /** - * Is the script provided valid? - * - * @param mixed $value Is the given script valid? - * @return bool - */ - protected function isValid($value) - { - if ((!$value instanceof stdClass) || !isset($value->type) || (!isset($value->source) && !isset($value->attributes))) { - return false; - } - - return true; - } - - /** - * Create script HTML - * - * @param mixed $item Item to convert - * @param string $indent String to add before the item - * @param string $escapeStart Starting sequence - * @param string $escapeEnd Ending sequence - * @return string - */ - public function itemToString($item, $indent, $escapeStart, $escapeEnd) - { - $attrString = ''; - if (!empty($item->attributes)) { - foreach ($item->attributes as $key => $value) { - if ((!$this->arbitraryAttributesAllowed() && !in_array($key, $this->optionalAttributes)) - || in_array($key, array('conditional', 'noescape'))) { - continue; - } - if ('defer' == $key) { - $value = 'defer'; - } - $attrString .= sprintf(' %s="%s"', $key, ($this->autoEscape) ? $this->escape($value) : $value); - } - } - - $addScriptEscape = !(isset($item->attributes['noescape']) && filter_var($item->attributes['noescape'], FILTER_VALIDATE_BOOLEAN)); - - $type = ($this->autoEscape) ? $this->escape($item->type) : $item->type; - $html = ''; - - if (isset($item->attributes['conditional']) && !empty($item->attributes['conditional']) && is_string($item->attributes['conditional'])) { - // inner wrap with comment end and start if !IE - if (str_replace(' ', '', $item->attributes['conditional']) === '!IE') { - $html = '' . $html . ''; - } else { - $html = $indent . $html; - } - - return $html; - } - - /** - * Override append - * - * @param string $value Append script or file - * @throws Exception\InvalidArgumentException - * @return void - */ - public function append($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid argument passed to append(); please use one of the helper methods, appendScript() or appendFile()' - ); - } - - return $this->getContainer()->append($value); - } - - /** - * Override prepend - * - * @param string $value Prepend script or file - * @throws Exception\InvalidArgumentException - * @return void - */ - public function prepend($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid argument passed to prepend(); please use one of the helper methods, prependScript() or prependFile()' - ); - } - - return $this->getContainer()->prepend($value); - } - - /** - * Override set - * - * @param string $value Set script or file - * @throws Exception\InvalidArgumentException - * @return void - */ - public function set($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid argument passed to set(); please use one of the helper methods, setScript() or setFile()' - ); - } - - return $this->getContainer()->set($value); - } - - /** - * Override offsetSet - * - * @param string|int $index Set script of file offset - * @param mixed $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function offsetSet($index, $value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid argument passed to offsetSet(); please use one of the helper methods, offsetSetScript() or offsetSetFile()' - ); - } - - return $this->getContainer()->offsetSet($index, $value); - } - - /** - * Set flag indicating if arbitrary attributes are allowed - * - * @param bool $flag Set flag - * @return HeadScript - */ - public function setAllowArbitraryAttributes($flag) - { - $this->arbitraryAttributes = (bool) $flag; - return $this; - } - - /** - * Are arbitrary attributes allowed? - * - * @return bool - */ - public function arbitraryAttributesAllowed() - { - return $this->arbitraryAttributes; - } -} diff --git a/library/Zend/View/Helper/HeadStyle.php b/library/Zend/View/Helper/HeadStyle.php deleted file mode 100755 index c6cce3a70..000000000 --- a/library/Zend/View/Helper/HeadStyle.php +++ /dev/null @@ -1,413 +0,0 @@ -setSeparator(PHP_EOL); - } - - /** - * Return headStyle object - * - * Returns headStyle helper object; optionally, allows specifying - * - * @param string $content Stylesheet contents - * @param string $placement Append, prepend, or set - * @param string|array $attributes Optional attributes to utilize - * @return HeadStyle - */ - public function __invoke($content = null, $placement = 'APPEND', $attributes = array()) - { - if ((null !== $content) && is_string($content)) { - switch (strtoupper($placement)) { - case 'SET': - $action = 'setStyle'; - break; - case 'PREPEND': - $action = 'prependStyle'; - break; - case 'APPEND': - default: - $action = 'appendStyle'; - break; - } - $this->$action($content, $attributes); - } - - return $this; - } - - /** - * Overload method calls - * - * @param string $method - * @param array $args - * @throws Exception\BadMethodCallException When no $content provided or invalid method - * @return void - */ - public function __call($method, $args) - { - if (preg_match('/^(?Pset|(ap|pre)pend|offsetSet)(Style)$/', $method, $matches)) { - $index = null; - $argc = count($args); - $action = $matches['action']; - - if ('offsetSet' == $action) { - if (0 < $argc) { - $index = array_shift($args); - --$argc; - } - } - - if (1 > $argc) { - throw new Exception\BadMethodCallException(sprintf( - 'Method "%s" requires minimally content for the stylesheet', - $method - )); - } - - $content = $args[0]; - $attrs = array(); - if (isset($args[1])) { - $attrs = (array) $args[1]; - } - - $item = $this->createData($content, $attrs); - - if ('offsetSet' == $action) { - $this->offsetSet($index, $item); - } else { - $this->$action($item); - } - - return $this; - } - - return parent::__call($method, $args); - } - - /** - * Create string representation of placeholder - * - * @param string|int $indent - * @return string - */ - public function toString($indent = null) - { - $indent = (null !== $indent) - ? $this->getWhitespace($indent) - : $this->getIndent(); - - $items = array(); - $this->getContainer()->ksort(); - foreach ($this as $item) { - if (!$this->isValid($item)) { - continue; - } - $items[] = $this->itemToString($item, $indent); - } - - $return = $indent . implode($this->getSeparator() . $indent, $items); - $return = preg_replace("/(\r\n?|\n)/", '$1' . $indent, $return); - - return $return; - } - - /** - * Start capture action - * - * @param string $type - * @param string $attrs - * @throws Exception\RuntimeException - * @return void - */ - public function captureStart($type = Placeholder\Container\AbstractContainer::APPEND, $attrs = null) - { - if ($this->captureLock) { - throw new Exception\RuntimeException('Cannot nest headStyle captures'); - } - - $this->captureLock = true; - $this->captureAttrs = $attrs; - $this->captureType = $type; - ob_start(); - } - - /** - * End capture action and store - * - * @return void - */ - public function captureEnd() - { - $content = ob_get_clean(); - $attrs = $this->captureAttrs; - $this->captureAttrs = null; - $this->captureLock = false; - - switch ($this->captureType) { - case Placeholder\Container\AbstractContainer::SET: - $this->setStyle($content, $attrs); - break; - case Placeholder\Container\AbstractContainer::PREPEND: - $this->prependStyle($content, $attrs); - break; - case Placeholder\Container\AbstractContainer::APPEND: - default: - $this->appendStyle($content, $attrs); - break; - } - } - - /** - * Create data item for use in stack - * - * @param string $content - * @param array $attributes - * @return stdClass - */ - public function createData($content, array $attributes) - { - if (!isset($attributes['media'])) { - $attributes['media'] = 'screen'; - } elseif (is_array($attributes['media'])) { - $attributes['media'] = implode(',', $attributes['media']); - } - - $data = new stdClass(); - $data->content = $content; - $data->attributes = $attributes; - - return $data; - } - - /** - * Determine if a value is a valid style tag - * - * @param mixed $value - * @return bool - */ - protected function isValid($value) - { - if ((!$value instanceof stdClass) || !isset($value->content) || !isset($value->attributes)) { - return false; - } - - return true; - } - - /** - * Convert content and attributes into valid style tag - * - * @param stdClass $item Item to render - * @param string $indent Indentation to use - * @return string - */ - public function itemToString(stdClass $item, $indent) - { - $attrString = ''; - if (!empty($item->attributes)) { - $enc = 'UTF-8'; - if ($this->view instanceof View\Renderer\RendererInterface - && method_exists($this->view, 'getEncoding') - ) { - $enc = $this->view->getEncoding(); - } - $escaper = $this->getEscaper($enc); - foreach ($item->attributes as $key => $value) { - if (!in_array($key, $this->optionalAttributes)) { - continue; - } - if ('media' == $key) { - if (false === strpos($value, ',')) { - if (!in_array($value, $this->mediaTypes)) { - continue; - } - } else { - $mediaTypes = explode(',', $value); - $value = ''; - foreach ($mediaTypes as $type) { - $type = trim($type); - if (!in_array($type, $this->mediaTypes)) { - continue; - } - $value .= $type .','; - } - $value = substr($value, 0, -1); - } - } - $attrString .= sprintf(' %s="%s"', $key, $escaper->escapeHtmlAttr($value)); - } - } - - $escapeStart = $indent . '' . PHP_EOL; - if (isset($item->attributes['conditional']) - && !empty($item->attributes['conditional']) - && is_string($item->attributes['conditional']) - ) { - $escapeStart = null; - $escapeEnd = null; - } - - $html = ''; - - if (null == $escapeStart && null == $escapeEnd) { - // inner wrap with comment end and start if !IE - if (str_replace(' ', '', $item->attributes['conditional']) === '!IE') { - $html = '' . $html . ''; - } - - return $html; - } - - /** - * Override append to enforce style creation - * - * @param mixed $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function append($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid value passed to append; please use appendStyle()' - ); - } - - return $this->getContainer()->append($value); - } - - /** - * Override offsetSet to enforce style creation - * - * @param string|int $index - * @param mixed $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function offsetSet($index, $value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid value passed to offsetSet; please use offsetSetStyle()' - ); - } - - return $this->getContainer()->offsetSet($index, $value); - } - - /** - * Override prepend to enforce style creation - * - * @param mixed $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function prepend($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException( - 'Invalid value passed to prepend; please use prependStyle()' - ); - } - - return $this->getContainer()->prepend($value); - } - - /** - * Override set to enforce style creation - * - * @param mixed $value - * @throws Exception\InvalidArgumentException - * @return void - */ - public function set($value) - { - if (!$this->isValid($value)) { - throw new Exception\InvalidArgumentException('Invalid value passed to set; please use setStyle()'); - } - - return $this->getContainer()->set($value); - } -} diff --git a/library/Zend/View/Helper/HeadTitle.php b/library/Zend/View/Helper/HeadTitle.php deleted file mode 100755 index 2ea8d78dd..000000000 --- a/library/Zend/View/Helper/HeadTitle.php +++ /dev/null @@ -1,263 +0,0 @@ -getDefaultAttachOrder()) - ? Placeholder\Container\AbstractContainer::APPEND - : $this->getDefaultAttachOrder(); - } - - $title = (string) $title; - if ($title !== '') { - if ($setType == Placeholder\Container\AbstractContainer::SET) { - $this->set($title); - } elseif ($setType == Placeholder\Container\AbstractContainer::PREPEND) { - $this->prepend($title); - } else { - $this->append($title); - } - } - - return $this; - } - - /** - * Render title (wrapped by title tag) - * - * @param string|null $indent - * @return string - */ - public function toString($indent = null) - { - $indent = (null !== $indent) - ? $this->getWhitespace($indent) - : $this->getIndent(); - - $output = $this->renderTitle(); - - return $indent . '' . $output . ''; - } - - /** - * Render title string - * - * @return string - */ - public function renderTitle() - { - $items = array(); - - if (null !== ($translator = $this->getTranslator())) { - foreach ($this as $item) { - $items[] = $translator->translate($item, $this->getTranslatorTextDomain()); - } - } else { - foreach ($this as $item) { - $items[] = $item; - } - } - - $separator = $this->getSeparator(); - $output = ''; - - $prefix = $this->getPrefix(); - if ($prefix) { - $output .= $prefix; - } - - $output .= implode($separator, $items); - - $postfix = $this->getPostfix(); - if ($postfix) { - $output .= $postfix; - } - - $output = ($this->autoEscape) ? $this->escape($output) : $output; - - return $output; - } - - /** - * Set a default order to add titles - * - * @param string $setType - * @throws Exception\DomainException - * @return HeadTitle - */ - public function setDefaultAttachOrder($setType) - { - if (!in_array($setType, array( - Placeholder\Container\AbstractContainer::APPEND, - Placeholder\Container\AbstractContainer::SET, - Placeholder\Container\AbstractContainer::PREPEND - ))) { - throw new Exception\DomainException( - "You must use a valid attach order: 'PREPEND', 'APPEND' or 'SET'" - ); - } - $this->defaultAttachOrder = $setType; - - return $this; - } - - /** - * Get the default attach order, if any. - * - * @return mixed - */ - public function getDefaultAttachOrder() - { - return $this->defaultAttachOrder; - } - - // Translator methods - Good candidate to refactor as a trait with PHP 5.4 - - /** - * Sets translator to use in helper - * - * @param Translator $translator [optional] translator. - * Default is null, which sets no translator. - * @param string $textDomain [optional] text domain - * Default is null, which skips setTranslatorTextDomain - * @return HeadTitle - */ - public function setTranslator(Translator $translator = null, $textDomain = null) - { - $this->translator = $translator; - if (null !== $textDomain) { - $this->setTranslatorTextDomain($textDomain); - } - return $this; - } - - /** - * Returns translator used in helper - * - * @return Translator|null - */ - public function getTranslator() - { - if (! $this->isTranslatorEnabled()) { - return null; - } - - return $this->translator; - } - - /** - * Checks if the helper has a translator - * - * @return bool - */ - public function hasTranslator() - { - return (bool) $this->getTranslator(); - } - - /** - * Sets whether translator is enabled and should be used - * - * @param bool $enabled [optional] whether translator should be used. - * Default is true. - * @return HeadTitle - */ - public function setTranslatorEnabled($enabled = true) - { - $this->translatorEnabled = (bool) $enabled; - return $this; - } - - /** - * Returns whether translator is enabled and should be used - * - * @return bool - */ - public function isTranslatorEnabled() - { - return $this->translatorEnabled; - } - - /** - * Set translation text domain - * - * @param string $textDomain - * @return HeadTitle - */ - public function setTranslatorTextDomain($textDomain = 'default') - { - $this->translatorTextDomain = $textDomain; - return $this; - } - - /** - * Return the translation text domain - * - * @return string - */ - public function getTranslatorTextDomain() - { - return $this->translatorTextDomain; - } -} diff --git a/library/Zend/View/Helper/HelperInterface.php b/library/Zend/View/Helper/HelperInterface.php deleted file mode 100755 index 2d58c01f9..000000000 --- a/library/Zend/View/Helper/HelperInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - $data, 'quality' => 'high'), $params); - - $htmlObject = $this->getView()->plugin('htmlObject'); - return $htmlObject($data, self::TYPE, $attribs, $params, $content); - } -} diff --git a/library/Zend/View/Helper/HtmlList.php b/library/Zend/View/Helper/HtmlList.php deleted file mode 100755 index 29c79c73c..000000000 --- a/library/Zend/View/Helper/HtmlList.php +++ /dev/null @@ -1,58 +0,0 @@ -getView()->plugin('escapeHtml'); - $item = $escaper($item); - } - $list .= '
  • ' . $item . '
  • ' . self::EOL; - } else { - $itemLength = 5 + strlen(self::EOL); - if ($itemLength < strlen($list)) { - $list = substr($list, 0, strlen($list) - $itemLength) - . $this($item, $ordered, $attribs, $escape) . '' . self::EOL; - } else { - $list .= '
  • ' . $this($item, $ordered, $attribs, $escape) . '
  • ' . self::EOL; - } - } - } - - if ($attribs) { - $attribs = $this->htmlAttribs($attribs); - } else { - $attribs = ''; - } - - $tag = ($ordered) ? 'ol' : 'ul'; - - return '<' . $tag . $attribs . '>' . self::EOL . $list . '' . self::EOL; - } -} diff --git a/library/Zend/View/Helper/HtmlObject.php b/library/Zend/View/Helper/HtmlObject.php deleted file mode 100755 index 17c2822f3..000000000 --- a/library/Zend/View/Helper/HtmlObject.php +++ /dev/null @@ -1,63 +0,0 @@ - $data, 'type' => $type), $attribs); - - // Params - $paramHtml = array(); - $closingBracket = $this->getClosingBracket(); - - foreach ($params as $param => $options) { - if (is_string($options)) { - $options = array('value' => $options); - } - - $options = array_merge(array('name' => $param), $options); - - $paramHtml[] = 'htmlAttribs($options) . $closingBracket; - } - - // Content - if (is_array($content)) { - $content = implode(self::EOL, $content); - } - - // Object header - $xhtml = 'htmlAttribs($attribs) . '>' . self::EOL - . implode(self::EOL, $paramHtml) . self::EOL - . ($content ? $content . self::EOL : '') - . ''; - - return $xhtml; - } -} diff --git a/library/Zend/View/Helper/HtmlPage.php b/library/Zend/View/Helper/HtmlPage.php deleted file mode 100755 index ee170c1b0..000000000 --- a/library/Zend/View/Helper/HtmlPage.php +++ /dev/null @@ -1,51 +0,0 @@ - self::ATTRIB_CLASSID); - - /** - * Output a html object tag - * - * @param string $data The html url - * @param array $attribs Attribs for the object tag - * @param array $params Params for in the object tag - * @param string $content Alternative content - * @return string - */ - public function __invoke($data, array $attribs = array(), array $params = array(), $content = null) - { - // Attribs - $attribs = array_merge($this->attribs, $attribs); - - // Params - $params = array_merge(array('data' => $data), $params); - - $htmlObject = $this->getView()->plugin('htmlObject'); - return $htmlObject($data, self::TYPE, $attribs, $params, $content); - } -} diff --git a/library/Zend/View/Helper/HtmlQuicktime.php b/library/Zend/View/Helper/HtmlQuicktime.php deleted file mode 100755 index 629d6efa3..000000000 --- a/library/Zend/View/Helper/HtmlQuicktime.php +++ /dev/null @@ -1,56 +0,0 @@ - self::ATTRIB_CLASSID, 'codebase' => self::ATTRIB_CODEBASE); - - /** - * Output a quicktime movie object tag - * - * @param string $data The quicktime file - * @param array $attribs Attribs for the object tag - * @param array $params Params for in the object tag - * @param string $content Alternative content - * @return string - */ - public function __invoke($data, array $attribs = array(), array $params = array(), $content = null) - { - // Attrs - $attribs = array_merge($this->attribs, $attribs); - - // Params - $params = array_merge(array('src' => $data), $params); - - $htmlObject = $this->getView()->plugin('htmlObject'); - return $htmlObject($data, self::TYPE, $attribs, $params, $content); - } -} diff --git a/library/Zend/View/Helper/Identity.php b/library/Zend/View/Helper/Identity.php deleted file mode 100755 index 4fe145373..000000000 --- a/library/Zend/View/Helper/Identity.php +++ /dev/null @@ -1,69 +0,0 @@ -authenticationService instanceof AuthenticationService) { - throw new Exception\RuntimeException('No AuthenticationService instance provided'); - } - - if (!$this->authenticationService->hasIdentity()) { - return null; - } - - return $this->authenticationService->getIdentity(); - } - - /** - * Set AuthenticationService instance - * - * @param AuthenticationService $authenticationService - * @return Identity - */ - public function setAuthenticationService(AuthenticationService $authenticationService) - { - $this->authenticationService = $authenticationService; - return $this; - } - - /** - * Get AuthenticationService instance - * - * @return AuthenticationService - */ - public function getAuthenticationService() - { - return $this->authenticationService; - } -} diff --git a/library/Zend/View/Helper/InlineScript.php b/library/Zend/View/Helper/InlineScript.php deleted file mode 100755 index 57dace7d6..000000000 --- a/library/Zend/View/Helper/InlineScript.php +++ /dev/null @@ -1,42 +0,0 @@ -response instanceof Response) { - $headers = $this->response->getHeaders(); - $headers->addHeaderLine('Content-Type', 'application/json'); - } - - return $data; - } - - /** - * Set the response object - * - * @param Response $response - * @return Json - */ - public function setResponse(Response $response) - { - $this->response = $response; - return $this; - } -} diff --git a/library/Zend/View/Helper/Layout.php b/library/Zend/View/Helper/Layout.php deleted file mode 100755 index 65b630fb2..000000000 --- a/library/Zend/View/Helper/Layout.php +++ /dev/null @@ -1,98 +0,0 @@ -getRoot(); - } - - return $this->setTemplate($template); - } - - /** - * Get layout template - * - * @return string - */ - public function getLayout() - { - return $this->getRoot()->getTemplate(); - } - - /** - * Get the root view model - * - * @throws Exception\RuntimeException - * @return null|Model - */ - protected function getRoot() - { - $helper = $this->getViewModelHelper(); - - if (!$helper->hasRoot()) { - throw new Exception\RuntimeException(sprintf( - '%s: no view model currently registered as root in renderer', - __METHOD__ - )); - } - - return $helper->getRoot(); - } - - /** - * Set layout template - * - * @param string $template - * @return Layout - */ - public function setTemplate($template) - { - $this->getRoot()->setTemplate((string) $template); - return $this; - } - - /** - * Retrieve the view model helper - * - * @return ViewModel - */ - protected function getViewModelHelper() - { - if (null === $this->viewModelHelper) { - $this->viewModelHelper = $this->getView()->plugin('view_model'); - } - - return $this->viewModelHelper; - } -} diff --git a/library/Zend/View/Helper/Navigation.php b/library/Zend/View/Helper/Navigation.php deleted file mode 100755 index 015a5ec02..000000000 --- a/library/Zend/View/Helper/Navigation.php +++ /dev/null @@ -1,346 +0,0 @@ -setContainer($container); - } - - return $this; - } - - /** - * Magic overload: Proxy to other navigation helpers or the container - * - * Examples of usage from a view script or layout: - * - * // proxy to Menu helper and render container: - * echo $this->navigation()->menu(); - * - * // proxy to Breadcrumbs helper and set indentation: - * $this->navigation()->breadcrumbs()->setIndent(8); - * - * // proxy to container and find all pages with 'blog' route: - * $blogPages = $this->navigation()->findAllByRoute('blog'); - * - * - * @param string $method helper name or method name in container - * @param array $arguments [optional] arguments to pass - * @throws \Zend\View\Exception\ExceptionInterface if proxying to a helper, and the - * helper is not an instance of the - * interface specified in - * {@link findHelper()} - * @throws \Zend\Navigation\Exception\ExceptionInterface if method does not exist in container - * @return mixed returns what the proxied call returns - */ - public function __call($method, array $arguments = array()) - { - // check if call should proxy to another helper - $helper = $this->findHelper($method, false); - if ($helper) { - if ($helper instanceof ServiceLocatorAwareInterface && $this->getServiceLocator()) { - $helper->setServiceLocator($this->getServiceLocator()); - } - return call_user_func_array($helper, $arguments); - } - - // default behaviour: proxy call to container - return parent::__call($method, $arguments); - } - - /** - * Renders helper - * - * @param AbstractContainer $container - * @return string - * @throws Exception\RuntimeException - */ - public function render($container = null) - { - return $this->findHelper($this->getDefaultProxy())->render($container); - } - - /** - * Returns the helper matching $proxy - * - * The helper must implement the interface - * {@link Zend\View\Helper\Navigation\Helper}. - * - * @param string $proxy helper name - * @param bool $strict [optional] whether exceptions should be - * thrown if something goes - * wrong. Default is true. - * @throws Exception\RuntimeException if $strict is true and helper cannot be found - * @return \Zend\View\Helper\Navigation\HelperInterface helper instance - */ - public function findHelper($proxy, $strict = true) - { - $plugins = $this->getPluginManager(); - if (!$plugins->has($proxy)) { - if ($strict) { - throw new Exception\RuntimeException(sprintf( - 'Failed to find plugin for %s', - $proxy - )); - } - return false; - } - - $helper = $plugins->get($proxy); - $container = $this->getContainer(); - $hash = spl_object_hash($container) . spl_object_hash($helper); - - if (!isset($this->injected[$hash])) { - $helper->setContainer(); - $this->inject($helper); - $this->injected[$hash] = true; - } else { - if ($this->getInjectContainer()) { - $helper->setContainer($container); - } - } - - return $helper; - } - - /** - * Injects container, ACL, and translator to the given $helper if this - * helper is configured to do so - * - * @param NavigationHelper $helper helper instance - * @return void - */ - protected function inject(NavigationHelper $helper) - { - if ($this->getInjectContainer() && !$helper->hasContainer()) { - $helper->setContainer($this->getContainer()); - } - - if ($this->getInjectAcl()) { - if (!$helper->hasAcl()) { - $helper->setAcl($this->getAcl()); - } - if (!$helper->hasRole()) { - $helper->setRole($this->getRole()); - } - } - - if ($this->getInjectTranslator() && !$helper->hasTranslator()) { - $helper->setTranslator( - $this->getTranslator(), - $this->getTranslatorTextDomain() - ); - } - } - - /** - * Sets the default proxy to use in {@link render()} - * - * @param string $proxy default proxy - * @return Navigation - */ - public function setDefaultProxy($proxy) - { - $this->defaultProxy = (string) $proxy; - return $this; - } - - /** - * Returns the default proxy to use in {@link render()} - * - * @return string - */ - public function getDefaultProxy() - { - return $this->defaultProxy; - } - - /** - * Sets whether container should be injected when proxying - * - * @param bool $injectContainer - * @return Navigation - */ - public function setInjectContainer($injectContainer = true) - { - $this->injectContainer = (bool) $injectContainer; - return $this; - } - - /** - * Returns whether container should be injected when proxying - * - * @return bool - */ - public function getInjectContainer() - { - return $this->injectContainer; - } - - /** - * Sets whether ACL should be injected when proxying - * - * @param bool $injectAcl - * @return Navigation - */ - public function setInjectAcl($injectAcl = true) - { - $this->injectAcl = (bool) $injectAcl; - return $this; - } - - /** - * Returns whether ACL should be injected when proxying - * - * @return bool - */ - public function getInjectAcl() - { - return $this->injectAcl; - } - - /** - * Sets whether translator should be injected when proxying - * - * @param bool $injectTranslator - * @return Navigation - */ - public function setInjectTranslator($injectTranslator = true) - { - $this->injectTranslator = (bool) $injectTranslator; - return $this; - } - - /** - * Returns whether translator should be injected when proxying - * - * @return bool - */ - public function getInjectTranslator() - { - return $this->injectTranslator; - } - - /** - * Set manager for retrieving navigation helpers - * - * @param Navigation\PluginManager $plugins - * @return Navigation - */ - public function setPluginManager(Navigation\PluginManager $plugins) - { - $renderer = $this->getView(); - if ($renderer) { - $plugins->setRenderer($renderer); - } - $this->plugins = $plugins; - - return $this; - } - - /** - * Retrieve plugin loader for navigation helpers - * - * Lazy-loads an instance of Navigation\HelperLoader if none currently - * registered. - * - * @return Navigation\PluginManager - */ - public function getPluginManager() - { - if (null === $this->plugins) { - $this->setPluginManager(new Navigation\PluginManager()); - } - - return $this->plugins; - } - - /** - * Set the View object - * - * @param Renderer $view - * @return self - */ - public function setView(Renderer $view) - { - parent::setView($view); - if ($view && $this->plugins) { - $this->plugins->setRenderer($view); - } - return $this; - } -} diff --git a/library/Zend/View/Helper/Navigation/AbstractHelper.php b/library/Zend/View/Helper/Navigation/AbstractHelper.php deleted file mode 100755 index 1b997683f..000000000 --- a/library/Zend/View/Helper/Navigation/AbstractHelper.php +++ /dev/null @@ -1,945 +0,0 @@ -getContainer(), $method), - $arguments); - } - - /** - * Magic overload: Proxy to {@link render()}. - * - * This method will trigger an E_USER_ERROR if rendering the helper causes - * an exception to be thrown. - * - * Implements {@link HelperInterface::__toString()}. - * - * @return string - */ - public function __toString() - { - try { - return $this->render(); - } catch (\Exception $e) { - $msg = get_class($e) . ': ' . $e->getMessage(); - trigger_error($msg, E_USER_ERROR); - return ''; - } - } - - /** - * Finds the deepest active page in the given container - * - * @param Navigation\AbstractContainer $container container to search - * @param int|null $minDepth [optional] minimum depth - * required for page to be - * valid. Default is to use - * {@link getMinDepth()}. A - * null value means no minimum - * depth required. - * @param int|null $maxDepth [optional] maximum depth - * a page can have to be - * valid. Default is to use - * {@link getMaxDepth()}. A - * null value means no maximum - * depth required. - * @return array an associative array with - * the values 'depth' and - * 'page', or an empty array - * if not found - */ - public function findActive($container, $minDepth = null, $maxDepth = -1) - { - $this->parseContainer($container); - if (!is_int($minDepth)) { - $minDepth = $this->getMinDepth(); - } - if ((!is_int($maxDepth) || $maxDepth < 0) && null !== $maxDepth) { - $maxDepth = $this->getMaxDepth(); - } - - $found = null; - $foundDepth = -1; - $iterator = new RecursiveIteratorIterator( - $container, - RecursiveIteratorIterator::CHILD_FIRST - ); - - /** @var \Zend\Navigation\Page\AbstractPage $page */ - foreach ($iterator as $page) { - $currDepth = $iterator->getDepth(); - if ($currDepth < $minDepth || !$this->accept($page)) { - // page is not accepted - continue; - } - - if ($page->isActive(false) && $currDepth > $foundDepth) { - // found an active page at a deeper level than before - $found = $page; - $foundDepth = $currDepth; - } - } - - if (is_int($maxDepth) && $foundDepth > $maxDepth) { - while ($foundDepth > $maxDepth) { - if (--$foundDepth < $minDepth) { - $found = null; - break; - } - - $found = $found->getParent(); - if (!$found instanceof AbstractPage) { - $found = null; - break; - } - } - } - - if ($found) { - return array('page' => $found, 'depth' => $foundDepth); - } - - return array(); - } - - /** - * Verifies container and eventually fetches it from service locator if it is a string - * - * @param Navigation\AbstractContainer|string|null $container - * @throws Exception\InvalidArgumentException - */ - protected function parseContainer(&$container = null) - { - if (null === $container) { - return; - } - - if (is_string($container)) { - if (!$this->getServiceLocator()) { - throw new Exception\InvalidArgumentException(sprintf( - 'Attempted to set container with alias "%s" but no ServiceLocator was set', - $container - )); - } - - /** - * Load the navigation container from the root service locator - * - * The navigation container is probably located in Zend\ServiceManager\ServiceManager - * and not in the View\HelperPluginManager. If the set service locator is a - * HelperPluginManager, access the navigation container via the main service locator. - */ - $sl = $this->getServiceLocator(); - if ($sl instanceof View\HelperPluginManager) { - $sl = $sl->getServiceLocator(); - } - $container = $sl->get($container); - return; - } - - if (!$container instanceof Navigation\AbstractContainer) { - throw new Exception\InvalidArgumentException( - 'Container must be a string alias or an instance of ' . - 'Zend\Navigation\AbstractContainer' - ); - } - } - - // Iterator filter methods: - - /** - * Determines whether a page should be accepted when iterating - * - * Default listener may be 'overridden' by attaching listener to 'isAllowed' - * method. Listener must be 'short circuited' if overriding default ACL - * listener. - * - * Rules: - * - If a page is not visible it is not accepted, unless RenderInvisible has - * been set to true - * - If $useAcl is true (default is true): - * - Page is accepted if listener returns true, otherwise false - * - If page is accepted and $recursive is true, the page - * will not be accepted if it is the descendant of a non-accepted page - * - * @param AbstractPage $page page to check - * @param bool $recursive [optional] if true, page will not be - * accepted if it is the descendant of - * a page that is not accepted. Default - * is true - * - * @return bool Whether page should be accepted - */ - public function accept(AbstractPage $page, $recursive = true) - { - $accept = true; - - if (!$page->isVisible(false) && !$this->getRenderInvisible()) { - $accept = false; - } elseif ($this->getUseAcl()) { - $acl = $this->getAcl(); - $role = $this->getRole(); - $params = array('acl' => $acl, 'page' => $page, 'role' => $role); - $accept = $this->isAllowed($params); - } - - if ($accept && $recursive) { - $parent = $page->getParent(); - - if ($parent instanceof AbstractPage) { - $accept = $this->accept($parent, true); - } - } - - return $accept; - } - - /** - * Determines whether a page should be allowed given certain parameters - * - * @param array $params - * @return bool - */ - protected function isAllowed($params) - { - $results = $this->getEventManager()->trigger(__FUNCTION__, $this, $params); - return $results->last(); - } - - // Util methods: - - /** - * Retrieve whitespace representation of $indent - * - * @param int|string $indent - * @return string - */ - protected function getWhitespace($indent) - { - if (is_int($indent)) { - $indent = str_repeat(' ', $indent); - } - - return (string) $indent; - } - - /** - * Converts an associative array to a string of tag attributes. - * - * Overloads {@link View\Helper\AbstractHtmlElement::htmlAttribs()}. - * - * @param array $attribs an array where each key-value pair is converted - * to an attribute name and value - * @return string - */ - protected function htmlAttribs($attribs) - { - // filter out null values and empty string values - foreach ($attribs as $key => $value) { - if ($value === null || (is_string($value) && !strlen($value))) { - unset($attribs[$key]); - } - } - - return parent::htmlAttribs($attribs); - } - - /** - * Returns an HTML string containing an 'a' element for the given page - * - * @param AbstractPage $page page to generate HTML for - * @return string HTML string (Label) - */ - public function htmlify(AbstractPage $page) - { - $label = $this->translate($page->getLabel(), $page->getTextDomain()); - $title = $this->translate($page->getTitle(), $page->getTextDomain()); - - // get attribs for anchor element - $attribs = array( - 'id' => $page->getId(), - 'title' => $title, - 'class' => $page->getClass(), - 'href' => $page->getHref(), - 'target' => $page->getTarget() - ); - - /** @var \Zend\View\Helper\EscapeHtml $escaper */ - $escaper = $this->view->plugin('escapeHtml'); - $label = $escaper($label); - - return 'htmlAttribs($attribs) . '>' . $label . ''; - } - - /** - * Translate a message (for label, title, …) - * - * @param string $message ID of the message to translate - * @param string $textDomain Text domain (category name for the translations) - * @return string Translated message - */ - protected function translate($message, $textDomain = null) - { - if (is_string($message) && !empty($message)) { - if (null !== ($translator = $this->getTranslator())) { - if (null === $textDomain) { - $textDomain = $this->getTranslatorTextDomain(); - } - - return $translator->translate($message, $textDomain); - } - } - - return $message; - } - - /** - * Normalize an ID - * - * Overrides {@link View\Helper\AbstractHtmlElement::normalizeId()}. - * - * @param string $value - * @return string - */ - protected function normalizeId($value) - { - $prefix = get_class($this); - $prefix = strtolower(trim(substr($prefix, strrpos($prefix, '\\')), '\\')); - - return $prefix . '-' . $value; - } - - /** - * Sets ACL to use when iterating pages - * - * Implements {@link HelperInterface::setAcl()}. - * - * @param Acl\AclInterface $acl ACL object. - * @return AbstractHelper - */ - public function setAcl(Acl\AclInterface $acl = null) - { - $this->acl = $acl; - return $this; - } - - /** - * Returns ACL or null if it isn't set using {@link setAcl()} or - * {@link setDefaultAcl()} - * - * Implements {@link HelperInterface::getAcl()}. - * - * @return Acl\AclInterface|null ACL object or null - */ - public function getAcl() - { - if ($this->acl === null && static::$defaultAcl !== null) { - return static::$defaultAcl; - } - - return $this->acl; - } - - /** - * Checks if the helper has an ACL instance - * - * Implements {@link HelperInterface::hasAcl()}. - * - * @return bool - */ - public function hasAcl() - { - if ($this->acl instanceof Acl\Acl - || static::$defaultAcl instanceof Acl\Acl - ) { - return true; - } - - return false; - } - - /** - * Set the event manager. - * - * @param EventManagerInterface $events - * @return AbstractHelper - */ - public function setEventManager(EventManagerInterface $events) - { - $events->setIdentifiers(array( - __CLASS__, - get_called_class(), - )); - - $this->events = $events; - - $this->setDefaultListeners(); - - return $this; - } - - /** - * Get the event manager. - * - * @return EventManagerInterface - */ - public function getEventManager() - { - if (null === $this->events) { - $this->setEventManager(new EventManager()); - } - - return $this->events; - } - - /** - * Sets navigation container the helper operates on by default - * - * Implements {@link HelperInterface::setContainer()}. - * - * @param string|Navigation\AbstractContainer $container Default is null, meaning container will be reset. - * @return AbstractHelper - */ - public function setContainer($container = null) - { - $this->parseContainer($container); - $this->container = $container; - - return $this; - } - - /** - * Returns the navigation container helper operates on by default - * - * Implements {@link HelperInterface::getContainer()}. - * - * If no container is set, a new container will be instantiated and - * stored in the helper. - * - * @return Navigation\AbstractContainer navigation container - */ - public function getContainer() - { - if (null === $this->container) { - $this->container = new Navigation\Navigation(); - } - - return $this->container; - } - - /** - * Checks if the helper has a container - * - * Implements {@link HelperInterface::hasContainer()}. - * - * @return bool - */ - public function hasContainer() - { - return null !== $this->container; - } - - /** - * Set the indentation string for using in {@link render()}, optionally a - * number of spaces to indent with - * - * @param string|int $indent - * @return AbstractHelper - */ - public function setIndent($indent) - { - $this->indent = $this->getWhitespace($indent); - return $this; - } - - /** - * Returns indentation - * - * @return string - */ - public function getIndent() - { - return $this->indent; - } - - /** - * Sets the maximum depth a page can have to be included when rendering - * - * @param int $maxDepth Default is null, which sets no maximum depth. - * @return AbstractHelper - */ - public function setMaxDepth($maxDepth = null) - { - if (null === $maxDepth || is_int($maxDepth)) { - $this->maxDepth = $maxDepth; - } else { - $this->maxDepth = (int) $maxDepth; - } - - return $this; - } - - /** - * Returns maximum depth a page can have to be included when rendering - * - * @return int|null - */ - public function getMaxDepth() - { - return $this->maxDepth; - } - - /** - * Sets the minimum depth a page must have to be included when rendering - * - * @param int $minDepth Default is null, which sets no minimum depth. - * @return AbstractHelper - */ - public function setMinDepth($minDepth = null) - { - if (null === $minDepth || is_int($minDepth)) { - $this->minDepth = $minDepth; - } else { - $this->minDepth = (int) $minDepth; - } - - return $this; - } - - /** - * Returns minimum depth a page must have to be included when rendering - * - * @return int|null - */ - public function getMinDepth() - { - if (!is_int($this->minDepth) || $this->minDepth < 0) { - return 0; - } - - return $this->minDepth; - } - - /** - * Render invisible items? - * - * @param bool $renderInvisible - * @return AbstractHelper - */ - public function setRenderInvisible($renderInvisible = true) - { - $this->renderInvisible = (bool) $renderInvisible; - return $this; - } - - /** - * Return renderInvisible flag - * - * @return bool - */ - public function getRenderInvisible() - { - return $this->renderInvisible; - } - - /** - * Sets ACL role(s) to use when iterating pages - * - * Implements {@link HelperInterface::setRole()}. - * - * @param mixed $role [optional] role to set. Expects a string, an - * instance of type {@link Acl\Role\RoleInterface}, or null. Default - * is null, which will set no role. - * @return AbstractHelper - * @throws Exception\InvalidArgumentException - */ - public function setRole($role = null) - { - if (null === $role || is_string($role) || - $role instanceof Acl\Role\RoleInterface - ) { - $this->role = $role; - } else { - throw new Exception\InvalidArgumentException(sprintf( - '$role must be a string, null, or an instance of ' - . 'Zend\Permissions\Role\RoleInterface; %s given', - (is_object($role) ? get_class($role) : gettype($role)) - )); - } - - return $this; - } - - /** - * Returns ACL role to use when iterating pages, or null if it isn't set - * using {@link setRole()} or {@link setDefaultRole()} - * - * Implements {@link HelperInterface::getRole()}. - * - * @return string|Acl\Role\RoleInterface|null - */ - public function getRole() - { - if ($this->role === null && static::$defaultRole !== null) { - return static::$defaultRole; - } - - return $this->role; - } - - /** - * Checks if the helper has an ACL role - * - * Implements {@link HelperInterface::hasRole()}. - * - * @return bool - */ - public function hasRole() - { - if ($this->role instanceof Acl\Role\RoleInterface - || is_string($this->role) - || static::$defaultRole instanceof Acl\Role\RoleInterface - || is_string(static::$defaultRole) - ) { - return true; - } - - return false; - } - - /** - * Set the service locator. - * - * @param ServiceLocatorInterface $serviceLocator - * @return AbstractHelper - */ - public function setServiceLocator(ServiceLocatorInterface $serviceLocator) - { - $this->serviceLocator = $serviceLocator; - return $this; - } - - /** - * Get the service locator. - * - * @return ServiceLocatorInterface - */ - public function getServiceLocator() - { - return $this->serviceLocator; - } - - // Translator methods - Good candidate to refactor as a trait with PHP 5.4 - - /** - * Sets translator to use in helper - * - * @param Translator $translator [optional] translator. - * Default is null, which sets no translator. - * @param string $textDomain [optional] text domain - * Default is null, which skips setTranslatorTextDomain - * @return AbstractHelper - */ - public function setTranslator(Translator $translator = null, $textDomain = null) - { - $this->translator = $translator; - if (null !== $textDomain) { - $this->setTranslatorTextDomain($textDomain); - } - - return $this; - } - - /** - * Returns translator used in helper - * - * @return Translator|null - */ - public function getTranslator() - { - if (! $this->isTranslatorEnabled()) { - return null; - } - - return $this->translator; - } - - /** - * Checks if the helper has a translator - * - * @return bool - */ - public function hasTranslator() - { - return (bool) $this->getTranslator(); - } - - /** - * Sets whether translator is enabled and should be used - * - * @param bool $enabled - * @return AbstractHelper - */ - public function setTranslatorEnabled($enabled = true) - { - $this->translatorEnabled = (bool) $enabled; - return $this; - } - - /** - * Returns whether translator is enabled and should be used - * - * @return bool - */ - public function isTranslatorEnabled() - { - return $this->translatorEnabled; - } - - /** - * Set translation text domain - * - * @param string $textDomain - * @return AbstractHelper - */ - public function setTranslatorTextDomain($textDomain = 'default') - { - $this->translatorTextDomain = $textDomain; - return $this; - } - - /** - * Return the translation text domain - * - * @return string - */ - public function getTranslatorTextDomain() - { - return $this->translatorTextDomain; - } - - /** - * Sets whether ACL should be used - * - * Implements {@link HelperInterface::setUseAcl()}. - * - * @param bool $useAcl - * @return AbstractHelper - */ - public function setUseAcl($useAcl = true) - { - $this->useAcl = (bool) $useAcl; - return $this; - } - - /** - * Returns whether ACL should be used - * - * Implements {@link HelperInterface::getUseAcl()}. - * - * @return bool - */ - public function getUseAcl() - { - return $this->useAcl; - } - - // Static methods: - - /** - * Sets default ACL to use if another ACL is not explicitly set - * - * @param Acl\AclInterface $acl [optional] ACL object. Default is null, which - * sets no ACL object. - * @return void - */ - public static function setDefaultAcl(Acl\AclInterface $acl = null) - { - static::$defaultAcl = $acl; - } - - /** - * Sets default ACL role(s) to use when iterating pages if not explicitly - * set later with {@link setRole()} - * - * @param mixed $role [optional] role to set. Expects null, string, or an - * instance of {@link Acl\Role\RoleInterface}. Default is null, which - * sets no default role. - * @return void - * @throws Exception\InvalidArgumentException if role is invalid - */ - public static function setDefaultRole($role = null) - { - if (null === $role - || is_string($role) - || $role instanceof Acl\Role\RoleInterface - ) { - static::$defaultRole = $role; - } else { - throw new Exception\InvalidArgumentException(sprintf( - '$role must be null|string|Zend\Permissions\Role\RoleInterface; received "%s"', - (is_object($role) ? get_class($role) : gettype($role)) - )); - } - } - - /** - * Attaches default ACL listeners, if ACLs are in use - */ - protected function setDefaultListeners() - { - if (!$this->getUseAcl()) { - return; - } - - $this->getEventManager()->getSharedManager()->attach( - 'Zend\View\Helper\Navigation\AbstractHelper', - 'isAllowed', - array('Zend\View\Helper\Navigation\Listener\AclListener', 'accept') - ); - } -} diff --git a/library/Zend/View/Helper/Navigation/Breadcrumbs.php b/library/Zend/View/Helper/Navigation/Breadcrumbs.php deleted file mode 100755 index 5337ca8e0..000000000 --- a/library/Zend/View/Helper/Navigation/Breadcrumbs.php +++ /dev/null @@ -1,292 +0,0 @@ -setContainer($container); - } - - return $this; - } - - /** - * Renders helper - * - * Implements {@link HelperInterface::render()}. - * - * @param AbstractContainer $container [optional] container to render. Default is - * to render the container registered in the helper. - * @return string - */ - public function render($container = null) - { - $partial = $this->getPartial(); - if ($partial) { - return $this->renderPartial($container, $partial); - } - - return $this->renderStraight($container); - } - - /** - * Renders breadcrumbs by chaining 'a' elements with the separator - * registered in the helper - * - * @param AbstractContainer $container [optional] container to render. Default is - * to render the container registered in the helper. - * @return string - */ - public function renderStraight($container = null) - { - $this->parseContainer($container); - if (null === $container) { - $container = $this->getContainer(); - } - - // find deepest active - if (!$active = $this->findActive($container)) { - return ''; - } - - $active = $active['page']; - - // put the deepest active page last in breadcrumbs - if ($this->getLinkLast()) { - $html = $this->htmlify($active); - } else { - /** @var \Zend\View\Helper\EscapeHtml $escaper */ - $escaper = $this->view->plugin('escapeHtml'); - $html = $escaper( - $this->translate($active->getLabel(), $active->getTextDomain()) - ); - } - - // walk back to root - while ($parent = $active->getParent()) { - if ($parent instanceof AbstractPage) { - // prepend crumb to html - $html = $this->htmlify($parent) - . $this->getSeparator() - . $html; - } - - if ($parent === $container) { - // at the root of the given container - break; - } - - $active = $parent; - } - - return strlen($html) ? $this->getIndent() . $html : ''; - } - - /** - * Renders the given $container by invoking the partial view helper - * - * The container will simply be passed on as a model to the view script, - * so in the script it will be available in $this->container. - * - * @param AbstractContainer $container [optional] container to pass to view script. - * Default is to use the container registered - * in the helper. - * @param string|array $partial [optional] partial view script to use. - * Default is to use the partial registered - * in the helper. If an array is given, it - * is expected to contain two values; the - * partial view script to use, and the module - * where the script can be found. - * @throws Exception\RuntimeException if no partial provided - * @throws Exception\InvalidArgumentException if partial is invalid array - * @return string helper output - */ - public function renderPartial($container = null, $partial = null) - { - $this->parseContainer($container); - if (null === $container) { - $container = $this->getContainer(); - } - - if (null === $partial) { - $partial = $this->getPartial(); - } - - if (empty($partial)) { - throw new Exception\RuntimeException( - 'Unable to render menu: No partial view script provided' - ); - } - - // put breadcrumb pages in model - $model = array( - 'pages' => array(), - 'separator' => $this->getSeparator() - ); - $active = $this->findActive($container); - if ($active) { - $active = $active['page']; - $model['pages'][] = $active; - while ($parent = $active->getParent()) { - if ($parent instanceof AbstractPage) { - $model['pages'][] = $parent; - } else { - break; - } - - if ($parent === $container) { - // break if at the root of the given container - break; - } - - $active = $parent; - } - $model['pages'] = array_reverse($model['pages']); - } - - /** @var \Zend\View\Helper\Partial $partialHelper */ - $partialHelper = $this->view->plugin('partial'); - - if (is_array($partial)) { - if (count($partial) != 2) { - throw new Exception\InvalidArgumentException( - 'Unable to render menu: A view partial supplied as ' - . 'an array must contain two values: partial view ' - . 'script and module where script can be found' - ); - } - - return $partialHelper($partial[0], $model); - } - - return $partialHelper($partial, $model); - } - - /** - * Sets whether last page in breadcrumbs should be hyperlinked - * - * @param bool $linkLast whether last page should be hyperlinked - * @return Breadcrumbs - */ - public function setLinkLast($linkLast) - { - $this->linkLast = (bool) $linkLast; - return $this; - } - - /** - * Returns whether last page in breadcrumbs should be hyperlinked - * - * @return bool - */ - public function getLinkLast() - { - return $this->linkLast; - } - - /** - * Sets which partial view script to use for rendering menu - * - * @param string|array $partial partial view script or null. If an array is - * given, it is expected to contain two - * values; the partial view script to use, - * and the module where the script can be - * found. - * @return Breadcrumbs - */ - public function setPartial($partial) - { - if (null === $partial || is_string($partial) || is_array($partial)) { - $this->partial = $partial; - } - - return $this; - } - - /** - * Returns partial view script to use for rendering menu - * - * @return string|array|null - */ - public function getPartial() - { - return $this->partial; - } - - /** - * Sets breadcrumb separator - * - * @param string $separator separator string - * @return Breadcrumbs - */ - public function setSeparator($separator) - { - if (is_string($separator)) { - $this->separator = $separator; - } - - return $this; - } - - /** - * Returns breadcrumb separator - * - * @return string breadcrumb separator - */ - public function getSeparator() - { - return $this->separator; - } -} diff --git a/library/Zend/View/Helper/Navigation/HelperInterface.php b/library/Zend/View/Helper/Navigation/HelperInterface.php deleted file mode 100755 index 8b52c8c1d..000000000 --- a/library/Zend/View/Helper/Navigation/HelperInterface.php +++ /dev/null @@ -1,143 +0,0 @@ - elements - */ -class Links extends AbstractHelper -{ - /** - * Constants used for specifying which link types to find and render - * - * @var int - */ - const RENDER_ALTERNATE = 0x0001; - const RENDER_STYLESHEET = 0x0002; - const RENDER_START = 0x0004; - const RENDER_NEXT = 0x0008; - const RENDER_PREV = 0x0010; - const RENDER_CONTENTS = 0x0020; - const RENDER_INDEX = 0x0040; - const RENDER_GLOSSARY = 0x0080; - const RENDER_COPYRIGHT = 0x0100; - const RENDER_CHAPTER = 0x0200; - const RENDER_SECTION = 0x0400; - const RENDER_SUBSECTION = 0x0800; - const RENDER_APPENDIX = 0x1000; - const RENDER_HELP = 0x2000; - const RENDER_BOOKMARK = 0x4000; - const RENDER_CUSTOM = 0x8000; - const RENDER_ALL = 0xffff; - - /** - * Maps render constants to W3C link types - * - * @var array - */ - protected static $RELATIONS = array( - self::RENDER_ALTERNATE => 'alternate', - self::RENDER_STYLESHEET => 'stylesheet', - self::RENDER_START => 'start', - self::RENDER_NEXT => 'next', - self::RENDER_PREV => 'prev', - self::RENDER_CONTENTS => 'contents', - self::RENDER_INDEX => 'index', - self::RENDER_GLOSSARY => 'glossary', - self::RENDER_COPYRIGHT => 'copyright', - self::RENDER_CHAPTER => 'chapter', - self::RENDER_SECTION => 'section', - self::RENDER_SUBSECTION => 'subsection', - self::RENDER_APPENDIX => 'appendix', - self::RENDER_HELP => 'help', - self::RENDER_BOOKMARK => 'bookmark', - ); - - /** - * The helper's render flag - * - * @see render() - * @see setRenderFlag() - * @var int - */ - protected $renderFlag = self::RENDER_ALL; - - /** - * Root container - * - * Used for preventing methods to traverse above the container given to - * the {@link render()} method. - * - * @see _findRoot() - * @var AbstractContainer - */ - protected $root; - - /** - * Helper entry point - * - * @param string|AbstractContainer $container container to operate on - * @return Links - */ - public function __invoke($container = null) - { - if (null !== $container) { - $this->setContainer($container); - } - - return $this; - } - - /** - * Magic overload: Proxy calls to {@link findRelation()} or container - * - * Examples of finder calls: - * - * // METHOD // SAME AS - * $h->findRelNext($page); // $h->findRelation($page, 'rel', 'next') - * $h->findRevSection($page); // $h->findRelation($page, 'rev', 'section'); - * $h->findRelFoo($page); // $h->findRelation($page, 'rel', 'foo'); - * - * - * @param string $method - * @param array $arguments - * @return mixed - * @throws Exception\ExceptionInterface - */ - public function __call($method, array $arguments = array()) - { - ErrorHandler::start(E_WARNING); - $result = preg_match('/find(Rel|Rev)(.+)/', $method, $match); - ErrorHandler::stop(); - if ($result) { - return $this->findRelation($arguments[0], - strtolower($match[1]), - strtolower($match[2])); - } - - return parent::__call($method, $arguments); - } - - /** - * Renders helper - * - * Implements {@link HelperInterface::render()}. - * - * @param AbstractContainer|string|null $container [optional] container to render. - * Default is to render the - * container registered in the - * helper. - * @return string - */ - public function render($container = null) - { - $this->parseContainer($container); - if (null === $container) { - $container = $this->getContainer(); - } - - $active = $this->findActive($container); - if ($active) { - $active = $active['page']; - } else { - // no active page - return ''; - } - - $output = ''; - $indent = $this->getIndent(); - $this->root = $container; - - $result = $this->findAllRelations($active, $this->getRenderFlag()); - foreach ($result as $attrib => $types) { - foreach ($types as $relation => $pages) { - foreach ($pages as $page) { - $r = $this->renderLink($page, $attrib, $relation); - if ($r) { - $output .= $indent . $r . self::EOL; - } - } - } - } - - $this->root = null; - - // return output (trim last newline by spec) - return strlen($output) ? rtrim($output, self::EOL) : ''; - } - - /** - * Renders the given $page as a link element, with $attrib = $relation - * - * @param AbstractPage $page the page to render the link for - * @param string $attrib the attribute to use for $type, - * either 'rel' or 'rev' - * @param string $relation relation type, muse be one of; - * alternate, appendix, bookmark, - * chapter, contents, copyright, - * glossary, help, home, index, next, - * prev, section, start, stylesheet, - * subsection - * @return string - * @throws Exception\DomainException - */ - public function renderLink(AbstractPage $page, $attrib, $relation) - { - if (!in_array($attrib, array('rel', 'rev'))) { - throw new Exception\DomainException(sprintf( - 'Invalid relation attribute "%s", must be "rel" or "rev"', - $attrib - )); - } - - if (!$href = $page->getHref()) { - return ''; - } - - // TODO: add more attribs - // http://www.w3.org/TR/html401/struct/links.html#h-12.2 - $attribs = array( - $attrib => $relation, - 'href' => $href, - 'title' => $page->getLabel() - ); - - return 'htmlAttribs($attribs) . - $this->getClosingBracket(); - } - - // Finder methods: - - /** - * Finds all relations (forward and reverse) for the given $page - * - * The form of the returned array: - * - * // $page denotes an instance of Zend\Navigation\Page\AbstractPage - * $returned = array( - * 'rel' => array( - * 'alternate' => array($page, $page, $page), - * 'start' => array($page), - * 'next' => array($page), - * 'prev' => array($page), - * 'canonical' => array($page) - * ), - * 'rev' => array( - * 'section' => array($page) - * ) - * ); - * - * - * @param AbstractPage $page page to find links for - * @param null|int - * @return array - */ - public function findAllRelations(AbstractPage $page, $flag = null) - { - if (!is_int($flag)) { - $flag = self::RENDER_ALL; - } - - $result = array('rel' => array(), 'rev' => array()); - $native = array_values(static::$RELATIONS); - - foreach (array_keys($result) as $rel) { - $meth = 'getDefined' . ucfirst($rel); - $types = array_merge($native, array_diff($page->$meth(), $native)); - - foreach ($types as $type) { - if (!$relFlag = array_search($type, static::$RELATIONS)) { - $relFlag = self::RENDER_CUSTOM; - } - if (!($flag & $relFlag)) { - continue; - } - - $found = $this->findRelation($page, $rel, $type); - if ($found) { - if (!is_array($found)) { - $found = array($found); - } - $result[$rel][$type] = $found; - } - } - } - - return $result; - } - - /** - * Finds relations of the given $rel=$type from $page - * - * This method will first look for relations in the page instance, then - * by searching the root container if nothing was found in the page. - * - * @param AbstractPage $page page to find relations for - * @param string $rel relation, "rel" or "rev" - * @param string $type link type, e.g. 'start', 'next' - * @return AbstractPage|array|null - * @throws Exception\DomainException if $rel is not "rel" or "rev" - */ - public function findRelation(AbstractPage $page, $rel, $type) - { - if (!in_array($rel, array('rel', 'rev'))) { - throw new Exception\DomainException(sprintf( - 'Invalid argument: $rel must be "rel" or "rev"; "%s" given', - $rel - )); - } - - if (!$result = $this->findFromProperty($page, $rel, $type)) { - $result = $this->findFromSearch($page, $rel, $type); - } - - return $result; - } - - /** - * Finds relations of given $type for $page by checking if the - * relation is specified as a property of $page - * - * @param AbstractPage $page page to find relations for - * @param string $rel relation, 'rel' or 'rev' - * @param string $type link type, e.g. 'start', 'next' - * @return AbstractPage|array|null - */ - protected function findFromProperty(AbstractPage $page, $rel, $type) - { - $method = 'get' . ucfirst($rel); - $result = $page->$method($type); - if ($result) { - $result = $this->convertToPages($result); - if ($result) { - if (!is_array($result)) { - $result = array($result); - } - - foreach ($result as $key => $page) { - if (!$this->accept($page)) { - unset($result[$key]); - } - } - - return count($result) == 1 ? $result[0] : $result; - } - } - - return null; - } - - /** - * Finds relations of given $rel=$type for $page by using the helper to - * search for the relation in the root container - * - * @param AbstractPage $page page to find relations for - * @param string $rel relation, 'rel' or 'rev' - * @param string $type link type, e.g. 'start', 'next', etc - * @return array|null - */ - protected function findFromSearch(AbstractPage $page, $rel, $type) - { - $found = null; - - $method = 'search' . ucfirst($rel) . ucfirst($type); - if (method_exists($this, $method)) { - $found = $this->$method($page); - } - - return $found; - } - - // Search methods: - - /** - * Searches the root container for the forward 'start' relation of the given - * $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to the first document in a collection of documents. This link type - * tells search engines which document is considered by the author to be the - * starting point of the collection. - * - * @param AbstractPage $page - * @return AbstractPage|null - */ - public function searchRelStart(AbstractPage $page) - { - $found = $this->findRoot($page); - if (!$found instanceof AbstractPage) { - $found->rewind(); - $found = $found->current(); - } - - if ($found === $page || !$this->accept($found)) { - $found = null; - } - - return $found; - } - - /** - * Searches the root container for the forward 'next' relation of the given - * $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to the next document in a linear sequence of documents. User - * agents may choose to preload the "next" document, to reduce the perceived - * load time. - * - * @param AbstractPage $page - * @return AbstractPage|null - */ - public function searchRelNext(AbstractPage $page) - { - $found = null; - $break = false; - $iterator = new RecursiveIteratorIterator($this->findRoot($page), - RecursiveIteratorIterator::SELF_FIRST); - foreach ($iterator as $intermediate) { - if ($intermediate === $page) { - // current page; break at next accepted page - $break = true; - continue; - } - - if ($break && $this->accept($intermediate)) { - $found = $intermediate; - break; - } - } - - return $found; - } - - /** - * Searches the root container for the forward 'prev' relation of the given - * $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to the previous document in an ordered series of documents. Some - * user agents also support the synonym "Previous". - * - * @param AbstractPage $page - * @return AbstractPage|null - */ - public function searchRelPrev(AbstractPage $page) - { - $found = null; - $prev = null; - $iterator = new RecursiveIteratorIterator( - $this->findRoot($page), - RecursiveIteratorIterator::SELF_FIRST); - foreach ($iterator as $intermediate) { - if (!$this->accept($intermediate)) { - continue; - } - if ($intermediate === $page) { - $found = $prev; - break; - } - - $prev = $intermediate; - } - - return $found; - } - - /** - * Searches the root container for forward 'chapter' relations of the given - * $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to a document serving as a chapter in a collection of documents. - * - * @param AbstractPage $page - * @return AbstractPage|array|null - */ - public function searchRelChapter(AbstractPage $page) - { - $found = array(); - - // find first level of pages - $root = $this->findRoot($page); - - // find start page(s) - $start = $this->findRelation($page, 'rel', 'start'); - if (!is_array($start)) { - $start = array($start); - } - - foreach ($root as $chapter) { - // exclude self and start page from chapters - if ($chapter !== $page && - !in_array($chapter, $start) && - $this->accept($chapter)) { - $found[] = $chapter; - } - } - - switch (count($found)) { - case 0: - return null; - case 1: - return $found[0]; - default: - return $found; - } - } - - /** - * Searches the root container for forward 'section' relations of the given - * $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to a document serving as a section in a collection of documents. - * - * @param AbstractPage $page - * @return AbstractPage|array|null - */ - public function searchRelSection(AbstractPage $page) - { - $found = array(); - - // check if given page has pages and is a chapter page - if ($page->hasPages() && $this->findRoot($page)->hasPage($page)) { - foreach ($page as $section) { - if ($this->accept($section)) { - $found[] = $section; - } - } - } - - switch (count($found)) { - case 0: - return null; - case 1: - return $found[0]; - default: - return $found; - } - } - - /** - * Searches the root container for forward 'subsection' relations of the - * given $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to a document serving as a subsection in a collection of - * documents. - * - * @param AbstractPage $page - * @return AbstractPage|array|null - */ - public function searchRelSubsection(AbstractPage $page) - { - $found = array(); - - if ($page->hasPages()) { - // given page has child pages, loop chapters - foreach ($this->findRoot($page) as $chapter) { - // is page a section? - if ($chapter->hasPage($page)) { - foreach ($page as $subsection) { - if ($this->accept($subsection)) { - $found[] = $subsection; - } - } - } - } - } - - switch (count($found)) { - case 0: - return null; - case 1: - return $found[0]; - default: - return $found; - } - } - - /** - * Searches the root container for the reverse 'section' relation of the - * given $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to a document serving as a section in a collection of documents. - * - * @param AbstractPage $page - * @return AbstractPage|null - */ - public function searchRevSection(AbstractPage $page) - { - $found = null; - $parent = $page->getParent(); - if ($parent) { - if ($parent instanceof AbstractPage && - $this->findRoot($page)->hasPage($parent)) { - $found = $parent; - } - } - - return $found; - } - - /** - * Searches the root container for the reverse 'section' relation of the - * given $page - * - * From {@link http://www.w3.org/TR/html4/types.html#type-links}: - * Refers to a document serving as a subsection in a collection of - * documents. - * - * @param AbstractPage $page - * @return AbstractPage|null - */ - public function searchRevSubsection(AbstractPage $page) - { - $found = null; - $parent = $page->getParent(); - if ($parent) { - if ($parent instanceof AbstractPage) { - $root = $this->findRoot($page); - foreach ($root as $chapter) { - if ($chapter->hasPage($parent)) { - $found = $parent; - break; - } - } - } - } - - return $found; - } - - // Util methods: - - /** - * Returns the root container of the given page - * - * When rendering a container, the render method still store the given - * container as the root container, and unset it when done rendering. This - * makes sure finder methods will not traverse above the container given - * to the render method. - * - * @param AbstractPage $page - * @return AbstractContainer - */ - protected function findRoot(AbstractPage $page) - { - if ($this->root) { - return $this->root; - } - - $root = $page; - - while ($parent = $page->getParent()) { - $root = $parent; - if ($parent instanceof AbstractPage) { - $page = $parent; - } else { - break; - } - } - - return $root; - } - - /** - * Converts a $mixed value to an array of pages - * - * @param mixed $mixed mixed value to get page(s) from - * @param bool $recursive whether $value should be looped - * if it is an array or a config - * @return AbstractPage|array|null - */ - protected function convertToPages($mixed, $recursive = true) - { - if ($mixed instanceof AbstractPage) { - // value is a page instance; return directly - return $mixed; - } elseif ($mixed instanceof AbstractContainer) { - // value is a container; return pages in it - $pages = array(); - foreach ($mixed as $page) { - $pages[] = $page; - } - return $pages; - } elseif ($mixed instanceof Traversable) { - $mixed = ArrayUtils::iteratorToArray($mixed); - } elseif (is_string($mixed)) { - // value is a string; make a URI page - return AbstractPage::factory(array( - 'type' => 'uri', - 'uri' => $mixed - )); - } - - if (is_array($mixed) && !empty($mixed)) { - if ($recursive && is_numeric(key($mixed))) { - // first key is numeric; assume several pages - $pages = array(); - foreach ($mixed as $value) { - $value = $this->convertToPages($value, false); - if ($value) { - $pages[] = $value; - } - } - return $pages; - } else { - // pass array to factory directly - try { - $page = AbstractPage::factory($mixed); - return $page; - } catch (\Exception $e) { - } - } - } - - // nothing found - return null; - } - - /** - * Sets the helper's render flag - * - * The helper uses the bitwise '&' operator against the hex values of the - * render constants. This means that the flag can is "bitwised" value of - * the render constants. Examples: - * - * // render all links except glossary - * $flag = Links:RENDER_ALL ^ Links:RENDER_GLOSSARY; - * $helper->setRenderFlag($flag); - * - * // render only chapters and sections - * $flag = Links:RENDER_CHAPTER | Links:RENDER_SECTION; - * $helper->setRenderFlag($flag); - * - * // render only relations that are not native W3C relations - * $helper->setRenderFlag(Links:RENDER_CUSTOM); - * - * // render all relations (default) - * $helper->setRenderFlag(Links:RENDER_ALL); - * - * - * Note that custom relations can also be rendered directly using the - * {@link renderLink()} method. - * - * @param int $renderFlag - * @return Links - */ - public function setRenderFlag($renderFlag) - { - $this->renderFlag = (int) $renderFlag; - - return $this; - } - - /** - * Returns the helper's render flag - * - * @return int - */ - public function getRenderFlag() - { - return $this->renderFlag; - } -} diff --git a/library/Zend/View/Helper/Navigation/Listener/AclListener.php b/library/Zend/View/Helper/Navigation/Listener/AclListener.php deleted file mode 100755 index 5c8656084..000000000 --- a/library/Zend/View/Helper/Navigation/Listener/AclListener.php +++ /dev/null @@ -1,55 +0,0 @@ -getParams(); - $acl = $params['acl']; - $page = $params['page']; - $role = $params['role']; - - if (!$acl) { - return $accepted; - } - - $resource = $page->getResource(); - $privilege = $page->getPrivilege(); - - if ($resource || $privilege) { - $accepted = $acl->hasResource($resource) - && $acl->isAllowed($role, $resource, $privilege); - } - - return $accepted; - } -} diff --git a/library/Zend/View/Helper/Navigation/Menu.php b/library/Zend/View/Helper/Navigation/Menu.php deleted file mode 100755 index 29d719923..000000000 --- a/library/Zend/View/Helper/Navigation/Menu.php +++ /dev/null @@ -1,765 +0,0 @@ - element - * - * @var bool - */ - protected $addClassToListItem = false; - - /** - * Whether labels should be escaped - * - * @var bool - */ - protected $escapeLabels = true; - - /** - * Whether only active branch should be rendered - * - * @var bool - */ - protected $onlyActiveBranch = false; - - /** - * Partial view script to use for rendering menu - * - * @var string|array - */ - protected $partial = null; - - /** - * Whether parents should be rendered when only rendering active branch - * - * @var bool - */ - protected $renderParents = true; - - /** - * CSS class to use for the ul element - * - * @var string - */ - protected $ulClass = 'navigation'; - - /** - * CSS class to use for the active li element - * - * @var string - */ - protected $liActiveClass = 'active'; - - /** - * View helper entry point: - * Retrieves helper and optionally sets container to operate on - * - * @param AbstractContainer $container [optional] container to operate on - * @return self - */ - public function __invoke($container = null) - { - if (null !== $container) { - $this->setContainer($container); - } - - return $this; - } - - /** - * Renders menu - * - * Implements {@link HelperInterface::render()}. - * - * If a partial view is registered in the helper, the menu will be rendered - * using the given partial script. If no partial is registered, the menu - * will be rendered as an 'ul' element by the helper's internal method. - * - * @see renderPartial() - * @see renderMenu() - * - * @param AbstractContainer $container [optional] container to render. Default is - * to render the container registered in the helper. - * @return string - */ - public function render($container = null) - { - $partial = $this->getPartial(); - if ($partial) { - return $this->renderPartial($container, $partial); - } - - return $this->renderMenu($container); - } - - /** - * Renders the deepest active menu within [$minDepth, $maxDepth], (called - * from {@link renderMenu()}) - * - * @param AbstractContainer $container container to render - * @param string $ulClass CSS class for first UL - * @param string $indent initial indentation - * @param int|null $minDepth minimum depth - * @param int|null $maxDepth maximum depth - * @param bool $escapeLabels Whether or not to escape the labels - * @param bool $addClassToListItem Whether or not page class applied to
  • element - * @param string $liActiveClass CSS class for active LI - * @return string - */ - protected function renderDeepestMenu( - AbstractContainer $container, - $ulClass, - $indent, - $minDepth, - $maxDepth, - $escapeLabels, - $addClassToListItem, - $liActiveClass - ) { - if (!$active = $this->findActive($container, $minDepth - 1, $maxDepth)) { - return ''; - } - - // special case if active page is one below minDepth - if ($active['depth'] < $minDepth) { - if (!$active['page']->hasPages(!$this->renderInvisible)) { - return ''; - } - } elseif (!$active['page']->hasPages(!$this->renderInvisible)) { - // found pages has no children; render siblings - $active['page'] = $active['page']->getParent(); - } elseif (is_int($maxDepth) && $active['depth'] +1 > $maxDepth) { - // children are below max depth; render siblings - $active['page'] = $active['page']->getParent(); - } - - /* @var $escaper \Zend\View\Helper\EscapeHtmlAttr */ - $escaper = $this->view->plugin('escapeHtmlAttr'); - $ulClass = $ulClass ? ' class="' . $escaper($ulClass) . '"' : ''; - $html = $indent . '' . PHP_EOL; - - foreach ($active['page'] as $subPage) { - if (!$this->accept($subPage)) { - continue; - } - - // render li tag and page - $liClasses = array(); - // Is page active? - if ($subPage->isActive(true)) { - $liClasses[] = $liActiveClass; - } - // Add CSS class from page to
  • - if ($addClassToListItem && $subPage->getClass()) { - $liClasses[] = $subPage->getClass(); - } - $liClass = empty($liClasses) ? '' : ' class="' . $escaper(implode(' ', $liClasses)) . '"'; - - $html .= $indent . ' ' . PHP_EOL; - $html .= $indent . ' ' . $this->htmlify($subPage, $escapeLabels, $addClassToListItem) . PHP_EOL; - $html .= $indent . '
  • ' . PHP_EOL; - } - - $html .= $indent . ''; - - return $html; - } - - /** - * Renders helper - * - * Renders a HTML 'ul' for the given $container. If $container is not given, - * the container registered in the helper will be used. - * - * Available $options: - * - * - * @param AbstractContainer $container [optional] container to create menu from. - * Default is to use the container retrieved - * from {@link getContainer()}. - * @param array $options [optional] options for controlling rendering - * @return string - */ - public function renderMenu($container = null, array $options = array()) - { - $this->parseContainer($container); - if (null === $container) { - $container = $this->getContainer(); - } - - - $options = $this->normalizeOptions($options); - - if ($options['onlyActiveBranch'] && !$options['renderParents']) { - $html = $this->renderDeepestMenu($container, - $options['ulClass'], - $options['indent'], - $options['minDepth'], - $options['maxDepth'], - $options['escapeLabels'], - $options['addClassToListItem'], - $options['liActiveClass'] - ); - } else { - $html = $this->renderNormalMenu($container, - $options['ulClass'], - $options['indent'], - $options['minDepth'], - $options['maxDepth'], - $options['onlyActiveBranch'], - $options['escapeLabels'], - $options['addClassToListItem'], - $options['liActiveClass'] - ); - } - - return $html; - } - - /** - * Renders a normal menu (called from {@link renderMenu()}) - * - * @param AbstractContainer $container container to render - * @param string $ulClass CSS class for first UL - * @param string $indent initial indentation - * @param int|null $minDepth minimum depth - * @param int|null $maxDepth maximum depth - * @param bool $onlyActive render only active branch? - * @param bool $escapeLabels Whether or not to escape the labels - * @param bool $addClassToListItem Whether or not page class applied to
  • element - * @param string $liActiveClass CSS class for active LI - * @return string - */ - protected function renderNormalMenu( - AbstractContainer $container, - $ulClass, - $indent, - $minDepth, - $maxDepth, - $onlyActive, - $escapeLabels, - $addClassToListItem, - $liActiveClass - ) { - $html = ''; - - // find deepest active - $found = $this->findActive($container, $minDepth, $maxDepth); - /* @var $escaper \Zend\View\Helper\EscapeHtmlAttr */ - $escaper = $this->view->plugin('escapeHtmlAttr'); - - if ($found) { - $foundPage = $found['page']; - $foundDepth = $found['depth']; - } else { - $foundPage = null; - } - - // create iterator - $iterator = new RecursiveIteratorIterator($container, - RecursiveIteratorIterator::SELF_FIRST); - if (is_int($maxDepth)) { - $iterator->setMaxDepth($maxDepth); - } - - // iterate container - $prevDepth = -1; - foreach ($iterator as $page) { - $depth = $iterator->getDepth(); - $isActive = $page->isActive(true); - if ($depth < $minDepth || !$this->accept($page)) { - // page is below minDepth or not accepted by acl/visibility - continue; - } elseif ($onlyActive && !$isActive) { - // page is not active itself, but might be in the active branch - $accept = false; - if ($foundPage) { - if ($foundPage->hasPage($page)) { - // accept if page is a direct child of the active page - $accept = true; - } elseif ($foundPage->getParent()->hasPage($page)) { - // page is a sibling of the active page... - if (!$foundPage->hasPages(!$this->renderInvisible) || - is_int($maxDepth) && $foundDepth + 1 > $maxDepth) { - // accept if active page has no children, or the - // children are too deep to be rendered - $accept = true; - } - } - } - - if (!$accept) { - continue; - } - } - - // make sure indentation is correct - $depth -= $minDepth; - $myIndent = $indent . str_repeat(' ', $depth); - - if ($depth > $prevDepth) { - // start new ul tag - if ($ulClass && $depth == 0) { - $ulClass = ' class="' . $escaper($ulClass) . '"'; - } else { - $ulClass = ''; - } - $html .= $myIndent . '' . PHP_EOL; - } elseif ($prevDepth > $depth) { - // close li/ul tags until we're at current depth - for ($i = $prevDepth; $i > $depth; $i--) { - $ind = $indent . str_repeat(' ', $i); - $html .= $ind . '
  • ' . PHP_EOL; - $html .= $ind . '' . PHP_EOL; - } - // close previous li tag - $html .= $myIndent . ' ' . PHP_EOL; - } else { - // close previous li tag - $html .= $myIndent . ' ' . PHP_EOL; - } - - // render li tag and page - $liClasses = array(); - // Is page active? - if ($isActive) { - $liClasses[] = $liActiveClass; - } - // Add CSS class from page to
  • - if ($addClassToListItem && $page->getClass()) { - $liClasses[] = $page->getClass(); - } - $liClass = empty($liClasses) ? '' : ' class="' . $escaper(implode(' ', $liClasses)) . '"'; - - $html .= $myIndent . ' ' . PHP_EOL - . $myIndent . ' ' . $this->htmlify($page, $escapeLabels, $addClassToListItem) . PHP_EOL; - - // store as previous depth for next iteration - $prevDepth = $depth; - } - - if ($html) { - // done iterating container; close open ul/li tags - for ($i = $prevDepth+1; $i > 0; $i--) { - $myIndent = $indent . str_repeat(' ', $i-1); - $html .= $myIndent . '
  • ' . PHP_EOL - . $myIndent . '' . PHP_EOL; - } - $html = rtrim($html, PHP_EOL); - } - - return $html; - } - - /** - * Renders the given $container by invoking the partial view helper - * - * The container will simply be passed on as a model to the view script - * as-is, and will be available in the partial script as 'container', e.g. - * echo 'Number of pages: ', count($this->container);. - * - * @param AbstractContainer $container [optional] container to pass to view - * script. Default is to use the container - * registered in the helper. - * @param string|array $partial [optional] partial view script to use. - * Default is to use the partial - * registered in the helper. If an array - * is given, it is expected to contain two - * values; the partial view script to use, - * and the module where the script can be - * found. - * @return string - * @throws Exception\RuntimeException if no partial provided - * @throws Exception\InvalidArgumentException if partial is invalid array - */ - public function renderPartial($container = null, $partial = null) - { - $this->parseContainer($container); - if (null === $container) { - $container = $this->getContainer(); - } - - if (null === $partial) { - $partial = $this->getPartial(); - } - - if (empty($partial)) { - throw new Exception\RuntimeException( - 'Unable to render menu: No partial view script provided' - ); - } - - $model = array( - 'container' => $container - ); - - /** @var \Zend\View\Helper\Partial $partialHelper */ - $partialHelper = $this->view->plugin('partial'); - - if (is_array($partial)) { - if (count($partial) != 2) { - throw new Exception\InvalidArgumentException( - 'Unable to render menu: A view partial supplied as ' - . 'an array must contain two values: partial view ' - . 'script and module where script can be found' - ); - } - - return $partialHelper($partial[0], $model); - } - - return $partialHelper($partial, $model); - } - - /** - * Renders the inner-most sub menu for the active page in the $container - * - * This is a convenience method which is equivalent to the following call: - * - * renderMenu($container, array( - * 'indent' => $indent, - * 'ulClass' => $ulClass, - * 'minDepth' => null, - * 'maxDepth' => null, - * 'onlyActiveBranch' => true, - * 'renderParents' => false, - * 'liActiveClass' => $liActiveClass - * )); - * - * - * @param AbstractContainer $container [optional] container to - * render. Default is to render - * the container registered in - * the helper. - * @param string $ulClass [optional] CSS class to - * use for UL element. Default - * is to use the value from - * {@link getUlClass()}. - * @param string|int $indent [optional] indentation as - * a string or number of - * spaces. Default is to use - * the value retrieved from - * {@link getIndent()}. - * @param string $liActiveClass [optional] CSS class to - * use for UL element. Default - * is to use the value from - * {@link getUlClass()}. - * @return string - */ - public function renderSubMenu( - AbstractContainer $container = null, - $ulClass = null, - $indent = null, - $liActiveClass = null - ) { - return $this->renderMenu($container, array( - 'indent' => $indent, - 'ulClass' => $ulClass, - 'minDepth' => null, - 'maxDepth' => null, - 'onlyActiveBranch' => true, - 'renderParents' => false, - 'escapeLabels' => true, - 'addClassToListItem' => false, - 'liActiveClass' => $liActiveClass - )); - } - - /** - * Returns an HTML string containing an 'a' element for the given page if - * the page's href is not empty, and a 'span' element if it is empty - * - * Overrides {@link AbstractHelper::htmlify()}. - * - * @param AbstractPage $page page to generate HTML for - * @param bool $escapeLabel Whether or not to escape the label - * @param bool $addClassToListItem Whether or not to add the page class to the list item - * @return string - */ - public function htmlify(AbstractPage $page, $escapeLabel = true, $addClassToListItem = false) - { - // get attribs for element - $attribs = array( - 'id' => $page->getId(), - 'title' => $this->translate($page->getTitle(), $page->getTextDomain()), - ); - - if ($addClassToListItem === false) { - $attribs['class'] = $page->getClass(); - } - - // does page have a href? - $href = $page->getHref(); - if ($href) { - $element = 'a'; - $attribs['href'] = $href; - $attribs['target'] = $page->getTarget(); - } else { - $element = 'span'; - } - - $html = '<' . $element . $this->htmlAttribs($attribs) . '>'; - $label = $this->translate($page->getLabel(), $page->getTextDomain()); - if ($escapeLabel === true) { - /** @var \Zend\View\Helper\EscapeHtml $escaper */ - $escaper = $this->view->plugin('escapeHtml'); - $html .= $escaper($label); - } else { - $html .= $label; - } - $html .= ''; - - return $html; - } - - /** - * Normalizes given render options - * - * @param array $options [optional] options to normalize - * @return array - */ - protected function normalizeOptions(array $options = array()) - { - if (isset($options['indent'])) { - $options['indent'] = $this->getWhitespace($options['indent']); - } else { - $options['indent'] = $this->getIndent(); - } - - if (isset($options['ulClass']) && $options['ulClass'] !== null) { - $options['ulClass'] = (string) $options['ulClass']; - } else { - $options['ulClass'] = $this->getUlClass(); - } - - if (array_key_exists('minDepth', $options)) { - if (null !== $options['minDepth']) { - $options['minDepth'] = (int) $options['minDepth']; - } - } else { - $options['minDepth'] = $this->getMinDepth(); - } - - if ($options['minDepth'] < 0 || $options['minDepth'] === null) { - $options['minDepth'] = 0; - } - - if (array_key_exists('maxDepth', $options)) { - if (null !== $options['maxDepth']) { - $options['maxDepth'] = (int) $options['maxDepth']; - } - } else { - $options['maxDepth'] = $this->getMaxDepth(); - } - - if (!isset($options['onlyActiveBranch'])) { - $options['onlyActiveBranch'] = $this->getOnlyActiveBranch(); - } - - if (!isset($options['escapeLabels'])) { - $options['escapeLabels'] = $this->escapeLabels; - } - - if (!isset($options['renderParents'])) { - $options['renderParents'] = $this->getRenderParents(); - } - - if (!isset($options['addClassToListItem'])) { - $options['addClassToListItem'] = $this->getAddClassToListItem(); - } - - if (isset($options['liActiveClass']) && $options['liActiveClass'] !== null) { - $options['liActiveClass'] = (string) $options['liActiveClass']; - } else { - $options['liActiveClass'] = $this->getLiActiveClass(); - } - - return $options; - } - - /** - * Sets a flag indicating whether labels should be escaped - * - * @param bool $flag [optional] escape labels - * @return self - */ - public function escapeLabels($flag = true) - { - $this->escapeLabels = (bool) $flag; - return $this; - } - - /** - * Enables/disables page class applied to
  • element - * - * @param bool $flag [optional] page class applied to
  • element - * Default is true. - * @return self fluent interface, returns self - */ - public function setAddClassToListItem($flag = true) - { - $this->addClassToListItem = (bool) $flag; - return $this; - } - - /** - * Returns flag indicating whether page class should be applied to
  • element - * - * By default, this value is false. - * - * @return bool whether parents should be rendered - */ - public function getAddClassToListItem() - { - return $this->addClassToListItem; - } - - /** - * Sets a flag indicating whether only active branch should be rendered - * - * @param bool $flag [optional] render only active branch. - * @return self - */ - public function setOnlyActiveBranch($flag = true) - { - $this->onlyActiveBranch = (bool) $flag; - return $this; - } - - /** - * Returns a flag indicating whether only active branch should be rendered - * - * By default, this value is false, meaning the entire menu will be - * be rendered. - * - * @return bool - */ - public function getOnlyActiveBranch() - { - return $this->onlyActiveBranch; - } - - /** - * Sets which partial view script to use for rendering menu - * - * @param string|array $partial partial view script or null. If an array is - * given, it is expected to contain two - * values; the partial view script to use, - * and the module where the script can be - * found. - * @return self - */ - public function setPartial($partial) - { - if (null === $partial || is_string($partial) || is_array($partial)) { - $this->partial = $partial; - } - - return $this; - } - - /** - * Returns partial view script to use for rendering menu - * - * @return string|array|null - */ - public function getPartial() - { - return $this->partial; - } - - /** - * Enables/disables rendering of parents when only rendering active branch - * - * See {@link setOnlyActiveBranch()} for more information. - * - * @param bool $flag [optional] render parents when rendering active branch. - * @return self - */ - public function setRenderParents($flag = true) - { - $this->renderParents = (bool) $flag; - return $this; - } - - /** - * Returns flag indicating whether parents should be rendered when rendering - * only the active branch - * - * By default, this value is true. - * - * @return bool - */ - public function getRenderParents() - { - return $this->renderParents; - } - - /** - * Sets CSS class to use for the first 'ul' element when rendering - * - * @param string $ulClass CSS class to set - * @return self - */ - public function setUlClass($ulClass) - { - if (is_string($ulClass)) { - $this->ulClass = $ulClass; - } - - return $this; - } - - /** - * Returns CSS class to use for the first 'ul' element when rendering - * - * @return string - */ - public function getUlClass() - { - return $this->ulClass; - } - - /** - * Sets CSS class to use for the active 'li' element when rendering - * - * @param string $liActiveClass CSS class to set - * @return self - */ - public function setLiActiveClass($liActiveClass) - { - if (is_string($liActiveClass)) { - $this->liActiveClass = $liActiveClass; - } - - return $this; - } - - /** - * Returns CSS class to use for the active 'li' element when rendering - * - * @return string - */ - public function getLiActiveClass() - { - return $this->liActiveClass; - } -} diff --git a/library/Zend/View/Helper/Navigation/PluginManager.php b/library/Zend/View/Helper/Navigation/PluginManager.php deleted file mode 100755 index 8faf86eb3..000000000 --- a/library/Zend/View/Helper/Navigation/PluginManager.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Zend\View\Helper\Navigation\Breadcrumbs', - 'links' => 'Zend\View\Helper\Navigation\Links', - 'menu' => 'Zend\View\Helper\Navigation\Menu', - 'sitemap' => 'Zend\View\Helper\Navigation\Sitemap', - ); - - /** - * Validate the plugin - * - * Checks that the helper loaded is an instance of AbstractHelper. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof AbstractHelper) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\AbstractHelper', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/View/Helper/Navigation/Sitemap.php b/library/Zend/View/Helper/Navigation/Sitemap.php deleted file mode 100755 index 2ba2b4a4b..000000000 --- a/library/Zend/View/Helper/Navigation/Sitemap.php +++ /dev/null @@ -1,441 +0,0 @@ - tag - * - * @var string - */ - const SITEMAP_NS = 'http://www.sitemaps.org/schemas/sitemap/0.9'; - - /** - * Schema URL - * - * @var string - */ - const SITEMAP_XSD = 'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'; - - /** - * Whether XML output should be formatted - * - * @var bool - */ - protected $formatOutput = false; - - /** - * Server url - * - * @var string - */ - protected $serverUrl; - - /** - * List of urls in the sitemap - * - * @var array - */ - protected $urls = array(); - - /** - * Whether sitemap should be validated using Zend\Validate\Sitemap\* - * - * @var bool - */ - protected $useSitemapValidators = true; - - /** - * Whether sitemap should be schema validated when generated - * - * @var bool - */ - protected $useSchemaValidation = false; - - /** - * Whether the XML declaration should be included in XML output - * - * @var bool - */ - protected $useXmlDeclaration = true; - - /** - * Helper entry point - * - * @param string|AbstractContainer $container container to operate on - * @return Sitemap - */ - public function __invoke($container = null) - { - if (null !== $container) { - $this->setContainer($container); - } - - return $this; - } - - /** - * Renders helper - * - * Implements {@link HelperInterface::render()}. - * - * @param AbstractContainer $container [optional] container to render. Default is - * to render the container registered in the helper. - * @return string - */ - public function render($container = null) - { - $dom = $this->getDomSitemap($container); - $xml = $this->getUseXmlDeclaration() ? - $dom->saveXML() : - $dom->saveXML($dom->documentElement); - - return rtrim($xml, PHP_EOL); - } - - /** - * Returns a DOMDocument containing the Sitemap XML for the given container - * - * @param AbstractContainer $container [optional] container to get - * breadcrumbs from, defaults - * to what is registered in the - * helper - * @return DOMDocument DOM representation of the - * container - * @throws Exception\RuntimeException if schema validation is on - * and the sitemap is invalid - * according to the sitemap - * schema, or if sitemap - * validators are used and the - * loc element fails validation - */ - public function getDomSitemap(AbstractContainer $container = null) - { - // Reset the urls - $this->urls = array(); - - if (null === $container) { - $container = $this->getContainer(); - } - - // check if we should validate using our own validators - if ($this->getUseSitemapValidators()) { - // create validators - $locValidator = new \Zend\Validator\Sitemap\Loc(); - $lastmodValidator = new \Zend\Validator\Sitemap\Lastmod(); - $changefreqValidator = new \Zend\Validator\Sitemap\Changefreq(); - $priorityValidator = new \Zend\Validator\Sitemap\Priority(); - } - - // create document - $dom = new DOMDocument('1.0', 'UTF-8'); - $dom->formatOutput = $this->getFormatOutput(); - - // ...and urlset (root) element - $urlSet = $dom->createElementNS(self::SITEMAP_NS, 'urlset'); - $dom->appendChild($urlSet); - - // create iterator - $iterator = new RecursiveIteratorIterator($container, - RecursiveIteratorIterator::SELF_FIRST); - - $maxDepth = $this->getMaxDepth(); - if (is_int($maxDepth)) { - $iterator->setMaxDepth($maxDepth); - } - $minDepth = $this->getMinDepth(); - if (!is_int($minDepth) || $minDepth < 0) { - $minDepth = 0; - } - - // iterate container - foreach ($iterator as $page) { - if ($iterator->getDepth() < $minDepth || !$this->accept($page)) { - // page should not be included - continue; - } - - // get absolute url from page - if (!$url = $this->url($page)) { - // skip page if it has no url (rare case) - // or already is in the sitemap - continue; - } - - // create url node for this page - $urlNode = $dom->createElementNS(self::SITEMAP_NS, 'url'); - $urlSet->appendChild($urlNode); - - if ($this->getUseSitemapValidators() - && !$locValidator->isValid($url) - ) { - throw new Exception\RuntimeException(sprintf( - 'Encountered an invalid URL for Sitemap XML: "%s"', - $url - )); - } - - // put url in 'loc' element - $urlNode->appendChild($dom->createElementNS(self::SITEMAP_NS, - 'loc', $url)); - - // add 'lastmod' element if a valid lastmod is set in page - if (isset($page->lastmod)) { - $lastmod = strtotime((string) $page->lastmod); - - // prevent 1970-01-01... - if ($lastmod !== false) { - $lastmod = date('c', $lastmod); - } - - if (!$this->getUseSitemapValidators() || - $lastmodValidator->isValid($lastmod)) { - $urlNode->appendChild( - $dom->createElementNS(self::SITEMAP_NS, 'lastmod', - $lastmod) - ); - } - } - - // add 'changefreq' element if a valid changefreq is set in page - if (isset($page->changefreq)) { - $changefreq = $page->changefreq; - if (!$this->getUseSitemapValidators() || - $changefreqValidator->isValid($changefreq)) { - $urlNode->appendChild( - $dom->createElementNS(self::SITEMAP_NS, 'changefreq', - $changefreq) - ); - } - } - - // add 'priority' element if a valid priority is set in page - if (isset($page->priority)) { - $priority = $page->priority; - if (!$this->getUseSitemapValidators() || - $priorityValidator->isValid($priority)) { - $urlNode->appendChild( - $dom->createElementNS(self::SITEMAP_NS, 'priority', $priority) - ); - } - } - } - - // validate using schema if specified - if ($this->getUseSchemaValidation()) { - ErrorHandler::start(); - $test = $dom->schemaValidate(self::SITEMAP_XSD); - $error = ErrorHandler::stop(); - if (!$test) { - throw new Exception\RuntimeException(sprintf( - 'Sitemap is invalid according to XML Schema at "%s"', - self::SITEMAP_XSD - ), 0, $error); - } - } - - return $dom; - } - - /** - * Returns an escaped absolute URL for the given page - * - * @param AbstractPage $page - * @return string - */ - public function url(AbstractPage $page) - { - $href = $page->getHref(); - - if (!isset($href{0})) { - // no href - return ''; - } elseif ($href{0} == '/') { - // href is relative to root; use serverUrl helper - $url = $this->getServerUrl() . $href; - } elseif (preg_match('/^[a-z]+:/im', (string) $href)) { - // scheme is given in href; assume absolute URL already - $url = (string) $href; - } else { - // href is relative to current document; use url helpers - $basePathHelper = $this->getView()->plugin('basepath'); - $curDoc = $basePathHelper(); - $curDoc = ('/' == $curDoc) ? '' : trim($curDoc, '/'); - $url = rtrim($this->getServerUrl(), '/') . '/' - . $curDoc - . (empty($curDoc) ? '' : '/') . $href; - } - - if (! in_array($url, $this->urls)) { - $this->urls[] = $url; - return $this->xmlEscape($url); - } - - return null; - } - - /** - * Escapes string for XML usage - * - * @param string $string - * @return string - */ - protected function xmlEscape($string) - { - $escaper = $this->view->plugin('escapeHtml'); - return $escaper($string); - } - - /** - * Sets whether XML output should be formatted - * - * @param bool $formatOutput - * @return Sitemap - */ - public function setFormatOutput($formatOutput = true) - { - $this->formatOutput = (bool) $formatOutput; - return $this; - } - - /** - * Returns whether XML output should be formatted - * - * @return bool - */ - public function getFormatOutput() - { - return $this->formatOutput; - } - - /** - * Sets server url (scheme and host-related stuff without request URI) - * - * E.g. http://www.example.com - * - * @param string $serverUrl - * @return Sitemap - * @throws Exception\InvalidArgumentException - */ - public function setServerUrl($serverUrl) - { - $uri = Uri\UriFactory::factory($serverUrl); - $uri->setFragment(''); - $uri->setPath(''); - $uri->setQuery(''); - - if ($uri->isValid()) { - $this->serverUrl = $uri->toString(); - } else { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid server URL: "%s"', - $serverUrl - )); - } - - return $this; - } - - /** - * Returns server URL - * - * @return string - */ - public function getServerUrl() - { - if (!isset($this->serverUrl)) { - $serverUrlHelper = $this->getView()->plugin('serverUrl'); - $this->serverUrl = $serverUrlHelper(); - } - - return $this->serverUrl; - } - - /** - * Sets whether sitemap should be validated using Zend\Validate\Sitemap_* - * - * @param bool $useSitemapValidators - * @return Sitemap - */ - public function setUseSitemapValidators($useSitemapValidators) - { - $this->useSitemapValidators = (bool) $useSitemapValidators; - return $this; - } - - /** - * Returns whether sitemap should be validated using Zend\Validate\Sitemap_* - * - * @return bool - */ - public function getUseSitemapValidators() - { - return $this->useSitemapValidators; - } - - /** - * Sets whether sitemap should be schema validated when generated - * - * @param bool $schemaValidation - * @return Sitemap - */ - public function setUseSchemaValidation($schemaValidation) - { - $this->useSchemaValidation = (bool) $schemaValidation; - return $this; - } - - /** - * Returns true if sitemap should be schema validated when generated - * - * @return bool - */ - public function getUseSchemaValidation() - { - return $this->useSchemaValidation; - } - - /** - * Sets whether the XML declaration should be used in output - * - * @param bool $useXmlDecl - * @return Sitemap - */ - public function setUseXmlDeclaration($useXmlDecl) - { - $this->useXmlDeclaration = (bool) $useXmlDecl; - return $this; - } - - /** - * Returns whether the XML declaration should be used in output - * - * @return bool - */ - public function getUseXmlDeclaration() - { - return $this->useXmlDeclaration; - } -} diff --git a/library/Zend/View/Helper/PaginationControl.php b/library/Zend/View/Helper/PaginationControl.php deleted file mode 100755 index 9963fdd35..000000000 --- a/library/Zend/View/Helper/PaginationControl.php +++ /dev/null @@ -1,131 +0,0 @@ -paginator is set and, - * if so, uses that. Also, if no scrolling style or partial are specified, - * the defaults will be used (if set). - * - * @param Paginator\Paginator $paginator (Optional) - * @param string $scrollingStyle (Optional) Scrolling style - * @param string $partial (Optional) View partial - * @param array|string $params (Optional) params to pass to the partial - * @throws Exception\RuntimeException if no paginator or no view partial provided - * @throws Exception\InvalidArgumentException if partial is invalid array - * @return string - */ - public function __invoke(Paginator\Paginator $paginator = null, $scrollingStyle = null, $partial = null, $params = null) - { - if ($paginator === null) { - if (isset($this->view->paginator) and $this->view->paginator !== null and $this->view->paginator instanceof Paginator\Paginator) { - $paginator = $this->view->paginator; - } else { - throw new Exception\RuntimeException('No paginator instance provided or incorrect type'); - } - } - - if ($partial === null) { - if (static::$defaultViewPartial === null) { - throw new Exception\RuntimeException('No view partial provided and no default set'); - } - - $partial = static::$defaultViewPartial; - } - - if ($scrollingStyle === null) { - $scrollingStyle = static::$defaultScrollingStyle; - } - - $pages = get_object_vars($paginator->getPages($scrollingStyle)); - - if ($params !== null) { - $pages = array_merge($pages, (array) $params); - } - - if (is_array($partial)) { - if (count($partial) != 2) { - throw new Exception\InvalidArgumentException( - 'A view partial supplied as an array must contain two values: the filename and its module' - ); - } - - if ($partial[1] !== null) { - $partialHelper = $this->view->plugin('partial'); - return $partialHelper($partial[0], $pages); - } - - $partial = $partial[0]; - } - - $partialHelper = $this->view->plugin('partial'); - return $partialHelper($partial, $pages); - } - - /** - * Sets the default Scrolling Style - * - * @param string $style string 'all' | 'elastic' | 'sliding' | 'jumping' - */ - public static function setDefaultScrollingStyle($style) - { - static::$defaultScrollingStyle = $style; - } - - /** - * Gets the default scrolling style - * - * @return string - */ - public static function getDefaultScrollingStyle() - { - return static::$defaultScrollingStyle; - } - - /** - * Sets the default view partial. - * - * @param string|array $partial View partial - */ - public static function setDefaultViewPartial($partial) - { - static::$defaultViewPartial = $partial; - } - - /** - * Gets the default view partial - * - * @return string|array - */ - public static function getDefaultViewPartial() - { - return static::$defaultViewPartial; - } -} diff --git a/library/Zend/View/Helper/Partial.php b/library/Zend/View/Helper/Partial.php deleted file mode 100755 index 444f161b9..000000000 --- a/library/Zend/View/Helper/Partial.php +++ /dev/null @@ -1,94 +0,0 @@ -getView()->render($name); - } - - if (is_scalar($values)) { - $values = array(); - } elseif ($values instanceof ModelInterface) { - $values = $values->getVariables(); - } elseif (is_object($values)) { - if (null !== ($objectKey = $this->getObjectKey())) { - $values = array($objectKey => $values); - } elseif (method_exists($values, 'toArray')) { - $values = $values->toArray(); - } else { - $values = get_object_vars($values); - } - } - - return $this->getView()->render($name, $values); - } - - /** - * Set object key - * - * @param string $key - * @return Partial - */ - public function setObjectKey($key) - { - if (null === $key) { - $this->objectKey = null; - return $this; - } - - $this->objectKey = (string) $key; - - return $this; - } - - /** - * Retrieve object key - * - * The objectKey is the variable to which an object in the iterator will be - * assigned. - * - * @return null|string - */ - public function getObjectKey() - { - return $this->objectKey; - } -} diff --git a/library/Zend/View/Helper/PartialLoop.php b/library/Zend/View/Helper/PartialLoop.php deleted file mode 100755 index f66297e67..000000000 --- a/library/Zend/View/Helper/PartialLoop.php +++ /dev/null @@ -1,77 +0,0 @@ -toArray(); - } else { - throw new Exception\InvalidArgumentException('PartialLoop helper requires iterable data'); - } - } - - // reset the counter if it's called again - $this->partialCounter = 0; - $content = ''; - - foreach ($values as $item) { - $this->partialCounter++; - $content .= parent::__invoke($name, $item); - } - - return $content; - } - - /** - * Get the partial counter - * - * @return int - */ - public function getPartialCounter() - { - return $this->partialCounter; - } -} diff --git a/library/Zend/View/Helper/Placeholder.php b/library/Zend/View/Helper/Placeholder.php deleted file mode 100755 index 297c17a55..000000000 --- a/library/Zend/View/Helper/Placeholder.php +++ /dev/null @@ -1,98 +0,0 @@ -getContainer($name); - } - - /** - * createContainer - * - * @param string $key - * @param array $value - * @return Container\AbstractContainer - */ - public function createContainer($key, array $value = array()) - { - $key = (string) $key; - - $this->items[$key] = new $this->containerClass($value); - return $this->items[$key]; - } - - /** - * Retrieve a placeholder container - * - * @param string $key - * @return Container\AbstractContainer - */ - public function getContainer($key) - { - $key = (string) $key; - if (isset($this->items[$key])) { - return $this->items[$key]; - } - - $container = $this->createContainer($key); - - return $container; - } - - /** - * Does a particular container exist? - * - * @param string $key - * @return bool - */ - public function containerExists($key) - { - $key = (string) $key; - $return = array_key_exists($key, $this->items); - return $return; - } -} diff --git a/library/Zend/View/Helper/Placeholder/Container.php b/library/Zend/View/Helper/Placeholder/Container.php deleted file mode 100755 index 35220176c..000000000 --- a/library/Zend/View/Helper/Placeholder/Container.php +++ /dev/null @@ -1,17 +0,0 @@ -toString(); - } - - /** - * Render the placeholder - * - * @param null|int|string $indent - * @return string - */ - public function toString($indent = null) - { - $indent = ($indent !== null) - ? $this->getWhitespace($indent) - : $this->getIndent(); - - $items = $this->getArrayCopy(); - $return = $indent - . $this->getPrefix() - . implode($this->getSeparator(), $items) - . $this->getPostfix(); - $return = preg_replace("/(\r\n?|\n)/", '$1' . $indent, $return); - - return $return; - } - - /** - * Start capturing content to push into placeholder - * - * @param string $type How to capture content into placeholder; append, prepend, or set - * @param mixed $key Key to which to capture content - * @throws Exception\RuntimeException if nested captures detected - * @return void - */ - public function captureStart($type = AbstractContainer::APPEND, $key = null) - { - if ($this->captureLock) { - throw new Exception\RuntimeException( - 'Cannot nest placeholder captures for the same placeholder' - ); - } - - $this->captureLock = true; - $this->captureType = $type; - if ((null !== $key) && is_scalar($key)) { - $this->captureKey = (string) $key; - } - ob_start(); - } - - /** - * End content capture - * - * @return void - */ - public function captureEnd() - { - $data = ob_get_clean(); - $key = null; - $this->captureLock = false; - if (null !== $this->captureKey) { - $key = $this->captureKey; - } - switch ($this->captureType) { - case self::SET: - if (null !== $key) { - $this[$key] = $data; - } else { - $this->exchangeArray(array($data)); - } - break; - case self::PREPEND: - if (null !== $key) { - $array = array($key => $data); - $values = $this->getArrayCopy(); - $final = $array + $values; - $this->exchangeArray($final); - } else { - $this->prepend($data); - } - break; - case self::APPEND: - default: - if (null !== $key) { - if (empty($this[$key])) { - $this[$key] = $data; - } else { - $this[$key] .= $data; - } - } else { - $this[$this->nextIndex()] = $data; - } - break; - } - } - - /** - * Get keys - * - * @return array - */ - public function getKeys() - { - $array = $this->getArrayCopy(); - - return array_keys($array); - } - - /** - * Retrieve container value - * - * If single element registered, returns that element; otherwise, - * serializes to array. - * - * @return mixed - */ - public function getValue() - { - if (1 == count($this)) { - $keys = $this->getKeys(); - $key = array_shift($keys); - return $this[$key]; - } - - return $this->getArrayCopy(); - } - - /** - * Retrieve whitespace representation of $indent - * - * @param int|string $indent - * @return string - */ - public function getWhitespace($indent) - { - if (is_int($indent)) { - $indent = str_repeat(' ', $indent); - } - - return (string) $indent; - } - - /** - * Set a single value - * - * @param mixed $value - * @return void - */ - public function set($value) - { - $this->exchangeArray(array($value)); - - return $this; - } - - /** - * Prepend a value to the top of the container - * - * @param mixed $value - * @return self - */ - public function prepend($value) - { - $values = $this->getArrayCopy(); - array_unshift($values, $value); - $this->exchangeArray($values); - - return $this; - } - - /** - * Append a value to the end of the container - * - * @param mixed $value - * @return self - */ - public function append($value) - { - parent::append($value); - return $this; - } - - /** - * Next Index as defined by the PHP manual - * - * @return int - */ - public function nextIndex() - { - $keys = $this->getKeys(); - if (0 == count($keys)) { - return 0; - } - - return $nextIndex = max($keys) + 1; - } - - /** - * Set the indentation string for __toString() serialization, - * optionally, if a number is passed, it will be the number of spaces - * - * @param string|int $indent - * @return self - */ - public function setIndent($indent) - { - $this->indent = $this->getWhitespace($indent); - return $this; - } - - /** - * Retrieve indentation - * - * @return string - */ - public function getIndent() - { - return $this->indent; - } - - /** - * Set postfix for __toString() serialization - * - * @param string $postfix - * @return self - */ - public function setPostfix($postfix) - { - $this->postfix = (string) $postfix; - return $this; - } - - /** - * Retrieve postfix - * - * @return string - */ - public function getPostfix() - { - return $this->postfix; - } - - /** - * Set prefix for __toString() serialization - * - * @param string $prefix - * @return self - */ - public function setPrefix($prefix) - { - $this->prefix = (string) $prefix; - return $this; - } - - /** - * Retrieve prefix - * - * @return string - */ - public function getPrefix() - { - return $this->prefix; - } - - /** - * Set separator for __toString() serialization - * - * Used to implode elements in container - * - * @param string $separator - * @return self - */ - public function setSeparator($separator) - { - $this->separator = (string) $separator; - return $this; - } - - /** - * Retrieve separator - * - * @return string - */ - public function getSeparator() - { - return $this->separator; - } -} diff --git a/library/Zend/View/Helper/Placeholder/Container/AbstractStandalone.php b/library/Zend/View/Helper/Placeholder/Container/AbstractStandalone.php deleted file mode 100755 index 619ba7073..000000000 --- a/library/Zend/View/Helper/Placeholder/Container/AbstractStandalone.php +++ /dev/null @@ -1,376 +0,0 @@ -setContainer($this->getContainer()); - } - - /** - * Overload - * - * Proxy to container methods - * - * @param string $method - * @param array $args - * @throws Exception\BadMethodCallException - * @return mixed - */ - public function __call($method, $args) - { - $container = $this->getContainer(); - if (method_exists($container, $method)) { - $return = call_user_func_array(array($container, $method), $args); - if ($return === $container) { - // If the container is returned, we really want the current object - return $this; - } - return $return; - } - - throw new Exception\BadMethodCallException('Method "' . $method . '" does not exist'); - } - - /** - * Overloading: set property value - * - * @param string $key - * @param mixed $value - * @return void - */ - public function __set($key, $value) - { - $container = $this->getContainer(); - $container[$key] = $value; - } - - /** - * Overloading: retrieve property - * - * @param string $key - * @return mixed - */ - public function __get($key) - { - $container = $this->getContainer(); - if (isset($container[$key])) { - return $container[$key]; - } - - return null; - } - - /** - * Overloading: check if property is set - * - * @param string $key - * @return bool - */ - public function __isset($key) - { - $container = $this->getContainer(); - return isset($container[$key]); - } - - /** - * Overloading: unset property - * - * @param string $key - * @return void - */ - public function __unset($key) - { - $container = $this->getContainer(); - if (isset($container[$key])) { - unset($container[$key]); - } - } - - /** - * Cast to string representation - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * String representation - * - * @return string - */ - public function toString() - { - return $this->getContainer()->toString(); - } - - /** - * Escape a string - * - * @param string $string - * @return string - */ - protected function escape($string) - { - if ($this->getView() instanceof RendererInterface - && method_exists($this->getView(), 'getEncoding') - ) { - $escaper = $this->getView()->plugin('escapeHtml'); - return $escaper((string) $string); - } - - return $this->getEscaper()->escapeHtml((string) $string); - } - - /** - * Set whether or not auto escaping should be used - * - * @param bool $autoEscape whether or not to auto escape output - * @return AbstractStandalone - */ - public function setAutoEscape($autoEscape = true) - { - $this->autoEscape = ($autoEscape) ? true : false; - return $this; - } - - /** - * Return whether autoEscaping is enabled or disabled - * - * return bool - */ - public function getAutoEscape() - { - return $this->autoEscape; - } - - /** - * Set container on which to operate - * - * @param AbstractContainer $container - * @return AbstractStandalone - */ - public function setContainer(AbstractContainer $container) - { - $this->container = $container; - return $this; - } - - /** - * Retrieve placeholder container - * - * @return AbstractContainer - */ - public function getContainer() - { - if (!$this->container instanceof AbstractContainer) { - $this->container = new $this->containerClass(); - } - return $this->container; - } - - /** - * Delete a container - * - * @return bool - */ - public function deleteContainer() - { - if (null != $this->container) { - $this->container = null; - return true; - } - - return false; - } - - /** - * Set the container class to use - * - * @param string $name - * @throws Exception\InvalidArgumentException - * @throws Exception\DomainException - * @return \Zend\View\Helper\Placeholder\Container\AbstractStandalone - */ - public function setContainerClass($name) - { - if (!class_exists($name)) { - throw new Exception\DomainException( - sprintf( - '%s expects a valid container class name; received "%s", which did not resolve', - __METHOD__, - $name - ) - ); - } - - if (!in_array('Zend\View\Helper\Placeholder\Container\AbstractContainer', class_parents($name))) { - throw new Exception\InvalidArgumentException('Invalid Container class specified'); - } - - $this->containerClass = $name; - return $this; - } - - /** - * Retrieve the container class - * - * @return string - */ - public function getContainerClass() - { - return $this->containerClass; - } - - /** - * Set Escaper instance - * - * @param Escaper $escaper - * @return AbstractStandalone - */ - public function setEscaper(Escaper $escaper) - { - $encoding = $escaper->getEncoding(); - $this->escapers[$encoding] = $escaper; - - return $this; - } - - /** - * Get Escaper instance - * - * Lazy-loads one if none available - * - * @param string|null $enc Encoding to use - * @return mixed - */ - public function getEscaper($enc = 'UTF-8') - { - $enc = strtolower($enc); - if (!isset($this->escapers[$enc])) { - $this->setEscaper(new Escaper($enc)); - } - - return $this->escapers[$enc]; - } - - /** - * Countable - * - * @return int - */ - public function count() - { - $container = $this->getContainer(); - return count($container); - } - - /** - * ArrayAccess: offsetExists - * - * @param string|int $offset - * @return bool - */ - public function offsetExists($offset) - { - return $this->getContainer()->offsetExists($offset); - } - - /** - * ArrayAccess: offsetGet - * - * @param string|int $offset - * @return mixed - */ - public function offsetGet($offset) - { - return $this->getContainer()->offsetGet($offset); - } - - /** - * ArrayAccess: offsetSet - * - * @param string|int $offset - * @param mixed $value - * @return void - */ - public function offsetSet($offset, $value) - { - return $this->getContainer()->offsetSet($offset, $value); - } - - /** - * ArrayAccess: offsetUnset - * - * @param string|int $offset - * @return void - */ - public function offsetUnset($offset) - { - return $this->getContainer()->offsetUnset($offset); - } - - /** - * IteratorAggregate: get Iterator - * - * @return \Iterator - */ - public function getIterator() - { - return $this->getContainer()->getIterator(); - } -} diff --git a/library/Zend/View/Helper/Placeholder/Registry.php b/library/Zend/View/Helper/Placeholder/Registry.php deleted file mode 100755 index f86b4e1ad..000000000 --- a/library/Zend/View/Helper/Placeholder/Registry.php +++ /dev/null @@ -1,185 +0,0 @@ -items[$key] = $container; - - return $this; - } - - /** - * Retrieve a placeholder container - * - * @param string $key - * @return Container\AbstractContainer - */ - public function getContainer($key) - { - $key = (string) $key; - if (isset($this->items[$key])) { - return $this->items[$key]; - } - - $container = $this->createContainer($key); - - return $container; - } - - /** - * Does a particular container exist? - * - * @param string $key - * @return bool - */ - public function containerExists($key) - { - $key = (string) $key; - - return array_key_exists($key, $this->items); - } - - /** - * createContainer - * - * @param string $key - * @param array $value - * @return Container\AbstractContainer - */ - public function createContainer($key, array $value = array()) - { - $key = (string) $key; - - $this->items[$key] = new $this->containerClass($value); - - return $this->items[$key]; - } - - /** - * Delete a container - * - * @param string $key - * @return bool - */ - public function deleteContainer($key) - { - $key = (string) $key; - if (isset($this->items[$key])) { - unset($this->items[$key]); - return true; - } - - return false; - } - - /** - * Set the container class to use - * - * @param string $name - * @throws Exception\InvalidArgumentException - * @throws Exception\DomainException - * @return Registry - */ - public function setContainerClass($name) - { - if (!class_exists($name)) { - throw new Exception\DomainException( - sprintf( - '%s expects a valid registry class name; received "%s", which did not resolve', - __METHOD__, - $name - ) - ); - } - - if (!in_array('Zend\View\Helper\Placeholder\Container\AbstractContainer', class_parents($name))) { - throw new Exception\InvalidArgumentException('Invalid Container class specified'); - } - - $this->containerClass = $name; - - return $this; - } - - /** - * Retrieve the container class - * - * @return string - */ - public function getContainerClass() - { - return $this->containerClass; - } -} diff --git a/library/Zend/View/Helper/RenderChildModel.php b/library/Zend/View/Helper/RenderChildModel.php deleted file mode 100755 index d59edfe05..000000000 --- a/library/Zend/View/Helper/RenderChildModel.php +++ /dev/null @@ -1,133 +0,0 @@ -render($child); - } - - /** - * Render a model - * - * If a matching child model is found, it is rendered. If not, an empty - * string is returned. - * - * @param string $child - * @return string - */ - public function render($child) - { - $model = $this->findChild($child); - if (!$model) { - return ''; - } - - $current = $this->current; - $view = $this->getView(); - $return = $view->render($model); - $helper = $this->getViewModelHelper(); - $helper->setCurrent($current); - - return $return; - } - - /** - * Find the named child model - * - * Iterates through the current view model, looking for a child model that - * has a captureTo value matching the requested $child. If found, that child - * model is returned; otherwise, a boolean false is returned. - * - * @param string $child - * @return false|Model - */ - protected function findChild($child) - { - $this->current = $model = $this->getCurrent(); - foreach ($model->getChildren() as $childModel) { - if ($childModel->captureTo() == $child) { - return $childModel; - } - } - - return false; - } - - /** - * Get the current view model - * - * @throws Exception\RuntimeException - * @return null|Model - */ - protected function getCurrent() - { - $helper = $this->getViewModelHelper(); - if (!$helper->hasCurrent()) { - throw new Exception\RuntimeException(sprintf( - '%s: no view model currently registered in renderer; cannot query for children', - __METHOD__ - )); - } - - return $helper->getCurrent(); - } - - /** - * Retrieve the view model helper - * - * @return ViewModel - */ - protected function getViewModelHelper() - { - if ($this->viewModelHelper) { - return $this->viewModelHelper; - } - - if (method_exists($this->getView(), 'plugin')) { - $this->viewModelHelper = $this->view->plugin('view_model'); - } - - return $this->viewModelHelper; - } -} diff --git a/library/Zend/View/Helper/RenderToPlaceholder.php b/library/Zend/View/Helper/RenderToPlaceholder.php deleted file mode 100755 index 3707995b3..000000000 --- a/library/Zend/View/Helper/RenderToPlaceholder.php +++ /dev/null @@ -1,35 +0,0 @@ -view->plugin('placeholder'); - $placeholderHelper($placeholder)->captureStart(); - echo $this->view->render($script); - $placeholderHelper($placeholder)->captureEnd(); - } -} diff --git a/library/Zend/View/Helper/ServerUrl.php b/library/Zend/View/Helper/ServerUrl.php deleted file mode 100755 index ae846a9ba..000000000 --- a/library/Zend/View/Helper/ServerUrl.php +++ /dev/null @@ -1,330 +0,0 @@ -getScheme() . '://' . $this->getHost() . $path; - } - - /** - * Detect the host based on headers - * - * @return void - */ - protected function detectHost() - { - if ($this->setHostFromProxy()) { - return; - } - - if (isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])) { - // Detect if the port is set in SERVER_PORT and included in HTTP_HOST - if (isset($_SERVER['SERVER_PORT'])) { - $portStr = ':' . $_SERVER['SERVER_PORT']; - if (substr($_SERVER['HTTP_HOST'], 0-strlen($portStr), strlen($portStr)) == $portStr) { - $this->setHost(substr($_SERVER['HTTP_HOST'], 0, 0-strlen($portStr))); - return; - } - } - - $this->setHost($_SERVER['HTTP_HOST']); - - return; - } - - if (!isset($_SERVER['SERVER_NAME']) || !isset($_SERVER['SERVER_PORT'])) { - return; - } - - $name = $_SERVER['SERVER_NAME']; - $this->setHost($name); - } - - /** - * Detect the port - * - * @return null - */ - protected function detectPort() - { - if ($this->setPortFromProxy()) { - return; - } - - if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT']) { - $this->setPort($_SERVER['SERVER_PORT']); - return; - } - } - - /** - * Detect the scheme - * - * @return null - */ - protected function detectScheme() - { - if ($this->setSchemeFromProxy()) { - return; - } - - switch (true) { - case (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] === true)): - case (isset($_SERVER['HTTP_SCHEME']) && ($_SERVER['HTTP_SCHEME'] == 'https')): - case (443 === $this->getPort()): - $scheme = 'https'; - break; - default: - $scheme = 'http'; - break; - } - - $this->setScheme($scheme); - } - - /** - * Detect if a proxy is in use, and, if so, set the host based on it - * - * @return bool - */ - protected function setHostFromProxy() - { - if (!$this->useProxy) { - return false; - } - - if (!isset($_SERVER['HTTP_X_FORWARDED_HOST']) || empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { - return false; - } - - $host = $_SERVER['HTTP_X_FORWARDED_HOST']; - if (strpos($host, ',') !== false) { - $hosts = explode(',', $host); - $host = trim(array_pop($hosts)); - } - if (empty($host)) { - return false; - } - $this->setHost($host); - - return true; - } - - /** - * Set port based on detected proxy headers - * - * @return bool - */ - protected function setPortFromProxy() - { - if (!$this->useProxy) { - return false; - } - - if (!isset($_SERVER['HTTP_X_FORWARDED_PORT']) || empty($_SERVER['HTTP_X_FORWARDED_PORT'])) { - return false; - } - - $port = $_SERVER['HTTP_X_FORWARDED_PORT']; - $this->setPort($port); - - return true; - } - - /** - * Set the current scheme based on detected proxy headers - * - * @return bool - */ - protected function setSchemeFromProxy() - { - if (!$this->useProxy) { - return false; - } - - if (isset($_SERVER['SSL_HTTPS'])) { - $sslHttps = strtolower($_SERVER['SSL_HTTPS']); - if (in_array($sslHttps, array('on', 1))) { - $this->setScheme('https'); - return true; - } - } - - if (!isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) { - return false; - } - - $scheme = trim(strtolower($_SERVER['HTTP_X_FORWARDED_PROTO'])); - if (empty($scheme)) { - return false; - } - - $this->setScheme($scheme); - - return true; - } - - /** - * Sets host - * - * @param string $host - * @return ServerUrl - */ - public function setHost($host) - { - $port = $this->getPort(); - $scheme = $this->getScheme(); - - if (($scheme == 'http' && (null === $port || $port == 80)) - || ($scheme == 'https' && (null === $port || $port == 443)) - ) { - $this->host = $host; - return $this; - } - - $this->host = $host . ':' . $port; - - return $this; - } - - /** - * Returns host - * - * @return string - */ - public function getHost() - { - if (null === $this->host) { - $this->detectHost(); - } - - return $this->host; - } - - /** - * Set server port - * - * @param int $port - * @return ServerUrl - */ - public function setPort($port) - { - $this->port = (int) $port; - - return $this; - } - - /** - * Retrieve the server port - * - * @return int|null - */ - public function getPort() - { - if (null === $this->port) { - $this->detectPort(); - } - - return $this->port; - } - - /** - * Sets scheme (typically http or https) - * - * @param string $scheme - * @return ServerUrl - */ - public function setScheme($scheme) - { - $this->scheme = $scheme; - - return $this; - } - - /** - * Returns scheme (typically http or https) - * - * @return string - */ - public function getScheme() - { - if (null === $this->scheme) { - $this->detectScheme(); - } - - return $this->scheme; - } - - /** - * Set flag indicating whether or not to query proxy servers - * - * @param bool $useProxy - * @return ServerUrl - */ - public function setUseProxy($useProxy = false) - { - $this->useProxy = (bool) $useProxy; - - return $this; - } -} diff --git a/library/Zend/View/Helper/Service/FlashMessengerFactory.php b/library/Zend/View/Helper/Service/FlashMessengerFactory.php deleted file mode 100755 index fbaf53e8b..000000000 --- a/library/Zend/View/Helper/Service/FlashMessengerFactory.php +++ /dev/null @@ -1,47 +0,0 @@ -getServiceLocator(); - $helper = new FlashMessenger(); - $controllerPluginManager = $serviceLocator->get('ControllerPluginManager'); - $flashMessenger = $controllerPluginManager->get('flashmessenger'); - $helper->setPluginFlashMessenger($flashMessenger); - $config = $serviceLocator->get('Config'); - if (isset($config['view_helper_config']['flashmessenger'])) { - $configHelper = $config['view_helper_config']['flashmessenger']; - if (isset($configHelper['message_open_format'])) { - $helper->setMessageOpenFormat($configHelper['message_open_format']); - } - if (isset($configHelper['message_separator_string'])) { - $helper->setMessageSeparatorString($configHelper['message_separator_string']); - } - if (isset($configHelper['message_close_string'])) { - $helper->setMessageCloseString($configHelper['message_close_string']); - } - } - - return $helper; - } -} diff --git a/library/Zend/View/Helper/Service/IdentityFactory.php b/library/Zend/View/Helper/Service/IdentityFactory.php deleted file mode 100755 index a065a1d9d..000000000 --- a/library/Zend/View/Helper/Service/IdentityFactory.php +++ /dev/null @@ -1,32 +0,0 @@ -getServiceLocator(); - $helper = new Identity(); - if ($services->has('Zend\Authentication\AuthenticationService')) { - $helper->setAuthenticationService($services->get('Zend\Authentication\AuthenticationService')); - } - return $helper; - } -} diff --git a/library/Zend/View/Helper/Url.php b/library/Zend/View/Helper/Url.php deleted file mode 100755 index 9b2af7e97..000000000 --- a/library/Zend/View/Helper/Url.php +++ /dev/null @@ -1,126 +0,0 @@ -router) { - throw new Exception\RuntimeException('No RouteStackInterface instance provided'); - } - - if (3 == func_num_args() && is_bool($options)) { - $reuseMatchedParams = $options; - $options = array(); - } - - if ($name === null) { - if ($this->routeMatch === null) { - throw new Exception\RuntimeException('No RouteMatch instance provided'); - } - - $name = $this->routeMatch->getMatchedRouteName(); - - if ($name === null) { - throw new Exception\RuntimeException('RouteMatch does not contain a matched route name'); - } - } - - if (!is_array($params)) { - if (!$params instanceof Traversable) { - throw new Exception\InvalidArgumentException( - 'Params is expected to be an array or a Traversable object' - ); - } - $params = iterator_to_array($params); - } - - if ($reuseMatchedParams && $this->routeMatch !== null) { - $routeMatchParams = $this->routeMatch->getParams(); - - if (isset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER])) { - $routeMatchParams['controller'] = $routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]; - unset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]); - } - - if (isset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE])) { - unset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE]); - } - - $params = array_merge($routeMatchParams, $params); - } - - $options['name'] = $name; - - return $this->router->assemble($params, $options); - } - - /** - * Set the router to use for assembling. - * - * @param RouteStackInterface $router - * @return Url - */ - public function setRouter(RouteStackInterface $router) - { - $this->router = $router; - return $this; - } - - /** - * Set route match returned by the router. - * - * @param RouteMatch $routeMatch - * @return Url - */ - public function setRouteMatch(RouteMatch $routeMatch) - { - $this->routeMatch = $routeMatch; - return $this; - } -} diff --git a/library/Zend/View/Helper/ViewModel.php b/library/Zend/View/Helper/ViewModel.php deleted file mode 100755 index 49b130649..000000000 --- a/library/Zend/View/Helper/ViewModel.php +++ /dev/null @@ -1,92 +0,0 @@ -current = $model; - return $this; - } - - /** - * Get the current view model - * - * @return null|Model - */ - public function getCurrent() - { - return $this->current; - } - - /** - * Is a current view model composed? - * - * @return bool - */ - public function hasCurrent() - { - return ($this->current instanceof Model); - } - - /** - * Set the root view model - * - * @param Model $model - * @return ViewModel - */ - public function setRoot(Model $model) - { - $this->root = $model; - return $this; - } - - /** - * Get the root view model - * - * @return null|Model - */ - public function getRoot() - { - return $this->root; - } - - /** - * Is a root view model composed? - * - * @return bool - */ - public function hasRoot() - { - return ($this->root instanceof Model); - } -} diff --git a/library/Zend/View/HelperPluginManager.php b/library/Zend/View/HelperPluginManager.php deleted file mode 100755 index d2ddc6904..000000000 --- a/library/Zend/View/HelperPluginManager.php +++ /dev/null @@ -1,194 +0,0 @@ - 'Zend\View\Helper\Service\FlashMessengerFactory', - 'identity' => 'Zend\View\Helper\Service\IdentityFactory', - ); - - /** - * Default set of helpers - * - * @var array - */ - protected $invokableClasses = array( - // basepath, doctype, and url are set up as factories in the ViewHelperManagerFactory. - // basepath and url are not very useful without their factories, however the doctype - // helper works fine as an invokable. The factory for doctype simply checks for the - // config value from the merged config. - 'basepath' => 'Zend\View\Helper\BasePath', - 'cycle' => 'Zend\View\Helper\Cycle', - 'declarevars' => 'Zend\View\Helper\DeclareVars', - 'doctype' => 'Zend\View\Helper\Doctype', // overridden by a factory in ViewHelperManagerFactory - 'escapehtml' => 'Zend\View\Helper\EscapeHtml', - 'escapehtmlattr' => 'Zend\View\Helper\EscapeHtmlAttr', - 'escapejs' => 'Zend\View\Helper\EscapeJs', - 'escapecss' => 'Zend\View\Helper\EscapeCss', - 'escapeurl' => 'Zend\View\Helper\EscapeUrl', - 'gravatar' => 'Zend\View\Helper\Gravatar', - 'headlink' => 'Zend\View\Helper\HeadLink', - 'headmeta' => 'Zend\View\Helper\HeadMeta', - 'headscript' => 'Zend\View\Helper\HeadScript', - 'headstyle' => 'Zend\View\Helper\HeadStyle', - 'headtitle' => 'Zend\View\Helper\HeadTitle', - 'htmlflash' => 'Zend\View\Helper\HtmlFlash', - 'htmllist' => 'Zend\View\Helper\HtmlList', - 'htmlobject' => 'Zend\View\Helper\HtmlObject', - 'htmlpage' => 'Zend\View\Helper\HtmlPage', - 'htmlquicktime' => 'Zend\View\Helper\HtmlQuicktime', - 'inlinescript' => 'Zend\View\Helper\InlineScript', - 'json' => 'Zend\View\Helper\Json', - 'layout' => 'Zend\View\Helper\Layout', - 'paginationcontrol' => 'Zend\View\Helper\PaginationControl', - 'partialloop' => 'Zend\View\Helper\PartialLoop', - 'partial' => 'Zend\View\Helper\Partial', - 'placeholder' => 'Zend\View\Helper\Placeholder', - 'renderchildmodel' => 'Zend\View\Helper\RenderChildModel', - 'rendertoplaceholder' => 'Zend\View\Helper\RenderToPlaceholder', - 'serverurl' => 'Zend\View\Helper\ServerUrl', - 'url' => 'Zend\View\Helper\Url', - 'viewmodel' => 'Zend\View\Helper\ViewModel', - ); - - /** - * @var Renderer\RendererInterface - */ - protected $renderer; - - /** - * Constructor - * - * After invoking parent constructor, add an initializer to inject the - * attached renderer and translator, if any, to the currently requested helper. - * - * @param null|ConfigInterface $configuration - */ - public function __construct(ConfigInterface $configuration = null) - { - parent::__construct($configuration); - - $this->addInitializer(array($this, 'injectRenderer')) - ->addInitializer(array($this, 'injectTranslator')); - } - - /** - * Set renderer - * - * @param Renderer\RendererInterface $renderer - * @return HelperPluginManager - */ - public function setRenderer(Renderer\RendererInterface $renderer) - { - $this->renderer = $renderer; - - return $this; - } - - /** - * Retrieve renderer instance - * - * @return null|Renderer\RendererInterface - */ - public function getRenderer() - { - return $this->renderer; - } - - /** - * Inject a helper instance with the registered renderer - * - * @param Helper\HelperInterface $helper - * @return void - */ - public function injectRenderer($helper) - { - $renderer = $this->getRenderer(); - if (null === $renderer) { - return; - } - $helper->setView($renderer); - } - - /** - * Inject a helper instance with the registered translator - * - * @param Helper\HelperInterface $helper - * @return void - */ - public function injectTranslator($helper) - { - if (!$helper instanceof TranslatorAwareInterface) { - return; - } - - $locator = $this->getServiceLocator(); - - if (!$locator) { - return; - } - - if ($locator->has('MvcTranslator')) { - $helper->setTranslator($locator->get('MvcTranslator')); - return; - } - - if ($locator->has('Zend\I18n\Translator\TranslatorInterface')) { - $helper->setTranslator($locator->get('Zend\I18n\Translator\TranslatorInterface')); - return; - } - - if ($locator->has('Translator')) { - $helper->setTranslator($locator->get('Translator')); - return; - } - } - - /** - * Validate the plugin - * - * Checks that the helper loaded is an instance of Helper\HelperInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidHelperException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Helper\HelperInterface) { - // we're okay - return; - } - - throw new Exception\InvalidHelperException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Helper\HelperInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/library/Zend/View/Model/ClearableModelInterface.php b/library/Zend/View/Model/ClearableModelInterface.php deleted file mode 100755 index 2edfe719e..000000000 --- a/library/Zend/View/Model/ClearableModelInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -options['errorLevel'] = $errorLevel; - } - - /** - * @return int - */ - public function getErrorLevel() - { - if (array_key_exists('errorLevel', $this->options)) { - return $this->options['errorLevel']; - } - } - - /** - * Set result text. - * - * @param string $text - * @return \Zend\View\Model\ConsoleModel - */ - public function setResult($text) - { - $this->setVariable(self::RESULT, $text); - return $this; - } - - /** - * Get result text. - * - * @return mixed - */ - public function getResult() - { - return $this->getVariable(self::RESULT); - } -} diff --git a/library/Zend/View/Model/FeedModel.php b/library/Zend/View/Model/FeedModel.php deleted file mode 100755 index fc8351cd0..000000000 --- a/library/Zend/View/Model/FeedModel.php +++ /dev/null @@ -1,89 +0,0 @@ -feed instanceof Feed) { - return $this->feed; - } - - if (!$this->type) { - $options = $this->getOptions(); - if (isset($options['feed_type'])) { - $this->type = $options['feed_type']; - } - } - - $variables = $this->getVariables(); - $feed = FeedFactory::factory($variables); - $this->setFeed($feed); - - return $this->feed; - } - - /** - * Set the feed object - * - * @param Feed $feed - * @return FeedModel - */ - public function setFeed(Feed $feed) - { - $this->feed = $feed; - return $this; - } - - /** - * Get the feed type - * - * @return false|string - */ - public function getFeedType() - { - if ($this->type) { - return $this->type; - } - - $options = $this->getOptions(); - if (isset($options['feed_type'])) { - $this->type = $options['feed_type']; - } - return $this->type; - } -} diff --git a/library/Zend/View/Model/JsonModel.php b/library/Zend/View/Model/JsonModel.php deleted file mode 100755 index 191d3f5ec..000000000 --- a/library/Zend/View/Model/JsonModel.php +++ /dev/null @@ -1,69 +0,0 @@ -jsonpCallback = $callback; - return $this; - } - - /** - * Serialize to JSON - * - * @return string - */ - public function serialize() - { - $variables = $this->getVariables(); - if ($variables instanceof Traversable) { - $variables = ArrayUtils::iteratorToArray($variables); - } - - if (null !== $this->jsonpCallback) { - return $this->jsonpCallback.'('.Json::encode($variables).');'; - } - return Json::encode($variables); - } -} diff --git a/library/Zend/View/Model/ModelInterface.php b/library/Zend/View/Model/ModelInterface.php deleted file mode 100755 index 810540d70..000000000 --- a/library/Zend/View/Model/ModelInterface.php +++ /dev/null @@ -1,167 +0,0 @@ -setVariables($variables, true); - - if (null !== $options) { - $this->setOptions($options); - } - } - - /** - * Property overloading: set variable value - * - * @param string $name - * @param mixed $value - * @return void - */ - public function __set($name, $value) - { - $this->setVariable($name, $value); - } - - /** - * Property overloading: get variable value - * - * @param string $name - * @return mixed - */ - public function __get($name) - { - if (!$this->__isset($name)) { - return null; - } - - $variables = $this->getVariables(); - return $variables[$name]; - } - - /** - * Property overloading: do we have the requested variable value? - * - * @param string $name - * @return bool - */ - public function __isset($name) - { - $variables = $this->getVariables(); - return isset($variables[$name]); - } - - /** - * Property overloading: unset the requested variable - * - * @param string $name - * @return void - */ - public function __unset($name) - { - if (!$this->__isset($name)) { - return null; - } - - unset($this->variables[$name]); - } - - /** - * Set a single option - * - * @param string $name - * @param mixed $value - * @return ViewModel - */ - public function setOption($name, $value) - { - $this->options[(string) $name] = $value; - return $this; - } - - /** - * Get a single option - * - * @param string $name The option to get. - * @param mixed|null $default (optional) A default value if the option is not yet set. - * @return mixed - */ - public function getOption($name, $default = null) - { - $name = (string) $name; - return array_key_exists($name, $this->options) ? $this->options[$name] : $default; - } - - /** - * Set renderer options/hints en masse - * - * @param array|Traversable $options - * @throws \Zend\View\Exception\InvalidArgumentException - * @return ViewModel - */ - public function setOptions($options) - { - // Assumption is that lowest common denominator for renderer configuration - // is an array - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects an array, or Traversable argument; received "%s"', - __METHOD__, - (is_object($options) ? get_class($options) : gettype($options)) - )); - } - - $this->options = $options; - return $this; - } - - /** - * Get renderer options/hints - * - * @return array - */ - public function getOptions() - { - return $this->options; - } - - /** - * Clear any existing renderer options/hints - * - * @return ViewModel - */ - public function clearOptions() - { - $this->options = array(); - return $this; - } - - /** - * Get a single view variable - * - * @param string $name - * @param mixed|null $default (optional) default value if the variable is not present. - * @return mixed - */ - public function getVariable($name, $default = null) - { - $name = (string) $name; - if (array_key_exists($name, $this->variables)) { - return $this->variables[$name]; - } - - return $default; - } - - /** - * Set view variable - * - * @param string $name - * @param mixed $value - * @return ViewModel - */ - public function setVariable($name, $value) - { - $this->variables[(string) $name] = $value; - return $this; - } - - /** - * Set view variables en masse - * - * Can be an array or a Traversable + ArrayAccess object. - * - * @param array|ArrayAccess|Traversable $variables - * @param bool $overwrite Whether or not to overwrite the internal container with $variables - * @throws Exception\InvalidArgumentException - * @return ViewModel - */ - public function setVariables($variables, $overwrite = false) - { - if (!is_array($variables) && !$variables instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects an array, or Traversable argument; received "%s"', - __METHOD__, - (is_object($variables) ? get_class($variables) : gettype($variables)) - )); - } - - if ($overwrite) { - if (is_object($variables) && !$variables instanceof ArrayAccess) { - $variables = ArrayUtils::iteratorToArray($variables); - } - - $this->variables = $variables; - return $this; - } - - foreach ($variables as $key => $value) { - $this->setVariable($key, $value); - } - - return $this; - } - - /** - * Get view variables - * - * @return array|ArrayAccess|Traversable - */ - public function getVariables() - { - return $this->variables; - } - - /** - * Clear all variables - * - * Resets the internal variable container to an empty container. - * - * @return ViewModel - */ - public function clearVariables() - { - $this->variables = new ViewVariables(); - return $this; - } - - /** - * Set the template to be used by this model - * - * @param string $template - * @return ViewModel - */ - public function setTemplate($template) - { - $this->template = (string) $template; - return $this; - } - - /** - * Get the template to be used by this model - * - * @return string - */ - public function getTemplate() - { - return $this->template; - } - - /** - * Add a child model - * - * @param ModelInterface $child - * @param null|string $captureTo Optional; if specified, the "capture to" value to set on the child - * @param null|bool $append Optional; if specified, append to child with the same capture - * @return ViewModel - */ - public function addChild(ModelInterface $child, $captureTo = null, $append = null) - { - $this->children[] = $child; - if (null !== $captureTo) { - $child->setCaptureTo($captureTo); - } - if (null !== $append) { - $child->setAppend($append); - } - - return $this; - } - - /** - * Return all children. - * - * Return specifies an array, but may be any iterable object. - * - * @return array - */ - public function getChildren() - { - return $this->children; - } - - /** - * Does the model have any children? - * - * @return bool - */ - public function hasChildren() - { - return (0 < count($this->children)); - } - - /** - * Clears out all child models - * - * @return ViewModel - */ - public function clearChildren() - { - $this->children = array(); - return $this; - } - - /** - * Returns an array of Viewmodels with captureTo value $capture - * - * @param string $capture - * @param bool $recursive search recursive through children, default true - * @return array - */ - public function getChildrenByCaptureTo($capture, $recursive = true) - { - $children = array(); - - foreach ($this->children as $child) { - if ($recursive === true) { - $children += $child->getChildrenByCaptureTo($capture); - } - - if ($child->captureTo() === $capture) { - $children[] = $child; - } - } - - return $children; - } - - /** - * Set the name of the variable to capture this model to, if it is a child model - * - * @param string $capture - * @return ViewModel - */ - public function setCaptureTo($capture) - { - $this->captureTo = (string) $capture; - return $this; - } - - /** - * Get the name of the variable to which to capture this model - * - * @return string - */ - public function captureTo() - { - return $this->captureTo; - } - - /** - * Set flag indicating whether or not this is considered a terminal or standalone model - * - * @param bool $terminate - * @return ViewModel - */ - public function setTerminal($terminate) - { - $this->terminate = (bool) $terminate; - return $this; - } - - /** - * Is this considered a terminal or standalone model? - * - * @return bool - */ - public function terminate() - { - return $this->terminate; - } - - /** - * Set flag indicating whether or not append to child with the same capture - * - * @param bool $append - * @return ViewModel - */ - public function setAppend($append) - { - $this->append = (bool) $append; - return $this; - } - - /** - * Is this append to child with the same capture? - * - * @return bool - */ - public function isAppend() - { - return $this->append; - } - - /** - * Return count of children - * - * @return int - */ - public function count() - { - return count($this->children); - } - - /** - * Get iterator of children - * - * @return ArrayIterator - */ - public function getIterator() - { - return new ArrayIterator($this->children); - } -} diff --git a/library/Zend/View/README.md b/library/Zend/View/README.md deleted file mode 100755 index ec19b2c01..000000000 --- a/library/Zend/View/README.md +++ /dev/null @@ -1,15 +0,0 @@ -View Component from ZF2 -======================= - -This is the View component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/View/Renderer/ConsoleRenderer.php b/library/Zend/View/Renderer/ConsoleRenderer.php deleted file mode 100755 index 5f0cf10b2..000000000 --- a/library/Zend/View/Renderer/ConsoleRenderer.php +++ /dev/null @@ -1,149 +0,0 @@ -init(); - } - - public function setResolver(ResolverInterface $resolver) - { - return $this; - } - - /** - * Return the template engine object - * - * Returns the object instance, as it is its own template engine - * - * @return PhpRenderer - */ - public function getEngine() - { - return $this; - } - - /** - * Allow custom object initialization when extending ConsoleRenderer - * - * Triggered by {@link __construct() the constructor} as its final action. - * - * @return void - */ - public function init() - { - } - - /** - * Set filter chain - * - * @param FilterChain $filters - * @return ConsoleRenderer - */ - public function setFilterChain(FilterChain $filters) - { - $this->__filterChain = $filters; - return $this; - } - - /** - * Retrieve filter chain for post-filtering script content - * - * @return FilterChain - */ - public function getFilterChain() - { - if (null === $this->__filterChain) { - $this->setFilterChain(new FilterChain()); - } - return $this->__filterChain; - } - - /** - * Recursively processes all ViewModels and returns output. - * - * @param string|ModelInterface $model A ViewModel instance. - * @param null|array|\Traversable $values Values to use when rendering. If none - * provided, uses those in the composed - * variables container. - * @return string Console output. - */ - public function render($model, $values = null) - { - if (!$model instanceof ModelInterface) { - return ''; - } - - $result = ''; - $options = $model->getOptions(); - foreach ($options as $setting => $value) { - $method = 'set' . $setting; - if (method_exists($this, $method)) { - $this->$method($value); - } - unset($method, $setting, $value); - } - unset($options); - - $values = $model->getVariables(); - - if (isset($values['result'])) { - // filter and append the result - $result .= $this->getFilterChain()->filter($values['result']); - } - - if ($model->hasChildren()) { - // recursively render all children - foreach ($model->getChildren() as $child) { - $result .= $this->render($child, $values); - } - } - - return $result; - } - - /** - * @see Zend\View\Renderer\TreeRendererInterface - * @return bool - */ - public function canRenderTrees() - { - return true; - } -} diff --git a/library/Zend/View/Renderer/FeedRenderer.php b/library/Zend/View/Renderer/FeedRenderer.php deleted file mode 100755 index b91964683..000000000 --- a/library/Zend/View/Renderer/FeedRenderer.php +++ /dev/null @@ -1,138 +0,0 @@ -resolver = $resolver; - } - - /** - * Renders values as JSON - * - * @todo Determine what use case exists for accepting only $nameOrModel - * @param string|Model $nameOrModel The script/resource process, or a view model - * @param null|array|\ArrayAccess $values Values to use during rendering - * @throws Exception\InvalidArgumentException - * @return string The script output. - */ - public function render($nameOrModel, $values = null) - { - if ($nameOrModel instanceof Model) { - // Use case 1: View Model provided - // Non-FeedModel: cast to FeedModel - if (!$nameOrModel instanceof FeedModel) { - $vars = $nameOrModel->getVariables(); - $options = $nameOrModel->getOptions(); - $type = $this->getFeedType(); - if (isset($options['feed_type'])) { - $type = $options['feed_type']; - } else { - $this->setFeedType($type); - } - $nameOrModel = new FeedModel($vars, array('feed_type' => $type)); - } - } elseif (is_string($nameOrModel)) { - // Use case 2: string $nameOrModel + array|Traversable|Feed $values - $nameOrModel = new FeedModel($values, (array) $nameOrModel); - } else { - // Use case 3: failure - throw new Exception\InvalidArgumentException(sprintf( - '%s expects a ViewModel or a string feed type as the first argument; received "%s"', - __METHOD__, - (is_object($nameOrModel) ? get_class($nameOrModel) : gettype($nameOrModel)) - )); - } - - // Get feed and type - $feed = $nameOrModel->getFeed(); - $type = $nameOrModel->getFeedType(); - if (!$type) { - $type = $this->getFeedType(); - } else { - $this->setFeedType($type); - } - - // Render feed - return $feed->export($type); - } - - /** - * Set feed type ('rss' or 'atom') - * - * @param string $feedType - * @throws Exception\InvalidArgumentException - * @return FeedRenderer - */ - public function setFeedType($feedType) - { - $feedType = strtolower($feedType); - if (!in_array($feedType, array('rss', 'atom'))) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects a string of either "rss" or "atom"', - __METHOD__ - )); - } - - $this->feedType = $feedType; - return $this; - } - - /** - * Get feed type - * - * @return string - */ - public function getFeedType() - { - return $this->feedType; - } -} diff --git a/library/Zend/View/Renderer/JsonRenderer.php b/library/Zend/View/Renderer/JsonRenderer.php deleted file mode 100755 index 9666261db..000000000 --- a/library/Zend/View/Renderer/JsonRenderer.php +++ /dev/null @@ -1,243 +0,0 @@ -resolver = $resolver; - } - - /** - * Set flag indicating whether or not to merge unnamed children - * - * @param bool $mergeUnnamedChildren - * @return JsonRenderer - */ - public function setMergeUnnamedChildren($mergeUnnamedChildren) - { - $this->mergeUnnamedChildren = (bool) $mergeUnnamedChildren; - return $this; - } - - /** - * Set the JSONP callback function name - * - * @param string $callback - * @return JsonRenderer - */ - public function setJsonpCallback($callback) - { - $callback = (string) $callback; - if (!empty($callback)) { - $this->jsonpCallback = $callback; - } - return $this; - } - - /** - * Returns whether or not the jsonpCallback has been set - * - * @return bool - */ - public function hasJsonpCallback() - { - return (null !== $this->jsonpCallback); - } - - /** - * Should we merge unnamed children? - * - * @return bool - */ - public function mergeUnnamedChildren() - { - return $this->mergeUnnamedChildren; - } - - /** - * Renders values as JSON - * - * @todo Determine what use case exists for accepting both $nameOrModel and $values - * @param string|Model $nameOrModel The script/resource process, or a view model - * @param null|array|\ArrayAccess $values Values to use during rendering - * @throws Exception\DomainException - * @return string The script output. - */ - public function render($nameOrModel, $values = null) - { - // use case 1: View Models - // Serialize variables in view model - if ($nameOrModel instanceof Model) { - if ($nameOrModel instanceof JsonModel) { - $children = $this->recurseModel($nameOrModel, false); - $this->injectChildren($nameOrModel, $children); - $values = $nameOrModel->serialize(); - } else { - $values = $this->recurseModel($nameOrModel); - $values = Json::encode($values); - } - - if ($this->hasJsonpCallback()) { - $values = $this->jsonpCallback . '(' . $values . ');'; - } - return $values; - } - - // use case 2: $nameOrModel is populated, $values is not - // Serialize $nameOrModel - if (null === $values) { - if (!is_object($nameOrModel) || $nameOrModel instanceof JsonSerializable) { - $return = Json::encode($nameOrModel); - } elseif ($nameOrModel instanceof Traversable) { - $nameOrModel = ArrayUtils::iteratorToArray($nameOrModel); - $return = Json::encode($nameOrModel); - } else { - $return = Json::encode(get_object_vars($nameOrModel)); - } - - if ($this->hasJsonpCallback()) { - $return = $this->jsonpCallback . '(' . $return . ');'; - } - return $return; - } - - // use case 3: Both $nameOrModel and $values are populated - throw new Exception\DomainException(sprintf( - '%s: Do not know how to handle operation when both $nameOrModel and $values are populated', - __METHOD__ - )); - } - - /** - * Can this renderer render trees of view models? - * - * Yes. - * - * @return true - */ - public function canRenderTrees() - { - return true; - } - - /** - * Retrieve values from a model and recurse its children to build a data structure - * - * @param Model $model - * @param bool $mergeWithVariables Whether or not to merge children with - * the variables of the $model - * @return array - */ - protected function recurseModel(Model $model, $mergeWithVariables = true) - { - $values = array(); - if ($mergeWithVariables) { - $values = $model->getVariables(); - } - - if ($values instanceof Traversable) { - $values = ArrayUtils::iteratorToArray($values); - } - - if (!$model->hasChildren()) { - return $values; - } - - $mergeChildren = $this->mergeUnnamedChildren(); - foreach ($model as $child) { - $captureTo = $child->captureTo(); - if (!$captureTo && !$mergeChildren) { - // We don't want to do anything with this child - continue; - } - - $childValues = $this->recurseModel($child); - if ($captureTo) { - // Capturing to a specific key - // TODO please complete if append is true. must change old - // value to array and append to array? - $values[$captureTo] = $childValues; - } elseif ($mergeChildren) { - // Merging values with parent - $values = array_replace_recursive($values, $childValues); - } - } - return $values; - } - - /** - * Inject discovered child model values into parent model - * - * @todo detect collisions and decide whether to append and/or aggregate? - * @param Model $model - * @param array $children - */ - protected function injectChildren(Model $model, array $children) - { - foreach ($children as $child => $value) { - // TODO detect collisions and decide whether to append and/or aggregate? - $model->setVariable($child, $value); - } - } -} diff --git a/library/Zend/View/Renderer/PhpRenderer.php b/library/Zend/View/Renderer/PhpRenderer.php deleted file mode 100755 index 87baf3d98..000000000 --- a/library/Zend/View/Renderer/PhpRenderer.php +++ /dev/null @@ -1,574 +0,0 @@ -init(); - } - - /** - * Return the template engine object - * - * Returns the object instance, as it is its own template engine - * - * @return PhpRenderer - */ - public function getEngine() - { - return $this; - } - - /** - * Allow custom object initialization when extending PhpRenderer - * - * Triggered by {@link __construct() the constructor} as its final action. - * - * @return void - */ - public function init() - { - } - - /** - * Set script resolver - * - * @param Resolver $resolver - * @return PhpRenderer - * @throws Exception\InvalidArgumentException - */ - public function setResolver(Resolver $resolver) - { - $this->__templateResolver = $resolver; - return $this; - } - - /** - * Retrieve template name or template resolver - * - * @param null|string $name - * @return string|Resolver - */ - public function resolver($name = null) - { - if (null === $this->__templateResolver) { - $this->setResolver(new TemplatePathStack()); - } - - if (null !== $name) { - return $this->__templateResolver->resolve($name, $this); - } - - return $this->__templateResolver; - } - - /** - * Set variable storage - * - * Expects either an array, or an object implementing ArrayAccess. - * - * @param array|ArrayAccess $variables - * @return PhpRenderer - * @throws Exception\InvalidArgumentException - */ - public function setVars($variables) - { - if (!is_array($variables) && !$variables instanceof ArrayAccess) { - throw new Exception\InvalidArgumentException(sprintf( - 'Expected array or ArrayAccess object; received "%s"', - (is_object($variables) ? get_class($variables) : gettype($variables)) - )); - } - - // Enforce a Variables container - if (!$variables instanceof Variables) { - $variablesAsArray = array(); - foreach ($variables as $key => $value) { - $variablesAsArray[$key] = $value; - } - $variables = new Variables($variablesAsArray); - } - - $this->__vars = $variables; - return $this; - } - - /** - * Get a single variable, or all variables - * - * @param mixed $key - * @return mixed - */ - public function vars($key = null) - { - if (null === $this->__vars) { - $this->setVars(new Variables()); - } - - if (null === $key) { - return $this->__vars; - } - return $this->__vars[$key]; - } - - /** - * Get a single variable - * - * @param mixed $key - * @return mixed - */ - public function get($key) - { - if (null === $this->__vars) { - $this->setVars(new Variables()); - } - - return $this->__vars[$key]; - } - - /** - * Overloading: proxy to Variables container - * - * @param string $name - * @return mixed - */ - public function __get($name) - { - $vars = $this->vars(); - return $vars[$name]; - } - - /** - * Overloading: proxy to Variables container - * - * @param string $name - * @param mixed $value - * @return void - */ - public function __set($name, $value) - { - $vars = $this->vars(); - $vars[$name] = $value; - } - - /** - * Overloading: proxy to Variables container - * - * @param string $name - * @return bool - */ - public function __isset($name) - { - $vars = $this->vars(); - return isset($vars[$name]); - } - - /** - * Overloading: proxy to Variables container - * - * @param string $name - * @return void - */ - public function __unset($name) - { - $vars = $this->vars(); - if (!isset($vars[$name])) { - return; - } - unset($vars[$name]); - } - - /** - * Set helper plugin manager instance - * - * @param string|HelperPluginManager $helpers - * @return PhpRenderer - * @throws Exception\InvalidArgumentException - */ - public function setHelperPluginManager($helpers) - { - if (is_string($helpers)) { - if (!class_exists($helpers)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid helper helpers class provided (%s)', - $helpers - )); - } - $helpers = new $helpers(); - } - if (!$helpers instanceof HelperPluginManager) { - throw new Exception\InvalidArgumentException(sprintf( - 'Helper helpers must extend Zend\View\HelperPluginManager; got type "%s" instead', - (is_object($helpers) ? get_class($helpers) : gettype($helpers)) - )); - } - $helpers->setRenderer($this); - $this->__helpers = $helpers; - - return $this; - } - - /** - * Get helper plugin manager instance - * - * @return HelperPluginManager - */ - public function getHelperPluginManager() - { - if (null === $this->__helpers) { - $this->setHelperPluginManager(new HelperPluginManager()); - } - return $this->__helpers; - } - - /** - * Get plugin instance - * - * @param string $name Name of plugin to return - * @param null|array $options Options to pass to plugin constructor (if not already instantiated) - * @return AbstractHelper - */ - public function plugin($name, array $options = null) - { - return $this->getHelperPluginManager()->get($name, $options); - } - - /** - * Overloading: proxy to helpers - * - * Proxies to the attached plugin manager to retrieve, return, and potentially - * execute helpers. - * - * * If the helper does not define __invoke, it will be returned - * * If the helper does define __invoke, it will be called as a functor - * - * @param string $method - * @param array $argv - * @return mixed - */ - public function __call($method, $argv) - { - if (!isset($this->__pluginCache[$method])) { - $this->__pluginCache[$method] = $this->plugin($method); - } - if (is_callable($this->__pluginCache[$method])) { - return call_user_func_array($this->__pluginCache[$method], $argv); - } - return $this->__pluginCache[$method]; - } - - /** - * Set filter chain - * - * @param FilterChain $filters - * @return PhpRenderer - */ - public function setFilterChain(FilterChain $filters) - { - $this->__filterChain = $filters; - return $this; - } - - /** - * Retrieve filter chain for post-filtering script content - * - * @return FilterChain - */ - public function getFilterChain() - { - if (null === $this->__filterChain) { - $this->setFilterChain(new FilterChain()); - } - return $this->__filterChain; - } - - /** - * Processes a view script and returns the output. - * - * @param string|Model $nameOrModel Either the template to use, or a - * ViewModel. The ViewModel must have the - * template as an option in order to be - * valid. - * @param null|array|Traversable $values Values to use when rendering. If none - * provided, uses those in the composed - * variables container. - * @return string The script output. - * @throws Exception\DomainException if a ViewModel is passed, but does not - * contain a template option. - * @throws Exception\InvalidArgumentException if the values passed are not - * an array or ArrayAccess object - * @throws Exception\RuntimeException if the template cannot be rendered - */ - public function render($nameOrModel, $values = null) - { - if ($nameOrModel instanceof Model) { - $model = $nameOrModel; - $nameOrModel = $model->getTemplate(); - if (empty($nameOrModel)) { - throw new Exception\DomainException(sprintf( - '%s: received View Model argument, but template is empty', - __METHOD__ - )); - } - $options = $model->getOptions(); - foreach ($options as $setting => $value) { - $method = 'set' . $setting; - if (method_exists($this, $method)) { - $this->$method($value); - } - unset($method, $setting, $value); - } - unset($options); - - // Give view model awareness via ViewModel helper - $helper = $this->plugin('view_model'); - $helper->setCurrent($model); - - $values = $model->getVariables(); - unset($model); - } - - // find the script file name using the parent private method - $this->addTemplate($nameOrModel); - unset($nameOrModel); // remove $name from local scope - - $this->__varsCache[] = $this->vars(); - - if (null !== $values) { - $this->setVars($values); - } - unset($values); - - // extract all assigned vars (pre-escaped), but not 'this'. - // assigns to a double-underscored variable, to prevent naming collisions - $__vars = $this->vars()->getArrayCopy(); - if (array_key_exists('this', $__vars)) { - unset($__vars['this']); - } - extract($__vars); - unset($__vars); // remove $__vars from local scope - - while ($this->__template = array_pop($this->__templates)) { - $this->__file = $this->resolver($this->__template); - if (!$this->__file) { - throw new Exception\RuntimeException(sprintf( - '%s: Unable to render template "%s"; resolver could not resolve to a file', - __METHOD__, - $this->__template - )); - } - try { - ob_start(); - $includeReturn = include $this->__file; - $this->__content = ob_get_clean(); - } catch (\Exception $ex) { - ob_end_clean(); - throw $ex; - } - if ($includeReturn === false && empty($this->__content)) { - throw new Exception\UnexpectedValueException(sprintf( - '%s: Unable to render template "%s"; file include failed', - __METHOD__, - $this->__file - )); - } - } - - $this->setVars(array_pop($this->__varsCache)); - - return $this->getFilterChain()->filter($this->__content); // filter output - } - - /** - * Set flag indicating whether or not we should render trees of view models - * - * If set to true, the View instance will not attempt to render children - * separately, but instead pass the root view model directly to the PhpRenderer. - * It is then up to the developer to render the children from within the - * view script. - * - * @param bool $renderTrees - * @return PhpRenderer - */ - public function setCanRenderTrees($renderTrees) - { - $this->__renderTrees = (bool) $renderTrees; - return $this; - } - - /** - * Can we render trees, or are we configured to do so? - * - * @return bool - */ - public function canRenderTrees() - { - return $this->__renderTrees; - } - - /** - * Add a template to the stack - * - * @param string $template - * @return PhpRenderer - */ - public function addTemplate($template) - { - $this->__templates[] = $template; - return $this; - } - - /** - * Make sure View variables are cloned when the view is cloned. - * - * @return PhpRenderer - */ - public function __clone() - { - $this->__vars = clone $this->vars(); - } -} diff --git a/library/Zend/View/Renderer/RendererInterface.php b/library/Zend/View/Renderer/RendererInterface.php deleted file mode 100755 index d3dfa77f7..000000000 --- a/library/Zend/View/Renderer/RendererInterface.php +++ /dev/null @@ -1,47 +0,0 @@ -queue = new PriorityQueue(); - } - - /** - * Return count of attached resolvers - * - * @return int - */ - public function count() - { - return $this->queue->count(); - } - - /** - * IteratorAggregate: return internal iterator - * - * @return PriorityQueue - */ - public function getIterator() - { - return $this->queue; - } - - /** - * Attach a resolver - * - * @param Resolver $resolver - * @param int $priority - * @return AggregateResolver - */ - public function attach(Resolver $resolver, $priority = 1) - { - $this->queue->insert($resolver, $priority); - return $this; - } - - /** - * Resolve a template/pattern name to a resource the renderer can consume - * - * @param string $name - * @param null|Renderer $renderer - * @return false|string - */ - public function resolve($name, Renderer $renderer = null) - { - $this->lastLookupFailure = false; - $this->lastSuccessfulResolver = null; - - if (0 === count($this->queue)) { - $this->lastLookupFailure = static::FAILURE_NO_RESOLVERS; - return false; - } - - foreach ($this->queue as $resolver) { - $resource = $resolver->resolve($name, $renderer); - if (!$resource) { - // No resource found; try next resolver - continue; - } - - // Resource found; return it - $this->lastSuccessfulResolver = $resolver; - return $resource; - } - - $this->lastLookupFailure = static::FAILURE_NOT_FOUND; - return false; - } - - /** - * Return the last successful resolver, if any - * - * @return Resolver - */ - public function getLastSuccessfulResolver() - { - return $this->lastSuccessfulResolver; - } - - /** - * Get last lookup failure - * - * @return false|string - */ - public function getLastLookupFailure() - { - return $this->lastLookupFailure; - } -} diff --git a/library/Zend/View/Resolver/ResolverInterface.php b/library/Zend/View/Resolver/ResolverInterface.php deleted file mode 100755 index 8ffe130c6..000000000 --- a/library/Zend/View/Resolver/ResolverInterface.php +++ /dev/null @@ -1,24 +0,0 @@ -setMap($map); - } - - /** - * IteratorAggregate: return internal iterator - * - * @return Traversable - */ - public function getIterator() - { - return new ArrayIterator($this->map); - } - - /** - * Set (overwrite) template map - * - * Maps should be arrays or Traversable objects with name => path pairs - * - * @param array|Traversable $map - * @throws Exception\InvalidArgumentException - * @return TemplateMapResolver - */ - public function setMap($map) - { - if (!is_array($map) && !$map instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects an array or Traversable, received "%s"', - __METHOD__, - (is_object($map) ? get_class($map) : gettype($map)) - )); - } - - if ($map instanceof Traversable) { - $map = ArrayUtils::iteratorToArray($map); - } - - $this->map = $map; - return $this; - } - - /** - * Add an entry to the map - * - * @param string|array|Traversable $nameOrMap - * @param null|string $path - * @throws Exception\InvalidArgumentException - * @return TemplateMapResolver - */ - public function add($nameOrMap, $path = null) - { - if (is_array($nameOrMap) || $nameOrMap instanceof Traversable) { - $this->merge($nameOrMap); - return $this; - } - - if (!is_string($nameOrMap)) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects a string, array, or Traversable for the first argument; received "%s"', - __METHOD__, - (is_object($nameOrMap) ? get_class($nameOrMap) : gettype($nameOrMap)) - )); - } - - if (empty($path)) { - if (isset($this->map[$nameOrMap])) { - unset($this->map[$nameOrMap]); - } - return $this; - } - - $this->map[$nameOrMap] = $path; - return $this; - } - - /** - * Merge internal map with provided map - * - * @param array|Traversable $map - * @throws Exception\InvalidArgumentException - * @return TemplateMapResolver - */ - public function merge($map) - { - if (!is_array($map) && !$map instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s: expects an array or Traversable, received "%s"', - __METHOD__, - (is_object($map) ? get_class($map) : gettype($map)) - )); - } - - if ($map instanceof Traversable) { - $map = ArrayUtils::iteratorToArray($map); - } - - $this->map = array_replace_recursive($this->map, $map); - return $this; - } - - /** - * Does the resolver contain an entry for the given name? - * - * @param string $name - * @return bool - */ - public function has($name) - { - return array_key_exists($name, $this->map); - } - - /** - * Retrieve a template path by name - * - * @param string $name - * @return false|string - * @throws Exception\DomainException if no entry exists - */ - public function get($name) - { - if (!$this->has($name)) { - return false; - } - return $this->map[$name]; - } - - /** - * Retrieve the template map - * - * @return array - */ - public function getMap() - { - return $this->map; - } - - /** - * Resolve a template/pattern name to a resource the renderer can consume - * - * @param string $name - * @param null|Renderer $renderer - * @return string - */ - public function resolve($name, Renderer $renderer = null) - { - return $this->get($name); - } -} diff --git a/library/Zend/View/Resolver/TemplatePathStack.php b/library/Zend/View/Resolver/TemplatePathStack.php deleted file mode 100755 index 359be18f3..000000000 --- a/library/Zend/View/Resolver/TemplatePathStack.php +++ /dev/null @@ -1,338 +0,0 @@ -useViewStream = (bool) ini_get('short_open_tag'); - if ($this->useViewStream) { - if (!in_array('zend.view', stream_get_wrappers())) { - stream_wrapper_register('zend.view', 'Zend\View\Stream'); - } - } - - $this->paths = new SplStack; - if (null !== $options) { - $this->setOptions($options); - } - } - - /** - * Configure object - * - * @param array|Traversable $options - * @return void - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if (!is_array($options) && !$options instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - 'Expected array or Traversable object; received "%s"', - (is_object($options) ? get_class($options) : gettype($options)) - )); - } - - foreach ($options as $key => $value) { - switch (strtolower($key)) { - case 'lfi_protection': - $this->setLfiProtection($value); - break; - case 'script_paths': - $this->addPaths($value); - break; - case 'use_stream_wrapper': - $this->setUseStreamWrapper($value); - break; - case 'default_suffix': - $this->setDefaultSuffix($value); - break; - default: - break; - } - } - } - - /** - * Set default file suffix - * - * @param string $defaultSuffix - * @return TemplatePathStack - */ - public function setDefaultSuffix($defaultSuffix) - { - $this->defaultSuffix = (string) $defaultSuffix; - $this->defaultSuffix = ltrim($this->defaultSuffix, '.'); - return $this; - } - - /** - * Get default file suffix - * - * @return string - */ - public function getDefaultSuffix() - { - return $this->defaultSuffix; - } - - /** - * Add many paths to the stack at once - * - * @param array $paths - * @return TemplatePathStack - */ - public function addPaths(array $paths) - { - foreach ($paths as $path) { - $this->addPath($path); - } - return $this; - } - - /** - * Rest the path stack to the paths provided - * - * @param SplStack|array $paths - * @return TemplatePathStack - * @throws Exception\InvalidArgumentException - */ - public function setPaths($paths) - { - if ($paths instanceof SplStack) { - $this->paths = $paths; - } elseif (is_array($paths)) { - $this->clearPaths(); - $this->addPaths($paths); - } else { - throw new Exception\InvalidArgumentException( - "Invalid argument provided for \$paths, expecting either an array or SplStack object" - ); - } - - return $this; - } - - /** - * Normalize a path for insertion in the stack - * - * @param string $path - * @return string - */ - public static function normalizePath($path) - { - $path = rtrim($path, '/'); - $path = rtrim($path, '\\'); - $path .= DIRECTORY_SEPARATOR; - return $path; - } - - /** - * Add a single path to the stack - * - * @param string $path - * @return TemplatePathStack - * @throws Exception\InvalidArgumentException - */ - public function addPath($path) - { - if (!is_string($path)) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid path provided; must be a string, received %s', - gettype($path) - )); - } - $this->paths[] = static::normalizePath($path); - return $this; - } - - /** - * Clear all paths - * - * @return void - */ - public function clearPaths() - { - $this->paths = new SplStack; - } - - /** - * Returns stack of paths - * - * @return SplStack - */ - public function getPaths() - { - return $this->paths; - } - - /** - * Set LFI protection flag - * - * @param bool $flag - * @return TemplatePathStack - */ - public function setLfiProtection($flag) - { - $this->lfiProtectionOn = (bool) $flag; - return $this; - } - - /** - * Return status of LFI protection flag - * - * @return bool - */ - public function isLfiProtectionOn() - { - return $this->lfiProtectionOn; - } - - /** - * Set flag indicating if stream wrapper should be used if short_open_tag is off - * - * @param bool $flag - * @return TemplatePathStack - */ - public function setUseStreamWrapper($flag) - { - $this->useStreamWrapper = (bool) $flag; - return $this; - } - - /** - * Should the stream wrapper be used if short_open_tag is off? - * - * Returns true if the use_stream_wrapper flag is set, and if short_open_tag - * is disabled. - * - * @return bool - */ - public function useStreamWrapper() - { - return ($this->useViewStream && $this->useStreamWrapper); - } - - /** - * Retrieve the filesystem path to a view script - * - * @param string $name - * @param null|Renderer $renderer - * @return string - * @throws Exception\DomainException - */ - public function resolve($name, Renderer $renderer = null) - { - $this->lastLookupFailure = false; - - if ($this->isLfiProtectionOn() && preg_match('#\.\.[\\\/]#', $name)) { - throw new Exception\DomainException( - 'Requested scripts may not include parent directory traversal ("../", "..\\" notation)' - ); - } - - if (!count($this->paths)) { - $this->lastLookupFailure = static::FAILURE_NO_PATHS; - return false; - } - - // Ensure we have the expected file extension - $defaultSuffix = $this->getDefaultSuffix(); - if (pathinfo($name, PATHINFO_EXTENSION) == '') { - $name .= '.' . $defaultSuffix; - } - - foreach ($this->paths as $path) { - $file = new SplFileInfo($path . $name); - if ($file->isReadable()) { - // Found! Return it. - if (($filePath = $file->getRealPath()) === false && substr($path, 0, 7) === 'phar://') { - // Do not try to expand phar paths (realpath + phars == fail) - $filePath = $path . $name; - if (!file_exists($filePath)) { - break; - } - } - if ($this->useStreamWrapper()) { - // If using a stream wrapper, prepend the spec to the path - $filePath = 'zend.view://' . $filePath; - } - return $filePath; - } - } - - $this->lastLookupFailure = static::FAILURE_NOT_FOUND; - return false; - } - - /** - * Get the last lookup failure message, if any - * - * @return false|string - */ - public function getLastLookupFailure() - { - return $this->lastLookupFailure; - } -} diff --git a/library/Zend/View/Strategy/FeedStrategy.php b/library/Zend/View/Strategy/FeedStrategy.php deleted file mode 100755 index 40140da5a..000000000 --- a/library/Zend/View/Strategy/FeedStrategy.php +++ /dev/null @@ -1,111 +0,0 @@ -renderer = $renderer; - } - - /** - * {@inheritDoc} - */ - public function attach(EventManagerInterface $events, $priority = 1) - { - $this->listeners[] = $events->attach(ViewEvent::EVENT_RENDERER, array($this, 'selectRenderer'), $priority); - $this->listeners[] = $events->attach(ViewEvent::EVENT_RESPONSE, array($this, 'injectResponse'), $priority); - } - - /** - * Detect if we should use the FeedRenderer based on model type and/or - * Accept header - * - * @param ViewEvent $e - * @return null|FeedRenderer - */ - public function selectRenderer(ViewEvent $e) - { - $model = $e->getModel(); - - if (!$model instanceof Model\FeedModel) { - // no FeedModel present; do nothing - return; - } - - // FeedModel found - return $this->renderer; - } - - /** - * Inject the response with the feed payload and appropriate Content-Type header - * - * @param ViewEvent $e - * @return void - */ - public function injectResponse(ViewEvent $e) - { - $renderer = $e->getRenderer(); - if ($renderer !== $this->renderer) { - // Discovered renderer is not ours; do nothing - return; - } - - $result = $e->getResult(); - if (!is_string($result) && !$result instanceof Feed) { - // We don't have a string, and thus, no feed - return; - } - - // If the result is a feed, export it - if ($result instanceof Feed) { - $result = $result->export($renderer->getFeedType()); - } - - // Get the content-type header based on feed type - $feedType = $renderer->getFeedType(); - $feedType = ('rss' == $feedType) - ? 'application/rss+xml' - : 'application/atom+xml'; - - $model = $e->getModel(); - $charset = ''; - - if ($model instanceof Model\FeedModel) { - $feed = $model->getFeed(); - - $charset = '; charset=' . $feed->getEncoding() . ';'; - } - - // Populate response - $response = $e->getResponse(); - $response->setContent($result); - $headers = $response->getHeaders(); - $headers->addHeaderLine('content-type', $feedType . $charset); - } -} diff --git a/library/Zend/View/Strategy/JsonStrategy.php b/library/Zend/View/Strategy/JsonStrategy.php deleted file mode 100755 index 7cf4b91f0..000000000 --- a/library/Zend/View/Strategy/JsonStrategy.php +++ /dev/null @@ -1,141 +0,0 @@ -renderer = $renderer; - } - - /** - * {@inheritDoc} - */ - public function attach(EventManagerInterface $events, $priority = 1) - { - $this->listeners[] = $events->attach(ViewEvent::EVENT_RENDERER, array($this, 'selectRenderer'), $priority); - $this->listeners[] = $events->attach(ViewEvent::EVENT_RESPONSE, array($this, 'injectResponse'), $priority); - } - - /** - * Set the content-type character set - * - * @param string $charset - * @return JsonStrategy - */ - public function setCharset($charset) - { - $this->charset = (string) $charset; - return $this; - } - - /** - * Retrieve the current character set - * - * @return string - */ - public function getCharset() - { - return $this->charset; - } - - /** - * Detect if we should use the JsonRenderer based on model type and/or - * Accept header - * - * @param ViewEvent $e - * @return null|JsonRenderer - */ - public function selectRenderer(ViewEvent $e) - { - $model = $e->getModel(); - - if (!$model instanceof Model\JsonModel) { - // no JsonModel; do nothing - return; - } - - // JsonModel found - return $this->renderer; - } - - /** - * Inject the response with the JSON payload and appropriate Content-Type header - * - * @param ViewEvent $e - * @return void - */ - public function injectResponse(ViewEvent $e) - { - $renderer = $e->getRenderer(); - if ($renderer !== $this->renderer) { - // Discovered renderer is not ours; do nothing - return; - } - - $result = $e->getResult(); - if (!is_string($result)) { - // We don't have a string, and thus, no JSON - return; - } - - // Populate response - $response = $e->getResponse(); - $response->setContent($result); - $headers = $response->getHeaders(); - - if ($this->renderer->hasJsonpCallback()) { - $contentType = 'application/javascript'; - } else { - $contentType = 'application/json'; - } - - $contentType .= '; charset=' . $this->charset; - $headers->addHeaderLine('content-type', $contentType); - - if (in_array(strtoupper($this->charset), $this->multibyteCharsets)) { - $headers->addHeaderLine('content-transfer-encoding', 'BINARY'); - } - } -} diff --git a/library/Zend/View/Strategy/PhpRendererStrategy.php b/library/Zend/View/Strategy/PhpRendererStrategy.php deleted file mode 100755 index e8e04ceb3..000000000 --- a/library/Zend/View/Strategy/PhpRendererStrategy.php +++ /dev/null @@ -1,127 +0,0 @@ -renderer = $renderer; - } - - /** - * Retrieve the composed renderer - * - * @return PhpRenderer - */ - public function getRenderer() - { - return $this->renderer; - } - - /** - * Set list of possible content placeholders - * - * @param array $contentPlaceholders - * @return PhpRendererStrategy - */ - public function setContentPlaceholders(array $contentPlaceholders) - { - $this->contentPlaceholders = $contentPlaceholders; - return $this; - } - - /** - * Get list of possible content placeholders - * - * @return array - */ - public function getContentPlaceholders() - { - return $this->contentPlaceholders; - } - - /** - * {@inheritDoc} - */ - public function attach(EventManagerInterface $events, $priority = 1) - { - $this->listeners[] = $events->attach(ViewEvent::EVENT_RENDERER, array($this, 'selectRenderer'), $priority); - $this->listeners[] = $events->attach(ViewEvent::EVENT_RESPONSE, array($this, 'injectResponse'), $priority); - } - - /** - * Select the PhpRenderer; typically, this will be registered last or at - * low priority. - * - * @param ViewEvent $e - * @return PhpRenderer - */ - public function selectRenderer(ViewEvent $e) - { - return $this->renderer; - } - - /** - * Populate the response object from the View - * - * Populates the content of the response object from the view rendering - * results. - * - * @param ViewEvent $e - * @return void - */ - public function injectResponse(ViewEvent $e) - { - $renderer = $e->getRenderer(); - if ($renderer !== $this->renderer) { - return; - } - - $result = $e->getResult(); - $response = $e->getResponse(); - - // Set content - // If content is empty, check common placeholders to determine if they are - // populated, and set the content from them. - if (empty($result)) { - $placeholders = $renderer->plugin('placeholder'); - foreach ($this->contentPlaceholders as $placeholder) { - if ($placeholders->containerExists($placeholder)) { - $result = (string) $placeholders->getContainer($placeholder); - break; - } - } - } - $response->setContent($result); - } -} diff --git a/library/Zend/View/Stream.php b/library/Zend/View/Stream.php deleted file mode 100755 index 42bb7a962..000000000 --- a/library/Zend/View/Stream.php +++ /dev/null @@ -1,183 +0,0 @@ -data = file_get_contents($path); - - /** - * If reading the file failed, update our local stat store - * to reflect the real stat of the file, then return on failure - */ - if ($this->data === false) { - $this->stat = stat($path); - return false; - } - - /** - * Convert to long-form and to - * - */ - $this->data = preg_replace('/\<\?\=/', "data); - $this->data = preg_replace('/<\?(?!xml|php)/s', 'data); - - /** - * file_get_contents() won't update PHP's stat cache, so we grab a stat - * of the file to prevent additional reads should the script be - * requested again, which will make include() happy. - */ - $this->stat = stat($path); - - return true; - } - - /** - * Included so that __FILE__ returns the appropriate info - * - * @return array - */ - public function url_stat() - { - return $this->stat; - } - - /** - * Reads from the stream. - * - * @param int $count - * @return string - */ - public function stream_read($count) - { - $ret = substr($this->data, $this->pos, $count); - $this->pos += strlen($ret); - return $ret; - } - - /** - * Tells the current position in the stream. - * - * @return int - */ - public function stream_tell() - { - return $this->pos; - } - - /** - * Tells if we are at the end of the stream. - * - * @return bool - */ - public function stream_eof() - { - return $this->pos >= strlen($this->data); - } - - /** - * Stream statistics. - * - * @return array - */ - public function stream_stat() - { - return $this->stat; - } - - /** - * Seek to a specific point in the stream. - * - * @param $offset - * @param $whence - * @return bool - */ - public function stream_seek($offset, $whence) - { - switch ($whence) { - case SEEK_SET: - if ($offset < strlen($this->data) && $offset >= 0) { - $this->pos = $offset; - return true; - } else { - return false; - } - break; - - case SEEK_CUR: - if ($offset >= 0) { - $this->pos += $offset; - return true; - } else { - return false; - } - break; - - case SEEK_END: - if (strlen($this->data) + $offset >= 0) { - $this->pos = strlen($this->data) + $offset; - return true; - } else { - return false; - } - break; - - default: - return false; - } - } -} diff --git a/library/Zend/View/Variables.php b/library/Zend/View/Variables.php deleted file mode 100755 index 17b14724c..000000000 --- a/library/Zend/View/Variables.php +++ /dev/null @@ -1,162 +0,0 @@ -setOptions($options); - } - - /** - * Configure object - * - * @param array $options - * @return Variables - */ - public function setOptions(array $options) - { - foreach ($options as $key => $value) { - switch (strtolower($key)) { - case 'strict_vars': - $this->setStrictVars($value); - break; - default: - // Unknown options are considered variables - $this[$key] = $value; - break; - } - } - return $this; - } - - /** - * Set status of "strict vars" flag - * - * @param bool $flag - * @return Variables - */ - public function setStrictVars($flag) - { - $this->strictVars = (bool) $flag; - return $this; - } - - /** - * Are we operating with strict variables? - * - * @return bool - */ - public function isStrict() - { - return $this->strictVars; - } - - /** - * Assign many values at once - * - * @param array|object $spec - * @return Variables - * @throws Exception\InvalidArgumentException - */ - public function assign($spec) - { - if (is_object($spec)) { - if (method_exists($spec, 'toArray')) { - $spec = $spec->toArray(); - } else { - $spec = (array) $spec; - } - } - if (!is_array($spec)) { - throw new Exception\InvalidArgumentException(sprintf( - 'assign() expects either an array or an object as an argument; received "%s"', - gettype($spec) - )); - } - foreach ($spec as $key => $value) { - $this[$key] = $value; - } - - return $this; - } - - /** - * Get the variable value - * - * If the value has not been defined, a null value will be returned; if - * strict vars on in place, a notice will also be raised. - * - * Otherwise, returns _escaped_ version of the value. - * - * @param mixed $key - * @return mixed - */ - public function offsetGet($key) - { - if (!$this->offsetExists($key)) { - if ($this->isStrict()) { - trigger_error(sprintf( - 'View variable "%s" does not exist', $key - ), E_USER_NOTICE); - } - return null; - } - - $return = parent::offsetGet($key); - - // If we have a closure/functor, invoke it, and return its return value - if (is_object($return) && is_callable($return)) { - $return = call_user_func($return); - } - - return $return; - } - - /** - * Clear all variables - * - * @return void - */ - public function clear() - { - $this->exchangeArray(array()); - } -} diff --git a/library/Zend/View/View.php b/library/Zend/View/View.php deleted file mode 100755 index aebae58a0..000000000 --- a/library/Zend/View/View.php +++ /dev/null @@ -1,264 +0,0 @@ -request = $request; - return $this; - } - - /** - * Set MVC response object - * - * @param Response $response - * @return View - */ - public function setResponse(Response $response) - { - $this->response = $response; - return $this; - } - - /** - * Get MVC request object - * - * @return null|Request - */ - public function getRequest() - { - return $this->request; - } - - /** - * Get MVC response object - * - * @return null|Response - */ - public function getResponse() - { - return $this->response; - } - - /** - * Set the event manager instance - * - * @param EventManagerInterface $events - * @return View - */ - public function setEventManager(EventManagerInterface $events) - { - $events->setIdentifiers(array( - __CLASS__, - get_class($this), - )); - $this->events = $events; - return $this; - } - - /** - * Retrieve the event manager instance - * - * Lazy-loads a default instance if none available - * - * @return EventManagerInterface - */ - public function getEventManager() - { - if (!$this->events instanceof EventManagerInterface) { - $this->setEventManager(new EventManager()); - } - return $this->events; - } - - /** - * Add a rendering strategy - * - * Expects a callable. Strategies should accept a ViewEvent object, and should - * return a Renderer instance if the strategy is selected. - * - * Internally, the callable provided will be subscribed to the "renderer" - * event, at the priority specified. - * - * @param callable $callable - * @param int $priority - * @return View - */ - public function addRenderingStrategy($callable, $priority = 1) - { - $this->getEventManager()->attach(ViewEvent::EVENT_RENDERER, $callable, $priority); - return $this; - } - - /** - * Add a response strategy - * - * Expects a callable. Strategies should accept a ViewEvent object. The return - * value will be ignored. - * - * Typical usages for a response strategy are to populate the Response object. - * - * Internally, the callable provided will be subscribed to the "response" - * event, at the priority specified. - * - * @param callable $callable - * @param int $priority - * @return View - */ - public function addResponseStrategy($callable, $priority = 1) - { - $this->getEventManager()->attach(ViewEvent::EVENT_RESPONSE, $callable, $priority); - return $this; - } - - /** - * Render the provided model. - * - * Internally, the following workflow is used: - * - * - Trigger the "renderer" event to select a renderer. - * - Call the selected renderer with the provided Model - * - Trigger the "response" event - * - * @triggers renderer(ViewEvent) - * @triggers response(ViewEvent) - * @param Model $model - * @throws Exception\RuntimeException - * @return void - */ - public function render(Model $model) - { - $event = $this->getEvent(); - $event->setModel($model); - $events = $this->getEventManager(); - $results = $events->trigger(ViewEvent::EVENT_RENDERER, $event, function ($result) { - return ($result instanceof Renderer); - }); - $renderer = $results->last(); - if (!$renderer instanceof Renderer) { - throw new Exception\RuntimeException(sprintf( - '%s: no renderer selected!', - __METHOD__ - )); - } - - $event->setRenderer($renderer); - $events->trigger(ViewEvent::EVENT_RENDERER_POST, $event); - - // If EVENT_RENDERER or EVENT_RENDERER_POST changed the model, make sure - // we use this new model instead of the current $model - $model = $event->getModel(); - - // If we have children, render them first, but only if: - // a) the renderer does not implement TreeRendererInterface, or - // b) it does, but canRenderTrees() returns false - if ($model->hasChildren() - && (!$renderer instanceof TreeRendererInterface - || !$renderer->canRenderTrees()) - ) { - $this->renderChildren($model); - } - - // Reset the model, in case it has changed, and set the renderer - $event->setModel($model); - $event->setRenderer($renderer); - - $rendered = $renderer->render($model); - - // If this is a child model, return the rendered content; do not - // invoke the response strategy. - $options = $model->getOptions(); - if (array_key_exists('has_parent', $options) && $options['has_parent']) { - return $rendered; - } - - $event->setResult($rendered); - - $events->trigger(ViewEvent::EVENT_RESPONSE, $event); - } - - /** - * Loop through children, rendering each - * - * @param Model $model - * @throws Exception\DomainException - * @return void - */ - protected function renderChildren(Model $model) - { - foreach ($model as $child) { - if ($child->terminate()) { - throw new Exception\DomainException('Inconsistent state; child view model is marked as terminal'); - } - $child->setOption('has_parent', true); - $result = $this->render($child); - $child->setOption('has_parent', null); - $capture = $child->captureTo(); - if (!empty($capture)) { - if ($child->isAppend()) { - $oldResult=$model->{$capture}; - $model->setVariable($capture, $oldResult . $result); - } else { - $model->setVariable($capture, $result); - } - } - } - } - - /** - * Create and return ViewEvent used by render() - * - * @return ViewEvent - */ - protected function getEvent() - { - $event = new ViewEvent(); - $event->setTarget($this); - if (null !== ($request = $this->getRequest())) { - $event->setRequest($request); - } - if (null !== ($response = $this->getResponse())) { - $event->setResponse($response); - } - return $event; - } -} diff --git a/library/Zend/View/ViewEvent.php b/library/Zend/View/ViewEvent.php deleted file mode 100755 index 34baa2136..000000000 --- a/library/Zend/View/ViewEvent.php +++ /dev/null @@ -1,258 +0,0 @@ -model = $model; - return $this; - } - - /** - * Set the MVC request object - * - * @param Request $request - * @return ViewEvent - */ - public function setRequest(Request $request) - { - $this->request = $request; - return $this; - } - - /** - * Set the MVC response object - * - * @param Response $response - * @return ViewEvent - */ - public function setResponse(Response $response) - { - $this->response = $response; - return $this; - } - - /** - * Set result of rendering - * - * @param mixed $result - * @return ViewEvent - */ - public function setResult($result) - { - $this->result = $result; - return $this; - } - - /** - * Retrieve the view model - * - * @return null|Model - */ - public function getModel() - { - return $this->model; - } - - /** - * Set value for renderer - * - * @param Renderer $renderer - * @return ViewEvent - */ - public function setRenderer(Renderer $renderer) - { - $this->renderer = $renderer; - return $this; - } - - /** - * Get value for renderer - * - * @return null|Renderer - */ - public function getRenderer() - { - return $this->renderer; - } - - /** - * Retrieve the MVC request object - * - * @return null|Request - */ - public function getRequest() - { - return $this->request; - } - - /** - * Retrieve the MVC response object - * - * @return null|Response - */ - public function getResponse() - { - return $this->response; - } - - /** - * Retrieve the result of rendering - * - * @return mixed - */ - public function getResult() - { - return $this->result; - } - - /** - * Get event parameter - * - * @param string $name - * @param mixed $default - * @return mixed - */ - public function getParam($name, $default = null) - { - switch ($name) { - case 'model': - return $this->getModel(); - case 'renderer': - return $this->getRenderer(); - case 'request': - return $this->getRequest(); - case 'response': - return $this->getResponse(); - case 'result': - return $this->getResult(); - default: - return parent::getParam($name, $default); - } - } - - /** - * Get all event parameters - * - * @return array|\ArrayAccess - */ - public function getParams() - { - $params = parent::getParams(); - $params['model'] = $this->getModel(); - $params['renderer'] = $this->getRenderer(); - $params['request'] = $this->getRequest(); - $params['response'] = $this->getResponse(); - $params['result'] = $this->getResult(); - return $params; - } - - /** - * Set event parameters - * - * @param array|object|ArrayAccess $params - * @return ViewEvent - */ - public function setParams($params) - { - parent::setParams($params); - if (!is_array($params) && !$params instanceof ArrayAccess) { - return $this; - } - - foreach (array('model', 'renderer', 'request', 'response', 'result') as $param) { - if (isset($params[$param])) { - $method = 'set' . $param; - $this->$method($params[$param]); - } - } - return $this; - } - - /** - * Set an individual event parameter - * - * @param string $name - * @param mixed $value - * @return ViewEvent - */ - public function setParam($name, $value) - { - switch ($name) { - case 'model': - $this->setModel($value); - break; - case 'renderer': - $this->setRenderer($value); - break; - case 'request': - $this->setRequest($value); - break; - case 'response': - $this->setResponse($value); - break; - case 'result': - $this->setResult($value); - break; - default: - parent::setParam($name, $value); - break; - } - return $this; - } -} diff --git a/library/Zend/View/composer.json b/library/Zend/View/composer.json deleted file mode 100755 index 44bb5c275..000000000 --- a/library/Zend/View/composer.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "zendframework/zend-view", - "description": "provides a system of helpers, output filters, and variable escaping", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "view" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\View\\": "" - } - }, - "target-dir": "Zend/View", - "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-loader": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-authentication": "self.version", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-feed": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-mvc": "self.version", - "zendframework/zend-navigation": "self.version", - "zendframework/zend-paginator": "self.version", - "zendframework/zend-permissions-acl": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-authentication": "Zend\\Authentication component", - "zendframework/zend-escaper": "Zend\\Escaper component", - "zendframework/zend-feed": "Zend\\Feed component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json component", - "zendframework/zend-mvc": "Zend\\Mvc component", - "zendframework/zend-navigation": "Zend\\Navigation component", - "zendframework/zend-paginator": "Zend\\Paginator component", - "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/Zend/XmlRpc/AbstractValue.php b/library/Zend/XmlRpc/AbstractValue.php deleted file mode 100755 index 221238a09..000000000 --- a/library/Zend/XmlRpc/AbstractValue.php +++ /dev/null @@ -1,462 +0,0 @@ -type; - } - - /** - * Get XML generator instance - * - * @return \Zend\XmlRpc\Generator\GeneratorInterface - */ - public static function getGenerator() - { - if (!static::$generator) { - if (extension_loaded('xmlwriter')) { - static::$generator = new Generator\XmlWriter(); - } else { - static::$generator = new Generator\DomDocument(); - } - } - - return static::$generator; - } - - /** - * Sets XML generator instance - * - * @param null|Generator\GeneratorInterface $generator - * @return void - */ - public static function setGenerator(Generator\GeneratorInterface $generator = null) - { - static::$generator = $generator; - } - - /** - * Changes the encoding of the generator - * - * @param string $encoding - * @return void - */ - public static function setEncoding($encoding) - { - $generator = static::getGenerator(); - $newGenerator = new $generator($encoding); - static::setGenerator($newGenerator); - } - - /** - * Return the value of this object, convert the XML-RPC native value into a PHP variable - * - * @return mixed - */ - abstract public function getValue(); - - - /** - * Return the XML code that represent a native MXL-RPC value - * - * @return string - */ - public function saveXml() - { - if (!$this->xml) { - $this->generateXml(); - $this->xml = (string) $this->getGenerator(); - } - return $this->xml; - } - - /** - * Generate XML code that represent a native XML/RPC value - * - * @return void - */ - public function generateXml() - { - $this->_generateXml(); - } - - /** - * Creates a Value* object, representing a native XML-RPC value - * A XmlRpcValue object can be created in 3 ways: - * 1. Autodetecting the native type out of a PHP variable - * (if $type is not set or equal to Value::AUTO_DETECT_TYPE) - * 2. By specifying the native type ($type is one of the Value::XMLRPC_TYPE_* constants) - * 3. From a XML string ($type is set to Value::XML_STRING) - * - * By default the value type is autodetected according to it's PHP type - * - * @param mixed $value - * @param Zend\XmlRpc\Value::constant $type - * @throws Exception\ValueException - * @return AbstractValue - */ - public static function getXmlRpcValue($value, $type = self::AUTO_DETECT_TYPE) - { - switch ($type) { - case self::AUTO_DETECT_TYPE: - // Auto detect the XML-RPC native type from the PHP type of $value - return static::_phpVarToNativeXmlRpc($value); - - case self::XML_STRING: - // Parse the XML string given in $value and get the XML-RPC value in it - return static::_xmlStringToNativeXmlRpc($value); - - case self::XMLRPC_TYPE_I4: - // fall through to the next case - case self::XMLRPC_TYPE_INTEGER: - return new Value\Integer($value); - - case self::XMLRPC_TYPE_I8: - // fall through to the next case - case self::XMLRPC_TYPE_APACHEI8: - return new Value\BigInteger($value); - - case self::XMLRPC_TYPE_DOUBLE: - return new Value\Double($value); - - case self::XMLRPC_TYPE_BOOLEAN: - return new Value\Boolean($value); - - case self::XMLRPC_TYPE_STRING: - return new Value\String($value); - - case self::XMLRPC_TYPE_BASE64: - return new Value\Base64($value); - - case self::XMLRPC_TYPE_NIL: - // fall through to the next case - case self::XMLRPC_TYPE_APACHENIL: - return new Value\Nil(); - - case self::XMLRPC_TYPE_DATETIME: - return new Value\DateTime($value); - - case self::XMLRPC_TYPE_ARRAY: - return new Value\ArrayValue($value); - - case self::XMLRPC_TYPE_STRUCT: - return new Value\Struct($value); - - default: - throw new Exception\ValueException('Given type is not a '. __CLASS__ .' constant'); - } - } - - /** - * Get XML-RPC type for a PHP native variable - * - * @static - * @param mixed $value - * @throws Exception\InvalidArgumentException - * @return string - */ - public static function getXmlRpcTypeByValue($value) - { - if (is_object($value)) { - if ($value instanceof AbstractValue) { - return $value->getType(); - } elseif ($value instanceof DateTime) { - return self::XMLRPC_TYPE_DATETIME; - } - return static::getXmlRpcTypeByValue(get_object_vars($value)); - } elseif (is_array($value)) { - if (!empty($value) && is_array($value) && (array_keys($value) !== range(0, count($value) - 1))) { - return self::XMLRPC_TYPE_STRUCT; - } - return self::XMLRPC_TYPE_ARRAY; - } elseif (is_int($value)) { - return ($value > PHP_INT_MAX) ? self::XMLRPC_TYPE_I8 : self::XMLRPC_TYPE_INTEGER; - } elseif (is_double($value)) { - return self::XMLRPC_TYPE_DOUBLE; - } elseif (is_bool($value)) { - return self::XMLRPC_TYPE_BOOLEAN; - } elseif (null === $value) { - return self::XMLRPC_TYPE_NIL; - } elseif (is_string($value)) { - return self::XMLRPC_TYPE_STRING; - } - throw new Exception\InvalidArgumentException(sprintf( - 'No matching XMLRPC type found for php type %s.', - gettype($value) - )); - } - - /** - * Transform a PHP native variable into a XML-RPC native value - * - * @param mixed $value The PHP variable for conversion - * - * @throws Exception\InvalidArgumentException - * @return AbstractValue - * @static - */ - protected static function _phpVarToNativeXmlRpc($value) - { - // @see http://framework.zend.com/issues/browse/ZF-8623 - if ($value instanceof AbstractValue) { - return $value; - } - - switch (static::getXmlRpcTypeByValue($value)) { - case self::XMLRPC_TYPE_DATETIME: - return new Value\DateTime($value); - - case self::XMLRPC_TYPE_ARRAY: - return new Value\ArrayValue($value); - - case self::XMLRPC_TYPE_STRUCT: - return new Value\Struct($value); - - case self::XMLRPC_TYPE_INTEGER: - return new Value\Integer($value); - - case self::XMLRPC_TYPE_DOUBLE: - return new Value\Double($value); - - case self::XMLRPC_TYPE_BOOLEAN: - return new Value\Boolean($value); - - case self::XMLRPC_TYPE_NIL: - return new Value\Nil; - - case self::XMLRPC_TYPE_STRING: - // Fall through to the next case - default: - // If type isn't identified (or identified as string), it treated as string - return new Value\String($value); - } - } - - /** - * Transform an XML string into a XML-RPC native value - * - * @param string|\SimpleXMLElement $xml A SimpleXMLElement object represent the XML string - * It can be also a valid XML string for conversion - * - * @throws Exception\ValueException - * @return \Zend\XmlRpc\AbstractValue - * @static - */ - protected static function _xmlStringToNativeXmlRpc($xml) - { - static::_createSimpleXMLElement($xml); - - static::_extractTypeAndValue($xml, $type, $value); - - switch ($type) { - // All valid and known XML-RPC native values - case self::XMLRPC_TYPE_I4: - // Fall through to the next case - case self::XMLRPC_TYPE_INTEGER: - $xmlrpcValue = new Value\Integer($value); - break; - case self::XMLRPC_TYPE_APACHEI8: - // Fall through to the next case - case self::XMLRPC_TYPE_I8: - $xmlrpcValue = new Value\BigInteger($value); - break; - case self::XMLRPC_TYPE_DOUBLE: - $xmlrpcValue = new Value\Double($value); - break; - case self::XMLRPC_TYPE_BOOLEAN: - $xmlrpcValue = new Value\Boolean($value); - break; - case self::XMLRPC_TYPE_STRING: - $xmlrpcValue = new Value\String($value); - break; - case self::XMLRPC_TYPE_DATETIME: // The value should already be in an iso8601 format - $xmlrpcValue = new Value\DateTime($value); - break; - case self::XMLRPC_TYPE_BASE64: // The value should already be base64 encoded - $xmlrpcValue = new Value\Base64($value, true); - break; - case self::XMLRPC_TYPE_NIL: - // Fall through to the next case - case self::XMLRPC_TYPE_APACHENIL: - // The value should always be NULL - $xmlrpcValue = new Value\Nil(); - break; - case self::XMLRPC_TYPE_ARRAY: - // PHP 5.2.4 introduced a regression in how empty($xml->value) - // returns; need to look for the item specifically - $data = null; - foreach ($value->children() as $key => $value) { - if ('data' == $key) { - $data = $value; - break; - } - } - - if (null === $data) { - throw new Exception\ValueException('Invalid XML for XML-RPC native '. self::XMLRPC_TYPE_ARRAY .' type: ARRAY tag must contain DATA tag'); - } - $values = array(); - // Parse all the elements of the array from the XML string - // (simple xml element) to Value objects - foreach ($data->value as $element) { - $values[] = static::_xmlStringToNativeXmlRpc($element); - } - $xmlrpcValue = new Value\ArrayValue($values); - break; - case self::XMLRPC_TYPE_STRUCT: - $values = array(); - // Parse all the members of the struct from the XML string - // (simple xml element) to Value objects - foreach ($value->member as $member) { - // @todo? If a member doesn't have a tag, we don't add it to the struct - // Maybe we want to throw an exception here ? - if (!isset($member->value) or !isset($member->name)) { - continue; - //throw new Value_Exception('Member of the '. self::XMLRPC_TYPE_STRUCT .' XML-RPC native type must contain a VALUE tag'); - } - $values[(string) $member->name] = static::_xmlStringToNativeXmlRpc($member->value); - } - $xmlrpcValue = new Value\Struct($values); - break; - default: - throw new Exception\ValueException('Value type \''. $type .'\' parsed from the XML string is not a known XML-RPC native type'); - break; - } - $xmlrpcValue->_setXML($xml->asXML()); - - return $xmlrpcValue; - } - - protected static function _createSimpleXMLElement(&$xml) - { - if ($xml instanceof \SimpleXMLElement) { - return; - } - - try { - $xml = new \SimpleXMLElement($xml); - } catch (\Exception $e) { - // The given string is not a valid XML - throw new Exception\ValueException('Failed to create XML-RPC value from XML string: ' . $e->getMessage(), $e->getCode(), $e); - } - } - - /** - * Extract XML/RPC type and value from SimpleXMLElement object - * - * @param \SimpleXMLElement $xml - * @param string &$type Type bind variable - * @param string &$value Value bind variable - * @return void - */ - protected static function _extractTypeAndValue(\SimpleXMLElement $xml, &$type, &$value) - { - list($type, $value) = each($xml); - if (!$type and $value === null) { - $namespaces = array('ex' => 'http://ws.apache.org/xmlrpc/namespaces/extensions'); - foreach ($namespaces as $namespaceName => $namespaceUri) { - $namespaceXml = $xml->children($namespaceUri); - list($type, $value) = each($namespaceXml); - if ($type !== null) { - $type = $namespaceName . ':' . $type; - break; - } - } - } - - // If no type was specified, the default is string - if (!$type) { - $type = self::XMLRPC_TYPE_STRING; - if (empty($value) and preg_match('#^.*$#', $xml->asXML())) { - $value = str_replace(array('', ''), '', $xml->asXML()); - } - } - } - - /** - * @param $xml - * @return void - */ - protected function _setXML($xml) - { - $this->xml = $this->getGenerator()->stripDeclaration($xml); - } -} diff --git a/library/Zend/XmlRpc/CONTRIBUTING.md b/library/Zend/XmlRpc/CONTRIBUTING.md deleted file mode 100755 index e77f5d2d5..000000000 --- a/library/Zend/XmlRpc/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2. \ No newline at end of file diff --git a/library/Zend/XmlRpc/Client.php b/library/Zend/XmlRpc/Client.php deleted file mode 100755 index 504a3bf23..000000000 --- a/library/Zend/XmlRpc/Client.php +++ /dev/null @@ -1,343 +0,0 @@ -httpClient = new Http\Client(); - } else { - $this->httpClient = $httpClient; - } - - $this->introspector = new Client\ServerIntrospection($this); - $this->serverAddress = $server; - } - - - /** - * Sets the HTTP client object to use for connecting the XML-RPC server. - * - * @param \Zend\Http\Client $httpClient - * @return \Zend\Http\Client - */ - public function setHttpClient(Http\Client $httpClient) - { - return $this->httpClient = $httpClient; - } - - - /** - * Gets the HTTP client object. - * - * @return \Zend\Http\Client - */ - public function getHttpClient() - { - return $this->httpClient; - } - - - /** - * Sets the object used to introspect remote servers - * - * @param \Zend\XmlRpc\Client\ServerIntrospection - * @return \Zend\XmlRpc\Client\ServerIntrospection - */ - public function setIntrospector(Client\ServerIntrospection $introspector) - { - return $this->introspector = $introspector; - } - - - /** - * Gets the introspection object. - * - * @return \Zend\XmlRpc\Client\ServerIntrospection - */ - public function getIntrospector() - { - return $this->introspector; - } - - - /** - * The request of the last method call - * - * @return \Zend\XmlRpc\Request - */ - public function getLastRequest() - { - return $this->lastRequest; - } - - - /** - * The response received from the last method call - * - * @return \Zend\XmlRpc\Response - */ - public function getLastResponse() - { - return $this->lastResponse; - } - - - /** - * Returns a proxy object for more convenient method calls - * - * @param string $namespace Namespace to proxy or empty string for none - * @return \Zend\XmlRpc\Client\ServerProxy - */ - public function getProxy($namespace = '') - { - if (empty($this->proxyCache[$namespace])) { - $proxy = new Client\ServerProxy($this, $namespace); - $this->proxyCache[$namespace] = $proxy; - } - return $this->proxyCache[$namespace]; - } - - /** - * Set skip system lookup flag - * - * @param bool $flag - * @return \Zend\XmlRpc\Client - */ - public function setSkipSystemLookup($flag = true) - { - $this->skipSystemLookup = (bool) $flag; - return $this; - } - - /** - * Skip system lookup when determining if parameter should be array or struct? - * - * @return bool - */ - public function skipSystemLookup() - { - return $this->skipSystemLookup; - } - - /** - * Perform an XML-RPC request and return a response. - * - * @param \Zend\XmlRpc\Request $request - * @param null|\Zend\XmlRpc\Response $response - * @return void - * @throws \Zend\XmlRpc\Client\Exception\HttpException - */ - public function doRequest($request, $response = null) - { - $this->lastRequest = $request; - - if (PHP_VERSION_ID < 50600) { - iconv_set_encoding('input_encoding', 'UTF-8'); - iconv_set_encoding('output_encoding', 'UTF-8'); - iconv_set_encoding('internal_encoding', 'UTF-8'); - } else { - ini_set('default_charset', 'UTF-8'); - } - - $http = $this->getHttpClient(); - $httpRequest = $http->getRequest(); - if ($httpRequest->getUriString() === null) { - $http->setUri($this->serverAddress); - } - - $headers = $httpRequest->getHeaders(); - $headers->addHeaders(array( - 'Content-Type: text/xml; charset=utf-8', - 'Accept: text/xml', - )); - - if (!$headers->get('user-agent')) { - $headers->addHeaderLine('user-agent', 'Zend_XmlRpc_Client'); - } - - $xml = $this->lastRequest->__toString(); - $http->setRawBody($xml); - $httpResponse = $http->setMethod('POST')->send(); - - if (!$httpResponse->isSuccess()) { - /** - * Exception thrown when an HTTP error occurs - */ - throw new Client\Exception\HttpException( - $httpResponse->getReasonPhrase(), - $httpResponse->getStatusCode() - ); - } - - if ($response === null) { - $response = new Response(); - } - - $this->lastResponse = $response; - $this->lastResponse->loadXml(trim($httpResponse->getBody())); - } - - /** - * Send an XML-RPC request to the service (for a specific method) - * - * @param string $method Name of the method we want to call - * @param array $params Array of parameters for the method - * @return mixed - * @throws \Zend\XmlRpc\Client\Exception\FaultException - */ - public function call($method, $params=array()) - { - if (!$this->skipSystemLookup() && ('system.' != substr($method, 0, 7))) { - // Ensure empty array/struct params are cast correctly - // If system.* methods are not available, bypass. (ZF-2978) - $success = true; - try { - $signatures = $this->getIntrospector()->getMethodSignature($method); - } catch (\Zend\XmlRpc\Exception\ExceptionInterface $e) { - $success = false; - } - if ($success) { - $validTypes = array( - AbstractValue::XMLRPC_TYPE_ARRAY, - AbstractValue::XMLRPC_TYPE_BASE64, - AbstractValue::XMLRPC_TYPE_BOOLEAN, - AbstractValue::XMLRPC_TYPE_DATETIME, - AbstractValue::XMLRPC_TYPE_DOUBLE, - AbstractValue::XMLRPC_TYPE_I4, - AbstractValue::XMLRPC_TYPE_INTEGER, - AbstractValue::XMLRPC_TYPE_NIL, - AbstractValue::XMLRPC_TYPE_STRING, - AbstractValue::XMLRPC_TYPE_STRUCT, - ); - - if (!is_array($params)) { - $params = array($params); - } - foreach ($params as $key => $param) { - if ($param instanceof AbstractValue) { - continue; - } - - if (count($signatures) > 1) { - $type = AbstractValue::getXmlRpcTypeByValue($param); - foreach ($signatures as $signature) { - if (!is_array($signature)) { - continue; - } - if (isset($signature['parameters'][$key])) { - if ($signature['parameters'][$key] == $type) { - break; - } - } - } - } elseif (isset($signatures[0]['parameters'][$key])) { - $type = $signatures[0]['parameters'][$key]; - } else { - $type = null; - } - - if (empty($type) || !in_array($type, $validTypes)) { - $type = AbstractValue::AUTO_DETECT_TYPE; - } - - $params[$key] = AbstractValue::getXmlRpcValue($param, $type); - } - } - } - - $request = $this->_createRequest($method, $params); - - $this->doRequest($request); - - if ($this->lastResponse->isFault()) { - $fault = $this->lastResponse->getFault(); - /** - * Exception thrown when an XML-RPC fault is returned - */ - throw new Client\Exception\FaultException( - $fault->getMessage(), - $fault->getCode() - ); - } - - return $this->lastResponse->getReturnValue(); - } - - /** - * Create request object - * - * @param string $method - * @param array $params - * @return \Zend\XmlRpc\Request - */ - protected function _createRequest($method, $params) - { - return new Request($method, $params); - } -} diff --git a/library/Zend/XmlRpc/Client/Exception/ExceptionInterface.php b/library/Zend/XmlRpc/Client/Exception/ExceptionInterface.php deleted file mode 100755 index 03c09959c..000000000 --- a/library/Zend/XmlRpc/Client/Exception/ExceptionInterface.php +++ /dev/null @@ -1,19 +0,0 @@ -system = $client->getProxy('system'); - } - - /** - * Returns the signature for each method on the server, - * autodetecting whether system.multicall() is supported and - * using it if so. - * - * @return array - */ - public function getSignatureForEachMethod() - { - $methods = $this->listMethods(); - - try { - $signatures = $this->getSignatureForEachMethodByMulticall($methods); - } catch (Exception\FaultException $e) { - // degrade to looping - } - - if (empty($signatures)) { - $signatures = $this->getSignatureForEachMethodByLooping($methods); - } - - return $signatures; - } - - /** - * Attempt to get the method signatures in one request via system.multicall(). - * This is a boxcar feature of XML-RPC and is found on fewer servers. However, - * can significantly improve performance if present. - * - * @param array $methods - * @throws Exception\IntrospectException - * @return array array(array(return, param, param, param...)) - */ - public function getSignatureForEachMethodByMulticall($methods = null) - { - if ($methods === null) { - $methods = $this->listMethods(); - } - - $multicallParams = array(); - foreach ($methods as $method) { - $multicallParams[] = array('methodName' => 'system.methodSignature', - 'params' => array($method)); - } - - $serverSignatures = $this->system->multicall($multicallParams); - - if (! is_array($serverSignatures)) { - $type = gettype($serverSignatures); - $error = "Multicall return is malformed. Expected array, got $type"; - throw new Exception\IntrospectException($error); - } - - if (count($serverSignatures) != count($methods)) { - $error = 'Bad number of signatures received from multicall'; - throw new Exception\IntrospectException($error); - } - - // Create a new signatures array with the methods name as keys and the signature as value - $signatures = array(); - foreach ($serverSignatures as $i => $signature) { - $signatures[$methods[$i]] = $signature; - } - - return $signatures; - } - - /** - * Get the method signatures for every method by - * successively calling system.methodSignature - * - * @param array $methods - * @return array - */ - public function getSignatureForEachMethodByLooping($methods = null) - { - if ($methods === null) { - $methods = $this->listMethods(); - } - - $signatures = array(); - foreach ($methods as $method) { - $signatures[$method] = $this->getMethodSignature($method); - } - - return $signatures; - } - - /** - * Call system.methodSignature() for the given method - * - * @param array $method - * @throws Exception\IntrospectException - * @return array array(array(return, param, param, param...)) - */ - public function getMethodSignature($method) - { - $signature = $this->system->methodSignature($method); - if (!is_array($signature)) { - $error = 'Invalid signature for method "' . $method . '"'; - throw new Exception\IntrospectException($error); - } - return $signature; - } - - /** - * Call system.listMethods() - * - * @return array array(method, method, method...) - */ - public function listMethods() - { - return $this->system->listMethods(); - } -} diff --git a/library/Zend/XmlRpc/Client/ServerProxy.php b/library/Zend/XmlRpc/Client/ServerProxy.php deleted file mode 100755 index 861b61590..000000000 --- a/library/Zend/XmlRpc/Client/ServerProxy.php +++ /dev/null @@ -1,79 +0,0 @@ -foo->bar->baz()". - */ -class ServerProxy -{ - /** - * @var \Zend\XmlRpc\Client - */ - private $client = null; - - /** - * @var string - */ - private $namespace = ''; - - - /** - * @var array of \Zend\XmlRpc\Client\ServerProxy - */ - private $cache = array(); - - - /** - * Class constructor - * - * @param \Zend\XmlRpc\Client $client - * @param string $namespace - */ - public function __construct(XMLRPCClient $client, $namespace = '') - { - $this->client = $client; - $this->namespace = $namespace; - } - - - /** - * Get the next successive namespace - * - * @param string $namespace - * @return \Zend\XmlRpc\Client\ServerProxy - */ - public function __get($namespace) - { - $namespace = ltrim("$this->namespace.$namespace", '.'); - if (!isset($this->cache[$namespace])) { - $this->cache[$namespace] = new $this($this->client, $namespace); - } - return $this->cache[$namespace]; - } - - - /** - * Call a method in this namespace. - * - * @param string $method - * @param array $args - * @return mixed - */ - public function __call($method, $args) - { - $method = ltrim("{$this->namespace}.{$method}", '.'); - return $this->client->call($method, $args); - } -} diff --git a/library/Zend/XmlRpc/Exception/BadMethodCallException.php b/library/Zend/XmlRpc/Exception/BadMethodCallException.php deleted file mode 100755 index db36424ab..000000000 --- a/library/Zend/XmlRpc/Exception/BadMethodCallException.php +++ /dev/null @@ -1,14 +0,0 @@ - messages - * @var array - */ - protected $internal = array( - 404 => 'Unknown Error', - - // 610 - 619 reflection errors - 610 => 'Invalid method class', - 611 => 'Unable to attach function or callback; not callable', - 612 => 'Unable to load array; not an array', - 613 => 'One or more method records are corrupt or otherwise unusable', - - // 620 - 629 dispatch errors - 620 => 'Method does not exist', - 621 => 'Error instantiating class to invoke method', - 622 => 'Method missing implementation', - 623 => 'Calling parameters do not match signature', - - // 630 - 639 request errors - 630 => 'Unable to read request', - 631 => 'Failed to parse request', - 632 => 'Invalid request, no method passed; request must contain a \'methodName\' tag', - 633 => 'Param must contain a value', - 634 => 'Invalid method name', - 635 => 'Invalid XML provided to request', - 636 => 'Error creating xmlrpc value', - - // 640 - 649 system.* errors - 640 => 'Method does not exist', - - // 650 - 659 response errors - 650 => 'Invalid XML provided for response', - 651 => 'Failed to parse response', - 652 => 'Invalid response', - 653 => 'Invalid XMLRPC value in response', - ); - - /** - * Constructor - * - */ - public function __construct($code = 404, $message = '') - { - $this->setCode($code); - $code = $this->getCode(); - - if (empty($message) && isset($this->internal[$code])) { - $message = $this->internal[$code]; - } elseif (empty($message)) { - $message = 'Unknown error'; - } - $this->setMessage($message); - } - - /** - * Set the fault code - * - * @param int $code - * @return Fault - */ - public function setCode($code) - { - $this->code = (int) $code; - return $this; - } - - /** - * Return fault code - * - * @return int - */ - public function getCode() - { - return $this->code; - } - - /** - * Retrieve fault message - * - * @param string - * @return Fault - */ - public function setMessage($message) - { - $this->message = (string) $message; - return $this; - } - - /** - * Retrieve fault message - * - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Set encoding to use in fault response - * - * @param string $encoding - * @return Fault - */ - public function setEncoding($encoding) - { - $this->encoding = $encoding; - AbstractValue::setEncoding($encoding); - return $this; - } - - /** - * Retrieve current fault encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Load an XMLRPC fault from XML - * - * @param string $fault - * @return bool Returns true if successfully loaded fault response, false - * if response was not a fault response - * @throws Exception\ExceptionInterface if no or faulty XML provided, or if fault - * response does not contain either code or message - */ - public function loadXml($fault) - { - if (!is_string($fault)) { - throw new Exception\InvalidArgumentException('Invalid XML provided to fault'); - } - - $xmlErrorsFlag = libxml_use_internal_errors(true); - try { - $xml = XmlSecurity::scan($fault); - } catch (\ZendXml\Exception\RuntimeException $e) { - // Unsecure XML - throw new Exception\RuntimeException('Failed to parse XML fault: ' . $e->getMessage(), 500, $e); - } - if (!$xml instanceof SimpleXMLElement) { - $errors = libxml_get_errors(); - $errors = array_reduce($errors, function ($result, $item) { - if (empty($result)) { - return $item->message; - } - return $result . '; ' . $item->message; - }, ''); - libxml_use_internal_errors($xmlErrorsFlag); - throw new Exception\InvalidArgumentException('Failed to parse XML fault: ' . $errors, 500); - } - libxml_use_internal_errors($xmlErrorsFlag); - - // Check for fault - if (!$xml->fault) { - // Not a fault - return false; - } - - if (!$xml->fault->value->struct) { - // not a proper fault - throw new Exception\InvalidArgumentException('Invalid fault structure', 500); - } - - $structXml = $xml->fault->value->asXML(); - $struct = AbstractValue::getXmlRpcValue($structXml, AbstractValue::XML_STRING); - $struct = $struct->getValue(); - - if (isset($struct['faultCode'])) { - $code = $struct['faultCode']; - } - if (isset($struct['faultString'])) { - $message = $struct['faultString']; - } - - if (empty($code) && empty($message)) { - throw new Exception\InvalidArgumentException('Fault code and string required'); - } - - if (empty($code)) { - $code = '404'; - } - - if (empty($message)) { - if (isset($this->internal[$code])) { - $message = $this->internal[$code]; - } else { - $message = 'Unknown Error'; - } - } - - $this->setCode($code); - $this->setMessage($message); - - return true; - } - - /** - * Determine if an XML response is an XMLRPC fault - * - * @param string $xml - * @return bool - */ - public static function isFault($xml) - { - $fault = new static(); - try { - $isFault = $fault->loadXml($xml); - } catch (Exception\ExceptionInterface $e) { - $isFault = false; - } - - return $isFault; - } - - /** - * Serialize fault to XML - * - * @return string - */ - public function saveXml() - { - // Create fault value - $faultStruct = array( - 'faultCode' => $this->getCode(), - 'faultString' => $this->getMessage() - ); - $value = AbstractValue::getXmlRpcValue($faultStruct); - - $generator = AbstractValue::getGenerator(); - $generator->openElement('methodResponse') - ->openElement('fault'); - $value->generateXml(); - $generator->closeElement('fault') - ->closeElement('methodResponse'); - - return $generator->flush(); - } - - /** - * Return XML fault response - * - * @return string - */ - public function __toString() - { - return $this->saveXML(); - } -} diff --git a/library/Zend/XmlRpc/Generator/AbstractGenerator.php b/library/Zend/XmlRpc/Generator/AbstractGenerator.php deleted file mode 100755 index 693f026c0..000000000 --- a/library/Zend/XmlRpc/Generator/AbstractGenerator.php +++ /dev/null @@ -1,151 +0,0 @@ -setEncoding($encoding); - $this->_init(); - } - - /** - * Initialize internal objects - * - * @return void - */ - abstract protected function _init(); - - /** - * Start XML element - * - * Method opens a new XML element with an element name and an optional value - * - * @param string $name XML tag name - * @param string $value Optional value of the XML tag - * @return AbstractGenerator Fluent interface - */ - public function openElement($name, $value = null) - { - $this->_openElement($name); - if ($value !== null) { - $this->_writeTextData($value); - } - - return $this; - } - - /** - * End of an XML element - * - * Method marks the end of an XML element - * - * @param string $name XML tag name - * @return AbstractGenerator Fluent interface - */ - public function closeElement($name) - { - $this->_closeElement($name); - - return $this; - } - - /** - * Return encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set XML encoding - * - * @param string $encoding - * @return AbstractGenerator - */ - public function setEncoding($encoding) - { - $this->encoding = $encoding; - return $this; - } - - /** - * Returns the XML as a string and flushes all internal buffers - * - * @return string - */ - public function flush() - { - $xml = $this->saveXml(); - $this->_init(); - return $xml; - } - - /** - * Returns XML without document declaration - * - * @return string - */ - public function __toString() - { - return $this->stripDeclaration($this->saveXml()); - } - - /** - * Removes XML declaration from a string - * - * @param string $xml - * @return string - */ - public function stripDeclaration($xml) - { - return preg_replace('/<\?xml version="1.0"( encoding="[^\"]*")?\?>\n/u', '', $xml); - } - - /** - * Start XML element - * - * @param string $name XML element name - */ - abstract protected function _openElement($name); - - /** - * Write XML text data into the currently opened XML element - * - * @param string $text - */ - abstract protected function _writeTextData($text); - - /** - * End XML element - * - * @param string $name - */ - abstract protected function _closeElement($name); -} diff --git a/library/Zend/XmlRpc/Generator/DomDocument.php b/library/Zend/XmlRpc/Generator/DomDocument.php deleted file mode 100755 index 47e7a7223..000000000 --- a/library/Zend/XmlRpc/Generator/DomDocument.php +++ /dev/null @@ -1,85 +0,0 @@ -dom->createElement($name); - - $this->currentElement = $this->currentElement->appendChild($newElement); - } - - /** - * Write XML text data into the currently opened XML element - * - * @param string $text - */ - protected function _writeTextData($text) - { - $this->currentElement->appendChild($this->dom->createTextNode($text)); - } - - /** - * Close a previously opened XML element - * - * Resets $currentElement to the next parent node in the hierarchy - * - * @param string $name - * @return void - */ - protected function _closeElement($name) - { - if (isset($this->currentElement->parentNode)) { - $this->currentElement = $this->currentElement->parentNode; - } - } - - /** - * Save XML as a string - * - * @return string - */ - public function saveXml() - { - return $this->dom->saveXml(); - } - - /** - * Initializes internal objects - * - * @return void - */ - protected function _init() - { - $this->dom = new \DOMDocument('1.0', $this->encoding); - $this->currentElement = $this->dom; - } -} diff --git a/library/Zend/XmlRpc/Generator/GeneratorInterface.php b/library/Zend/XmlRpc/Generator/GeneratorInterface.php deleted file mode 100755 index ca2af243b..000000000 --- a/library/Zend/XmlRpc/Generator/GeneratorInterface.php +++ /dev/null @@ -1,32 +0,0 @@ -xmlWriter = new \XMLWriter(); - $this->xmlWriter->openMemory(); - $this->xmlWriter->startDocument('1.0', $this->encoding); - } - - - /** - * Open a new XML element - * - * @param string $name XML element name - * @return void - */ - protected function _openElement($name) - { - $this->xmlWriter->startElement($name); - } - - /** - * Write XML text data into the currently opened XML element - * - * @param string $text XML text data - * @return void - */ - protected function _writeTextData($text) - { - $this->xmlWriter->text($text); - } - - /** - * Close a previously opened XML element - * - * @param string $name - * @return XmlWriter - */ - protected function _closeElement($name) - { - $this->xmlWriter->endElement(); - - return $this; - } - - /** - * Emit XML document - * - * @return string - */ - public function saveXml() - { - return $this->xmlWriter->flush(false); - } -} diff --git a/library/Zend/XmlRpc/README.md b/library/Zend/XmlRpc/README.md deleted file mode 100755 index f003296a4..000000000 --- a/library/Zend/XmlRpc/README.md +++ /dev/null @@ -1,15 +0,0 @@ -XML-RPC Component from ZF2 -========================== - -This is the XML-RPC component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/library/Zend/XmlRpc/Request.php b/library/Zend/XmlRpc/Request.php deleted file mode 100755 index 82a7eedbe..000000000 --- a/library/Zend/XmlRpc/Request.php +++ /dev/null @@ -1,444 +0,0 @@ -setMethod($method); - } - - if ($params !== null) { - $this->setParams($params); - } - } - - - /** - * Set encoding to use in request - * - * @param string $encoding - * @return \Zend\XmlRpc\Request - */ - public function setEncoding($encoding) - { - $this->encoding = $encoding; - AbstractValue::setEncoding($encoding); - return $this; - } - - /** - * Retrieve current request encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set method to call - * - * @param string $method - * @return bool Returns true on success, false if method name is invalid - */ - public function setMethod($method) - { - if (!is_string($method) || !preg_match('/^[a-z0-9_.:\\\\\/]+$/i', $method)) { - $this->fault = new Fault(634, 'Invalid method name ("' . $method . '")'); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - $this->method = $method; - return true; - } - - /** - * Retrieve call method - * - * @return string - */ - public function getMethod() - { - return $this->method; - } - - /** - * Add a parameter to the parameter stack - * - * Adds a parameter to the parameter stack, associating it with the type - * $type if provided - * - * @param mixed $value - * @param string $type Optional; type hinting - * @return void - */ - public function addParam($value, $type = null) - { - $this->params[] = $value; - if (null === $type) { - // Detect type if not provided explicitly - if ($value instanceof AbstractValue) { - $type = $value->getType(); - } else { - $xmlRpcValue = AbstractValue::getXmlRpcValue($value); - $type = $xmlRpcValue->getType(); - } - } - $this->types[] = $type; - $this->xmlRpcParams[] = array('value' => $value, 'type' => $type); - } - - /** - * Set the parameters array - * - * If called with a single, array value, that array is used to set the - * parameters stack. If called with multiple values or a single non-array - * value, the arguments are used to set the parameters stack. - * - * Best is to call with array of the format, in order to allow type hinting - * when creating the XMLRPC values for each parameter: - * - * $array = array( - * array( - * 'value' => $value, - * 'type' => $type - * )[, ... ] - * ); - * - * - * @access public - * @return void - */ - public function setParams() - { - $argc = func_num_args(); - $argv = func_get_args(); - if (0 == $argc) { - return; - } - - if ((1 == $argc) && is_array($argv[0])) { - $params = array(); - $types = array(); - $wellFormed = true; - foreach ($argv[0] as $arg) { - if (!is_array($arg) || !isset($arg['value'])) { - $wellFormed = false; - break; - } - $params[] = $arg['value']; - - if (!isset($arg['type'])) { - $xmlRpcValue = AbstractValue::getXmlRpcValue($arg['value']); - $arg['type'] = $xmlRpcValue->getType(); - } - $types[] = $arg['type']; - } - if ($wellFormed) { - $this->xmlRpcParams = $argv[0]; - $this->params = $params; - $this->types = $types; - } else { - $this->params = $argv[0]; - $this->types = array(); - $xmlRpcParams = array(); - foreach ($argv[0] as $arg) { - if ($arg instanceof AbstractValue) { - $type = $arg->getType(); - } else { - $xmlRpcValue = AbstractValue::getXmlRpcValue($arg); - $type = $xmlRpcValue->getType(); - } - $xmlRpcParams[] = array('value' => $arg, 'type' => $type); - $this->types[] = $type; - } - $this->xmlRpcParams = $xmlRpcParams; - } - return; - } - - $this->params = $argv; - $this->types = array(); - $xmlRpcParams = array(); - foreach ($argv as $arg) { - if ($arg instanceof AbstractValue) { - $type = $arg->getType(); - } else { - $xmlRpcValue = AbstractValue::getXmlRpcValue($arg); - $type = $xmlRpcValue->getType(); - } - $xmlRpcParams[] = array('value' => $arg, 'type' => $type); - $this->types[] = $type; - } - $this->xmlRpcParams = $xmlRpcParams; - } - - /** - * Retrieve the array of parameters - * - * @return array - */ - public function getParams() - { - return $this->params; - } - - /** - * Return parameter types - * - * @return array - */ - public function getTypes() - { - return $this->types; - } - - /** - * Load XML and parse into request components - * - * @param string $request - * @throws Exception\ValueException if invalid XML - * @return bool True on success, false if an error occurred. - */ - public function loadXml($request) - { - if (!is_string($request)) { - $this->fault = new Fault(635); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - // @see ZF-12293 - disable external entities for security purposes - $loadEntities = libxml_disable_entity_loader(true); - $xmlErrorsFlag = libxml_use_internal_errors(true); - try { - $dom = new DOMDocument; - $dom->loadXML($request); - foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new Exception\ValueException( - 'Invalid XML: Detected use of illegal DOCTYPE' - ); - } - } - ErrorHandler::start(); - $xml = simplexml_import_dom($dom); - $error = ErrorHandler::stop(); - libxml_disable_entity_loader($loadEntities); - libxml_use_internal_errors($xmlErrorsFlag); - } catch (\Exception $e) { - // Not valid XML - $this->fault = new Fault(631); - $this->fault->setEncoding($this->getEncoding()); - libxml_disable_entity_loader($loadEntities); - libxml_use_internal_errors($xmlErrorsFlag); - return false; - } - if (!$xml instanceof SimpleXMLElement || $error) { - // Not valid XML - $this->fault = new Fault(631); - $this->fault->setEncoding($this->getEncoding()); - libxml_use_internal_errors($xmlErrorsFlag); - return false; - } - - // Check for method name - if (empty($xml->methodName)) { - // Missing method name - $this->fault = new Fault(632); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - $this->method = (string) $xml->methodName; - - // Check for parameters - if (!empty($xml->params)) { - $types = array(); - $argv = array(); - foreach ($xml->params->children() as $param) { - if (!isset($param->value)) { - $this->fault = new Fault(633); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - try { - $param = AbstractValue::getXmlRpcValue($param->value, AbstractValue::XML_STRING); - $types[] = $param->getType(); - $argv[] = $param->getValue(); - } catch (\Exception $e) { - $this->fault = new Fault(636); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - } - - $this->types = $types; - $this->params = $argv; - } - - $this->xml = $request; - - return true; - } - - /** - * Does the current request contain errors and should it return a fault - * response? - * - * @return bool - */ - public function isFault() - { - return $this->fault instanceof Fault; - } - - /** - * Retrieve the fault response, if any - * - * @return null|\Zend\XmlRpc\Fault - */ - public function getFault() - { - return $this->fault; - } - - /** - * Retrieve method parameters as XMLRPC values - * - * @return array - */ - protected function _getXmlRpcParams() - { - $params = array(); - if (is_array($this->xmlRpcParams)) { - foreach ($this->xmlRpcParams as $param) { - $value = $param['value']; - $type = $param['type'] ?: AbstractValue::AUTO_DETECT_TYPE; - - if (!$value instanceof AbstractValue) { - $value = AbstractValue::getXmlRpcValue($value, $type); - } - $params[] = $value; - } - } - - return $params; - } - - /** - * Create XML request - * - * @return string - */ - public function saveXml() - { - $args = $this->_getXmlRpcParams(); - $method = $this->getMethod(); - - $generator = AbstractValue::getGenerator(); - $generator->openElement('methodCall') - ->openElement('methodName', $method) - ->closeElement('methodName'); - - if (is_array($args) && count($args)) { - $generator->openElement('params'); - - foreach ($args as $arg) { - $generator->openElement('param'); - $arg->generateXml(); - $generator->closeElement('param'); - } - $generator->closeElement('params'); - } - $generator->closeElement('methodCall'); - - return $generator->flush(); - } - - /** - * Return XML request - * - * @return string - */ - public function __toString() - { - return $this->saveXML(); - } -} diff --git a/library/Zend/XmlRpc/Request/Http.php b/library/Zend/XmlRpc/Request/Http.php deleted file mode 100755 index d42a8331d..000000000 --- a/library/Zend/XmlRpc/Request/Http.php +++ /dev/null @@ -1,108 +0,0 @@ -fault = new Fault(630); - return; - } - - $this->xml = $xml; - - $this->loadXml($xml); - } - - /** - * Retrieve the raw XML request - * - * @return string - */ - public function getRawRequest() - { - return $this->xml; - } - - /** - * Get headers - * - * Gets all headers as key => value pairs and returns them. - * - * @return array - */ - public function getHeaders() - { - if (null === $this->headers) { - $this->headers = array(); - foreach ($_SERVER as $key => $value) { - if ('HTTP_' == substr($key, 0, 5)) { - $header = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($key, 5))))); - $this->headers[$header] = $value; - } - } - } - - return $this->headers; - } - - /** - * Retrieve the full HTTP request, including headers and XML - * - * @return string - */ - public function getFullRequest() - { - $request = ''; - foreach ($this->getHeaders() as $key => $value) { - $request .= $key . ': ' . $value . "\n"; - } - - $request .= $this->xml; - - return $request; - } -} diff --git a/library/Zend/XmlRpc/Request/Stdin.php b/library/Zend/XmlRpc/Request/Stdin.php deleted file mode 100755 index bcf748e95..000000000 --- a/library/Zend/XmlRpc/Request/Stdin.php +++ /dev/null @@ -1,66 +0,0 @@ -fault = new Fault(630); - return; - } - - $xml = ''; - while (!feof($fh)) { - $xml .= fgets($fh); - } - fclose($fh); - - $this->xml = $xml; - - $this->loadXml($xml); - } - - /** - * Retrieve the raw XML request - * - * @return string - */ - public function getRawRequest() - { - return $this->xml; - } -} diff --git a/library/Zend/XmlRpc/Response.php b/library/Zend/XmlRpc/Response.php deleted file mode 100755 index f8537584e..000000000 --- a/library/Zend/XmlRpc/Response.php +++ /dev/null @@ -1,224 +0,0 @@ -setReturnValue($return, $type); - } - - /** - * Set encoding to use in response - * - * @param string $encoding - * @return \Zend\XmlRpc\Response - */ - public function setEncoding($encoding) - { - $this->encoding = $encoding; - AbstractValue::setEncoding($encoding); - return $this; - } - - /** - * Retrieve current response encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set the return value - * - * Sets the return value, with optional type hinting if provided. - * - * @param mixed $value - * @param string $type - * @return void - */ - public function setReturnValue($value, $type = null) - { - $this->return = $value; - $this->type = (string) $type; - } - - /** - * Retrieve the return value - * - * @return mixed - */ - public function getReturnValue() - { - return $this->return; - } - - /** - * Retrieve the XMLRPC value for the return value - * - * @return \Zend\XmlRpc\AbstractValue - */ - protected function _getXmlRpcReturn() - { - return AbstractValue::getXmlRpcValue($this->return); - } - - /** - * Is the response a fault response? - * - * @return bool - */ - public function isFault() - { - return $this->fault instanceof Fault; - } - - /** - * Returns the fault, if any. - * - * @return null|\Zend\XmlRpc\Fault - */ - public function getFault() - { - return $this->fault; - } - - /** - * Load a response from an XML response - * - * Attempts to load a response from an XMLRPC response, autodetecting if it - * is a fault response. - * - * @param string $response - * @throws Exception\ValueException if invalid XML - * @return bool True if a valid XMLRPC response, false if a fault - * response or invalid input - */ - public function loadXml($response) - { - if (!is_string($response)) { - $this->fault = new Fault(650); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - try { - $xml = XmlSecurity::scan($response); - } catch (\ZendXml\Exception\RuntimeException $e) { - $this->fault = new Fault(651); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - if (!empty($xml->fault)) { - // fault response - $this->fault = new Fault(); - $this->fault->setEncoding($this->getEncoding()); - $this->fault->loadXml($response); - return false; - } - - if (empty($xml->params)) { - // Invalid response - $this->fault = new Fault(652); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - try { - if (!isset($xml->params) || !isset($xml->params->param) || !isset($xml->params->param->value)) { - throw new Exception\ValueException('Missing XML-RPC value in XML'); - } - $valueXml = $xml->params->param->value->asXML(); - $value = AbstractValue::getXmlRpcValue($valueXml, AbstractValue::XML_STRING); - } catch (Exception\ValueException $e) { - $this->fault = new Fault(653); - $this->fault->setEncoding($this->getEncoding()); - return false; - } - - $this->setReturnValue($value->getValue()); - return true; - } - - /** - * Return response as XML - * - * @return string - */ - public function saveXml() - { - $value = $this->_getXmlRpcReturn(); - $generator = AbstractValue::getGenerator(); - $generator->openElement('methodResponse') - ->openElement('params') - ->openElement('param'); - $value->generateXml(); - $generator->closeElement('param') - ->closeElement('params') - ->closeElement('methodResponse'); - - return $generator->flush(); - } - - /** - * Return XML response - * - * @return string - */ - public function __toString() - { - return $this->saveXML(); - } -} diff --git a/library/Zend/XmlRpc/Response/Http.php b/library/Zend/XmlRpc/Response/Http.php deleted file mode 100755 index 00ae07cc9..000000000 --- a/library/Zend/XmlRpc/Response/Http.php +++ /dev/null @@ -1,32 +0,0 @@ -getEncoding())); - } - - return parent::__toString(); - } -} diff --git a/library/Zend/XmlRpc/Server.php b/library/Zend/XmlRpc/Server.php deleted file mode 100755 index e2cfcea6b..000000000 --- a/library/Zend/XmlRpc/Server.php +++ /dev/null @@ -1,609 +0,0 @@ - - * use Zend\XmlRpc; - * - * // Instantiate server - * $server = new XmlRpc\Server(); - * - * // Allow some exceptions to report as fault responses: - * XmlRpc\Server\Fault::attachFaultException('My\\Exception'); - * XmlRpc\Server\Fault::attachObserver('My\\Fault\\Observer'); - * - * // Get or build dispatch table: - * if (!XmlRpc\Server\Cache::get($filename, $server)) { - * - * // Attach Some_Service_Class in 'some' namespace - * $server->setClass('Some\\Service\\Class', 'some'); - * - * // Attach Another_Service_Class in 'another' namespace - * $server->setClass('Another\\Service\\Class', 'another'); - * - * // Create dispatch table cache file - * XmlRpc\Server\Cache::save($filename, $server); - * } - * - * $response = $server->handle(); - * echo $response; - * - */ -class Server extends AbstractServer -{ - /** - * Character encoding - * @var string - */ - protected $encoding = 'UTF-8'; - - /** - * Request processed - * @var null|Request - */ - protected $request = null; - - /** - * Class to use for responses; defaults to {@link Response\Http} - * @var string - */ - protected $responseClass = 'Zend\XmlRpc\Response\Http'; - - /** - * Dispatch table of name => method pairs - * @var Definition - */ - protected $table; - - /** - * PHP types => XML-RPC types - * @var array - */ - protected $typeMap = array( - 'i4' => 'i4', - 'int' => 'int', - 'integer' => 'int', - 'i8' => 'i8', - 'ex:i8' => 'i8', - 'double' => 'double', - 'float' => 'double', - 'real' => 'double', - 'boolean' => 'boolean', - 'bool' => 'boolean', - 'true' => 'boolean', - 'false' => 'boolean', - 'string' => 'string', - 'str' => 'string', - 'base64' => 'base64', - 'dateTime.iso8601' => 'dateTime.iso8601', - 'date' => 'dateTime.iso8601', - 'time' => 'dateTime.iso8601', - 'DateTime' => 'dateTime.iso8601', - 'array' => 'array', - 'struct' => 'struct', - 'null' => 'nil', - 'nil' => 'nil', - 'ex:nil' => 'nil', - 'void' => 'void', - 'mixed' => 'struct', - ); - - /** - * Send arguments to all methods or just constructor? - * - * @var bool - */ - protected $sendArgumentsToAllMethods = true; - - /** - * Flag: whether or not {@link handle()} should return a response instead - * of automatically emitting it. - * @var bool - */ - protected $returnResponse = false; - - /** - * Last response results. - * @var Response - */ - protected $response; - - /** - * Constructor - * - * Creates system.* methods. - * - */ - public function __construct() - { - $this->table = new Definition(); - $this->registerSystemMethods(); - } - - /** - * Proxy calls to system object - * - * @param string $method - * @param array $params - * @return mixed - * @throws Server\Exception\BadMethodCallException - */ - public function __call($method, $params) - { - $system = $this->getSystem(); - if (!method_exists($system, $method)) { - throw new Server\Exception\BadMethodCallException('Unknown instance method called on server: ' . $method); - } - return call_user_func_array(array($system, $method), $params); - } - - /** - * Attach a callback as an XMLRPC method - * - * Attaches a callback as an XMLRPC method, prefixing the XMLRPC method name - * with $namespace, if provided. Reflection is done on the callback's - * docblock to create the methodHelp for the XMLRPC method. - * - * Additional arguments to pass to the function at dispatch may be passed; - * any arguments following the namespace will be aggregated and passed at - * dispatch time. - * - * @param string|array|callable $function Valid callback - * @param string $namespace Optional namespace prefix - * @throws Server\Exception\InvalidArgumentException - * @return void - */ - public function addFunction($function, $namespace = '') - { - if (!is_string($function) && !is_array($function)) { - throw new Server\Exception\InvalidArgumentException('Unable to attach function; invalid', 611); - } - - $argv = null; - if (2 < func_num_args()) { - $argv = func_get_args(); - $argv = array_slice($argv, 2); - } - - $function = (array) $function; - foreach ($function as $func) { - if (!is_string($func) || !function_exists($func)) { - throw new Server\Exception\InvalidArgumentException('Unable to attach function; invalid', 611); - } - $reflection = Reflection::reflectFunction($func, $argv, $namespace); - $this->_buildSignature($reflection); - } - } - - /** - * Attach class methods as XMLRPC method handlers - * - * $class may be either a class name or an object. Reflection is done on the - * class or object to determine the available public methods, and each is - * attached to the server as an available method; if a $namespace has been - * provided, that namespace is used to prefix the XMLRPC method names. - * - * Any additional arguments beyond $namespace will be passed to a method at - * invocation. - * - * @param string|object $class - * @param string $namespace Optional - * @param mixed $argv Optional arguments to pass to methods - * @return void - * @throws Server\Exception\InvalidArgumentException on invalid input - */ - public function setClass($class, $namespace = '', $argv = null) - { - if (is_string($class) && !class_exists($class)) { - throw new Server\Exception\InvalidArgumentException('Invalid method class', 610); - } - - if (2 < func_num_args()) { - $argv = func_get_args(); - $argv = array_slice($argv, 2); - } - - $dispatchable = Reflection::reflectClass($class, $argv, $namespace); - foreach ($dispatchable->getMethods() as $reflection) { - $this->_buildSignature($reflection, $class); - } - } - - /** - * Raise an xmlrpc server fault - * - * @param string|\Exception $fault - * @param int $code - * @return Server\Fault - */ - public function fault($fault = null, $code = 404) - { - if (!$fault instanceof \Exception) { - $fault = (string) $fault; - if (empty($fault)) { - $fault = 'Unknown Error'; - } - $fault = new Server\Exception\RuntimeException($fault, $code); - } - - return Server\Fault::getInstance($fault); - } - - /** - * Set return response flag - * - * If true, {@link handle()} will return the response instead of - * automatically sending it back to the requesting client. - * - * The response is always available via {@link getResponse()}. - * - * @param bool $flag - * @return Server - */ - public function setReturnResponse($flag = true) - { - $this->returnResponse = ($flag) ? true : false; - return $this; - } - - /** - * Retrieve return response flag - * - * @return bool - */ - public function getReturnResponse() - { - return $this->returnResponse; - } - - /** - * Handle an xmlrpc call - * - * @param Request $request Optional - * @return Response|Fault - */ - public function handle($request = false) - { - // Get request - if ((!$request || !$request instanceof Request) - && (null === ($request = $this->getRequest())) - ) { - $request = new Request\Http(); - $request->setEncoding($this->getEncoding()); - } - - $this->setRequest($request); - - if ($request->isFault()) { - $response = $request->getFault(); - } else { - try { - $response = $this->handleRequest($request); - } catch (\Exception $e) { - $response = $this->fault($e); - } - } - - // Set output encoding - $response->setEncoding($this->getEncoding()); - $this->response = $response; - - if (!$this->returnResponse) { - echo $response; - return; - } - - return $response; - } - - /** - * Load methods as returned from {@link getFunctions} - * - * Typically, you will not use this method; it will be called using the - * results pulled from {@link Zend\XmlRpc\Server\Cache::get()}. - * - * @param array|Definition $definition - * @return void - * @throws Server\Exception\InvalidArgumentException on invalid input - */ - public function loadFunctions($definition) - { - if (!is_array($definition) && (!$definition instanceof Definition)) { - if (is_object($definition)) { - $type = get_class($definition); - } else { - $type = gettype($definition); - } - throw new Server\Exception\InvalidArgumentException('Unable to load server definition; must be an array or Zend\Server\Definition, received ' . $type, 612); - } - - $this->table->clearMethods(); - $this->registerSystemMethods(); - - if ($definition instanceof Definition) { - $definition = $definition->getMethods(); - } - - foreach ($definition as $key => $method) { - if ('system.' == substr($key, 0, 7)) { - continue; - } - $this->table->addMethod($method, $key); - } - } - - /** - * Set encoding - * - * @param string $encoding - * @return Server - */ - public function setEncoding($encoding) - { - $this->encoding = $encoding; - AbstractValue::setEncoding($encoding); - return $this; - } - - /** - * Retrieve current encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Do nothing; persistence is handled via {@link Zend\XmlRpc\Server\Cache} - * - * @param mixed $mode - * @return void - */ - public function setPersistence($mode) - { - } - - /** - * Set the request object - * - * @param string|Request $request - * @return Server - * @throws Server\Exception\InvalidArgumentException on invalid request class or object - */ - public function setRequest($request) - { - if (is_string($request) && class_exists($request)) { - $request = new $request(); - if (!$request instanceof Request) { - throw new Server\Exception\InvalidArgumentException('Invalid request class'); - } - $request->setEncoding($this->getEncoding()); - } elseif (!$request instanceof Request) { - throw new Server\Exception\InvalidArgumentException('Invalid request object'); - } - - $this->request = $request; - return $this; - } - - /** - * Return currently registered request object - * - * @return null|Request - */ - public function getRequest() - { - return $this->request; - } - - /** - * Last response. - * - * @return Response - */ - public function getResponse() - { - return $this->response; - } - - /** - * Set the class to use for the response - * - * @param string $class - * @throws Server\Exception\InvalidArgumentException if invalid response class - * @return bool True if class was set, false if not - */ - public function setResponseClass($class) - { - if (!class_exists($class) || !static::isSubclassOf($class, 'Zend\XmlRpc\Response')) { - throw new Server\Exception\InvalidArgumentException('Invalid response class'); - } - $this->responseClass = $class; - return true; - } - - /** - * Retrieve current response class - * - * @return string - */ - public function getResponseClass() - { - return $this->responseClass; - } - - /** - * Retrieve dispatch table - * - * @return array - */ - public function getDispatchTable() - { - return $this->table; - } - - /** - * Returns a list of registered methods - * - * Returns an array of dispatchables (Zend\Server\Reflection\ReflectionFunction, - * ReflectionMethod, and ReflectionClass items). - * - * @return array - */ - public function getFunctions() - { - return $this->table->toArray(); - } - - /** - * Retrieve system object - * - * @return Server\System - */ - public function getSystem() - { - return $this->system; - } - - /** - * Send arguments to all methods? - * - * If setClass() is used to add classes to the server, this flag defined - * how to handle arguments. If set to true, all methods including constructor - * will receive the arguments. If set to false, only constructor will receive the - * arguments - */ - public function sendArgumentsToAllMethods($flag = null) - { - if ($flag === null) { - return $this->sendArgumentsToAllMethods; - } - - $this->sendArgumentsToAllMethods = (bool) $flag; - return $this; - } - - /** - * Map PHP type to XML-RPC type - * - * @param string $type - * @return string - */ - protected function _fixType($type) - { - if (isset($this->typeMap[$type])) { - return $this->typeMap[$type]; - } - return 'void'; - } - - /** - * Handle an xmlrpc call (actual work) - * - * @param Request $request - * @return Response - * @throws Server\Exception\RuntimeException - * Zend\XmlRpc\Server\Exceptions are thrown for internal errors; otherwise, - * any other exception may be thrown by the callback - */ - protected function handleRequest(Request $request) - { - $method = $request->getMethod(); - - // Check for valid method - if (!$this->table->hasMethod($method)) { - throw new Server\Exception\RuntimeException('Method "' . $method . '" does not exist', 620); - } - - $info = $this->table->getMethod($method); - $params = $request->getParams(); - $argv = $info->getInvokeArguments(); - if (0 < count($argv) and $this->sendArgumentsToAllMethods()) { - $params = array_merge($params, $argv); - } - - // Check calling parameters against signatures - $matched = false; - $sigCalled = $request->getTypes(); - - $sigLength = count($sigCalled); - $paramsLen = count($params); - if ($sigLength < $paramsLen) { - for ($i = $sigLength; $i < $paramsLen; ++$i) { - $xmlRpcValue = AbstractValue::getXmlRpcValue($params[$i]); - $sigCalled[] = $xmlRpcValue->getType(); - } - } - - $signatures = $info->getPrototypes(); - foreach ($signatures as $signature) { - $sigParams = $signature->getParameters(); - if ($sigCalled === $sigParams) { - $matched = true; - break; - } - } - if (!$matched) { - throw new Server\Exception\RuntimeException('Calling parameters do not match signature', 623); - } - - $return = $this->_dispatch($info, $params); - $responseClass = $this->getResponseClass(); - return new $responseClass($return); - } - - /** - * Register system methods with the server - * - * @return void - */ - protected function registerSystemMethods() - { - $system = new Server\System($this); - $this->system = $system; - $this->setClass($system, 'system'); - } - - /** - * Checks if the object has this class as one of its parents - * - * @see https://bugs.php.net/bug.php?id=53727 - * @see https://github.com/zendframework/zf2/pull/1807 - * - * @param string $className - * @param string $type - * @return bool - */ - protected static function isSubclassOf($className, $type) - { - if (is_subclass_of($className, $type)) { - return true; - } - if (PHP_VERSION_ID >= 50307) { - return false; - } - if (!interface_exists($type)) { - return false; - } - $r = new ReflectionClass($className); - return $r->implementsInterface($type); - } -} diff --git a/library/Zend/XmlRpc/Server/Cache.php b/library/Zend/XmlRpc/Server/Cache.php deleted file mode 100755 index f4e643ea6..000000000 --- a/library/Zend/XmlRpc/Server/Cache.php +++ /dev/null @@ -1,26 +0,0 @@ - true); - - /** - * @var array Array of fault observers - */ - protected static $observers = array(); - - /** - * Constructor - * - * @param \Exception $e - * @return Fault - */ - public function __construct(\Exception $e) - { - $this->exception = $e; - $code = 404; - $message = 'Unknown error'; - - foreach (array_keys(static::$faultExceptionClasses) as $class) { - if ($e instanceof $class) { - $code = $e->getCode(); - $message = $e->getMessage(); - break; - } - } - - parent::__construct($code, $message); - - // Notify exception observers, if present - if (!empty(static::$observers)) { - foreach (array_keys(static::$observers) as $observer) { - $observer::observe($this); - } - } - } - - /** - * Return Zend\XmlRpc\Server\Fault instance - * - * @param \Exception $e - * @return Fault - */ - public static function getInstance(\Exception $e) - { - return new static($e); - } - - /** - * Attach valid exceptions that can be used to define xmlrpc faults - * - * @param string|array $classes Class name or array of class names - * @return void - */ - public static function attachFaultException($classes) - { - if (!is_array($classes)) { - $classes = (array) $classes; - } - - foreach ($classes as $class) { - if (is_string($class) && class_exists($class)) { - static::$faultExceptionClasses[$class] = true; - } - } - } - - /** - * Detach fault exception classes - * - * @param string|array $classes Class name or array of class names - * @return void - */ - public static function detachFaultException($classes) - { - if (!is_array($classes)) { - $classes = (array) $classes; - } - - foreach ($classes as $class) { - if (is_string($class) && isset(static::$faultExceptionClasses[$class])) { - unset(static::$faultExceptionClasses[$class]); - } - } - } - - /** - * Attach an observer class - * - * Allows observation of xmlrpc server faults, thus allowing logging or mail - * notification of fault responses on the xmlrpc server. - * - * Expects a valid class name; that class must have a public static method - * 'observe' that accepts an exception as its sole argument. - * - * @param string $class - * @return bool - */ - public static function attachObserver($class) - { - if (!is_string($class) - || !class_exists($class) - || !is_callable(array($class, 'observe')) - ) { - return false; - } - - if (!isset(static::$observers[$class])) { - static::$observers[$class] = true; - } - - return true; - } - - /** - * Detach an observer - * - * @param string $class - * @return bool - */ - public static function detachObserver($class) - { - if (!isset(static::$observers[$class])) { - return false; - } - - unset(static::$observers[$class]); - return true; - } - - /** - * Retrieve the exception - * - * @access public - * @return \Exception - */ - public function getException() - { - return $this->exception; - } -} diff --git a/library/Zend/XmlRpc/Server/System.php b/library/Zend/XmlRpc/Server/System.php deleted file mode 100755 index 8a57838b1..000000000 --- a/library/Zend/XmlRpc/Server/System.php +++ /dev/null @@ -1,144 +0,0 @@ -server = $server; - } - - /** - * List all available XMLRPC methods - * - * Returns an array of methods. - * - * @return array - */ - public function listMethods() - { - $table = $this->server->getDispatchTable()->getMethods(); - return array_keys($table); - } - - /** - * Display help message for an XMLRPC method - * - * @param string $method - * @throws Exception\InvalidArgumentException - * @return string - */ - public function methodHelp($method) - { - $table = $this->server->getDispatchTable(); - if (!$table->hasMethod($method)) { - throw new Exception\InvalidArgumentException('Method "' . $method . '" does not exist', 640); - } - - return $table->getMethod($method)->getMethodHelp(); - } - - /** - * Return a method signature - * - * @param string $method - * @throws Exception\InvalidArgumentException - * @return array - */ - public function methodSignature($method) - { - $table = $this->server->getDispatchTable(); - if (!$table->hasMethod($method)) { - throw new Exception\InvalidArgumentException('Method "' . $method . '" does not exist', 640); - } - $method = $table->getMethod($method)->toArray(); - return $method['prototypes']; - } - - /** - * Multicall - boxcar feature of XML-RPC for calling multiple methods - * in a single request. - * - * Expects an array of structs representing method calls, each element - * having the keys: - * - methodName - * - params - * - * Returns an array of responses, one for each method called, with the value - * returned by the method. If an error occurs for a given method, returns a - * struct with a fault response. - * - * @see http://www.xmlrpc.com/discuss/msgReader$1208 - * @param array $methods - * @return array - */ - public function multicall($methods) - { - $responses = array(); - foreach ($methods as $method) { - $fault = false; - if (!is_array($method)) { - $fault = $this->server->fault('system.multicall expects each method to be a struct', 601); - } elseif (!isset($method['methodName'])) { - $fault = $this->server->fault('Missing methodName: ' . var_export($methods, 1), 602); - } elseif (!isset($method['params'])) { - $fault = $this->server->fault('Missing params', 603); - } elseif (!is_array($method['params'])) { - $fault = $this->server->fault('Params must be an array', 604); - } else { - if ('system.multicall' == $method['methodName']) { - // don't allow recursive calls to multicall - $fault = $this->server->fault('Recursive system.multicall forbidden', 605); - } - } - - if (!$fault) { - try { - $request = new \Zend\XmlRpc\Request(); - $request->setMethod($method['methodName']); - $request->setParams($method['params']); - $response = $this->server->handle($request); - if ($response instanceof \Zend\XmlRpc\Fault - || $response->isFault() - ) { - $fault = $response; - } else { - $responses[] = $response->getReturnValue(); - } - } catch (\Exception $e) { - $fault = $this->server->fault($e); - } - } - - if ($fault) { - $responses[] = array( - 'faultCode' => $fault->getCode(), - 'faultString' => $fault->getMessage() - ); - } - } - - return $responses; - } -} diff --git a/library/Zend/XmlRpc/Value/AbstractCollection.php b/library/Zend/XmlRpc/Value/AbstractCollection.php deleted file mode 100755 index ed4f8193f..000000000 --- a/library/Zend/XmlRpc/Value/AbstractCollection.php +++ /dev/null @@ -1,48 +0,0 @@ - $value) { - // If the elements of the given array are not Zend\XmlRpc\Value objects, - // we need to convert them as such (using auto-detection from PHP value) - if (!$value instanceof parent) { - $value = static::getXmlRpcValue($value, self::AUTO_DETECT_TYPE); - } - $this->value[$key] = $value; - } - } - - - /** - * Return the value of this object, convert the XML-RPC native collection values into a PHP array - * - * @return array - */ - public function getValue() - { - $values = (array) $this->value; - foreach ($values as $key => $value) { - $values[$key] = $value->getValue(); - } - return $values; - } -} diff --git a/library/Zend/XmlRpc/Value/AbstractScalar.php b/library/Zend/XmlRpc/Value/AbstractScalar.php deleted file mode 100755 index 3e7b8eacb..000000000 --- a/library/Zend/XmlRpc/Value/AbstractScalar.php +++ /dev/null @@ -1,30 +0,0 @@ -getGenerator(); - - $generator->openElement('value') - ->openElement($this->type, $this->value) - ->closeElement($this->type) - ->closeElement('value'); - } -} diff --git a/library/Zend/XmlRpc/Value/ArrayValue.php b/library/Zend/XmlRpc/Value/ArrayValue.php deleted file mode 100755 index 99d77437b..000000000 --- a/library/Zend/XmlRpc/Value/ArrayValue.php +++ /dev/null @@ -1,47 +0,0 @@ -type = self::XMLRPC_TYPE_ARRAY; - parent::__construct($value); - } - - - /** - * Generate the XML code that represent an array native MXL-RPC value - * - * @return void - */ - protected function _generateXml() - { - $generator = $this->getGenerator(); - $generator->openElement('value') - ->openElement('array') - ->openElement('data'); - - if (is_array($this->value)) { - foreach ($this->value as $val) { - $val->generateXml(); - } - } - $generator->closeElement('data') - ->closeElement('array') - ->closeElement('value'); - } -} diff --git a/library/Zend/XmlRpc/Value/Base64.php b/library/Zend/XmlRpc/Value/Base64.php deleted file mode 100755 index 9ba44acea..000000000 --- a/library/Zend/XmlRpc/Value/Base64.php +++ /dev/null @@ -1,42 +0,0 @@ -type = self::XMLRPC_TYPE_BASE64; - - $value = (string) $value; // Make sure this value is string - if (!$alreadyEncoded) { - $value = base64_encode($value); // We encode it in base64 - } - $this->value = $value; - } - - /** - * Return the value of this object, convert the XML-RPC native base64 value into a PHP string - * We return this value decoded (a normal string) - * - * @return string - */ - public function getValue() - { - return base64_decode($this->value); - } -} diff --git a/library/Zend/XmlRpc/Value/BigInteger.php b/library/Zend/XmlRpc/Value/BigInteger.php deleted file mode 100755 index e85ef9537..000000000 --- a/library/Zend/XmlRpc/Value/BigInteger.php +++ /dev/null @@ -1,34 +0,0 @@ -value = BigIntegerMath::factory()->init($value, 10); - $this->type = self::XMLRPC_TYPE_I8; - } - - /** - * Return bigint value object - * - * @return string - */ - public function getValue() - { - return $this->value; - } -} diff --git a/library/Zend/XmlRpc/Value/Boolean.php b/library/Zend/XmlRpc/Value/Boolean.php deleted file mode 100755 index 5ec6b7932..000000000 --- a/library/Zend/XmlRpc/Value/Boolean.php +++ /dev/null @@ -1,37 +0,0 @@ -type = self::XMLRPC_TYPE_BOOLEAN; - // Make sure the value is boolean and then convert it into an integer - // The double conversion is because a bug in the ZendOptimizer in PHP version 5.0.4 - $this->value = (int)(bool) $value; - } - - /** - * Return the value of this object, convert the XML-RPC native boolean value into a PHP boolean - * - * @return bool - */ - public function getValue() - { - return (bool) $this->value; - } -} diff --git a/library/Zend/XmlRpc/Value/DateTime.php b/library/Zend/XmlRpc/Value/DateTime.php deleted file mode 100755 index 9ec7253e6..000000000 --- a/library/Zend/XmlRpc/Value/DateTime.php +++ /dev/null @@ -1,67 +0,0 @@ -type = self::XMLRPC_TYPE_DATETIME; - - if ($value instanceof \DateTime) { - $this->value = $value->format($this->phpFormatString); - } elseif (is_numeric($value)) { // The value is numeric, we make sure it is an integer - $this->value = date($this->phpFormatString, (int) $value); - } else { - try { - $dateTime = new \DateTime($value); - } catch (\Exception $e) { - throw new Exception\ValueException($e->getMessage(), $e->getCode(), $e); - } - - $this->value = $dateTime->format($this->phpFormatString); // Convert the DateTime to iso8601 format - } - } - - /** - * Return the value of this object as iso8601 dateTime value - * - * @return int As a Unix timestamp - */ - public function getValue() - { - return $this->value; - } -} diff --git a/library/Zend/XmlRpc/Value/Double.php b/library/Zend/XmlRpc/Value/Double.php deleted file mode 100755 index 722012000..000000000 --- a/library/Zend/XmlRpc/Value/Double.php +++ /dev/null @@ -1,36 +0,0 @@ -type = self::XMLRPC_TYPE_DOUBLE; - $precision = (int) ini_get('precision'); - $formatString = '%1.' . $precision . 'F'; - $this->value = rtrim(sprintf($formatString, (float) $value), '0'); - } - - /** - * Return the value of this object, convert the XML-RPC native double value into a PHP float - * - * @return float - */ - public function getValue() - { - return (float) $this->value; - } -} diff --git a/library/Zend/XmlRpc/Value/Integer.php b/library/Zend/XmlRpc/Value/Integer.php deleted file mode 100755 index 40d938664..000000000 --- a/library/Zend/XmlRpc/Value/Integer.php +++ /dev/null @@ -1,41 +0,0 @@ - PHP_INT_MAX) { - throw new Exception\ValueException('Overlong integer given'); - } - - $this->type = self::XMLRPC_TYPE_INTEGER; - $this->value = (int) $value; // Make sure this value is integer - } - - /** - * Return the value of this object, convert the XML-RPC native integer value into a PHP integer - * - * @return int - */ - public function getValue() - { - return $this->value; - } -} diff --git a/library/Zend/XmlRpc/Value/Nil.php b/library/Zend/XmlRpc/Value/Nil.php deleted file mode 100755 index 49f3c7511..000000000 --- a/library/Zend/XmlRpc/Value/Nil.php +++ /dev/null @@ -1,33 +0,0 @@ -type = self::XMLRPC_TYPE_NIL; - $this->value = null; - } - - /** - * Return the value of this object, convert the XML-RPC native nill value into a PHP NULL - * - * @return null - */ - public function getValue() - { - return null; - } -} diff --git a/library/Zend/XmlRpc/Value/String.php b/library/Zend/XmlRpc/Value/String.php deleted file mode 100755 index 66fa441b0..000000000 --- a/library/Zend/XmlRpc/Value/String.php +++ /dev/null @@ -1,36 +0,0 @@ -type = self::XMLRPC_TYPE_STRING; - - // Make sure this value is string and all XML characters are encoded - $this->value = (string) $value; - } - - /** - * Return the value of this object, convert the XML-RPC native string value into a PHP string - * - * @return string - */ - public function getValue() - { - return (string) $this->value; - } -} diff --git a/library/Zend/XmlRpc/Value/Struct.php b/library/Zend/XmlRpc/Value/Struct.php deleted file mode 100755 index 99d55bb84..000000000 --- a/library/Zend/XmlRpc/Value/Struct.php +++ /dev/null @@ -1,49 +0,0 @@ -type = self::XMLRPC_TYPE_STRUCT; - parent::__construct($value); - } - - - /** - * Generate the XML code that represent struct native MXL-RPC value - * - * @return void - */ - protected function _generateXML() - { - $generator = $this->getGenerator(); - $generator->openElement('value') - ->openElement('struct'); - - if (is_array($this->value)) { - foreach ($this->value as $name => $val) { - $generator->openElement('member') - ->openElement('name', $name) - ->closeElement('name'); - $val->generateXml(); - $generator->closeElement('member'); - } - } - $generator->closeElement('struct') - ->closeElement('value'); - } -} diff --git a/library/Zend/XmlRpc/composer.json b/library/Zend/XmlRpc/composer.json deleted file mode 100755 index 1520a41e4..000000000 --- a/library/Zend/XmlRpc/composer.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "zendframework/zend-xmlrpc", - "description": " ", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "xmlrpc" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\XmlRpc\\": "" - } - }, - "target-dir": "Zend/XmlRpc", - "require": { - "php": ">=5.3.23", - "zendframework/zend-http": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-server": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zendxml": "1.*" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/library/ajax/change_user_opt.php b/library/ajax/change_user_opt.php index be24948f0..50617ea06 100644 --- a/library/ajax/change_user_opt.php +++ b/library/ajax/change_user_opt.php @@ -30,7 +30,7 @@ if (!defined('IN_AJAX')) { global $bf, $lang; $user_id = (int)$this->request['user_id']; -$new_opt = Zend\Json\Json::decode($this->request['user_opt'], Zend\Json\Json::TYPE_ARRAY); +$new_opt = json_decode($this->request['user_opt'], true); if (!$user_id or !$u_data = get_userdata($user_id)) { $this->ajax_die('invalid user_id'); diff --git a/library/config.php b/library/config.php index e17c63c20..efc03b855 100644 --- a/library/config.php +++ b/library/config.php @@ -100,7 +100,6 @@ $domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $do $bb_cfg['tp_version'] = '2.1.6'; $bb_cfg['tp_release_date'] = '**-02-2017'; $bb_cfg['tp_release_state'] = 'STABLE'; -$bb_cfg['tp_zf_version'] = '2.3.3'; // Database $charset = 'utf8'; diff --git a/library/includes/functions.php b/library/includes/functions.php index d23134b78..cc18f3e55 100644 --- a/library/includes/functions.php +++ b/library/includes/functions.php @@ -2113,7 +2113,7 @@ function get_poll_data_items_js($topic_id) $items[$row['topic_id']][$row['vote_id']] = array($opt_text_for_js, $opt_result_for_js); } foreach ($items as $k => $v) { - $items[$k] = Zend\Json\Json::encode($v); + $items[$k] = json_encode($v); } return is_array($topic_id) ? $items : $items[$topic_id]; diff --git a/library/includes/page_header.php b/library/includes/page_header.php index 33a6e15ca..b675433c7 100644 --- a/library/includes/page_header.php +++ b/library/includes/page_header.php @@ -134,7 +134,7 @@ $template->assign_vars(array( 'USER_LANG' => $userdata['user_lang'], 'INCLUDE_BBCODE_JS' => !empty($page_cfg['include_bbcode_js']), - 'USER_OPTIONS_JS' => (IS_GUEST) ? '{}' : Zend\Json\Json::encode($user->opt_js), + 'USER_OPTIONS_JS' => (IS_GUEST) ? '{}' : json_encode($user->opt_js), 'USE_TABLESORTER' => !empty($page_cfg['use_tablesorter']), diff --git a/library/includes/sessions.php b/library/includes/sessions.php index 2bffe2cb7..466e11389 100644 --- a/library/includes/sessions.php +++ b/library/includes/sessions.php @@ -615,7 +615,7 @@ class user_common if (IS_GUEST) { $this->opt_js = array_merge($this->opt_js, $this->opt_js_guest); } elseif (!empty($_COOKIE['opt_js'])) { - $opt_js = Zend\Json\Json::decode($_COOKIE['opt_js'], Zend\Json\Json::TYPE_ARRAY); + $opt_js = json_decode($_COOKIE['opt_js'], true); if (is_array($opt_js)) { $this->opt_js = array_merge($this->opt_js, $opt_js); diff --git a/library/includes/ucp/viewprofile.php b/library/includes/ucp/viewprofile.php index b422442b2..b005ce5c1 100644 --- a/library/includes/ucp/viewprofile.php +++ b/library/includes/ucp/viewprofile.php @@ -190,7 +190,7 @@ if (IS_AM || $profile_user_id) { } if (IS_ADMIN) { - $ajax_user_opt = Zend\Json\Json::encode(array( + $ajax_user_opt = json_encode(array( 'dis_avatar' => bf($profiledata['user_opt'], 'user_opt', 'dis_avatar'), 'dis_sig' => bf($profiledata['user_opt'], 'user_opt', 'dis_sig'), 'dis_passkey' => bf($profiledata['user_opt'], 'user_opt', 'dis_passkey'), diff --git a/library/language/en/main.php b/library/language/en/main.php index 6b1f6519c..11bed01cf 100644 --- a/library/language/en/main.php +++ b/library/language/en/main.php @@ -1633,7 +1633,6 @@ $lang['CREATE_PROFILE'] = 'Create profile'; $lang['TP_VERSION'] = 'TorrentPier version'; $lang['TP_RELEASE_DATE'] = 'Release date'; -$lang['ZF_VERSION'] = 'Zend Framework version'; $lang['PHP_INFO'] = 'Information about PHP'; $lang['CLICK_RETURN_ADMIN_INDEX'] = 'Click %sHere%s to return to the Admin Index'; diff --git a/library/language/ru/main.php b/library/language/ru/main.php index 482c91ad7..a1e9836a8 100644 --- a/library/language/ru/main.php +++ b/library/language/ru/main.php @@ -1633,7 +1633,6 @@ $lang['CREATE_PROFILE'] = 'Создать аккаунт'; $lang['TP_VERSION'] = 'Версия TorrentPier'; $lang['TP_RELEASE_DATE'] = 'Дата выпуска'; -$lang['ZF_VERSION'] = 'Версия Zend Framework'; $lang['PHP_INFO'] = 'Информация о PHP'; $lang['CLICK_RETURN_ADMIN_INDEX'] = '%sВернуться на главную страницу администраторского раздела%s'; diff --git a/library/language/uk/main.php b/library/language/uk/main.php index 2ed981dc5..ded12a1ca 100644 --- a/library/language/uk/main.php +++ b/library/language/uk/main.php @@ -1633,7 +1633,6 @@ $lang['CREATE_PROFILE'] = 'Створити акаунт'; $lang['TP_VERSION'] = 'Версія TorrentPier'; $lang['TP_RELEASE_DATE'] = 'Дата випуску'; -$lang['ZF_VERSION'] = 'Версія Zend Framework'; $lang['PHP_INFO'] = 'Інформація про PHP'; $lang['CLICK_RETURN_ADMIN_INDEX'] = '%sВернуться на головну сторінку адміністраторського розділу%s'; diff --git a/styles/templates/admin/index.tpl b/styles/templates/admin/index.tpl index 56585ab2d..ecd8d6bed 100644 --- a/styles/templates/admin/index.tpl +++ b/styles/templates/admin/index.tpl @@ -142,10 +142,6 @@ ajax.callback.manage_admin = function(data) { {L_TP_RELEASE_DATE}: {$bb_cfg['tp_release_date']} - - {L_ZF_VERSION}: - {$bb_cfg['tp_zf_version']} -
    @@ -224,4 +220,4 @@ ajax.callback.manage_admin = function(data) { - \ No newline at end of file +