<?php
/***************************************************************************
- * Copyright (C) 2003-2007 Polytechnique.org *
+ * Copyright (C) 2003-2011 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
function handlers()
{
return array(
- '403' => $this->make_hook('403', AUTH_PUBLIC),
- '404' => $this->make_hook('404', AUTH_PUBLIC),
- 'login' => $this->make_hook('login', AUTH_COOKIE),
- 'send_bug' => $this->make_hook('bug', AUTH_COOKIE),
- 'purge_cache' => $this->make_hook('purge_cache', AUTH_COOKIE, 'admin'),
- 'get_rights' => $this->make_hook('get_rights', AUTH_MDP, 'admin'),
-
- 'wiki_help' => $this->make_hook('wiki_help', AUTH_PUBLIC),
- 'wiki_preview' => $this->make_hook('wiki_preview', AUTH_COOKIE, 'user', NO_AUTH),
-
- 'valid.html' => $this->make_hook('valid', AUTH_PUBLIC),
- 'favicon.ico' => $this->make_hook('favicon', AUTH_PUBLIC),
+ '400' => $this->make_hook('400', AUTH_PUBLIC),
+ '403' => $this->make_hook('403', AUTH_PUBLIC),
+ '404' => $this->make_hook('404', AUTH_PUBLIC),
+ 'login' => $this->make_hook('login', AUTH_COOKIE),
+ 'send_bug' => $this->make_hook('bug', AUTH_COOKIE),
+ 'purge_cache' => $this->make_hook('purge_cache', AUTH_COOKIE, 'admin'),
+ 'kill_sessions' => $this->make_hook('kill_sessions', AUTH_COOKIE, 'admin'),
+ 'sql_errors' => $this->make_hook('siteerror', AUTH_COOKIE, 'admin'),
+ 'assert_errors' => $this->make_hook('siteerror', AUTH_COOKIE, 'admin'),
+ 'site_errors' => $this->make_hook('siteerror', AUTH_COOKIE, 'admin'),
+ 'site_errors/rss' => $this->make_token_hook('siteerror_rss', AUTH_COOKIE, 'admin'),
+ 'site_errors/register' => $this->make_hook('register_error', AUTH_PUBLIC),
+
+ 'embedded' => $this->make_hook('embedded', AUTH_PUBLIC),
+
+ 'wiki_help' => $this->make_hook('wiki_help', AUTH_PUBLIC),
+ 'wiki_preview' => $this->make_hook('wiki_preview', AUTH_COOKIE, 'user', NO_AUTH),
+
+ 'validator' => $this->make_hook('validator', AUTH_PUBLIC),
+ 'valid.html' => $this->make_hook('valid', AUTH_PUBLIC),
+ 'favicon.ico' => $this->make_hook('favicon', AUTH_PUBLIC),
+ 'robots.txt' => $this->make_hook('robotstxt', AUTH_PUBLIC, 'user', NO_HTTPS),
);
}
- function handler_valid(&$page)
+ function handler_valid($page)
{
readfile($page->compile_dir.'/valid.html');
exit;
}
- function handler_403(&$page)
+ function handler_validator($page)
{
global $globals;
+ exec($globals->spoolroot."/bin/devel/xhtml.validate.pl ".$page->compile_dir."/valid.html", $val);
+ $url = "<a href='http://validator.w3.org/check?uri={$globals->baseurl}/valid.html&ss=1#result'>";
+ $replc = '<span style="color: #080;">HTML OK</span>';
+ foreach ($val as $h) {
+ if (preg_match("/^X-W3C-Validator-Errors: (\d+)$/", $h, $m)) {
+ if ($m[1]) {
+ $replc = "<span class='erreur'>$url{$m[1]} ERREUR(S) !!!</a></span>";
+ }
+ break;
+ }
+ }
+ echo $replc;
+ exit;
+ }
+
+ function handler_400(PlPage $page)
+ {
+ header($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request');
+ $page->coreTpl('40x.tpl');
+ $page->trigError('Ta requête est invalide.');
+ }
+
+ function handler_403(PlPage $page)
+ {
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
- $page->changeTpl('core/403.tpl');
+ $page->coreTpl('40x.tpl');
+ $page->trigError('Tu n\'as pas les permissions nécessaires pour accéder à cette page.');
}
- function handler_404(&$page)
+ function handler_404(PlPage $page)
{
- global $globals, $platal;
+ global $platal;
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
- $page->changeTpl('core/404.tpl');
+ $page->coreTpl('404.tpl');
$page->assign('near', $platal->near_hook());
+ $page->trigError('Cette page n\'existe pas !!!');
}
- function handler_login(&$page)
+ function handler_login($page)
{
$allkeys = func_get_args();
unset($allkeys[0]);
pl_redirect($url);
}
- function handler_favicon(&$page)
+ function handler_favicon($page)
{
- $data = file_get_contents(dirname(__FILE__).'/../htdocs/images/favicon.ico');
- header('Content-Type: image/x-icon');
- echo $data;
+ global $globals;
+ pl_cached_content_headers("image/x-icon");
+ readfile($globals->spoolroot . '/htdocs/images/favicon.ico');
exit;
}
- function handler_purge_cache(&$page)
+ function handler_robotstxt($page)
{
- require_once 'wiki.inc.php';
+ global $globals;
- $page->clear_compiled_tpl();
- wiki_clear_all_cache();
+ $disallowed_uris = array();
+ if ($globals->core->restricted_platal) {
+ $disallowed_uris[] = '/';
+ } else if (!empty($globals->core->robotstxt_disallowed_uris)) {
+ $disallowed_uris = preg_split('/[\s,]+/',
+ $globals->core->robotstxt_disallowed_uris,
+ -1, PREG_SPLIT_NO_EMPTY);
+ }
- http_redirect(empty($_SERVER['HTTP_REFERER']) ? './' : $_SERVER['HTTP_REFERER']);
+ if (count($disallowed_uris) > 0) {
+ pl_cached_content_headers("text/plain");
+ echo "User-agent: *\n";
+ foreach ($disallowed_uris as $uri) {
+ echo "Disallow: $uri\n";
+ }
+ exit;
+ }
+ return PL_NOT_FOUND;
}
- function handler_get_rights(&$page, $level)
+ function handler_purge_cache($page)
{
- if (S::has('suid')) {
- $page->kill('Déjà en SUID');
- }
+ S::assert_xsrf_token();
- if (isset($_SESSION['log'])) {
- $_SESSION['log']->log("suid_start", "login by ".S::v('forlife'));
- }
- $_SESSION['suid'] = $_SESSION;
- $_SESSION['perms'] =& XorgSession::make_perms($level);
+ $page->clear_compiled_tpl();
+ PlWikiPage::clearCache();
+ PlCache::clearAll();
- pl_redirect('/');
+ http_redirect(empty($_SERVER['HTTP_REFERER']) ? './' : $_SERVER['HTTP_REFERER']);
}
- function handler_bug(&$page)
+ function handler_kill_sessions($page)
{
- $page->changeTpl('core/bug.tpl', SIMPLE);
+ kill_sessions();
+ }
+
+ function handler_bug($page)
+ {
+ global $globals;
+
+ if (empty($_SERVER['HTTP_REFERER'])) {
+ // We don't have a valid referer, we need to use the url
+ list($currentPage, $location) = explode('//', $_SERVER['REQUEST_URI'], 2);
+
+ $location = 'http'.(empty($_SERVER['HTTPS']) ? '' : 's').'://'.$_SERVER['SERVER_NAME'].'/'.$location;
+ } else {
+ $location = $_SERVER['HTTP_REFERER'];
+ }
+
+ $page->coreTpl('bug.tpl', SIMPLE);
+ $page->assign('location', $location);
$page->addJsLink('close_on_esc.js');
+
if (Env::has('send') && trim(Env::v('detailed_desc'))) {
+ S::assert_xsrf_token();
+
$body = wordwrap(Env::v('detailed_desc'), 78) . "\n\n"
. "----------------------------\n"
. "Page : " . Env::v('page') . "\n\n"
- . "Utilisateur : " . S::v('forlife') . "\n"
+ . "Utilisateur : " . S::user()->login() . "\n"
. "Navigateur : " . $_SERVER['HTTP_USER_AGENT'] . "\n"
. "Skin : " . S::v('skin') . "\n";
- $page->assign('bug_sent',1);
+ $page->assign('bug_sent', 1);
+ $page->trigSuccess('Ton message a bien été envoyé au support de ' . $globals->core->sitename
+ . ', tu devrais en recevoir une copie d\'ici quelques minutes. Nous allons '
+ . 'le traiter et y répondre dans les plus brefs délais.');
$mymail = new PlMailer();
- $mymail->setFrom('"'.S::v('prenom').' '.S::v('nom').'" <'.S::v('bestalias').'@polytechnique.org>');
- $mymail->addTo('support+platal@polytechnique.org');
+ $mymail->setFrom(sprintf('"%s" <%s>', S::user()->fullName(), S::user()->bestEmail()));
+ $mymail->addCc(sprintf('"%s" <%s>', S::user()->fullName(), S::user()->bestEmail()));
+ $mymail->addTo('support+platal@' . $globals->mail->domain);
$mymail->setSubject('Plat/al '.Env::v('task_type').' : '.Env::v('item_summary'));
$mymail->setTxtBody($body);
$mymail->send();
} elseif (Env::has('send')) {
- $page->trig("Merci de remplir une explication du problème rencontré");
+ $page->trigError("Merci de remplir une explication du problème rencontré.");
}
}
- function handler_wiki_help(&$page, $action = 'title')
+ function handler_wiki_help($page, $action = 'title')
{
- $page->changeTpl('core/wiki.help.tpl', SIMPLE);
+ $page->coreTpl('wiki.help.tpl', SIMPLE);
$page->assign('wiki_help', MiniWiki::help($action == 'title'));
}
/// Shared handler for wiki syntax result preview
- function handler_wiki_preview(&$page, $action = 'title')
+ function handler_wiki_preview($page, $action = 'title')
{
- header('Content-Type: text/html; charset=utf-8');
- $text = Get::v('text');
+ pl_content_headers("text/html");
+ $text = Env::v('text');
echo MiniWiki::wikiToHtml($text, $action == 'title');
exit;
}
+
+ function handler_siteerror($page)
+ {
+ global $globals;
+ $page->coreTpl('site_errors.tpl');
+ if (!empty(S::user()->token)) {
+ $page->setRssLink('Polytechnique.org :: Erreurs',
+ 'site_errors/rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
+ }
+ if (Post::has('clear')) {
+ PlErrorReport::clear();
+ $page->trigSuccess("Erreurs effacées.");
+ }
+ $page->assign('errors', PlErrorReport::iterate());
+ }
+
+ function handler_register_error($page)
+ {
+ if (S::has_xsrf_token() && Post::has('error') && Post::has('url')) {
+ PlErrorReport::report("Client error on " . Post::s('url') . ":\n\n" . Post::s('error'));
+ }
+ exit;
+ }
+
+ function handler_siteerror_rss(PlPage $page, PlUser $user)
+ {
+ return PlErrorReport::feed($page, $user);
+ }
+
+ function handler_embedded($page)
+ {
+ global $platal, $globals;
+ $allkeys = func_get_args();
+ $mode = $allkeys[1];
+ unset($allkeys[0]);
+ unset($allkeys[1]);
+ Env::set('display', $mode);
+ $globals->baseurl .= '/embedded/' . $mode;
+ $platal->path = join('/', $allkeys);
+ $platal->run();
+ }
}
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
?>