path = trim(Get::_get('p', null), '/'); $this->__mods = array(); $this->__hooks = array(); foreach (glob(dirname(__FILE__).'/../modules/*.php') as $module) { $module = basename($module, '.php'); $m =& PLModule::factory($this, $module); $this->__mods[$module] =& $m; $this->__hooks += $m->handlers(); } krsort($this->__hooks); } function load_class($cls) { require_once dirname(__FILE__).'/../classes/'.$cls.'.php'; } function call_hook(&$page) { $p = $this->path; while ($p) { if (array_key_exists($p, $this->__hooks)) break; $p = substr($p, 0, strrpos($p, '/')); } if (empty($this->__hooks[$p])) { return PL_NOT_FOUND; } $hook = $this->__hooks[$p]; if (!is_callable($hook['hook'])) { return PL_NOT_FOUND; } $args = explode('/', substr($this->path, strlen($p))); $args[0] = $p; $this->argv = $args; $args[0] = &$page; if ($hook['auth'] > Session::get('auth', AUTH_PUBLIC)) { $_SESSION['session']->doAuth($page); } return call_user_func_array($hook['hook'], $args); } function run() { global $page; new_skinned_page('index.tpl', AUTH_PUBLIC); if (empty($this->path)) { $this->__mods['core']->handler_index($page); } else 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; } $page->assign_by_ref('platal', $this); $page->run(); } } ?>