if ($this->hasType(DO_AUTH)) {
if (!$session->start($this->auth)) {
$platal->force_login($page);
+ return PL_FORBIDDEN;
}
} else {
return PL_FORBIDDEN;
}
}
if (!$this->checkPerms()) {
- if (!Platal::notAllowed()) {
+ if (Platal::notAllowed()) {
return PL_FORBIDDEN;
}
}
}
}
-
abstract class Platal
{
private $mods;
public $ns;
public $path;
- public $argv;
+ public $argv = array();
static private $_page = null;
$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);
}
}
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;
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;
$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())
+ . '<pre>' . pl_entities("" . $e) . '</pre>');
+ } else {
+ $page->kill(pl_entities($e->getMessage()));
+ }
}
$page->assign('platal', $this);
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, '<pre>' . pl_entities($error) . '</pre>\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);
}
}