<?php
/***************************************************************************
- * Copyright (C) 2003-2010 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(
+ '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),
'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->coreTpl('40x.tpl');
$page->trigError('Tu n\'as pas les permissions nécessaires pour accéder à cette page.');
- $page->coreTpl('403.tpl');
}
- function handler_404(&$page)
+ function handler_404(PlPage $page)
{
- global $globals, $platal;
+ global $platal;
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
$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)
{
global $globals;
pl_cached_content_headers("image/x-icon");
exit;
}
- function handler_robotstxt(&$page)
+ function handler_robotstxt($page)
{
global $globals;
return PL_NOT_FOUND;
}
- function handler_purge_cache(&$page)
+ function handler_purge_cache($page)
{
S::assert_xsrf_token();
$page->clear_compiled_tpl();
PlWikiPage::clearCache();
+ PlCache::clearAll();
http_redirect(empty($_SERVER['HTTP_REFERER']) ? './' : $_SERVER['HTTP_REFERER']);
}
- function handler_kill_sessions(&$page)
+ function handler_kill_sessions($page)
{
kill_sessions();
}
- function handler_bug(&$page)
+ function handler_bug($page)
{
global $globals;
}
}
- function handler_wiki_help(&$page, $action = 'title')
+ function handler_wiki_help($page, $action = 'title')
{
$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')
{
pl_content_headers("text/html");
$text = Env::v('text');
exit;
}
- function handler_siteerror(&$page) {
+ function handler_siteerror($page)
+ {
global $globals;
$page->coreTpl('site_errors.tpl');
- $file = @file_get_contents($globals->spoolroot . '/spool/tmp/site_errors');
- if ($file !== false) {
- $page->assign('errors', utf8_encode($file));
+ 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')) {
- @unlink($globals->spoolroot . '/spool/tmp/site_errors');
+ 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:
?>