better fatal error handling by frontend (remove error.php)

This commit is contained in:
Andrew Dolgov 2006-03-31 06:18:55 +01:00
parent 6e7f8d269e
commit af106b0ebe
8 changed files with 101 additions and 111 deletions

View File

@ -21,11 +21,16 @@
require_once "sanity_check.php"; require_once "sanity_check.php";
require_once "config.php"; require_once "config.php";
require_once "db.php";
require_once "db-prefs.php";
require_once "functions.php";
require_once "magpierss/rss_fetch.inc";
$err_msg = check_configuration_variables(); $err_msg = check_configuration_variables();
if ($err_msg) { if ($err_msg) {
print "Fatal error: $err_msg"; header("Content-Type: application/xml");
exit; print_error_xml(9, $err_msg); die;
} }
if ((!$op || $op == "rpc" || $op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) { if ((!$op || $op == "rpc" || $op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) {
@ -35,7 +40,7 @@
if (!$_SESSION["uid"] && $op != "globalUpdateFeeds") { if (!$_SESSION["uid"] && $op != "globalUpdateFeeds") {
if ($op == "rpc") { if ($op == "rpc") {
print "<error error-code=\"6\"/>"; print_error_xml(6); die;
} else { } else {
print " print "
<html><body> <html><body>
@ -54,15 +59,9 @@
} }
if (!$op) { if (!$op) {
print "<error error-code=\"7\"/>"; print_error_xml(7); exit;
exit;
} }
require_once "db.php";
require_once "db-prefs.php";
require_once "functions.php";
require_once "magpierss/rss_fetch.inc";
$purge_intervals = array( $purge_intervals = array(
0 => "Default", 0 => "Default",
-1 => "Never purge", -1 => "Never purge",

View File

@ -1,88 +0,0 @@
<?
require_once "sanity_check.php";
require_once "version.php";
require_once "config.php";
require_once "db-prefs.php";
$ERRORS[0] = "Unknown error";
$ERRORS[1] = "This program requires XmlHttpRequest " .
"to function properly. Your browser doesn't seem to support it.";
$ERRORS[2] = "This program requires cookies " .
"to function properly. Your browser doesn't seem to support them.";
$ERRORS[3] = "Backend sanity check failed.";
$ERRORS[4] = "Frontend sanity check failed.";
$ERRORS[5] = "Incorrect database schema version.";
$ERRORS[6] = "Not authorized.";
if ($_GET["c"] == 6) {
header("Location: login.php");
}
$ERRORS[7] = "No operation to perform.";
$ERRORS[8] = "Could not display feed: query failed. Please check label match syntax or local configuration.";
$ERRORS[8] = "Denied. Your access level is insufficient to access this page.";
?>
<html>
<head>
<title>Tiny Tiny RSS : Error Message</title>
<link rel="stylesheet" href="tt-rss.css" type="text/css">
<!--[if gte IE 5.5000]>
<script type="text/javascript" src="pngfix.js"></script>
<![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<table width="100%" height="100%" cellspacing="0" cellpadding="0" class="main">
<tr>
<td colspan="2">
<table cellspacing="0" cellpadding="0" width="100%"><tr>
<td class="header" valign="middle">
<img src="images/ttrss_logo.png" alt="logo">
</td>
<td align="right" valign="top">
<div id="notify"><span id="notify_body"></div>
</td>
</tr></table>
</td>
</tr>
<tr>
<td id="prefContent" class="prefContent" valign="top" colspan="2">
<h1>Fatal Error</h1>
<div class="bigErrorMsg"><?= $ERRORS[$_GET["c"]] ?>
<? if ($_GET["p"]) { ?>
<p><?= htmlspecialchars($_GET["p"]) ?></p>
<? } ?>
</div>
</td>
</tr>
<tr>
<td class="footer" colspan="2">
<a href="http://bah.spb.su/~fox/tt-rss/">Tiny-Tiny RSS</a> v<?= VERSION ?> &copy; 2005 Andrew Dolgov
<? if (WEB_DEMO_MODE) { ?>
<br>Running in demo mode, some functionality is disabled.
<? } ?>
</td>
</td>
</table>
</body>
</html>

25
errors.php Normal file
View File

@ -0,0 +1,25 @@
<?
$ERRORS[0] = "Unknown error";
$ERRORS[1] = "This program requires XmlHttpRequest " .
"to function properly. Your browser doesn't seem to support it.";
$ERRORS[2] = "This program requires cookies " .
"to function properly. Your browser doesn't seem to support them.";
$ERRORS[3] = "Backend sanity check failed";
$ERRORS[4] = "Frontend sanity check failed.";
$ERRORS[5] = "Incorrect database schema version.";
$ERRORS[6] = "Request not authorized.";
$ERRORS[7] = "No operation to perform.";
$ERRORS[8] = "Could not display feed: query failed. Please check label match syntax or local configuration.";
$ERRORS[8] = "Denied. Your access level is insufficient to access this page.";
$ERRORS[9] = "Configuration check failed";
?>

View File

@ -574,15 +574,6 @@ function hideOrShowFeeds(doc, hide) {
} }
function fatalError(code, params) {
if (!params) {
window.location = "error.php?c=" + param_escape(code);
} else {
window.location = "error.php?c=" + param_escape(code) +
"&p=" + param_escape(params);
}
}
function selectTableRow(r, do_select) { function selectTableRow(r, do_select) {
r.className = r.className.replace("Selected", ""); r.className = r.className.replace("Selected", "");

View File

@ -9,6 +9,7 @@
require_once 'config.php'; require_once 'config.php';
require_once 'db-prefs.php'; require_once 'db-prefs.php';
require_once 'compat.php'; require_once 'compat.php';
require_once 'errors.php';
require_once 'magpierss/rss_utils.inc'; require_once 'magpierss/rss_utils.inc';
@ -1498,4 +1499,15 @@
return $version[1]; return $version[1];
} }
function print_error_xml($code, $add_msg = "") {
global $ERRORS;
$error_msg = $ERRORS[$code];
if ($add_msg) {
$error_msg = "$error_msg; $add_msg";
}
print "<error error-code=\"$code\" error-msg=\"$error_msg\"/>";
}
?> ?>

View File

@ -1052,3 +1052,29 @@ div.cdmContent a:hover {
text-align : center; text-align : center;
margin : 10px; margin : 10px;
} }
#fatal_error {
background : white;
left : 0;
top : 0;
height : 100%;
width : 100%;
z-index : 200;
display : none;
position : absolute;
}
#fatal_error_inner {
font-weight : bold;
margin : 10px;
color : red;
}
#fatal_error_msg {
border : 1px solid #c0c0c0;
background-color : #f0f0f0;
width : 50%;
color : black;
padding : 10px;
font-weight : normal;
}

View File

@ -124,7 +124,7 @@ function refetch_callback() {
var error_code = reply.getAttribute("error-code"); var error_code = reply.getAttribute("error-code");
if (error_code && error_code != 0) { if (error_code && error_code != 0) {
return fatalError(error_code); return fatalError(error_code, reply.getAttribute("error-msg"));
} }
var f_document = window.frames["feeds-frame"].document; var f_document = window.frames["feeds-frame"].document;
@ -153,21 +153,21 @@ function backend_sanity_check_callback() {
try { try {
if (!xmlhttp.responseXML) { if (!xmlhttp.responseXML) {
fatalError(3, "D001: " + xmlhttp.responseText); fatalError(3, "[D001, Reply is not XML]: " + xmlhttp.responseText);
return; return;
} }
var reply = xmlhttp.responseXML.firstChild; var reply = xmlhttp.responseXML.firstChild;
if (!reply) { if (!reply) {
fatalError(3, "D002: " + xmlhttp.responseText); fatalError(3, "[D002, Invalid RPC reply]: " + xmlhttp.responseText);
return; return;
} }
var error_code = reply.getAttribute("error-code"); var error_code = reply.getAttribute("error-code");
if (error_code && error_code != 0) { if (error_code && error_code != 0) {
return fatalError(error_code); return fatalError(error_code, reply.getAttribute("error-msg"));
} }
debug("sanity check ok"); debug("sanity check ok");
@ -697,3 +697,24 @@ function debug(msg) {
c.innerHTML = "<li>[" + ts + "] " + msg + "</li>" + c.innerHTML; c.innerHTML = "<li>[" + ts + "] " + msg + "</li>" + c.innerHTML;
} }
} }
function fatalError(code, message) {
/* if (!params) {
window.location = "error.php?c=" + param_escape(code);
} else {
window.location = "error.php?c=" + param_escape(code) +
"&p=" + param_escape(params);
} */
try {
var fe = document.getElementById("fatal_error");
var fc = document.getElementById("fatal_error_msg");
fc.innerHTML = "Code " + code + ": " + message;
fe.style.display = "block";
} catch (e) {
exception_error("fatalError", e);
}
}

View File

@ -62,6 +62,10 @@
<body> <body>
<div id="overlay"><div id="overlay_inner">Loading, please wait...</div></div> <div id="overlay"><div id="overlay_inner">Loading, please wait...</div></div>
<div id="fatal_error"><div id="fatal_error_inner">
<h1>Fatal Error</h1>
<pre id="fatal_error_msg">Unknown Error</pre>
</div></div>
<script type="text/javascript"> <script type="text/javascript">
if (document.addEventListener) { if (document.addEventListener) {