}
}
-
abstract class Platal
{
private $mods;
}
} catch (Exception $e) {
header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
-
- $file = fopen(self::globals()->spoolroot . '/spool/tmp/site_errors', 'a');
- fwrite($file, '<pre>' . date('Y-m-d G:i:s') . '</pre>'
- . '<pre>' . pl_entities("" . $e) . '</pre>'
- . '------------------------------------------------------------------' . "\n");
- fclose($file);
-
+ PlErrorReport::report($e);
if (self::globals()->debug) {
$page->kill(pl_entities($e->getMessage())
. '<pre>' . pl_entities("" . $e) . '</pre>');
--- /dev/null
+<?php
+/***************************************************************************
+ * Copyright (C) 2003-2010 Polytechnique.org *
+ * http://opensource.polytechnique.org/ *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+ **************************************************************************/
+
+class PlErrorReport
+{
+ public $date;
+ public $error;
+ public $state;
+
+ private function __construct($date, $error, $state = array())
+ {
+ $this->date = $date;
+ $this->error = "" . $error;
+ $this->state = $state;
+ }
+
+ private function toCSV()
+ {
+ return array($this->date, $this->error, serialize($this->state));
+ }
+
+ public function fromCSV(array $entry)
+ {
+ return new PlErrorReport($entry[0], $entry[1], unserialize($entry[2]));
+ }
+
+ public static function report($error)
+ {
+ $error = new PlErrorReport(date('Y-m-d G:i:s'), $error,
+ array('Session' => $_SESSION,
+ 'Env' => $_REQUEST,
+ 'Post' => $_POST,
+ 'Get' => $_GET,
+ 'Cookie' => $_COOKIE,
+ 'Server' => $_SERVER));
+
+ $file = fopen(Platal::globals()->spoolroot . '/spool/tmp/site_errors', 'a');
+ fputcsv($file, $error->toCSV());
+ fclose($file);
+ }
+
+ public static function iterate()
+ {
+ return new PlErrorReportIterator();
+ }
+
+ public static function clear()
+ {
+ @unlink(Platal::globals()->spoolroot . '/spool/tmp/site_errors');
+ }
+}
+
+class PlErrorReportIterator implements PlIterator
+{
+ private $file;
+
+ public function __construct()
+ {
+ $this->file = fopen(Platal::globals()->spoolroot . '/spool/tmp/site_errors', 'r');
+ }
+
+ public function next()
+ {
+ if (!$this->file) {
+ return null;
+ }
+ $entry = fgetcsv($this->file);
+ if ($entry === false) {
+ fclose($this->file);
+ $this->file = null;
+ return null;
+ }
+ $value = PlErrorReport::fromCSV($entry);
+ return $value;
+ }
+
+ public function total()
+ {
+ return 0;
+ }
+
+ public function first()
+ {
+ return false;
+ }
+
+ public function last()
+ {
+ return false;
+ }
+}
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>
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));
- }
+ $page->assign('errors', PlErrorReport::iterate());
if (Post::has('clear')) {
- @unlink($globals->spoolroot . '/spool/tmp/site_errors');
+ PlErrorReport::clear();
$page->trigSuccess("Erreurs effacées.");
}
}
{* *}\r
{**************************************************************************}\r
\r
+<script type="text/javascript">\r
+{literal}\r
+// <![CDATA[\r
+$(document).ready(function() {\r
+ $(".error_state").click(function() {\r
+ $(this).children(".error_state_content").toggle();\r
+ });\r
+});\r
+// ]]>\r
+{/literal}\r
+</script>\r
+\r
<h1>Erreurs d'exécution</h1>\r
- {if $errors}\r
- {$errors|smarty:nodefaults}\r
- {else}\r
-<p>\r
- Il n'y a pas d'erreurs actuellement recensées.\r
-</p>\r
- {/if}\r
+ {iterate from=$errors item=error}\r
+ <fieldset>\r
+ <legend>{$error->date}</legend>\r
+ <pre>{$error->error}</pre>\r
+ {foreach from=$error->state item=table key=name}\r
+ <div class="error_state">\r
+ <div><strong>{$name} (click to show/hide content)</strong></div>\r
+ <div class="error_state_content" style="display: none">\r
+ {php}\r
+ $var = $this->get_template_vars('table');\r
+ var_dump($var);\r
+ {/php}\r
+ </div>\r
+ </div>\r
+ {/foreach}\r
+ </fieldset>\r
+ {/iterate}\r
<form action="site_errors" method="post">\r
<div>\r
<input type="submit" name="clear" value="Effacer les erreurs" />\r