* Geoloc :
Dynamic maps using geodesix plugin -Car
+ * Xnet :
+ Use wiki from Xnet. -Car
+ Use wiki for group pages. -Car
+
Bug/Wish :
* Admin :
<?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 *
class XnetConfig
{
var $secret = '';
- var $evts_domain = '';
+ var $evts_domain = '';
+ var $wiki = false;
}
// }}}
--- /dev/null
+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; }
+
--- /dev/null
+<?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();
+?>
// 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();
--- /dev/null
+<?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;
+//}
+?>
}
// }}}
+function new_identification_page()
+{
+ new_page('', AUTH_MDP);
+ global $page;
+ $page->useMenu();
+}
+
// {{{ function new_group_page()
function new_group_page($tpl_name)
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";
}
// }}}
+function new_identification_page()
+{
+ _new_page(SKINNED, '', AUTH_MDP);
+}
// {{{ function new_skinned_page()
function new_skinned_page($tpl_name, $min_auth)
<?php if (!defined('PmWiki')) exit();
-$ScriptUrl = $globals->baseurl;
+$ScriptUrl = $globals->relurl;
$UploadUrlFmt = $ScriptUrl."/uploads";
$WorkDir = $globals->wiki->workdir;
$WikiDir = new PageStore('$FarmD/'.$WorkDir.'/$FullName');
$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();
?>
// 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 {