’."\n";
}
// Send any accumulated json responses - after flush to avoid sending the buffer as a response
-
if(Json\Response::isJSONResponse())
-
{
-
$load_array['response'] = Json\Response::get()->returnResult();
}
// <iframe> and <form> tags added only to get browser autocomplete handling working again
echo '<form target="egw_iframe_autocomplete_helper" action="'.$form_action.'" id="'.$dom_id.'" class="et2_container" data-etemplate="'.
-
htmlspecialchars(egw_json_response::json_encode($load_array), ENT_COMPAT, Translation::charset(), true).'"></form>'."\n".
-
htmlspecialchars(Json\Response::json_encode($load_array), ENT_COMPAT, Translation::charset(), true).'"></form>'."\n".
'<iframe name="egw_iframe_autocomplete_helper" style="width:0;height:0;position: absolute;visibility:hidden;"></iframe>';
if ($output_mode == 2)
@@ -331,7 +330,7 @@
self::$request = Etemplate\Request::read($etemplate_exec_id);
//error_log(‘request=’.array2string(self::$request));
-
self::$response = Json\Response::get();
if (!($template = self::instance(self::$request->template['name'], self::$request->template['template_set'],
self::$request->template['version'], self::$request->template['load_via'])))
@@ -418,7 +417,7 @@
// Strip out any script tags
$GLOBALS[‘egw_info’][‘flags’][‘java_script’] = preg_replace(array(’/(<script[^>]>)([^<])/is’,’/</script>/’),array(’$2’,’’),$GLOBALS[‘egw_info’][‘flags’][‘java_script’]);
self::$response->script($GLOBALS[‘egw_info’][‘flags’][‘java_script’]);
— trunk/egroupware/api/src/Etemplate/Request.php (original)
+++ trunk/egroupware/api/src/Etemplate/Request.php Sun Mar 20 14:02:55 2016
@@ -13,10 +13,10 @@
namespace EGroupware\Api\Etemplate;
+use EGroupware\Api;
+
// explicitly import old not yet ported classes
use egw_framework;
-use egw_json_response;
-use egw_json_request;
use common; // egw_exit
/**
@@ -59,7 +59,7 @@
*
- if (($new_id = $request->id()) != $exec_id)
- {
-
-
Api\Json\Response::get()->generic('assign', array(
-
'etemplate_exec_id' => $id,
-
'id' => '',
-
'key' => 'etemplate_exec_id',
@@ -71,7 +71,7 @@
*
- if (($new_id = $request->id()) != $exec_id)
- {
-
error_log(__METHOD__."('$id', ...) eT2 request not found / expired --> redirecting app $app to $index_url (_GET[menuaction]=$_GET[menuaction], isJSONRequest()=".array2string(egw_json_request::isJSONRequest()).')');
-
if (egw_json_request::isJSONRequest())
-
error_log(__METHOD__."('$id', ...) eT2 request not found / expired --> redirecting app $app to $index_url (_GET[menuaction]=$_GET[menuaction], isJSONRequest()=".array2string(Api\Json\Request::isJSONRequest()).')');
-
if (Api\Json\Request::isJSONRequest())
{
// we must not redirect ajax_destroy_session calls, as they might originate from our own redirect!
if (strpos($_GET['menuaction'], '.ajax_destroy_session.etemplate') === false)
{
— trunk/egroupware/api/src/Etemplate/Widget.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget.php Sun Mar 20 14:02:55 2016
@@ -17,10 +17,6 @@
use XMLReader;
use ReflectionMethod;
-// explicitly import old not yet ported classes
-use egw_json_response;
/**
- eTemplate widget baseclass
/
@@ -73,7 +69,7 @@
/*
- JSON response object, if we run via a JSON request
-
-
-
@var Api\Json\Response
*/
static protected $response;
— trunk/egroupware/api/src/Etemplate/Widget/File.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/File.php Sun Mar 20 14:02:55 2016
@@ -16,9 +16,6 @@
use EGroupware\Api\Etemplate;
use EGroupware\Api;
-// explicitly import old not yet ported classes
-use egw_json_response;
/**
- eTemplate file upload widget
- Uses AJAX to send file(s) to server, and stores for submit
@@ -52,7 +49,7 @@
-
@note Currently, no attempt is made to clean up files automatically.
*/
public static function ajax_upload() {
-
$response = Api\Json\Response::get();
$request_id = str_replace(' ', '+', rawurldecode($_REQUEST['request_id']));
$widget_id = $_REQUEST['widget_id'];
if(!self::$request = Etemplate\Request::read($request_id)) {
— trunk/egroupware/api/src/Etemplate/Widget/ItemPicker.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/ItemPicker.php Sun Mar 20 14:02:55 2016
@@ -17,9 +17,6 @@
use EGroupware\Api\Etemplate;
use EGroupware\Api;
-// explicitly import old not yet ported classes
-use egw_json_response;
/**
- eTemplate itempicker widget
@@ -48,7 +45,7 @@
$options[‘type’] = $type ? $type : $options[‘type’];
$items = Api\Link::query($app, $pattern, $options);
— trunk/egroupware/api/src/Etemplate/Widget/Link.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/Link.php Sun Mar 20 14:02:55 2016
@@ -17,7 +17,6 @@
use EGroupware\Api;
// explicitly import old not yet ported classes
-use egw_json_response;
use common; // egw_exit
/**
@@ -109,7 +108,7 @@
if(!$options[‘num_rows’]) $options[‘num_rows’] = 1000;
$links = Api\Link::query($app, $pattern, $options);
$linksc = array_combine(array_map(create_function(’$k’, ‘return (string)" ".$k;’), array_keys($links)), $links);
@@ -124,7 +123,7 @@
{
$title = Api\Link::title($app, $id);
//error_log(METHOD."(’$app’, ‘$id’) = ".array2string($title));
-
Api\Json\Response::get()->data($title);
}
/**
@@ -147,7 +146,7 @@
error_log(METHOD."(".array2string($app_ids).") got invalid title request: app=$app, ids=" . array2string($ids));
}
}
-
Api\Json\Response::get()->data($response);
}
/**
@@ -172,7 +171,7 @@
}
$result = Api\Link::link($app, $id, $links);
@@ -207,7 +206,7 @@
}
}
@@ -258,7 +257,7 @@
public static function ajax_delete($value)
{
— trunk/egroupware/api/src/Etemplate/Widget/Nextmatch.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/Nextmatch.php Sun Mar 20 14:02:55 2016
@@ -17,7 +17,6 @@
use EGroupware\Api;
// explicitly import old not yet ported classes
-use egw_json_response;
use egw;
use egw_framework; // includeCSS
use categories;
@@ -291,7 +290,7 @@
{
self::$request->content = array($form_name => array());
}
@@ -362,7 +361,7 @@
if (isset($GLOBALS[‘egw_info’][‘flags’][‘app_header’]) && self::$request->app_header != $GLOBALS[‘egw_info’][‘flags’][‘app_header’])
{
self::$request->app_header = $GLOBALS[‘egw_info’][‘flags’][‘app_header’];
@@ -502,7 +501,7 @@
$changes = true;
$request_value[$key] = $value[$key];
-
Api\Json\Response::get()->generic('assign', array(
'etemplate_exec_id' => $exec_id,
'id' => $form_name,
'key' => $key,
@@ -519,12 +518,12 @@
// Send back data
//foreach($result as $name => $value) if ($name != 'readonlys') error_log(__METHOD__."() result['$name']=".array2string($name == 'data' ? array_keys($value) : $value));
-
Api\Json\Response::get()->generic('assign', array(
'etemplate_exec_id' => $exec_id,
'id' => '',
'key' => 'etemplate_exec_id',
— trunk/egroupware/api/src/Etemplate/Widget/Select.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/Select.php Sun Mar 20 14:02:55 2016
@@ -19,7 +19,6 @@
// explicitly import old not yet ported classes
use categories;
use calendar_timezones;
-use egw_json_response;
/**
- eTemplate select widget
@@ -861,7 +860,7 @@
$no_lang = false;
$options = self::typeOptions($type, $attributes,$no_lang,false,$value);
self::fix_encoded_options($options,true);
— trunk/egroupware/api/src/Etemplate/Widget/Taglist.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/Taglist.php Sun Mar 20 14:02:55 2016
@@ -17,7 +17,6 @@
use EGroupware\Api;
// explicitly import old not yet ported classes
-use egw_json_request;
use common;
use mail_compose;
@@ -74,7 +73,7 @@
$results[] = array(‘id’ => $id, ‘label’ => $name);
}
// switch regular JSON response handling off
— trunk/egroupware/api/src/Etemplate/Widget/Tree.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/Tree.php Sun Mar 20 14:02:55 2016
@@ -17,7 +17,6 @@
use EGroupware\Api;
// explicitly import old not yet ported classes
-use egw_json_request;
use common; // egw_exit
use categories;
use egw_framework;
@@ -152,7 +151,7 @@
public static function send_quote_json(array $data)
{
// switch regular JSON response handling off
— trunk/egroupware/api/src/Etemplate/Widget/Vfs.php (original)
+++ trunk/egroupware/api/src/Etemplate/Widget/Vfs.php Sun Mar 20 14:02:55 2016
@@ -17,7 +17,6 @@
use EGroupware\Api;
// explicitly import old not yet ported classes
-use egw_json_request;
use common; // egw_exit
use egw; // link
@@ -162,7 +161,7 @@
}
}
// switch regular JSON response handling off
— trunk/egroupware/api/src/Exception/WrongParameter.php (original)
+++ trunk/egroupware/api/src/Json/Exception.php Sun Mar 20 14:02:55 2016
@@ -1,21 +1,23 @@
<?php
/**
- * EGroupware API - Exceptions
+ * EGroupware API - Json Exceptions
*
* @link http://www.egroupware.org
* @author Ralf Becker
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
- * @subpackage exception
+ * @subpackage json
* @access public
* @version $Id$
*/
-namespace EGroupware\Api\Exception;
+namespace EGroupware\Api\Json;
+
+use EGroupware\Api;
/**
* A method or function was called with a wrong or missing parameter
*
* As you get this only by an error in the code or during development, the message does not need to be translated
*/
-class WrongParameter extends AssertionFailed { }
+class Exception extends Api\Exception\WrongParameter { }
Copied: trunk/egroupware/api/src/Json/Exception/InvalidName.php (from r55427, trunk/egroupware/api/src/Exception/WrongParameter.php)
URL: http://svn.stylite.de/viewvc/egroupware/trunk/egroupware/api/src/Json/Exception/InvalidName.php?p2=trunk/egroupware/api/src/Json/Exception/InvalidName.php&p1=trunk/egroupware/api/src/Exception/WrongParameter.php&r1=55427&r2=55441&rev=55441&view=diff
==============================================================================
--- trunk/egroupware/api/src/Exception/WrongParameter.php (original)
+++ trunk/egroupware/api/src/Json/Exception/InvalidName.php Sun Mar 20 14:02:55 2016
@@ -1,21 +1,23 @@
<?php
/**
- * EGroupware API - Exceptions
+ * EGroupware API - Json Exceptions
*
* @link http://www.egroupware.org
* @author Ralf Becker
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
- * @subpackage exception
+ * @subpackage json
* @access public
* @version $Id$
*/
-namespace EGroupware\Api\Exception;
+namespace EGroupware\Api\Json\Exception;
+
+use EGroupware\Api\Exception;
/**
* A method or function was called with a wrong or missing parameter
*
* As you get this only by an error in the code or during development, the message does not need to be translated
*/
-class WrongParameter extends AssertionFailed { }
+class InvalidName extends Exception\NoPermission { }
Copied: trunk/egroupware/api/src/Json/Exception/NotOnline.php (from r55427, trunk/phpgwapi/inc/class.egw_json_push.inc.php)
URL: http://svn.stylite.de/viewvc/egroupware/trunk/egroupware/api/src/Json/Exception/NotOnline.php?p2=trunk/egroupware/api/src/Json/Exception/NotOnline.php&p1=trunk/phpgwapi/inc/class.egw_json_push.inc.php&r1=55427&r2=55441&rev=55441&view=diff
==============================================================================
--- trunk/phpgwapi/inc/class.egw_json_push.inc.php (original)
+++ trunk/egroupware/api/src/Json/Exception/NotOnline.php Sun Mar 20 14:02:55 2016
@@ -5,101 +5,19 @@
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
- * @subpackage ajax
+ * @subpackage json
* @author Ralf Becker
* @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;
+namespace EGroupware\Api\Json\Exception;
- /**
- * 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);
-}
+use EGroupware\Api\Json;
/**
* Exception thrown, if message can not be pushed
*/
-class egw_json_push_exception_not_online extends egw_exception_not_found
+class NotOnline extends Json\Exception
{
}
Copied: trunk/egroupware/api/src/Json/Exception/ScriptTags.php (from r55427, trunk/phpgwapi/inc/class.egw_json_push.inc.php)
URL: http://svn.stylite.de/viewvc/egroupware/trunk/egroupware/api/src/Json/Exception/ScriptTags.php?p2=trunk/egroupware/api/src/Json/Exception/ScriptTags.php&p1=trunk/phpgwapi/inc/class.egw_json_push.inc.php&r1=55427&r2=55441&rev=55441&view=diff
==============================================================================
--- trunk/phpgwapi/inc/class.egw_json_push.inc.php (original)
+++ trunk/egroupware/api/src/Json/Exception/ScriptTags.php Sun Mar 20 14:02:55 2016
@@ -5,101 +5,19 @@
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
- * @subpackage ajax
+ * @subpackage json
* @author Ralf Becker
* @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;
+namespace EGroupware\Api\Json\Exception;
- /**
- * 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);
- }
-}
+use EGroupware\Api\Json;
/**
- * Interface for push backends
+ * Exception thrown, if request contains script tags
*/
-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
+class ScriptTags extends Json\Exception
{
}
Copied: trunk/egroupware/api/src/Json/Msg.php (from r55436, trunk/phpgwapi/inc/class.egw_json.inc.php)
URL: http://svn.stylite.de/viewvc/egroupware/trunk/egroupware/api/src/Json/Msg.php?p2=trunk/egroupware/api/src/Json/Msg.php&p1=trunk/phpgwapi/inc/class.egw_json.inc.php&r1=55436&r2=55441&rev=55441&view=diff
==============================================================================
--- trunk/phpgwapi/inc/class.egw_json.inc.php (original)
+++ trunk/egroupware/api/src/Json/Msg.php Sun Mar 20 14:02:55 2016
@@ -5,179 +5,18 @@
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
- * @subpackage ajax
+ * @subpackage json
* @author Andreas Stoeckel
+ * @author Ralf Becker
* @version $Id$
*/
-/**
- * Class handling JSON requests to the server
- */
-class egw_json_request
-{
- private static $_hadJSONRequest = false;
-
- /**
- * Check if JSON request running or (re)set JSON request flag
- *
- * Can be used to:
- * - detect regular JSON request:
- * egw_json_request::isJSONRequest()
- * - switch regular JSON response handling off, which would send arbitrary output via response method "html".
- * Neccessary if json.php is used to send arbitrary JSON data eg. nodes for foldertree!
- * egw_json_request::isJSONRequest(false)
- *
- * @param boolean $set =null
- * @return boolean
- */
- public static function isJSONRequest($set=null)
- {
- $ret = self::$_hadJSONRequest;
- if (isset($set)) self::$_hadJSONRequest = $set;
- return $ret;
- }
-
- /**
- * Parses the raw input data supplied with the input_data parameter and calls the menuaction
- * passing all parameters supplied in the request to it.
- *
- * Also handle queued requests (menuaction == 'home.queue') containing multiple requests
- *
- * @param string menuaction to call
- * @param string $input_data is the RAW input data as it was received from the client
- */
- public function parseRequest($menuaction, $input_data)
- {
- // Remember that we currently are in a JSON request - e.g. used in the redirect code
- self::$_hadJSONRequest = true;
-
- if (get_magic_quotes_gpc()) $input_data = stripslashes($input_data);
-
- $json_data = json_decode($input_data,true);
- if (is_array($json_data) && isset($json_data['request']) && isset($json_data['request']['parameters']) && is_array($json_data['request']['parameters']))
- {
- //error_log(__METHOD__.__LINE__.array2string($json_data['request']).function_backtrace());
- $parameters =& $json_data['request']['parameters'];
- }
- else
- {
- $parameters = array();
- }
- // do we have a single request or an array of queued requests
- if ($menuaction == 'home.queue')
- {
- $responses = array();
- $response = egw_json_response::get();
- foreach($parameters[0] as $uid => $data)
- {
- //error_log("$uid: menuaction=$data[menuaction], parameters=".array2string($data['parameters']));
- $this->handleRequest($data['menuaction'], (array)$data['parameters']);
- $responses[$uid] = $response->initResponseArray();
- //error_log("responses[$uid]=".array2string($responses[$uid]));
- }
- $response->data($responses); // send all responses as data
- }
- else
- {
- $this->handleRequest($menuaction, $parameters);
- }
- }
-
- /**
- * Request handler
- *
- * @param string $menuaction
- * @param array $parameters
- */
- public function handleRequest($menuaction, array $parameters)
- {
- if (strpos($menuaction,'::') !== false && strpos($menuaction,'.') === false) // static method name app_something::method
- {
- @list($className,$functionName,$handler) = explode('::',$menuaction);
- if (substr($className, 0, 11) == 'EGroupware\\')
- {
- list(,$appName) = explode('\\', strtolower($className));
- }
- else
- {
- list($appName) = explode('_',$className);
- }
-
- // Check for a real static method, avoid instanciation if it is
- $m = new ReflectionMethod($menuaction);
- if($m->isStatic())
- {
- $ajaxClass = $className;
- }
- }
- else
- {
- @list($appName, $className, $functionName, $handler) = explode('.',$menuaction);
- }
- //error_log("json.php: appName=$appName, className=$className, functionName=$functionName, handler=$handler");
-
- switch($handler)
- {
- case '/etemplate/process_exec':
- $_GET['menuaction'] = $appName.'.'.$className.'.'.$functionName;
- $appName = $className = 'etemplate';
- $functionName = 'process_exec';
- $menuaction = 'etemplate.etemplate.process_exec';
-
- $parameters = array(
- $parameters[0]['etemplate_exec_id'],
- $parameters[0]['submit_button'],
- $parameters[0],
- 'xajaxResponse',
- );
- //error_log("xajax_doXMLHTTP() /etemplate/process_exec handler: arg0='$menuaction', menuaction='$_GET[menuaction]'");
- break;
- case 'etemplate': // eg. ajax code in an eTemplate widget
- $menuaction = ($appName = 'etemplate').'.'.$className.'.'.$functionName;
- break;
- case 'template': // calling current template / framework object
- $menuaction = $appName.'.'.$className.'.'.$functionName;
- $className = get_class($GLOBALS['egw']->framework);
- list($template) = explode('_', $className);
- break;
- }
-
- if(substr($className,0,4) != 'ajax' && substr($className,-4) != 'ajax' &&
- $menuaction != 'etemplate.etemplate.process_exec' && substr($functionName,0,4) != 'ajax' ||
- !preg_match('/^[A-Za-z0-9_\\\\-]+(\.[A-Za-z0-9_\\\\]+\.|::)[A-Za-z0-9_]+$/',$menuaction))
- {
- // stopped for security reasons
- error_log("className='$className', functionName='$functionName', menuaction='$menuaction'");
- error_log($_SERVER['PHP_SELF']. ' stopped for security reason. '.$menuaction.' is not valid. class- or function-name must start with ajax!!!');
- // send message also to the user
- throw new Exception($_SERVER['PHP_SELF']. ' stopped for security reason. '.$menuaction.' is not valid. class- or function-name must start with ajax!!!');
- }
-
- if (isset($template))
- {
- $ajaxClass = $GLOBALS['egw']->framework;
- }
- else if (!$ajaxClass)
- {
- $ajaxClass = CreateObject($appName.'.'.$className);
- }
-
- // for Ajax: no need to load the "standard" javascript files,
- // they are already loaded, in fact jquery has a problem if loaded twice
- egw_framework::js_files(array());
-
- call_user_func_array(array($ajaxClass, $functionName),
- translation::convert($parameters, 'utf-8'));
-
- // check if we have push notifications, if notifications app available
- if (class_exists('notifications_push')) notifications_push::get();
- }
-}
+namespace EGroupware\Api\Json;
/**
* Abstract class implementing different type of JSON messages understood by client-side
*/
-abstract class egw_json_msg
+abstract class Msg
{
/**
* Adds an "alert" to the response which can be handeled on the client side.
@@ -388,323 +227,3 @@
*/
abstract protected function addGeneric($key, $data);
}
-
-/**
- * Class used to send ajax responses
- */
-class egw_json_response extends egw_json_msg
-{
- /**
- * A response can only contain one generic data part.
- * This variable is used to store, whether a data part had already been added to the response.
- *
- * @var boolean
- */
- private $hasData = false;
-
- /**
- * Array containing all beforeSendData callbacks
- */
- protected $beforeSendDataProcs = array();
-
- /**
- * Holds the actual response data which is then encoded to JSON
- * once the "getJSON" function is called
- *
- * @var array
- */
- protected $responseArray = array();
-
- /**
- * Holding instance of class for singelton egw_json_response::get()
- *
- * @var egw_json_response
- */
- private static $response = null;
-
- /**
- * Force use of singleton: $response = egw_json_response::get();
- */
- protected function __construct()
- {
-
- }
-
- /**
- * Singelton for class
- *
- * @return egw_json_response
- */
- public static function get()
- {
- if (!isset(self::$response))
- {
- self::$response = new egw_json_response();
- self::sendHeader();
- }
- return self::$response;
- }
-
- public static function isJSONResponse()
- {
- return isset(self::$response);
- }
-
- /**
- * Do we have a JSON response to send back
- *
- * @return boolean
- */
- public function haveJSONResponse()
- {
- return $this->responseArray || $this->beforeSendDataProcs;
- }
-
- /**
- * Private function used to send the HTTP header of the JSON response
- */
- private static function sendHeader()
- {
- $file = $line = null;
- if (headers_sent($file, $line))
- {
- error_log(__METHOD__."() header already sent by $file line $line: ".function_backtrace());
- }
- else
- {
- //Send the character encoding header
- header('content-type: application/json; charset='.translation::charset());
- }
- }
-
- /**
- * Private function which is used to send the result via HTTP
- */
- public static function sendResult()
- {
- $inst = self::get();
-
- //Call each attached before send data proc
- foreach ($inst->beforeSendDataProcs as $proc)
- {
- call_user_func_array($proc['proc'], $proc['params']);
- }
-
- // check if application made some direct output
- if (($output = ob_get_clean()))
- {
- if (!$inst->haveJSONResponse())
- {
- error_log(__METHOD__."() adding output with inst->addGeneric('html', '$output')");
- $inst->addGeneric('html', $output);
- }
- else
- {
- $inst->alert('Application echoed something', $output);
- }
- }
-
- echo $inst->getJSON();
- $inst->initResponseArray();
- }
-
- /**
- * Return json response data, after running beforeSendDataProcs
- *
- * Used to send json response with etemplate data in GET request
- *
- * @return array responseArray
- */
- public static function returnResult()
- {
- $inst = self::get();
-
- //Call each attached before send data proc
- foreach ($inst->beforeSendDataProcs as $proc)
- {
- call_user_func_array($proc['proc'], $proc['params']);
- }
- return $inst->initResponseArray();
- }
-
- /**
- * xAjax compatibility function
- */
- public function printOutput()
- {
- // do nothing, as output is triggered by egw::__destruct()
- }
-
- /**
- * Adds any type of data to the message
- *
- * @param string $key
- * @param mixed $data
- */
- protected function addGeneric($key, $data)
- {
- self::get()->responseArray[] = array(
- 'type' => $key,
- 'data' => $data,
- );
- }
-
- /**
- * Init responseArray
- *
- * @param array $arr
- * @return array previous content
- */
- public function initResponseArray()
- {
- $return = $this->responseArray;
- $this->responseArray = $this->beforeSendDataProcs = array();
- $this->hasData = false;
- return $return;
- }
-
-
- /**
- * Adds a "data" response to the json response.
- *
- * This function may only be called once for a single JSON response object.
- *
- * @param object|array|string $data can be of any data type and will be added JSON Encoded to your response.
- */
- public function data($data)
- {
- /* Only allow adding the data response once */
- $inst = self::get();
- if (!$inst->hasData)
- {
- $inst->addGeneric('data', $data);
- $inst->hasData = true;
- }
- else
- {
- throw new Exception("Adding more than one data response to a JSON response is not allowed.");
- }
- }
-
- /**
- * Returns the actual JSON code generated by calling the above "add" function.
- *
- * @return string
- */
- public function getJSON()
- {
- $inst = self::get();
-
- /* Wrap the result array into a parent "response" Object */
- $res = array('response' => $inst->responseArray);
-
- return self::json_encode($res); //PHP5.3+, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
- }
-
- /**
- * More fault-tollerant version of json_encode removing everything that does not json_encode eg. because not utf-8
- *
- * @param mixed $var
- * @return string
- */
- public static function json_encode($var)
- {
- $ret = json_encode($var);
-
- if ($ret === false && ($err = json_last_error()))
- {
- static $json_err2str = array(
- JSON_ERROR_NONE => 'No errors',
- JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
- JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch',
- JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',
- JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',
- JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded',
- );
- error_log(__METHOD__.'('.array2string($var).') json_last_error()='.$err.'='.$json_err2str[$err]);
-
- if (($var = self::fix_content($var)))
- {
- return self::json_encode($var);
- }
- }
- return $ret;
- }
-
- /**
- * Set everything in $var to null, that does not json_encode, eg. because no valid utf-8
- *
- * @param midex $var
- * @param string $prefix =''
- * @return mixed
- */
- public static function fix_content($var, $prefix='')
- {
- if (json_encode($var) !== false) return $var;
-
- if (is_scalar($var))
- {
- error_log(__METHOD__."() json_encode($prefix='$var') === false --> setting it to null");
- $var = null;
- }
- else
- {
- foreach($var as $name => &$value)
- {
- $value = self::fix_content($value, $prefix ? $prefix.'['.$name.']' : $name);
- }
- }
- return $var;
- }
-
- /**
- * Function which can be used to add an event listener callback function to
- * the "beforeSendData" callback. This callback might be used to add a response
- * which always has to be added after all other responses.
- * @param callback Callback function or method which should be called before the response gets sent
- * @param mixed n Optional parameters which get passed to the callback function.
- */
- public function addBeforeSendDataCallback($proc)
- {
- //Get the current instance
- $inst = self::get();
-
- //Get all parameters passed to the function and delete the first one
- $params = func_get_args();
- array_shift($params);
-
- $inst->beforeSendDataProcs[] = array(
- 'proc' => $proc,
- 'params' => $params
- );
- }
-}
-
-/**
- * Deprecated legacy xajax wrapper functions for the new egw_json interface
- */
-class xajaxResponse
-{
- public function __call($name, $args)
- {
- if (substr($name, 0, 3) == 'add')
- {
- $name = substr($name, 3);
- $name[0] = strtolower($name[0]);
- }
- return call_user_func_array(array(egw_json_response::get(), $name), $args);
- }
-
- public function addScriptCall()
- {
- $args = func_get_args();
- $func = array_shift($args);
-
- return call_user_func(array(egw_json_response::get(), 'apply'), $func, $args);
- }
-
- public function getXML()
- {
- return '';
- }
-}
Copied: trunk/egroupware/api/src/Json/Push.php (from r55427, trunk/phpgwapi/inc/class.egw_json_push.inc.php)
URL: http://svn.stylite.de/viewvc/egroupware/trunk/egroupware/api/src/Json/Push.php?p2=trunk/egroupware/api/src/Json/Push.php&p1=trunk/phpgwapi/inc/class.egw_json_push.inc.php&r1=55427&r2=55441&rev=55441&view=diff
==============================================================================
--- trunk/phpgwapi/inc/class.egw_json_push.inc.php (original)
+++ trunk/egroupware/api/src/Json/Push.php Sun Mar 20 14:02:55 2016
@@ -5,15 +5,17 @@
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
- * @subpackage ajax
+ * @subpackage json
* @author Ralf Becker
* @version $Id$
*/
+namespace EGroupware\Api\Json;
+
/**
* Class to push JSON commands to client
*/
-class egw_json_push extends egw_json_msg
+class Push extends Msg
{
/**
* Available backends to try
@@ -51,7 +53,7 @@
*
* @param string $key
* @param mixed $data
- * @throws egw_json_push_exception_not_online if $account_id is not online
+ * @throws Exception\NotOnline if $account_id is not online
*/
protected function addGeneric($key, $data)
{
@@ -65,41 +67,17 @@
self::$backend = new $class;
break;
}
- catch (Exception $e) {
- // ignore exception
+ catch (\Exception $e) {
+ // ignore all exceptions
unset($e, self::$backend);
}
}
}
if (!isset(self::$backend))
{
- throw new egw_json_push_exception_not_online('No valid push-backend found!');
+ throw new Exception\NotOnline('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
-{
-
-}
Copied: trunk/egroupware/api/src/Json/PushBackend.php (from r55427, trunk/phpgwapi/inc/class.egw_json_push.inc.php)
URL: http://svn.stylite.de/viewvc/egroupware/trunk/egroupware/api/src/Json/PushBackend.php?p2=trunk/egroupware/api/src/Json/PushBackend.php&p1=trunk/phpgwapi/inc/class.egw_json_push.inc.php&r1=55427&r2=55441&rev=55441&view=diff
==============================================================================
--- trunk/phpgwapi/inc/class.egw_json_push.inc.php (original)
+++ trunk/egroupware/api/src/Json/PushBackend.php Sun Mar 20 14:02:55 2016
@@ -5,85 +5,17 @@
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
- * @subpackage ajax
+ * @subpackage json
* @author Ralf Becker
* @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::$ba