X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fwiki.inc.php;h=c0a89451b8b993d9c8f2014b27caefd6d39fcb6b;hb=c339246fb6afbd129da3d7ca6ff62703a0a7741c;hp=04a43a196d9cba0b2644402a3daeaf176d05179f;hpb=6bc327ec0f618294b1438914bc2219e08e1036c1;p=platal.git diff --git a/include/wiki.inc.php b/include/wiki.inc.php index 04a43a1..c0a8945 100644 --- a/include/wiki.inc.php +++ b/include/wiki.inc.php @@ -1,6 +1,6 @@ baseurl.'/'.$a.'/'.$b); + pl_redirect($a.'/'.$b); +} + +function wiki_filename($s) +{ + if (@iconv('utf-8', 'utf-8', $s) == $s) { + return $s; + } + return utf8_encode($s); } -function wiki_work_dir() { +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_*'); +} + +function wiki_perms_options() { + return array('public' => 'Public', 'logged' => 'Connecté', + 'mdp' => 'Authentifié', 'admin' => 'Admin'); +} + +function wiki_get_perms($n) +{ + $file = wiki_work_dir().'/'.wiki_filename(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_putfile($f, $s) +{ + $fp = fopen($f, 'w'); + fputs($fp, $s); + fclose($fp); +} + +function wiki_set_perms($n, $pr, $pw) +{ + $file = wiki_work_dir().'/'.wiki_filename(str_replace('/', '.', $n)); + if (!file_exists($file)) { + return false; + } + + $p = $pr . ':' . $pw; + + $lines = explode("\n", file_get_contents($file)); + foreach ($lines as $i => $line) { + list($k, $v) = explode('=', $line, 2); + if ($k == 'platal_perms') { + $lines[$i] = 'platal_perms='.$p; + wiki_putfile($file, join("\n", $lines)); + return true; + } + } + + array_splice($lines, 1, 0, array('platal_perms='.$p)); + wiki_putfile($file, join("\n", $lines)); + return true; } -// 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_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(); + } } -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_apply_feed_perms($perm) +{ + if ($perm == 'public') { + return; + } + + require_once 'rss.inc.php'; + $uid = init_rss(null, Env::v('user'), Env::v('hash')); + if (!$uid) { + exit; + } + $res = XDB::query('SELECT user_id, IF (nom_usage <> \'\', nom_usage, nom) AS nom, prenom, perms + FROM auth_user_md5 + WHERE user_id = {?}', $uid); + if (!$res->numRows()) { + exit; + } + $table = $res->fetchOneAssoc(); + $_SESSION = array_merge($_SESSION, $table, array('forlife' => Env::v('user'))); + if ($perm == 'logged' || S::has_perms()) { + return; + } + exit; +} + +function wiki_apply_perms($perm) { + global $page, $platal, $globals; + + switch ($perm) { + case 'public': + return; + + case 'logged': + if (!call_user_func(array($globals->session, 'doAuthCookie'))) { + $platal = empty($GLOBALS['IS_XNET_SITE']) ? new Platal() : new Xnet(); + $platal->force_login($page); } + return; + + default: + if (!call_user_func(array($globals->session, 'doAuth'))) { + $platal = empty($GLOBALS['IS_XNET_SITE']) ? new Platal() : new Xnet(); + $platal->force_login($page); + } + if ($perm == 'admin') { + check_perms(); + } + return; } } -function wiki_assign_auth() { - global $page; - $page->assign('true', true); - $page->assign('public', true); - $page->assign('logged', S::logged()); - $page->assign('identified', S::identified()); - $page->assign('has_perms', S::has_perms()); +function wiki_require_page($pagename) +{ + global $globals; + $pagename_slashes = str_replace('.','/',$pagename); + $pagename_dots = str_replace('/','.',$pagename); + if (is_file(wiki_work_dir().'/cache_'.$pagename_dots.'.tpl')) return; + system('wget '.$globals->baseurl.'/'.$pagename_slashes.' -O /dev/null'); } +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>