*/ class Site { var $uri, $argv; function __construct($uri) { $this->uri = $uri; $this->argv = array_merge( array_prepend_keys($_COOKIE,'c_'), array_prepend_keys($_FILES,'f_'), array_prepend_keys($_GET,'g_'), array_prepend_keys($_POST,'p_')); } function Start() { if (isset($_SESSION)) { $this->argv = array_merge( $this->argv, array_prepend_keys($_SESSION,'s_')); } } function Run($MODULE, $METHOD) { $nCalls = 0; if (file_exists(strtolower('site/'.$MODULE.'.php'))) { require_once strtolower('site/'.$MODULE.'.php'); if (class_exists($MODULE)) { $page = new $MODULE($this, $METHOD); $page->Start(); $handlers = $page->get_handlers($METHOD); foreach($handlers as $handler) { if (isset($this->argv[$handler]) && false !== $page->Run($handler)) { $nCalls++; } } if ($nCalls == 0 && is_callable(array($page, '_default'))) { $page->Run('_default'); $nCalls++; } $page->Finish(); } } return $nCalls; } function Finish() {} } class Page { var $site; var $method; var $uri; var $argv; function __construct($site, $method) { $this->argv = $site->argv; foreach($this->argv as $k=>$v) $this->$k = $v; $this->site = $site; $this->uri = $site->uri; $this->method = $method; } function get_handlers() { $handlers = isset($this->handlers[$this->method]) ? $this->handlers[$this->method] : array(); return $handlers; } function has_handler($handler) { return isset($this->handlers[$this->method]) ? in_array($handler, $this->handlers[$this->method]) : false; } function Start() {} function Run($handler) { if (is_callable(array($this, $handler))) { return array(0, call_user_func(array($this, $handler))); } else { return false; } } function Finish() {} }