Add possibility to declare wiki hooks.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 20 Mar 2010 13:51:12 +0000 (14:51 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 20 Mar 2010 13:53:28 +0000 (14:53 +0100)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
classes/platal.php
classes/plmodule.php
include/run.inc.php [new file with mode: 0644]

index 6d32374..f0569d6 100644 (file)
@@ -22,6 +22,8 @@
 define('PL_DO_AUTH',   300);
 define('PL_FORBIDDEN', 403);
 define('PL_NOT_FOUND', 404);
+define('PL_WIKI',      500);
+define('PL_WIKI_HOOK', '@@WIKI@@');
 
 abstract class Platal
 {
@@ -84,6 +86,14 @@ abstract class Platal
         return join('/', array_slice($this->argv, 0, $n));
     }
 
+    public static function wiki_hook($auth = AUTH_PUBLIC, $perms = 'user', $type = DO_AUTH)
+    {
+        return array('hook'  => PL_WIKI_HOOK,
+                     'auth'  => $auth,
+                     'perms' => $perms,
+                     'type'  => $type);
+    }
+
     protected function find_hook()
     {
         $p = $this->path;
@@ -272,6 +282,9 @@ abstract class Platal
             }
         }
 
+        if ($hook['hook'] == PL_WIKI_HOOK) {
+            return PL_WIKI;
+        }
         $val = call_user_func_array($hook['hook'], $args);
         if ($val == PL_DO_AUTH) {
             // The handler need a better auth with the current args
@@ -304,6 +317,9 @@ abstract class Platal
           case PL_NOT_FOUND:
             $this->__mods['core']->handler_404($page);
             break;
+
+          case PL_WIKI:
+            return PL_WIKI;
         }
 
         $page->assign('platal', $this);
index 1dbdaff..33de370 100644 (file)
@@ -56,6 +56,13 @@ abstract class PLModule
                      'type'  => $type);
     }
 
+    /** Register a hook that points to a wiki page.
+     */
+    public function make_wiki_hook($auth = AUTH_PUBLIC, $perms = 'user', $type = DO_AUTH)
+    {
+        return Platal::wiki_hook($auth, $perms, $type);
+    }
+
     /** Include a 'module-specific' file.
      * Module specific includes must be in the in the path modules/{modulename}.
      */
diff --git a/include/run.inc.php b/include/run.inc.php
new file mode 100644 (file)
index 0000000..728e13f
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+$class = PL_CLASS;
+$platal = new $class();
+if ($platal->run() != PL_WIKI) {
+    exit;
+}
+
+/*** WIKI CODE ***/
+
+include pl_core_include('wiki.engine.inc.php');
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>