]> git.wh0rd.org - tt-rss.git/commitdiff
better fatal error handling by frontend (remove error.php)
authorAndrew Dolgov <fox@madoka.spb.ru>
Fri, 31 Mar 2006 05:18:55 +0000 (06:18 +0100)
committerAndrew Dolgov <fox@madoka.spb.ru>
Fri, 31 Mar 2006 05:18:55 +0000 (06:18 +0100)
backend.php
error.php [deleted file]
errors.php [new file with mode: 0644]
functions.js
functions.php
tt-rss.css
tt-rss.js
tt-rss.php

index 5554adae2b985a3675f2405ab63ead5f11f81a46..df3e7d036104e98599663a7a73a2c583819976e2 100644 (file)
 
        require_once "sanity_check.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();
 
        if ($err_msg) {
-               print "Fatal error: $err_msg";
-               exit;
+               header("Content-Type: application/xml");
+               print_error_xml(9, $err_msg); die;
        }
 
        if ((!$op || $op == "rpc" || $op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) {
@@ -35,7 +40,7 @@
        if (!$_SESSION["uid"] && $op != "globalUpdateFeeds") {
 
                if ($op == "rpc") {
-                       print "<error error-code=\"6\"/>";
+                       print_error_xml(6); die;
                } else {
                        print "
                        <html><body>
        }
 
        if (!$op) {
-               print "<error error-code=\"7\"/>";
-               exit;
+               print_error_xml(7); exit;
        }
 
-       require_once "db.php";
-       require_once "db-prefs.php";
-       require_once "functions.php";
-       require_once "magpierss/rss_fetch.inc";
-
        $purge_intervals = array(
                0  => "Default",
                -1 => "Never purge",
diff --git a/error.php b/error.php
deleted file mode 100644 (file)
index 8c5a6a4..0000000
--- a/error.php
+++ /dev/null
@@ -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>
-
diff --git a/errors.php b/errors.php
new file mode 100644 (file)
index 0000000..556af08
--- /dev/null
@@ -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";
+?>
index 9858608ca731cfca92110d8b3255715cb563c1b4..99efbcbac8386e7685e5a7d4049550bb4461b6e4 100644 (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) {
        r.className = r.className.replace("Selected", "");
        
index 14d9fa1548517ce38105f0a676c5d5bf79e3efcb..d4feaf5d686efd8e3d9dec63dd67e8ba1f2ce38f 100644 (file)
@@ -9,6 +9,7 @@
        require_once 'config.php';
        require_once 'db-prefs.php';
        require_once 'compat.php';
+       require_once 'errors.php';
 
        require_once 'magpierss/rss_utils.inc';
 
                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\"/>";
+       }
 ?>
index 39d4083f9e41565c3661193ceac127d061f7afc8..be1f5cb8850570867e79c03cdead3cd451a2c821 100644 (file)
@@ -1052,3 +1052,29 @@ div.cdmContent a:hover {
        text-align : center;
        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;
+}
index 06f9fadc0cd1c0dafcd78e58be12d2cc85b3bf2f..6ad0adff76cff3ffb676a12a41b8573dc2543838 100644 (file)
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -124,7 +124,7 @@ function refetch_callback() {
                        var error_code = reply.getAttribute("error-code");
                
                        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;
@@ -153,21 +153,21 @@ function backend_sanity_check_callback() {
                try {
                
                        if (!xmlhttp.responseXML) {
-                               fatalError(3, "D001: " + xmlhttp.responseText);
+                               fatalError(3, "[D001, Reply is not XML]: " + xmlhttp.responseText);
                                return;
                        }
        
                        var reply = xmlhttp.responseXML.firstChild;
        
                        if (!reply) {
-                               fatalError(3, "D002: " + xmlhttp.responseText);
+                               fatalError(3, "[D002, Invalid RPC reply]: " + xmlhttp.responseText);
                                return;
                        }
        
                        var error_code = reply.getAttribute("error-code");
                
                        if (error_code && error_code != 0) {
-                               return fatalError(error_code);
+                               return fatalError(error_code, reply.getAttribute("error-msg"));
                        }
        
                        debug("sanity check ok");
@@ -697,3 +697,24 @@ function debug(msg) {
                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);
+       }
+}
index 2906241ab39e63b006a8bb1394bb858cac596c56..71a866c684ac66cc60ca6fd896715eff06909dd5 100644 (file)
 <body>
 
 <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">
 if (document.addEventListener) {