X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2Fplatal.php;h=2d988bccfebd361aa0d6d355a946ee265140a470;hb=857a2b960d47c1ef4990e6ed55bad2ed40681f66;hp=16b19557aaad0fd53fa403357458f633ed65401a;hpb=fed2b6d36f59c4542bd8d6fc0a137342c785d06b;p=platal.git diff --git a/classes/platal.php b/classes/platal.php index 16b1955..2d988bc 100644 --- a/classes/platal.php +++ b/classes/platal.php @@ -1,6 +1,6 @@ buildGlobals(); $globals->init(); - $sessionclass = PL_SESSION_CLASS; - $session = new $sessionclass(); + + /* Get the current session: assign first, then activate the session. + */ + $session = $this->buildSession(); if (!$session->startAvailableAuth()) { - Platal::page()->trigError('Données d\'authentification invalide.'); + Platal::page()->trigError("Données d'authentification invalides."); } $modules = func_get_args(); @@ -84,6 +92,14 @@ abstract class Platal return join('/', array_slice($this->argv, 0, $n)); } + public static function wiki_hook($auth = AUTH_PUBLIC, $perms = 'user', $type = DO_AUTH) + { + return array('hook' => PL_WIKI_HOOK, + 'auth' => $auth, + 'perms' => $perms, + 'type' => $type); + } + protected function find_hook() { $p = $this->path; @@ -101,7 +117,7 @@ abstract class Platal $hook = $this->__hooks[$p]; - if (!is_callable($hook['hook'])) { + if (!is_callable($hook['hook']) && $hook['hook'] != PL_WIKI_HOOK) { return null; } @@ -267,13 +283,14 @@ abstract class Platal } } if ($hook['auth'] != AUTH_PUBLIC && !$this->check_perms($hook['perms'])) { - if (S::admin()) { - $page->trigWarning('Tu accèdes à cette page car tu es administrateur du site.'); - } else { + if (self::notAllowed()) { return PL_FORBIDDEN; } } + if ($hook['hook'] == PL_WIKI_HOOK) { + return PL_WIKI; + } $val = call_user_func_array($hook['hook'], $args); if ($val == PL_DO_AUTH) { // The handler need a better auth with the current args @@ -306,6 +323,9 @@ abstract class Platal case PL_NOT_FOUND: $this->__mods['core']->handler_404($page); break; + + case PL_WIKI: + return PL_WIKI; } $page->assign('platal', $this); @@ -330,6 +350,16 @@ abstract class Platal $page->run(); } + public static function notAllowed() + { + if (S::admin()) { + self::page()->trigWarning('Tu accèdes à cette page car tu es administrateur du site.'); + return false; + } else { + return true; + } + } + public static function load($modname, $include = null) { global $platal; @@ -348,22 +378,65 @@ abstract class Platal } } + public static function assert($cond, $error, $userfriendly) + { + global $globals; + if ($cond === false) { + header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error'); + $file = fopen($globals->spoolroot . '/spool/tmp/assert_erros', 'a'); + fwrite($file, '
' . pl_entities($error) . '
\n'); + fclose($file); + + Platal::page()->kill($userfriendly); + } + } + + public function &buildLogger($uid, $suid = 0) + { + if (defined('PL_LOGGER_CLASS')) { + $class = PL_LOGGER_CLASS; + return new $class($uid, $suid); + } else { + return PlLogger::dummy($uid, $suid); + } + } + + protected function &buildPage() + { + $pageclass = PL_PAGE_CLASS; + $page = new $pageclass(); + return $page; + } + static public function &page() { - global $platal; if (is_null(self::$_page)) { - $pageclass = PL_PAGE_CLASS; - self::$_page = new $pageclass(); + global $platal; + self::$_page = $platal->buildPage(); } return self::$_page; } + protected function &buildSession() + { + $sessionclass = PL_SESSION_CLASS; + $session = new $sessionclass(); + return $session; + } + static public function &session() { global $session; return $session; } + protected function &buildGlobals() + { + $globalclass = PL_GLOBALS_CLASS; + $globals = new $globalclass(); + return $globals; + } + static public function &globals() { global $globals;