Base layout of the core.
[platal.git] / classes / platal.php
index cec37f2..2a69b72 100644 (file)
@@ -34,8 +34,20 @@ class Platal
     public $path;
     public $argv;
 
+    static private $_page = null;
+
     public function __construct()
     {
+        global $platal, $session, $globals;
+        $platal  =& $this;
+        $globalclass = PL_GLOBALS_CLASS;
+        $globals = new $globalclass();
+        $sessionclass = PL_SESSION_CLASS;
+        $session = new $sessionclass();
+        if (!$session->startAvailableAuth()) {
+            Platal::page()->trigError('DonnĂ©es d\'authentification invalide.');
+        }
+
         $modules    = func_get_args();
         if (is_array($modules[0])) {
             $modules = $modules[0];
@@ -52,7 +64,6 @@ class Platal
             $this->__hooks += $m->handlers();
         }
 
-        global $globals;
         if ($globals->mode == '') {
             pl_redirect('index.html');
         }
@@ -231,13 +242,13 @@ class Platal
         return $s_perms->hasFlagCombination($perms);
     }
 
-    private function call_hook(PlatalPage &$page)
+    private function call_hook(PlPage &$page)
     {
         $hook = $this->find_hook();
         if (empty($hook)) {
             return PL_NOT_FOUND;
         }
-        global $globals;
+        global $globals, $session;
         if ($this->https && !$_SERVER['HTTPS'] && $globals->core->secure_domain) {
             http_redirect('https://' . $globals->core->secure_domain . $_SERVER['REQUEST_URI']);
         }
@@ -247,7 +258,7 @@ class Platal
 
         if ($hook['auth'] > S::v('auth', AUTH_PUBLIC)) {
             if ($hook['type'] & DO_AUTH) {
-                if (!call_user_func(array($globals->session, 'doAuth'))) {
+                if (!$session->start($hook['auth'])) {
                     $this->force_login($page);
                 }
             } else {
@@ -259,9 +270,9 @@ class Platal
         }
 
         $val = call_user_func_array($hook['hook'], $args);
-        if ($val & PL_DO_AUTH) {
+        if ($val == PL_DO_AUTH) {
             // The handler need a better auth with the current args
-            if (!call_user_func(array($globals->session, 'doAuth'))) {
+            if (!$session->start($hook['auth'])) {
                 $this->force_login($page);
             }
             $val = call_user_func_array($hook['hook'], $args);
@@ -269,7 +280,7 @@ class Platal
         return $val;
     }
 
-    public function force_login(PlatalPage &$page)
+    public function force_login(PlPage &$page)
     {
         header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
         if (S::logged()) {
@@ -285,9 +296,7 @@ class Platal
 
     public function run()
     {
-        global $page;
-
-        new_skinned_page('platal/index.tpl');
+        $page =& self::page();
 
         if (empty($this->path)) {
             $this->path = 'index';
@@ -317,6 +326,28 @@ class Platal
             call_user_func_array(array($mod, 'on_subscribe'), $args);
         }
     }
+
+    static public function &page()
+    {
+        global $platal;
+        if (is_null(self::$_page)) {
+            $pageclass = PL_PAGE_CLASS;
+            self::$_page = new $pageclass();
+        }
+        return self::$_page;
+    }
+
+    static public function &session()
+    {
+        global $session;
+        return $session;
+    }
+
+    static public function &globals()
+    {
+        global $globals;
+        return $globals;
+    }
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: