285 lines
6.7 KiB
PHP
Raw Normal View History

2012-09-11 13:16:30 +00:00
<?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$
*/
/** Zend_Mobile_Push_Message_Abstract **/
require_once 'Zend/Mobile/Push/Message/Abstract.php';
/**
* Apns Message
*
* @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_Message_Apns extends Zend_Mobile_Push_Message_Abstract
{
/**
* Badge Number
*
* @var int
*/
protected $_badge = 0;
/**
* Alert
*
* @var array
*/
protected $_alert = array();
/**
* Expiration
*
* @var int
*/
protected $_expire;
/**
* Sound
*
* @var string
*/
protected $_sound = 'default';
/**
* Custom Data
*
* @var array
*/
protected $_custom = array();
/**
* Get Alert
*
* @return array
*/
public function getAlert()
{
return $this->_alert;
}
/**
* Set Alert
*
* @param string $text
* @param string $actionLocKey
* @param string $locKey
* @param array $locArgs
* @param string $launchImage
* @return Zend_Mobile_Push_Message_Apns
*/
public function setAlert($text, $actionLocKey=null, $locKey=null, $locArgs=null, $launchImage=null)
{
if ($text !== null && !is_string($text)) {
throw new Zend_Mobile_Push_Message_Exception('$text must be a string');
}
if ($actionLocKey !== null && !is_string($actionLocKey)) {
throw new Zend_Mobile_Push_Message_Exception('$actionLocKey must be a string');
}
if ($locKey !== null && !is_string($locKey)) {
throw new Zend_Mobile_Push_Message_Exception('$locKey must be a string');
}
if ($locArgs !== null) {
if (!is_array($locArgs)) {
throw new Zend_Mobile_Push_Message_Exception('$locArgs must be an array of strings');
} else {
foreach ($locArgs as $str) {
if (!is_string($str)) {
throw new Zend_Mobile_Push_Message_Exception('$locArgs contains an item that is not a string');
}
}
}
}
if (null !== $launchImage && !is_string($launchImage)) {
throw new Zend_Mobile_Push_Message_Exception('$launchImage must be a string');
}
$this->_alert = array(
'body' => $text,
'action-loc-key' => $actionLocKey,
'loc-key' => $locKey,
'loc-args' => $locArgs,
'launch-image' => $launchImage,
);
return $this;
}
/**
* Get Badge
*
* @return int
*/
public function getBadge()
{
return (int) $this->_badge;
}
/**
* Set Badge
*
* @param int $badge
* @return Zend_Mobile_Push_Message_Apns
* @throws Zend_Mobile_Push_Message_Exception
*/
public function setBadge($badge)
{
if (!is_numeric($badge)) {
throw new Zend_Mobile_Push_Message_Exception('$badge must be an integer');
}
if ($badge < 0) {
throw new Zend_Mobile_Push_Message_Exception('$badge must be greater or equal to 0');
}
$this->_badge = (int) $badge;
}
/**
* Get Expire
*
* @return int
*/
public function getExpire()
{
return $this->_expire;
}
/**
* Set Expire
*
* @param int $expire
* @return Zend_Mobile_Push_Message_Apns
* @throws Zend_Mobile_Push_Message_Exception
*/
public function setExpire($expire)
{
if (!is_numeric($expire)) {
throw new Zend_Mobile_Push_Message_Exception('$expire must be an integer');
}
$this->_expire = (int) $expire;
return $this;
}
/**
* Get Sound
*
* @return string
*/
public function getSound()
{
return $this->_sound;
}
/**
* Set Sound
*
* @param string $sound
* @return Zend_Mobile_Push_Message_Apns
* @throws Zend_Mobile_Push_Message_Exception
*/
public function setSound($sound)
{
if (!is_string($sound)) {
throw new Zend_Mobile_Push_Message_Exception('$sound must be a string');
}
$this->_sound = $sound;
return $this;
}
/**
* Add Custom Data
*
* @param string $key
* @param mixed $value
* @return Zend_Mobile_Push_Message_Apns
* @throws Zend_Mobile_Push_Message_Exception
*/
public function addCustomData($key, $value)
{
if (!is_string($key)) {
throw new Zend_Mobile_Push_Message_Exception('$key is not a string');
}
if ($key == 'aps') {
throw new Zend_Mobile_Push_Message_Exception('$key must not be aps as it is reserved by apple');
}
$this->_custom[$key] = $value;
}
/**
* Clear Custom Data
*
* @return throw new Zend_Mobile_Push_Message_Apns
*/
public function clearCustomData()
{
$this->_custom = array();
return $this;
}
/**
* Set Custom Data
*
* @param array $data
* @return Zend_Mobile_Push_Message_Apns
* @throws Zend_Mobile_Push_Message_Exception
*/
public function setCustomData($array)
{
$this->_custom = array();
foreach ($array as $k => $v) {
$this->addCustomData($k, $v);
}
return $this;
}
/**
* Get Custom Data
*
* @return array
*/
public function getCustomData()
{
return $this->_custom;
}
/**
* Validate this is a proper Apns message
*
* @return boolean
*/
public function validate()
{
if (!is_string($this->_token) || strlen($this->_token) === 0) {
return false;
}
if (null != $this->_id && !is_numeric($this->_id)) {
return false;
}
return true;
}
}