web/lib/Zend/Service/WindowsAzure/Storage/Queue.php
changeset 807 877f952ae2bd
parent 207 621fa6caec0c
child 1230 68c69c656a2c
--- 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.'));
 		}
 	}