--- 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.'));
}
}