| Current Path : /home/zieirix/www/libraries/rokcommon/RokCommon/Ajax/ |
| Current File : /home/zieirix/www/libraries/rokcommon/RokCommon/Ajax/AbstractModel.php |
<?php
/**
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*/
defined('ROKCOMMON') or die;
/**
*
*/
class RokCommon_Ajax_AbstractModel implements RokCommon_Ajax_Model
{
/**
* @param $action
* @param $params
*
* @throws Exception
* @throws RokCommon_Ajax_Exception
* @return RokCommon_Ajax_Result
*/
public function run($action, $params)
{
try {
set_error_handler(array($this, 'errorHandler'));
$action = (empty($action)) ? 'default' : $action;
if (!method_exists($this, $action)) {
throw new RokCommon_Ajax_Exception('The ' . $action . ' action does not exist for this model');
}
$result = $this->{$action}($params);
restore_error_handler();
return $result;
} catch (Exception $e) {
throw $e;
}
}
/**
* @param $errno
* @param $errstr
* @param $errfile
* @param $errline
* @return bool
* @throws Exception
*/
public function errorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return false;
}
switch ($errno) {
case E_USER_ERROR:
case E_RECOVERABLE_ERROR:
throw new Exception(sprintf('%s %s on %s line %s', $this->getErrorType($errno), $errstr, $errfile, $errline));
break;
default:
error_log(sprintf('%s %s on %s line %s', $this->getErrorType($errno), $errstr, $errfile, $errline));
break;
}
return true;
}
/**
* @param $type
* @return string
*/
protected function getErrorType($type)
{
switch ($type) {
case E_ERROR: // 1 //
return 'E_ERROR';
case E_WARNING: // 2 //
return 'E_WARNING';
case E_PARSE: // 4 //
return 'E_PARSE';
case E_NOTICE: // 8 //
return 'E_NOTICE';
case E_CORE_ERROR: // 16 //
return 'E_CORE_ERROR';
case E_CORE_WARNING: // 32 //
return 'E_CORE_WARNING';
case E_CORE_ERROR: // 64 //
return 'E_COMPILE_ERROR';
case E_CORE_WARNING: // 128 //
return 'E_COMPILE_WARNING';
case E_USER_ERROR: // 256 //
return 'E_USER_ERROR';
case E_USER_WARNING: // 512 //
return 'E_USER_WARNING';
case E_USER_NOTICE: // 1024 //
return 'E_USER_NOTICE';
case E_STRICT: // 2048 //
return 'E_STRICT';
case E_RECOVERABLE_ERROR: // 4096 //
return 'E_RECOVERABLE_ERROR';
case E_DEPRECATED: // 8192 //
return 'E_DEPRECATED';
case E_USER_DEPRECATED: // 16384 //
return 'E_USER_DEPRECATED';
}
return "";
}
/**
* @param RokCommon_Ajax_Result $result
*/
protected function sendDisconnectingReturn(RokCommon_Ajax_Result $result)
{
// clean outside buffers;
while (@ob_end_clean()) ;
header("Connection: close\r\n");
header('Content-type: text/plain');
session_write_close();
ignore_user_abort(true);
ob_start();
echo json_encode($result);
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // Strange behaviour, will not work
flush(); // Unless both are called !
while (@ob_end_clean()) ;
if (!ini_get('safe_mode') && strpos(ini_get('disable_functions'), 'set_time_limit') === false) {
@set_time_limit(0);
} else {
error_log('RokGallery: PHP safe_mode is on or the set_time_limit function is disabled. This can cause timeouts while processing a job if your max_execution_time is not set high enough');
}
}
}