X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2FPlatal.php;h=88e06501699d70d847b83438c57e45b957ef8653;hb=3aec1c213ff4bc67300f938dde79a10b44285f31;hp=098c0d8e88e01f5ee8f04ffab9ea35077e1c76d9;hpb=db722a2ebd868fb61b996be3564e6ee6ba119867;p=platal.git diff --git a/classes/Platal.php b/classes/Platal.php index 098c0d8..88e0650 100644 --- a/classes/Platal.php +++ b/classes/Platal.php @@ -19,8 +19,6 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -define('PL_OK', 0); -define('PL_NEEDLOGIN', 1); define('PL_FORBIDDEN', 403); define('PL_NOT_FOUND', 404); @@ -43,11 +41,25 @@ class Platal array_unshift($modules, 'core'); foreach ($modules as $module) { - $this->__mods[$module] = $m = PLModule::factory($this, $module); + $this->__mods[$module] = $m = PLModule::factory($module); $this->__hooks += $m->handlers(); } } + function pl_self($n = null) + { + if (is_null($n)) + return $this->path; + + if ($n >= 0) + return join('/', array_slice($this->argv, 0, $n + 1)); + + if ($n <= -count($this->argv)) + return $this->argv[0]; + + return join('/', array_slice($this->argv, 0, $n)); + } + function find_hook() { $p = $this->path; @@ -86,22 +98,38 @@ class Platal $args = $this->argv; $args[0] = &$page; - if ($hook['auth'] > Session::get('auth', AUTH_PUBLIC)) { - $_SESSION['session']->doAuth($page); + if ($hook['auth'] > S::v('auth', AUTH_PUBLIC)) { + // FIXME: don't use 'session' object anymore + if (!$_SESSION['session']->doAuth()) { + $this->force_login($page); + } } return call_user_func_array($hook['hook'], $args); } + function force_login(&$page) + { + if (S::logged() and !$new_name) { + $page->changeTpl('password_prompt_logged.tpl'); + $page->addJsLink('javascript/do_challenge_response_logged.js'); + } else { + $page->changeTpl('password_prompt.tpl'); + $page->addJsLink('javascript/do_challenge_response.js'); + } + $page->run(); + } + function run() { global $page; - new_skinned_page('index.tpl', AUTH_PUBLIC); + new_skinned_page('index.tpl'); if (empty($this->path)) { - $this->__mods['core']->handler_index($page); - } else + $this->path = 'index'; + } + switch ($this->call_hook($page)) { case PL_FORBIDDEN: $this->__mods['core']->handler_403($page);