From 2b27ff99ce8ff74aa0e8a2a3e51c02d1c0655e13 Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Sun, 27 Jul 2008 20:16:51 +0200 Subject: [PATCH] Move the wiki engine in the core. Signed-off-by: Florent Bruneau --- include/wiki.engine.inc.php | 135 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 include/wiki.engine.inc.php diff --git a/include/wiki.engine.inc.php b/include/wiki.engine.inc.php new file mode 100644 index 0000000..956d39c --- /dev/null +++ b/include/wiki.engine.inc.php @@ -0,0 +1,135 @@ +path; +$feed = false; + +// Check user perms +switch (Env::v('action')) { + case 'rss': case 'atom': case 'sdf': case 'dc': + $wp->prepareFeed(); + $feed = true; + case '': case 'search': + break; + + case 'edit': + $wp->applyWritePerms(); + break; + + default: + $wp->applyReadPerms(); + break; +} + +if ($p = Post::v('setrperms')) { + $wp->applyPerms('admin'); + if ($wp->setPerms($p, $wp->writePerms())) { + $page->trigSuccess('Permissions mises à jour'); + } +} + +if ($p = Post::v('setwperms')) { + $wp->applyPerms('admin'); + if ($wp->setPerms($wp->readPerms(), $p)) { + $page->trigSuccess('Permissions mises à jour'); + } +} + +// Generate cache even if we don't have access rights +$wiki_cache = $wp->cacheFilename(); +$cache_exists = file_exists($wiki_cache); +if (Env::v('action') || !$cache_exists) { + if ($cache_exists && !$feed) { + unlink($wiki_cache); + } + + // we leave pmwiki do whatever it wants and store everything + ob_start(); + require_once($globals->spoolroot . '/wiki/pmwiki.php'); + + $wikiAll = ob_get_clean(); + pl_clear_errors(); + + // the pmwiki skin we are using (almost empty) has these keywords: + $i = strpos($wikiAll, ""); + $j = strpos($wikiAll, "", $i); +} + +$wiki_exists = file_exists($wp->filename()); + +$page =& Platal::page(); +$page->changeTpl('core/wiki.tpl'); + +if ($feed) { + $wikiAll = str_replace('dc:contributor', 'author', $wikiAll); + $wikiAll = preg_replace('!.*?\..*?\.(\d{4})\|(.*?)!u', '$2 (X$1)', $wikiAll); + $wikiAll = str_replace('./', '' . $globals->baseurl . '/' . $platal->ns, $wikiAll); + echo $wikiAll; + pl_clear_errors(); + exit; +} elseif (Env::v('action')) { + $page->assign('pl_extra_header', substr($wikiAll, 0, $i)); + $wikiAll = substr($wikiAll, $j); +} else { + if (!$cache_exists && $wiki_exists) { + $wikiAll = substr($wikiAll, $j); + file_put_contents($wiki_cache, $wikiAll); + } elseif ($cache_exists) { + $wikiAll = file_get_contents($wiki_cache); + } elseif (S::has_perms()) { + $wikiAll = "

La page de wiki $n n'existe pas. " + . "Il te suffit de l'éditer

"; + } else { + $page->changeTpl('core/404.tpl'); + } +} + +// Check user perms +$wp->applyReadPerms(); + +$page->assign('perms', array($wp->readPerms(), $wp->writePerms())); +$page->assign('perms_opts', PlWikiPage::permOptions()); + +$page->assign('canedit', $wp->canWrite()); +$page->assign('has_perms', S::has_perms()); + +$page->assign('wikipage', str_replace('.', '/', $n)); +if (!$feed && $wp->writePerms() == 'admin' && !Env::v('action') && $wiki_exists) { + $page->assign('pmwiki_cache', $wiki_cache); +} else { + $page->assign('pmwiki', $wikiAll); + $page->assign('text', true); +} +$page->addCssLink('wiki.css'); +$page->addJsLink('wiki.js'); +if (!Env::v('action')) { + $url = '/' . str_replace('.', '/', $n) . '?action=rss'; + if (S::logged()) { + $url .= '&user=' . S::v('forlife') . '&hash=' . S::v('core_rss_hash'); + } + $page->setRssLink($n, $url); +} + +$page->run(); + +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +?> -- 2.1.4