* 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));
- if (!$n) {
+ if (!Get::get('n')) {
return null;
}
- $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 (($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);
-}
+ $words = explode('/', trim(Get::get('n'), '/'));
+ if (count($words) == 2) {
+ return join('.', $words);
+ }
+
+ array_unshift($words, $words[0]);
+ $b = array_pop($words);
+ $a = array_pop($words);
-function wiki_template($n) {
- global $wikisite;
- return $tpl = wiki_work_dir().'/cache_'.$wikisite.'_'.$n.'.tpl';
+ pl_redirect($a.'/'.$b);
}
-// 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;
+function wiki_work_dir() {
+ global $globals;
+ return $globals->spoolroot.'/spool/wiki.d';
}
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_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 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('logged', logged());
- $page->assign('identified', identified());
- $page->assign('has_perms', has_perms());
- $page->assign('public', true);
- $page->assign('wiki_admin', has_perms() && identified());
+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();
+ }
}
-// cannot be in a function because pmwiki use all vars as if it was globals
-//function new_wiki_page() {
- // the wiki keword is given in the n var
- if ( $n = wiki_pagename() )
- {
-
- $wiki_template = wiki_template($n);
- $tmpfile_exists = file_exists($wiki_template);
+function wiki_apply_perms($perm) {
+ global $page, $platal;
- // don't recreate the tpl if it already exists
- if (Env::get('action') || !$tmpfile_exists)
- {
- if ($tmpfile_exists) {
- wiki_clear_cache($n);
- }
+ switch ($perm) {
+ case 'public':
+ return;
- // 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);
+ case 'logged':
+ if (!XorgSession::doAuthCookie()) {
+ $platal = new Platal();
+ $platal->force_login($page);
+ }
+ return;
+ default:
+ if (!XorgSession::doAuth()) {
+ $platal = new Platal();
+ $platal->force_login($page);
+ }
+ if ($perm == 'admin') {
+ check_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);
- }
- }
+ return;
}
- //return $wiki_template;
-//}
+}
+
?>