diff -r 5e7a0fedabdf -r 877f952ae2bd web/lib/Zend/Service/WindowsAzure/Storage/Queue.php --- a/web/lib/Zend/Service/WindowsAzure/Storage/Queue.php Thu Mar 21 17:31:31 2013 +0100 +++ b/web/lib/Zend/Service/WindowsAzure/Storage/Queue.php Thu Mar 21 19:50:53 2013 +0100 @@ -15,57 +15,31 @@ * @category Zend * @package Zend_Service_WindowsAzure * @subpackage Storage - * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://todo name_todo - * @version $Id: Queue.php 23167 2010-10-19 17:53:31Z mabe $ + * @version $Id: Queue.php 24593 2012-01-05 20:35:02Z matthew $ */ /** - * @see Zend_Service_WindowsAzure_Credentials_SharedKey - */ -require_once 'Zend/Service/WindowsAzure/Credentials/SharedKey.php'; - -/** - * @see Zend_Service_WindowsAzure_RetryPolicy_RetryPolicyAbstract - */ -require_once 'Zend/Service/WindowsAzure/RetryPolicy/RetryPolicyAbstract.php'; - -/** - * @see Zend_Http_Client - */ -require_once 'Zend/Http/Client.php'; - -/** - * @see Zend_Http_Response - */ -require_once 'Zend/Http/Response.php'; - -/** - * @see Zend_Service_WindowsAzure_Storage + * see Zend_Service_WindowsAzure_Storage */ require_once 'Zend/Service/WindowsAzure/Storage.php'; /** - * Zend_Service_WindowsAzure_Storage_QueueInstance + * @see Zend_Service_WindowsAzure_Storage_QueueInstance */ require_once 'Zend/Service/WindowsAzure/Storage/QueueInstance.php'; /** - * Zend_Service_WindowsAzure_Storage_QueueMessage + * @see Zend_Service_WindowsAzure_Storage_QueueMessage */ require_once 'Zend/Service/WindowsAzure/Storage/QueueMessage.php'; /** - * @see Zend_Service_WindowsAzure_Exception - */ -require_once 'Zend/Service/WindowsAzure/Exception.php'; - - -/** * @category Zend * @package Zend_Service_WindowsAzure * @subpackage Storage - * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Service_WindowsAzure_Storage_Queue extends Zend_Service_WindowsAzure_Storage @@ -106,9 +80,11 @@ public function queueExists($queueName = '') { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } @@ -134,9 +110,11 @@ public function createQueue($queueName = '', $metadata = array()) { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } @@ -147,16 +125,32 @@ // Perform request $response = $this->_performRequest($queueName, '', Zend_Http_Client::PUT, $headers); if ($response->isSuccessful()) { + return new Zend_Service_WindowsAzure_Storage_QueueInstance( $queueName, $metadata ); } else { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); } } /** + * Create queue if it does not exist + * + * @param string $queueName Queue name + * @param array $metadata Key/value pairs of meta data + * @throws Zend_Service_WindowsAzure_Exception + */ + public function createQueueIfNotExists($queueName = '', $metadata = array()) + { + if (!$this->queueExists($queueName)) { + $this->createQueue($queueName, $metadata); + } + } + + /** * Get queue * * @param string $queueName Queue name @@ -166,9 +160,11 @@ public function getQueue($queueName = '') { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } @@ -177,7 +173,7 @@ if ($response->isSuccessful()) { // Parse metadata $metadata = $this->_parseMetadataHeaders($response->getHeaders()); - + // Return queue $queue = new Zend_Service_WindowsAzure_Storage_QueueInstance( $queueName, @@ -186,6 +182,7 @@ $queue->ApproximateMessageCount = intval($response->getHeader('x-ms-approximate-message-count')); return $queue; } else { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); } } @@ -200,9 +197,11 @@ public function getQueueMetadata($queueName = '') { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } @@ -221,9 +220,11 @@ public function setQueueMetadata($queueName = '', $metadata = array()) { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } if (count($metadata) == 0) { @@ -238,6 +239,7 @@ $response = $this->_performRequest($queueName, '?comp=metadata', Zend_Http_Client::PUT, $headers); if (!$response->isSuccessful()) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); } } @@ -251,15 +253,18 @@ public function deleteQueue($queueName = '') { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } // Perform request $response = $this->_performRequest($queueName, '', Zend_Http_Client::DELETE); if (!$response->isSuccessful()) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); } } @@ -279,16 +284,16 @@ { // Build query string $queryString = array('comp=list'); - if ($prefix !== null) { + if (!is_null($prefix)) { $queryString[] = 'prefix=' . $prefix; } - if ($maxResults !== null) { + if (!is_null($maxResults)) { $queryString[] = 'maxresults=' . $maxResults; } - if ($marker !== null) { + if (!is_null($marker)) { $queryString[] = 'marker=' . $marker; } - if ($include !== null) { + if (!is_null($include)) { $queryString[] = 'include=' . $include; } $queryString = self::createQueryStringFromArray($queryString); @@ -300,7 +305,8 @@ $xmlMarker = (string)$this->_parseResponse($response)->NextMarker; $queues = array(); - if ($xmlQueues !== null) { + if (!is_null($xmlQueues)) { + for ($i = 0; $i < count($xmlQueues); $i++) { $queues[] = new Zend_Service_WindowsAzure_Storage_QueueInstance( (string)$xmlQueues[$i]->Name, @@ -309,17 +315,18 @@ } } $currentResultCount = $currentResultCount + count($queues); - if ($maxResults !== null && $currentResultCount < $maxResults) { - if ($xmlMarker !== null && $xmlMarker != '') { + if (!is_null($maxResults) && $currentResultCount < $maxResults) { + if (!is_null($xmlMarker) && $xmlMarker != '') { $queues = array_merge($queues, $this->listQueues($prefix, $maxResults, $xmlMarker, $include, $currentResultCount)); } } - if ($maxResults !== null && count($queues) > $maxResults) { + if (!is_null($maxResults) && count($queues) > $maxResults) { $queues = array_slice($queues, 0, $maxResults); } return $queues; } else { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); } } @@ -335,24 +342,29 @@ public function putMessage($queueName = '', $message = '', $ttl = null) { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } if (strlen($message) > self::MAX_MESSAGE_SIZE) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Message is too big. Message content should be < 8KB.'); } if ($message == '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Message is not specified.'); } - if ($ttl !== null && ($ttl <= 0 || $ttl > self::MAX_MESSAGE_SIZE)) { + if (!is_null($ttl) && ($ttl <= 0 || $ttl > self::MAX_MESSAGE_SIZE)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Message TTL is invalid. Maximal TTL is 7 days (' . self::MAX_MESSAGE_SIZE . ' seconds) and should be greater than zero.'); } // Build query string $queryString = array(); - if ($ttl !== null) { + if (!is_null($ttl)) { $queryString[] = 'messagettl=' . $ttl; } $queryString = self::createQueryStringFromArray($queryString); @@ -367,6 +379,7 @@ $response = $this->_performRequest($queueName . '/messages', $queryString, Zend_Http_Client::POST, array(), false, $rawData); if (!$response->isSuccessful()) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Error putting message into queue.'); } } @@ -384,15 +397,19 @@ public function getMessages($queueName = '', $numOfMessages = 1, $visibilityTimeout = null, $peek = false) { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } if ($numOfMessages < 1 || $numOfMessages > 32 || intval($numOfMessages) != $numOfMessages) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Invalid number of messages to retrieve.'); } - if ($visibilityTimeout !== null && ($visibilityTimeout <= 0 || $visibilityTimeout > 7200)) { + if (!is_null($visibilityTimeout) && ($visibilityTimeout <= 0 || $visibilityTimeout > 7200)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Visibility timeout is invalid. Maximum value is 2 hours (7200 seconds) and should be greater than zero.'); } @@ -404,7 +421,7 @@ if ($numOfMessages > 1) { $queryString[] = 'numofmessages=' . $numOfMessages; } - if (!$peek && $visibilityTimeout !== null) { + if (!$peek && !is_null($visibilityTimeout)) { $queryString[] = 'visibilitytimeout=' . $visibilityTimeout; } $queryString = self::createQueryStringFromArray($queryString); @@ -424,7 +441,7 @@ } else { $xmlMessages = array($result->QueueMessage); } - + $messages = array(); for ($i = 0; $i < count($xmlMessages); $i++) { $messages[] = new Zend_Service_WindowsAzure_Storage_QueueMessage( @@ -440,6 +457,7 @@ return $messages; } else { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); } } @@ -458,6 +476,18 @@ } /** + * Checks to see if a given queue has messages + * + * @param string $queueName Queue name + * @return boolean + * @throws Zend_Service_WindowsAzure_Exception + */ + public function hasMessages($queueName = '') + { + return count($this->peekMessages($queueName)) > 0; + } + + /** * Clear queue messages * * @param string $queueName Queue name @@ -466,15 +496,18 @@ public function clearMessages($queueName = '') { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } // Perform request $response = $this->_performRequest($queueName . '/messages', '', Zend_Http_Client::DELETE); if (!$response->isSuccessful()) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Error clearing messages from queue.'); } } @@ -482,25 +515,29 @@ /** * Delete queue message * - * @param string $queueName Queue name + * @param string $queueName Queue name * @param Zend_Service_WindowsAzure_Storage_QueueMessage $message Message to delete from queue. A message retrieved using "peekMessages" can NOT be deleted! * @throws Zend_Service_WindowsAzure_Exception */ public function deleteMessage($queueName = '', Zend_Service_WindowsAzure_Storage_QueueMessage $message) { if ($queueName === '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); } if (!self::isValidQueueName($queueName)) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); } if ($message->PopReceipt == '') { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception('A message retrieved using "peekMessages" can NOT be deleted! Use "getMessages" instead.'); } // Perform request - $response = $this->_performRequest($queueName . '/messages/' . $message->MessageId, '?popreceipt=' . $message->PopReceipt, Zend_Http_Client::DELETE); + $response = $this->_performRequest($queueName . '/messages/' . $message->MessageId, '?popreceipt=' . urlencode($message->PopReceipt), Zend_Http_Client::DELETE); if (!$response->isSuccessful()) { + require_once 'Zend/Service/WindowsAzure/Exception.php'; throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); } }