]> andersk Git - sql-web.git/blob - lib/joe/site.lib.php
743c061640755947771747e1eb8914343399c5e6
[sql-web.git] / lib / joe / site.lib.php
1 <?php
2 /* Generic Site Classes
3  * 2007/04/09 Joe Presbrey <presbrey@mit.edu>
4  */
5
6 class Site {
7         var $uri, $argv;
8         function __construct($uri) {
9                 $this->uri = $uri;
10                 $this->argv = array_merge(
11                         array_prepend_keys($_COOKIE,'c_'),
12                         array_prepend_keys($_FILES,'f_'),
13                         array_prepend_keys($_GET,'g_'),
14                         array_prepend_keys($_POST,'p_'));
15         }
16         function Start() {
17                 if (isset($_SESSION)) {
18                         $this->argv = array_merge(
19                                 $this->argv,
20                                 array_prepend_keys($_SESSION,'s_'));
21                 }
22         }
23         function Run($MODULE, $METHOD) {
24                 $nCalls = 0;
25                 if (file_exists(strtolower('site/'.$MODULE.'.php'))) {
26                         require_once strtolower('site/'.$MODULE.'.php');
27                         if (class_exists($MODULE)) {
28                                 $page = new $MODULE($this, $METHOD);
29                                 $page->Start();
30                                 $handlers = $page->get_handlers($METHOD);
31                                 foreach($handlers as $handler) {
32                                         if (isset($this->argv[$handler]) &&
33                                                 false !== $page->Run($handler)) {
34                                                 $nCalls++;
35                                         }
36                                 }
37                                 if ($nCalls == 0 && is_callable(array($page, '_default'))) {
38                                         $page->Run('_default');
39                                         $nCalls++;
40                                 }
41                                 $page->Finish();
42                         }
43                 }
44                 return $nCalls;
45         }
46         function Finish() {}
47 }
48
49 class Page {
50         var $site;
51         var $method;
52         var $uri;
53         var $argv;
54         function __construct($site, $method) {
55                 $this->argv = $site->argv;
56                 foreach($this->argv as $k=>$v)
57                         $this->$k = $v;
58                 $this->site = $site;
59                 $this->uri = $site->uri;
60                 $this->method = $method;
61         }
62         function get_handlers() {
63                 $handlers = isset($this->handlers[$this->method]) ?
64                                         $this->handlers[$this->method] : array();
65                 return $handlers;
66         }
67         function has_handler($handler) {
68                 return isset($this->handlers[$this->method]) ?
69                                 in_array($handler, $this->handlers[$this->method]) : false;
70         }
71
72         function Start() {}
73         function Run($handler) {
74                 if (is_callable(array($this, $handler))) {
75                         return array(0, call_user_func(array($this, $handler)));
76                 } else {
77                         return false;
78                 }
79         }
80         function Finish() {}
81 }
This page took 0.028537 seconds and 3 git commands to generate.