Skinnage supplémentaires :
[platal.git] / htdocs / wiki.php
index 33cc717..7c5ee5b 100644 (file)
  ***************************************************************************/
 
 require_once("xorg.inc.php");
-if (Env::has('response'))
- new_skinned_page('wiki.tpl', AUTH_MDP);
-else
- new_skinned_page('wiki.tpl', AUTH_PUBLIC);
 
-require_once('pmwiki.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_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/';
+         $short_tpl = $dir_wiki_tmp.'cache_'.$n.'.tpl';
+         $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)
+         {
+           // 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);
+           if ($tmpfile_exists)
+             unlink($tpl);
+         } else {
+           if (!$tmpfile_exists)
+           {
+               $f = fopen($tpl, 'w');
+               fputs($f, substr($wikiAll, $j));
+               fclose($f);
+           }
+           new_skinned_page($short_tpl, 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();
 $page->addCssLink('css/wiki.css');
-$page->assign('xorg_extra_header', substr($wikiAll, 0, $i));
-$page->assign('menu-pmwiki', $wikiMenu);
-$page->assign('pmwiki', $wikiTxt);
 
 $page->run();
 ?>