more simplifications
[platal.git] / include / wiki.inc.php
index 7485093..cb05c88 100644 (file)
  ***************************************************************************/
 
 function wiki_pagename() {
-    if (!Env::get('n')) {
+    if (!Get::v('n')) {
         return null;
     }
 
-    $words = explode('/', trim(Env::get('n'), '/'));
+    $words = explode('/', trim(Get::v('n'), '/'));
     if (count($words) == 2) {
         return join('.', $words);
     }
@@ -33,8 +33,7 @@ function wiki_pagename() {
     $b = array_pop($words);
     $a = array_pop($words);
 
-    global $globals;
-    redirect($globals->baseurl.'/'.$a.'/'.$b);
+    pl_redirect($a.'/'.$b);
 }
 
 function wiki_work_dir() {
@@ -44,76 +43,94 @@ function wiki_work_dir() {
 
 function wiki_clear_all_cache()
 {
-    system("rm -f ".wiki_work_dir()."/cache_*");
+    system('rm -f '.wiki_work_dir().'/cache_*');
 }
 
-// editing pages are not static but used templates too, so we used
-// temp template files containing result from wiki
-function wiki_create_tmp($content) {
-    $tmpfile = tempnam(wiki_work_dir(), "temp_");
-    $f = fopen($tmpfile, 'w');
-    fputs($f, $content);
-    fclose($f);
-    return $tmpfile;
+function wiki_perms_options() {
+    return array('public' => 'Public', 'logged' => 'Connecté',
+                  'mdp' => 'Authentifié', 'admin' => 'Admin');
 }
 
-function wiki_clean_tmp() {
-    // clean old tmp files (more than one hour)
-    $wiki_work_dir = wiki_work_dir();
-    $dh = opendir(wiki_work_dir());
-    $time = time();
-    while (($file = readdir($dh)) !== false) {
-        if (strpos($file, 'temp_') === 0) {
-            $created = filectime($wiki_work_dir.'/'.$file);
-            if ($time-$created > 60 * 60)
-                @unlink($wiki_work_dir.'/'.$file);
+function wiki_get_perms($n)
+{
+    $file  = wiki_work_dir().'/'.str_replace('/', '.', $n);
+    $lines = explode("\n", @file_get_contents($file));
+    foreach ($lines as $line) {
+        list($k, $v) = explode('=', $line, 2);
+        if ($k == 'platal_perms') {
+            return explode(':', $v);
         }
     }
+    return array('logged', 'admin');
 }
 
-function wiki_assign_auth() {
-    global $page, $wiki_auths;
-    $page->assign('true',       true);
-    $page->assign('public',     true);
-    $page->assign('logged',     S::logged());
-    $page->assign('identified', S::identified());
-    $page->assign('has_perms',  S::has_perms());
+function wiki_putfile($f, $s)
+{
+    $fp = fopen($f, 'w');
+    fputs($fp, $s);
+    fclose($fp);
 }
 
-// cannot be in a function because pmwiki use all vars as if it was globals
-if ($n = wiki_pagename()) {
-    $wiki_template  = wiki_work_dir().'/cache_'.$n.'.tpl';
-    $tmpfile_exists = file_exists($wiki_template);
+function wiki_set_perms($n, $pr, $pw)
+{
+    $file  = wiki_work_dir().'/'.str_replace('/', '.', $n);
+    if (!file_exists($file))
+        return false;
+
+    $p = $pr . ':' . $pw;
 
-    if (Env::get('action') || !$tmpfile_exists) {
-        if ($tmpfile_exists) {
-            @unlink($wiki_template);
-            $page->clear_compiled_tpl($wiki_template);
+    $lines = explode("\n", file_get_contents($file));
+    foreach ($lines as $i => $line) {
+        list($k, $v) = explode('=', $line, 2);
+        if ($k == 'platal_perms') {
+            $lines[$i] = 'platal_perms='.$p;
+            wiki_putfile($file, join("\n", $lines));
+            return true;
         }
+    }
 
-        // we leave pmwiki do whatever it wants and store everything
-        ob_start();
-        require_once($globals->spoolroot.'/wiki/pmwiki.php');
+    array_splice($lines, 1, 0, array('platal_perms='.$p));
+    wiki_putfile($file, join("\n", $lines));
+    return true;
+}
 
-        $wikiAll = ob_get_clean();
-        // the pmwiki skin we are using (almost empty) has these keywords:
-        $i = strpos($wikiAll, "<!--/HeaderText-->");
-        $j = strpos($wikiAll, "<!--/PageLeftFmt-->", $i);
+function wiki_may_have_perms($perm) {
+    switch ($perm) {
+      case 'public': return true;
+      case 'logged': return S::logged();
+      case 'mdp':    return S::logged();
+      default:       return S::has_perms();
     }
+}
 
-    if (Env::get('action')) {
-        // clean old tmp files
-        wiki_clean_tmp();
-        $page->assign('xorg_extra_header', substr($wikiAll, 0, $i));
-
-        // create new tmp files with editing page from wiki engine
-        $wiki_template = wiki_create_tmp(substr($wikiAll, $j));
-    } else {
-        if (!$tmpfile_exists) {
-            $f = fopen($wiki_template, 'w');
-            fputs($f, substr($wikiAll, $j));
-            fclose($f);
+function wiki_apply_perms($perm) {
+    global $page, $platal;
+
+    switch ($perm) {
+      case 'public':
+        return;
+
+      case 'logged':
+        if (empty($GLOBALS['IS_XNET_SITE']) && !XorgSession::doAuthCookie()) {
+            $platal = new Platal();
+            $platal->force_login($page);
         }
+        if ($GLOBALS['IS_XNET_SITE'] && !$_SESSION['session']->doAuth()) {
+            $platal = new Xnet();
+            $platal->force_login($page);
+        }
+        return;
+
+      default:
+        if (!$_SESSION['session']->doAuth()) {
+            $platal = empty($GLOBALS['IS_XNET_SITE']) ? new Platal() : new Xnet();
+            $platal->force_login($page);
+        }
+        if ($perm == 'admin') {
+            check_perms();
+        }
+        return;
     }
 }
+
 ?>