--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/Zend/Mobile/Push/Response/Gcm.php Thu Mar 21 19:52:38 2013 +0100
@@ -0,0 +1,242 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Mobile
+ * @subpackage Zend_Mobile_Push
+ * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * Gcm Response
+ *
+ * @category Zend
+ * @package Zend_Mobile
+ * @subpackage Zend_Mobile_Push
+ * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+class Zend_Mobile_Push_Response_Gcm
+{
+
+ const RESULT_MESSAGE_ID = 'message_id';
+ const RESULT_ERROR = 'error';
+ const RESULT_CANONICAL = 'registration_id';
+
+ /**
+ * Multicast ID
+ * @var int
+ */
+ protected $_id;
+
+ /**
+ * Success Count
+ * @var int
+ */
+ protected $_successCnt;
+
+ /**
+ * Failure Count
+ * @var int
+ */
+ protected $_failureCnt;
+
+ /**
+ * Canonical registration id count
+ * @var int
+ */
+ protected $_canonicalCnt;
+
+ /**
+ * Message
+ * @var Zend_Mobile_Push_Message_Gcm
+ */
+ protected $_message;
+
+ /**
+ * Results
+ * @var array
+ */
+ protected $_results;
+
+ /**
+ * Raw Response
+ * @var array
+ */
+ protected $_response;
+
+ /**
+ * Constructor
+ *
+ * @param string $responseString JSON encoded response
+ * @param Zend_Mobile_Push_Message_Gcm $message
+ * @return Zend_Mobile_Push_Response_Gcm
+ * @throws Zend_Mobile_Push_Exception_ServerUnavailable
+ */
+ public function __construct($responseString = null, Zend_Mobile_Push_Message_Gcm $message = null)
+ {
+ if ($responseString) {
+ if (!$response = json_decode($responseString, true)) {
+ require_once 'Zend/Mobile/Push/Exception/ServerUnavailable.php';
+ throw new Zend_Mobile_Push_Exception_ServerUnavailable('The server gave us an invalid response, try again later');
+ }
+ $this->setResponse($response);
+ }
+
+ if ($message) {
+ $this->setMessage($message);
+ }
+
+ }
+
+ /**
+ * Get Message
+ *
+ * @return Zend_Mobile_Push_Message_Gcm
+ */
+ public function getMessage()
+ {
+ return $this->_message;
+ }
+
+ /**
+ * Set Message
+ *
+ * @param Zend_Mobile_Push_Message_Gcm $message
+ * @return Zend_Mobile_Push_Response_Gcm
+ */
+ public function setMessage(Zend_Mobile_Push_Message_Gcm $message)
+ {
+ $this->_message = $message;
+ return $this;
+ }
+
+ /**
+ * Get Response
+ *
+ * @return array
+ */
+ public function getResponse()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Set Response
+ *
+ * @param array $response
+ * @return Zend_Mobile_Push_Response_Gcm
+ */
+ public function setResponse(array $response)
+ {
+ if (!isset($response['results']) ||
+ !isset($response['success']) ||
+ !isset($response['failure']) ||
+ !isset($response['canonical_ids']) ||
+ !isset($response['multicast_id'])) {
+ throw new Zend_Mobile_Push_Exception('Response did not contain the proper fields');
+ }
+ $this->_response = $response;
+ $this->_results = $response['results'];
+ $this->_successCnt = (int) $response['success'];
+ $this->_failureCnt = (int) $response['failure'];
+ $this->_canonicalCnt = (int) $response['canonical_ids'];
+ $this->_id = (int) $response['multicast_id'];
+ return $this;
+ }
+
+ /**
+ * Get Success Count
+ *
+ * @return int
+ */
+ public function getSuccessCount()
+ {
+ return $this->_successCnt;
+ }
+
+ /**
+ * Get Failure Count
+ *
+ * @return int
+ */
+ public function getFailureCount()
+ {
+ return $this->_failureCnt;
+ }
+
+ /**
+ * Get Canonical Count
+ *
+ * @return int
+ */
+ public function getCanonicalCount()
+ {
+ return $this->_canonicalCnt;
+ }
+
+ /**
+ * Get Results
+ *
+ * @return array multi dimensional array of:
+ * NOTE: key is registration_id if the message is passed.
+ * 'registration_id' => array(
+ * 'message_id' => 'id',
+ * 'error' => 'error',
+ * 'registration_id' => 'id'
+ * )
+ */
+ public function getResults()
+ {
+ return $this->_correlate();
+ }
+
+ /**
+ * Get Singular Result
+ *
+ * @param int $flag one of the RESULT_* flags
+ * @return array singular array with keys being registration id
+ * value is the type of result
+ */
+ public function getResult($flag)
+ {
+ $ret = array();
+ foreach ($this->_correlate() as $k => $v) {
+ if (isset($v[$flag])) {
+ $ret[$k] = $v[$flag];
+ }
+ }
+ return $ret;
+ }
+
+ /**
+ * Correlate Message and Result
+ *
+ * @return array
+ */
+ protected function _correlate()
+ {
+ $results = $this->_results;
+ if ($this->_message && $results) {
+ $tokens = $this->_message->getToken();
+ while($token = array_shift($tokens)) {
+ $results[$token] = array_shift($results);
+ }
+ }
+ return $results;
+ }
+}