Bläddra i källkod

Implement delayed error handling. Defaults to FALSE. Enable this feature by calling $oErrorHandler->setDealyedErrors(true). This allows errors to be held on certain pages, e.g. webmail.php and displayed at a more appropriate time, e.g. at the bottom of left_main.php.

stevetruckstuff 19 år sedan
förälder
incheckning
3f002629a4
2 ändrade filer med 53 tillägg och 5 borttagningar
  1. 44 3
      class/error.class.php
  2. 9 2
      templates/default/error_message.tpl

+ 44 - 3
class/error.class.php

@@ -40,10 +40,13 @@ class ErrorHandler {
      * @since 1.5.1
      */
     function ErrorHandler(&$oTemplate, $sTemplateFile) {
+#        echo 'init error handler...';
         $this->TemplateName = $sTemplateFile;
         $this->Template =& $oTemplate;
         $this->aErrors = array();
         $this->header_sent = false;
+        $this->delayed_errors = false;
+        $this->Template->assign('delayed_errors', $this->delayed_errors);
     }
 
     /**
@@ -62,6 +65,15 @@ class ErrorHandler {
         $this->header_sent = true;
     }
 
+    /**
+     * Turn on/off delayed error handling
+     * @since 1.5.2
+     */
+    function setDelayedErrors ($val = true) {
+        $this->delayed_errors = $val===true;
+        $this->Template->assign('delayed_errors', $this->delayed_errors);
+    }
+    
     /**
      * Store errors generated in a previous script but couldn't be displayed
      * due to a header redirect. This requires storing of aDelayedErrors in the session
@@ -125,7 +137,7 @@ class ErrorHandler {
                 $aError['message'] = $sErrStr;
                 $aError['extra'] = array(
                                          'FILE' => $sErrFile,
-                                         'LINE' => $iErrLine) ;;
+                                         'LINE' => $iErrLine) ;
                 // what todo with $aContext?
                 break;
             case E_USER_ERROR:
@@ -181,6 +193,17 @@ class ErrorHandler {
             default: break;
             }
 
+            /**
+             * If delayed error handling is enabled, always record the location
+             * and tag the error is delayed to make debugging easier.
+             */
+            if (isset($this->Template->values['delayed_errors']) && $this->Template->values['delayed_errors']) {
+                $aErrorCategory[] = 'Delayed';
+                $aError['extra'] = array(
+                                         'FILE' => $sErrFile,
+                                         'LINE' => $iErrLine) ;
+            }
+            
             $aErrorTpl = array(
                 'type'      => $iType,
                 'category'  => $aErrorCategory,
@@ -210,8 +233,26 @@ class ErrorHandler {
      * @since 1.5.1
      */
     function DisplayErrors() {
-        if (count($this->aErrors)) {
-            $this->Template->display($this->TemplateName);
+        // Check for delayed errors...
+        if (!$this->delayed_errors) {
+            sqgetGlobalVar('delayed_errors',  $delayed_errors,  SQ_SESSION);
+            if (is_array($delayed_errors)) {
+                $this->AssignDelayedErrors($delayed_errors);
+                sqsession_unregister("delayed_errors");
+            }
+        }
+
+        if (isset($this->Template->values['aErrors']) && count($this->Template->values['aErrors']) > 0) {
+            $this->aErrors = array_merge($this->aErrors, $this->Template->values['aErrors']);
+            $this->Template->assign('aErrors',$this->aErrors);
+        }
+
+        if (count($this->aErrors) > 0) {
+            if ($this->delayed_errors) {
+                sqsession_register($this->aErrors,"delayed_errors");
+            } else {
+                $this->Template->display($this->TemplateName);
+            }
         }
     }
 }

+ 9 - 2
templates/default/error_message.tpl

@@ -17,6 +17,7 @@
 
 /* retrieve the template vars */
 extract($t);
+
 if (isset($aErrors) && is_array($aErrors)) {
 ?>
 <div id="error_list">
@@ -34,7 +35,7 @@ if (isset($aErrors) && is_array($aErrors)) {
        <?php echo _("Category:"); ?>
     </td>
     <td class="error_val">
-       <?php foreach ($aError['category'] as $sCategory) {echo $sCategory;} ?>
+       <?php echo join(', ', $aError['category']); ?>
     </td>
   </tr>
   <tr>
@@ -51,7 +52,7 @@ if (isset($aErrors) && is_array($aErrors)) {
     <td class="error_key">
       <?php echo $sKey; ?>:
     </td>
-    <td>
+    <td class="error_val">
       <?php echo $sValue; ?>
     </td>
   </tr>
@@ -81,6 +82,12 @@ if (isset($aErrors) && is_array($aErrors)) {
     </td>
   </tr>
 <?php }   // (isset($aError['link']) && ($aError['link']))
+        ?>
+ <tr class="error_thead">
+   <td class="error_thead_caption" colspan="2">
+   </td>
+ </tr>
+        <?php
     } // foreach($aErrors as $aError)
 ?>
 </table>