'u','plugin'=>'d')); //User must have user update right and delete plugin right to perform this action
* ```.
*
* @param function action/code to execute
* @param array Array wich contain right to execute action
*
* @return print json response
*/
public static function write($f, $p=array()) {
global $myUser;
header('content-type:application/json');
$response = array();
set_error_handler(function ($level, $error, $file, $line) { throw new Exception($error." \r\n\r\n ".$file.' - L '.$line.'');});
try {
foreach ($p as $scope => $right) {
if (!$myUser->can($scope, $right))
throw new Exception('Vous ne disposez pas des droits suffisants pour effectuer cette action');
}
$f($response);
} catch (Exception $e) {
$response['error'] = $e->getMessage();
$response['errorCode'] = $e->getCode();
$response['trace'] = exception_trace($e);
if($myUser->superadmin || $_SERVER['HTTP_HOST'] == '127.0.0.1'){
$traces = $e->getTrace();
$traceIndex = 0;
//Si c'est une erreur de bound sql / data ou une erreur de syntaxe sql
if($e->getCode() == 'HY093' || $e->getCode() == '42000'){
//On recupere la premiere trace qui n'est pas Entity ou Action (trace significative)
foreach($traces as $i => $currentTrace){
if(isset($currentTrace['file']) && in_array(basename($currentTrace['file']), array('Entity.class.php','Action.class.php'))) continue;
$traceIndex = $i;
break;
}
//On affiche la requete et les datas
if(isset($traces[1]) && $traces[1]['function']=='customQuery'){
if(isset($traces[1]['args'])) $response['error'] .= ''.(is_string($traces[1]['args'][0]) ? $traces[1]['args'][0]:json_encode($traces[1]['args'][0])).'
';
if(isset($traces[1]['args']) && isset($traces[1]['args'][1])){
$plainTrace = $traces[1]['args'][1];
if(is_array($plainTrace)) $plainTrace = implode(',',$plainTrace);
if(is_object($plainTrace)) $plainTrace = implode(',',(array)$plainTrace);
$response['error'] .= '
['.$plainTrace.']
';
}
}
}
$response['line'] = isset($traces[$traceIndex]['line']) ? $traces[$traceIndex]['line'] : 0;
$response['file'] = isset( $traces[$traceIndex]['file'])? $traces[$traceIndex]['file'] : '';
$response['trace'] = ''.exception_trace($e).''; } } echo json_encode($response); restore_error_handler(); } public static function register($name,$f) { $GLOBALS['actions'][$name] = $f; } public static function run($name, &$response) { if(!isset($GLOBALS['actions'][$name])) return; $functionName = $GLOBALS['actions'][$name]; call_user_func_array($functionName, array(&$response)); } }