Add $logo_path var in case template authors want to tweak the logo themselves.
[squirrelmail.git] / class / error.class.php
index aabea017f17294f5552fcd255b4b4b1fed0f8f11..9b023e0e9c5bb50331d0ac57c9aa23b010671748 100644 (file)
@@ -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);
     }
 
     /**
@@ -63,7 +66,18 @@ class ErrorHandler {
     }
 
     /**
-     * Sets the error template
+     * 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
+     * @param array $aDelayedErrors array with errors stored in the $this->aErrors format.
      * @since 1.5.1
      */
     function AssignDelayedErrors(&$aDelayedErrors) {
@@ -123,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:
@@ -179,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,
@@ -194,7 +219,7 @@ class ErrorHandler {
         // Show the error immediate in case of fatal errors
         if ($iType == SQM_ERROR) {
             if (!$this->header_sent) {
-                // replace this with template that can be assigned
+                // TODO replace this with template that can be assigned
                 displayHtmlHeader(_("Error"),'',false);
             }
             $this->DisplayErrors();
@@ -208,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);
+            }
         }
     }
 }
@@ -279,4 +322,3 @@ function sqm_trigger_error($sErrNo,$aExtra=array()) {
     }
     trigger_error($sErrString, $iPhpErr);
 }
-?>
\ No newline at end of file