X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fplatal.php;h=4560f6ef5d3ea433bc0a7a81fd53075ab4b62d13;hb=2055d886e01ef029b4eee998cea108351d74c188;hp=06002ed5bdaef554608dc2ce911720fbe62f96e2;hpb=786bffb570bfc2f5ff1dad386a9558501d4c16e8;p=platal.git diff --git a/classes/platal.php b/classes/platal.php index 06002ed..4560f6e 100644 --- a/classes/platal.php +++ b/classes/platal.php @@ -72,7 +72,7 @@ abstract class PlHook } } if (!$this->checkPerms()) { - if (!Platal::notAllowed()) { + if (Platal::notAllowed()) { return PL_FORBIDDEN; } } @@ -219,7 +219,6 @@ class PlHookTree } } - abstract class Platal { private $mods; @@ -267,7 +266,7 @@ abstract class Platal $this->mods[$module] = $m = PLModule::factory($module); $hooks = $m->handlers(); foreach ($hooks as $path=>$hook) { - $this->hooks->addChild(split('/', $path), $hook); + $this->hooks->addChild(explode('/', $path), $hook); } } @@ -302,7 +301,7 @@ abstract class Platal protected function find_hook() { - $p = split('/', $this->path); + $p = explode('/', $this->path); list($hook, $matched, $remain, $aliased) = $this->hooks->findChild($p); if (empty($hook)) { return null; @@ -318,7 +317,7 @@ abstract class Platal public function near_hook() { - $p = split('/', $this->path); + $p = explode('/', $this->path); list($hook, $matched, $remain, $aliased) = $this->hooks->findNearestChild($p); if (empty($hook)) { return null; @@ -360,18 +359,29 @@ abstract class Platal $this->path = 'index'; } - $page->assign('platal', $this); - switch ($this->call_hook($page)) { - case PL_FORBIDDEN: - $this->mods['core']->handler_403($page); - break; + try { + $page->assign('platal', $this); + switch ($this->call_hook($page)) { + case PL_FORBIDDEN: + $this->mods['core']->handler_403($page); + break; - case PL_NOT_FOUND: - $this->mods['core']->handler_404($page); - break; + case PL_NOT_FOUND: + $this->mods['core']->handler_404($page); + break; - case PL_WIKI: - return PL_WIKI; + case PL_WIKI: + return PL_WIKI; + } + } catch (Exception $e) { + header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error'); + PlErrorReport::report($e); + if (self::globals()->debug) { + $page->kill(pl_entities($e->getMessage()) + . '
' . pl_entities("" . $e) . '
'); + } else { + $page->kill(pl_entities($e->getMessage())); + } } $page->assign('platal', $this); @@ -426,19 +436,13 @@ abstract class Platal public static function assert($cond, $error, $userfriendly = null) { - 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); - if ($userfriendly == null) { $userfriendly = "Une erreur interne s'est produite. Merci de réessayer la manipulation qui a déclenché l'erreur ; si cela ne fonctionne toujours pas, merci de nous signaler le problème rencontré."; } - Platal::page()->kill($userfriendly); + throw new PlException($userfriendly, $error); } }