forked from extern/egroupware
105 lines
2.0 KiB
PHP
105 lines
2.0 KiB
PHP
<?php
|
|
/**
|
|
* EGroupware API: push JSON commands to client
|
|
*
|
|
* @link http://www.egroupware.org
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @package api
|
|
* @subpackage ajax
|
|
* @author Ralf Becker <rb@stylite.de>
|
|
* @version $Id$
|
|
*/
|
|
|
|
/**
|
|
* Class to push JSON commands to client
|
|
*/
|
|
class egw_json_push extends egw_json_msg
|
|
{
|
|
/**
|
|
* Available backends to try
|
|
*
|
|
* @var array
|
|
*/
|
|
protected static $backends = array(
|
|
'notifications_push',
|
|
);
|
|
/**
|
|
* Backend to use
|
|
*
|
|
* @var egw_json_push_backend
|
|
*/
|
|
protected static $backend;
|
|
|
|
/**
|
|
* account_id we are pushing too
|
|
*
|
|
* @var int
|
|
*/
|
|
protected $account_id;
|
|
|
|
/**
|
|
*
|
|
* @param int $account_id account_id of user to push to
|
|
*/
|
|
public function __construct($account_id)
|
|
{
|
|
$this->account_id = $account_id;
|
|
}
|
|
|
|
/**
|
|
* Adds any type of data to the message
|
|
*
|
|
* @param string $key
|
|
* @param mixed $data
|
|
* @throws egw_json_push_exception_not_online if $account_id is not online
|
|
*/
|
|
protected function addGeneric($key, $data)
|
|
{
|
|
if (!isset(self::$backend))
|
|
{
|
|
foreach(self::$backends as $class)
|
|
{
|
|
if (class_exists($class))
|
|
{
|
|
try {
|
|
self::$backend = new $class;
|
|
break;
|
|
}
|
|
catch (Exception $e) {
|
|
// ignore exception
|
|
unset($e, self::$backend);
|
|
}
|
|
}
|
|
}
|
|
if (!isset(self::$backend))
|
|
{
|
|
throw new egw_json_push_exception_not_online('No valid push-backend found!');
|
|
}
|
|
}
|
|
self::$backend->addGeneric($this->account_id, $key, $data);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Interface for push backends
|
|
*/
|
|
interface egw_json_push_backend
|
|
{
|
|
/**
|
|
* Adds any type of data to the message
|
|
*
|
|
* @param int $account_id account_id to push message too
|
|
* @param string $key
|
|
* @param mixed $data
|
|
* @throws egw_json_push_exception_not_online if $account_id is not online
|
|
*/
|
|
public function addGeneric($account_id, $key, $data);
|
|
}
|
|
|
|
/**
|
|
* Exception thrown, if message can not be pushed
|
|
*/
|
|
class egw_json_push_exception_not_online extends egw_exception_not_found
|
|
{
|
|
|
|
} |