wiki sur xnet
authorx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Tue, 6 Jun 2006 07:16:33 +0000 (07:16 +0000)
committerx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Tue, 6 Jun 2006 07:16:33 +0000 (07:16 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@296 839d8a87-29fc-0310-9880-83ba4fa771e5

ChangeLog
hooks/xnet.inc.php
htdocs.net/css/wiki.css [new file with mode: 0644]
htdocs.net/wiki.php [new file with mode: 0644]
htdocs/wiki.php
include/wiki.inc.php [new file with mode: 0644]
include/xnet.inc.php
include/xnet/page.inc.php
include/xorg.inc.php
plugins/pmwiki.config.php
plugins/pmwiki.platalAuth.php

index bc75823..40ab164 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,10 @@ New :
     * Geoloc :
             Dynamic maps using geodesix plugin                              -Car
 
+    * Xnet :
+            Use wiki from Xnet.                                             -Car
+            Use wiki for group pages.                                       -Car
+
 Bug/Wish :
 
     * Admin :
index c82ab8c..1694bab 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2004 Polytechnique.org                              *
+ *  Copyright (C) 2003-2006 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -26,7 +26,8 @@
 class XnetConfig
 {
     var $secret       = '';
-    var $evts_domain = '';
+    var $evts_domain  = '';
+    var $wiki         = false;
 }
 
 // }}}
diff --git a/htdocs.net/css/wiki.css b/htdocs.net/css/wiki.css
new file mode 100644 (file)
index 0000000..f298536
--- /dev/null
@@ -0,0 +1,35 @@
+div.frame {
+    margin: 0px;
+    padding: 8px 2px;
+    float: right;
+    margin: 5px 0px 5px 5px;
+}
+
+table.quickref       {
+    margin-top 1em: padding: 0px;
+    border: 1px dotted #aaaaaa;
+    font-size: 95%;
+}
+
+table.quickref tr    {
+    padding 0px;
+    margin: 0px;
+}
+
+table.quickref td    {
+    margin: 0px;
+    padding: 4px;
+    border-top: 1px dotted #aaaaaa;
+}
+
+#text { width:800px; }
+.diffbox { border:1px #999999 solid; margin-top:1.33em; }
+.diffauthor { font-weight:bold; }
+.diffchangesum { font-weight:bold; }
+.difftime { font-family:verdana,sans-serif; font-size:66%; background-color:#dddddd; }
+.difftype { clear:both; font-family:verdana,sans-serif; font-size:66%; font-weight:bold; }
+.diffadd { border-left:5px #99ff99 solid; padding-left:5px; }
+.diffdel { border-left:5px #ffff99 solid; padding-left:5px; }
+.diffrestore { clear:both; font-family:verdana,sans-serif; font-size:66%; margin:1.5em 0px; }
+a.varlink { text-decoration:none; }
+    
diff --git a/htdocs.net/wiki.php b/htdocs.net/wiki.php
new file mode 100644 (file)
index 0000000..a021b2f
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2006 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                *
+ ***************************************************************************/
+
+require_once("xnet.inc.php");
+
+// this page is to create a smarty template page from a wiki file
+// the wiki engine used is pmwiki.
+// the templates created are stored in wiki.d/cache_wikiword.tpl
+
+// some page can be seen by everybody (public), but to validate a password
+// if we arrive here before setting new access we need to try an auth
+new_page('wiki.tpl', Env::has('response') ? AUTH_MDP : AUTH_PUBLIC);
+
+if ($globals->wiki->wikidir && $globals->xnet->wiki) {
+    $wikisite = 'xnet';
+    function more_wiki_config() {
+        global $Conditions, $DefaultPasswords;
+        $Conditions['has_perms'] = has_perms() || may_update();
+        $Conditions['is_member'] = is_member();
+        $DefaultPasswords['read'] = 'is_member:';
+    }
+    require_once("wiki.inc.php");
+    new_page($wiki_template, AUTH_PUBLIC);
+    wiki_assign_auth();
+}
+
+$page->setType($globals->asso('cat'));
+$page->assign('xorg_extra_header', "<script type='text/JavaScript'>\n<!--\nNix={map:null,convert:function(a){Nix.init();var s='';for(i=0;i<a.length;i++){var b=a.charAt(i);s+=((b>='A'&&b<='Z')||(b>='a'&&b<='z')?Nix.map[b]:b);}return s;},init:function(){if(Nix.map!=null)return;var map=new Array();var s='abcdefghijklmnopqrstuvwxyz';for(i=0;i<s.length;i++)map[s.charAt(i)]=s.charAt((i+13)%26);for(i=0;i<s.length;i++)map[s.charAt(i).toUpperCase()]=s.charAt((i+13)%26).toUpperCase();Nix.map=map;},decode:function(a){document.write(Nix.convert(a));}}\n//-->\n</script>\n");
+$page->assign('is_member', is_member());
+$page->assign('has_perms', has_perms() || may_update());
+
+$page->addCssLink('css/wiki.css');
+$page->useMenu();
+
+$page->run();
+?>
index 26a3342..aa54451 100644 (file)
@@ -29,99 +29,14 @@ require_once("xorg.inc.php");
 // if we arrive here before setting new access we need to try an auth
 new_skinned_page('wiki.tpl', Env::has('response') ? AUTH_MDP : AUTH_PUBLIC);
 
-function assign_auth()
-{
-    global $page;
-    $page->assign('logged', logged());
-    $page->assign('identified', identified());
-    $page->assign('has_perms', has_perms());
-    $page->assign('public', true);
-    $page->assign('wiki_admin', has_perms() && identified());
-}
-
 if ($globals->wiki->wikidir) {
-       // the wiki keword is given in the n var
-       if ($n = Env::get('n', false))
-       {
-         // Get the correcti wiki keywords
-         $n = str_replace('/', '.', $n);
-         $keywords = explode('.', $n);
-         $count = count($keywords);
-         if ($count == 1)
-           $n = $keywords[0].".".$keywords[0];
-         else
-           $n = $keywords[$count - 2].".".$keywords[$count - 1];
-         if (($urln = str_replace('.', '/', $n)) != Env::get('n') &&
-               $n != Env::get('n'))
-         {
-           header("Location: ".$globals->baseurl.'/'.$urln);
-           die();
-         }
-         $_REQUEST['n'] = $n;
-           
-         $dir_wiki_tmp = '../spool/wiki.d/';
-         $tpl_name = 'cache_'.$n.'.tpl';
-         $short_tpl = $dir_wiki_tmp.$tpl_name;
-         $dir_tpl = $globals->spoolroot.'templates/'.$dir_wiki_tmp;
-         $tpl = $globals->spoolroot.'templates/'.$short_tpl;
-         $tmpfile_exists = file_exists($tpl);
-
-         // don't recreate the tpl if it already exists
-         if (Env::get('action') || !$tmpfile_exists)
-         {
-           if ($tmpfile_exists) {
-             unlink($tpl);
-             $templates_cache_dir = '../spool/templates_c/';
-          $dh  = opendir($templates_cache_dir);
-          while (false !== ($filename = readdir($dh))) if (strpos($filename, $tpl_name) !== false)
-            unlink($templates_cache_dir.$filename);
-           }
-
-           // we leave pmwiki do whatever it wants and store everything
-           ob_start();
-           require_once(dirname(dirname(__FILE__)).'/'.$globals->wiki->wikidir.'/pmwiki.php');
-
-           $wikiAll = ob_get_clean();
-           // the pmwiki skin we are using (almost empty) has these keywords:
-           $i = strpos($wikiAll, "<!--/HeaderText-->");
-           $j = strpos($wikiAll, "<!--/PageLeftFmt-->", $i);
-           
-         }
-         if (Env::get('action'))
-         {
-           // clean old tmp files (more than one hour)
-           $dh = opendir($dir_wiki_tmp);
-           $time = time();
-           while (($file = readdir($dh)) !== false)
-           {
-             if (strpos($file, 'temp_') === 0)
-             {
-               $created = filectime($dir_wiki_tmp.$file);
-               if ($time-$created > 60 * 60)
-                 unlink($dir_wiki_tmp.$file);
-             }
-           }
-         
-           $page->assign('xorg_extra_header', substr($wikiAll, 0, $i));
-           $tmp_tpl = tempnam($dir_tpl, "temp_");
-           $f = fopen($tmp_tpl, 'w');
-           fputs($f, substr($wikiAll, $j));
-           fclose($f);
-           new_skinned_page($tmp_tpl, AUTH_PUBLIC);
-         } else {
-           if (!$tmpfile_exists)
-           {
-               $f = fopen($tpl, 'w');
-               fputs($f, substr($wikiAll, $j));
-               fclose($f);
-           }
-           new_skinned_page($short_tpl, AUTH_PUBLIC);
-         } 
-       }
+    $wikisite = 'xorg';
+    require_once("wiki.inc.php");
+    new_skinned_page($wiki_template, AUTH_PUBLIC);
 }
 
 $page->assign('xorg_extra_header', "<script type='text/JavaScript'>\n<!--\nNix={map:null,convert:function(a){Nix.init();var s='';for(i=0;i<a.length;i++){var b=a.charAt(i);s+=((b>='A'&&b<='Z')||(b>='a'&&b<='z')?Nix.map[b]:b);}return s;},init:function(){if(Nix.map!=null)return;var map=new Array();var s='abcdefghijklmnopqrstuvwxyz';for(i=0;i<s.length;i++)map[s.charAt(i)]=s.charAt((i+13)%26);for(i=0;i<s.length;i++)map[s.charAt(i).toUpperCase()]=s.charAt((i+13)%26).toUpperCase();Nix.map=map;},decode:function(a){document.write(Nix.convert(a));}}\n//-->\n</script>\n");
-assign_auth();
+wiki_assign_auth();
 $page->addCssLink('css/wiki.css');
 
 $page->run();
diff --git a/include/wiki.inc.php b/include/wiki.inc.php
new file mode 100644 (file)
index 0000000..b4aefca
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2006 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                *
+ ***************************************************************************/
+$wikisites = array('xorg','xnet');
+
+function wiki_pagename() {
+    $n = str_replace('/', '.', Env::get('n', false));
+    $keywords = explode('.', $n);
+    $count = count($keywords);
+    if ($count == 1)
+        $n = $keywords[0].".".$keywords[0];
+    else
+        $n = $keywords[$count - 2].".".$keywords[$count - 1];
+    global $globals;
+    if ($wikiurl && ($urln = str_replace('.', '/', $n)) != Env::get('n') && $n != Env::get('n'))
+        redirect($globals->relurl.'/'.$urln);
+    $_REQUEST['n'] = $n;
+    return $n;
+}
+
+function wiki_work_dir() {
+    global $globals;
+    return realpath($globals->spoolroot.'htdocs/'.$globals->wiki->workdir);
+}
+
+function wiki_template($n) {
+    global $wikisite;
+    return $tpl = wiki_work_dir().'/cache_'.$wikisite.'_'.$n.'.tpl';
+}
+
+// several files are used for wiki :
+// - spool/wiki.d/PageName                           : the wiki page
+// - spool/wiki.d/cache_PageName.tpl                 : the template cache
+// - spool/templates_c/%%...%%cache_PageName.tpl.php : the PHP from Smarty
+function wiki_clear_cache($n) {
+    global $page, $wikisite, $wikisites;
+    $oldwikisite = $wikisite;
+    foreach ($wikisites as $s) {
+        $wikisite = $s;
+        $tpl = wiki_template($n);
+        @unlink($tpl);
+        $page->clear_compiled_tpl($tpl);
+    }
+    $wikisite = $oldwikisite;
+}
+
+// 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_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_assign_auth() {
+    global $page, $wiki_auths;
+    $page->assign('logged', logged());
+    $page->assign('identified', identified());
+    $page->assign('has_perms', has_perms());
+    $page->assign('public', true);
+    $page->assign('wiki_admin', has_perms() && identified());
+}
+
+// cannot be in a function because pmwiki use all vars as if it was globals
+//function new_wiki_page() {
+    global $page, $globals;
+       // the wiki keword is given in the n var
+       if ( $n = wiki_pagename() )
+       {
+
+         $wiki_template = wiki_template($n);
+         $tmpfile_exists = file_exists($wiki_template);
+
+         // don't recreate the tpl if it already exists
+         if (Env::get('action') || !$tmpfile_exists)
+         {
+           if ($tmpfile_exists) {
+              wiki_clear_cache($n);
+           }
+
+           // we leave pmwiki do whatever it wants and store everything
+           ob_start();
+           require_once($globals->spoolroot.'/'.$globals->wiki->wikidir.'/pmwiki.php');
+
+           $wikiAll = ob_get_clean();
+           // the pmwiki skin we are using (almost empty) has these keywords:
+           $i = strpos($wikiAll, "<!--/HeaderText-->");
+           $j = strpos($wikiAll, "<!--/PageLeftFmt-->", $i);
+           
+         }
+         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);
+           }
+         } 
+       }
+   //return $wiki_template;    
+//}
+?>
index e41b5f8..ce3bf43 100644 (file)
@@ -44,6 +44,13 @@ function new_page($tpl_name, $min_auth)
 }
 
 // }}}
+function new_identification_page()
+{
+    new_page('', AUTH_MDP);
+    global $page;
+    $page->useMenu();
+}
+
 // {{{ function new_group_page()
 
 function new_group_page($tpl_name)
index 39ac9fc..6fd7c7a 100644 (file)
@@ -90,6 +90,8 @@ class XnetPage extends PlatalPage
         if (logged() && may_update()) {
             $sub = array();
             $sub['modifier l\'accueil'] = "$dim/edit.php";
+            if ($globals->wiki->wikidir && $globals->xnet->wiki)
+                $sub['wiki'] = "$dim/Accueil";
             if ($globals->asso('mail_domain')) {
                 $sub['envoyer un mail']     = "$dim/mail.php";
                 $sub['créer une liste']     = "$dim/listes-create.php";
index 43dc4f6..276cc8b 100644 (file)
@@ -50,6 +50,10 @@ function _new_page($type, $tpl_name, $min_auth, $admin=false)
 }
 
 // }}}
+function new_identification_page()
+{
+    _new_page(SKINNED, '', AUTH_MDP);
+}
 // {{{ function new_skinned_page()
 
 function new_skinned_page($tpl_name, $min_auth)
index 3f561c6..915524b 100644 (file)
@@ -1,6 +1,6 @@
 <?php if (!defined('PmWiki')) exit();
 
-$ScriptUrl       = $globals->baseurl;
+$ScriptUrl       = $globals->relurl;
 $UploadUrlFmt    = $ScriptUrl."/uploads";
 $WorkDir         = $globals->wiki->workdir;
 $WikiDir         = new PageStore('$FarmD/'.$WorkDir.'/$FullName');
@@ -52,4 +52,7 @@ $GUIButtons['hr'] = array(540, '\\n----\\n', '', '',
 $GUIButtons['table'] = array(600,
                    '||border=1 width=80%\\n||!Hdr ||!Hdr ||!Hdr ||\\n||     ||     ||     ||\\n||     ||     ||     ||\\n', '', '', 
                  '$GUIButtonDirUrlFmt/table.gif"$[Table]"');
+
+if (function_exists('more_wiki_config'))
+    more_wiki_config();
 ?>
index 2e13c24..d674b36 100644 (file)
@@ -160,11 +160,11 @@ function AuthPlatal($pagename, $level, $authprompt, $since)
     // maybe it is because he is not identified
     if ($authprompt && !identified())
     {
-        new_skinned_page('wiki.tpl', AUTH_MDP); 
+        new_identification_page(); 
     }
 
     global $page;
-    new_skinned_page('', AUTH_MDP); 
+    new_identification_page();
     if (has_perms()) {
         $page->trig('Erreur : page Wiki inutilisable sur plat/al');
     } else {