New feature for Gulliver framework to support Controllers & HttpProxyController classes handling

This commit is contained in:
Erik Amaru Ortiz
2011-02-26 17:15:50 +00:00
parent d724c9041b
commit 186c341d16
7 changed files with 297 additions and 17 deletions

View File

@@ -22,16 +22,16 @@
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
*/
session_start();
if( ! isset($_GET['p']) )
if ( isset ( $_SESSION['phpFileNotFound'] ) )
$uri = $_SESSION['phpFileNotFound'];
else
$uri = 'undefined';
else
$uri = $_GET['p'];
session_start();
if ( isset ( $_SESSION['phpFileNotFound'] ) )
$uri = $_SESSION['phpFileNotFound'];
else if ( isset ( $_GET['l'] ) )
$uri = $_GET['l'];
else
$uri = 'undefined';
$referer = isset ( $_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$referer = isset ( $_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $_SESSION['phpLastFileFound'];
$ERROR_TEXT = "404 Not Found ";
$ERROR_DESCRIPTION = "

View File

@@ -0,0 +1,115 @@
<?php
/**
* Controller
* @author Erik Amaru Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
* @package gulliver.system
* @access private
*/
class Controller
{
/**
* @var array - private array to store proxy data
*/
private $__data__ = array();
/**
* @var object - private object to store the http request data
*/
private $__request__;
private $headPublisher;
public function __construct()
{
$this->headPublisher = headPublisher::getSingleton();
}
/**
* 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)
{
//echo __CLASS__;
try {
$this->$name($this->__request__);
} catch (Exception $e) {
new PMException($e->getMessage(), 1);
}
}
/**
* Set the http request data
*
* @param array $data
*/
public function setHttpRequestData($data)
{
if( is_array($data) ) {
while( $var = each($data) )
$this->__request__->$var['key'] = $var['value'];
} else
$this->__request__ = $data;
}
}

View File

@@ -1165,7 +1165,7 @@ class G
}
$_SESSION['phpFileNotFound'] = $file;
G::header("location: /errors/error404.php?p=$filename");
G::header("location: /errors/error404.php?l=".$_SERVER['REQUEST_URI']);
}
switch ( strtolower($typefile ) ) {

View File

@@ -0,0 +1,116 @@
<?php
/**
* HttpProxyController
* @author Erik Amaru Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
* @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__;
/**
* 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)
{
//echo __CLASS__;
try {
$this->$name($this->__request__);
$result = $this->__data__;
} catch (Exception $e) {
$result->success = false;
$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 = $error;
$result->exception->class = get_class($e);
$result->exception->code = $e->getCode();
}
print json_encode($result);
}
/**
* Set the http request data
*
* @param array $data
*/
public function setHttpRequestData($data)
{
if( is_array($data) ) {
while( $var = each($data) )
$this->__request__->$var['key'] = $var['value'];
} else
$this->__request__ = $data;
}
}

View File

@@ -0,0 +1,17 @@
<?php
/**
* HttpProxyController
* @author Erik Amaru Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
* @package gulliver.system
* @access public
*/
class PMException extends Exception
{
public function __construct($message, $code = 0, $previous = null) {
parent::__construct($message, 1, $previous);
}
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}
}