* @package gulliver.system * @access private */ class HttpProxyController { /** * * @var array - private array to store proxy data */ private $__data__ = array(); /** * * @var object - private object to store the http request data */ private $__request__; public $jsonResponse = true; private $sendResponse = true; public function __construct() { $this->__request__ = new stdclass(); } /** * Magic setter method * * @param string $name * @param string $value */ public function __set($name, $value) { //echo "Setting '$name' to '$value'\n"; $this->__data__[$name] = $value; } /** * Magic getter method * * @param string $name * @return string or NULL if the internal var doesn't exist */ public function __get($name) { //echo "Getting '$name'\n"; if (array_key_exists($name, $this->__data__)) { return $this->__data__[$name]; } /*$trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null;*/ } /** * Magic isset method * * @param string $name */ public function __isset($name) { //echo "Is '$name' set?\n"; return isset($this->__data__[$name]); } /** * Magic unset method * * @param string $name */ public function __unset($name) { //echo "Unsetting '$name'\n"; unset($this->__data__[$name]); } /** * call to execute a internal proxy method and handle its exceptions * * @param string $name */ public function call($name) { $result = new stdClass(); try { $result = $this->$name($this->__request__); if (! $this->jsonResponse) { return null; } if (! $result) { $result = $this->__data__; } } catch (Exception $e) { $result->success = false; $result->message = $result->msg = $e->getMessage(); switch (get_class($e)) { case 'Exception': $error = "SYSTEM ERROR"; break; case 'PMException': $error = "PROCESSMAKER ERROR"; break; case 'PropelException': $error = "DATABASE ERROR"; break; case 'UserException': $error = "USER ERROR"; break; } $result->error = $e->getMessage(); $result->exception = new stdClass(); $result->exception->class = get_class($e); $result->exception->code = $e->getCode(); $result->exception->trace = $e->getTraceAsString(); } if ($this->sendResponse) { print G::json_encode($result); } } /** * Set the http request data * * @param array $data */ public function setHttpRequestData($data) { if (is_array($data)) { foreach ($data as $key => $value) { $this->__request__->{$key} = $value; } } else { $this->__request__ = $data; } } public function setJsonResponse($bool) { $this->jsonResponse = $bool; } /** * Send response to client * * @param boolean $val */ public function setSendResponse($val) { $this->sendResponse = $val; } }