Răsfoiți Sursa

#181 db error wasn't generated properly when it was sent to email

Alex Trofimov 11 ani în urmă
părinte
comite
0f4ee61fa3
2 a modificat fișierele cu 38 adăugiri și 47 ștergeri
  1. 34 43
      inc/classes/BxDolDb.php
  2. 4 4
      inc/utils.inc.php

+ 34 - 43
inc/classes/BxDolDb.php

@@ -527,7 +527,7 @@ class BxDolDb extends BxDol implements iBxDolSingleton
             if( $aFoundError ) {
             if( $aFoundError ) {
                 $sFoundError = <<<EOJ
                 $sFoundError = <<<EOJ
 Found error in the file '<b>{$aFoundError['file']}</b>' at line <b>{$aFoundError['line']}</b>.<br />
 Found error in the file '<b>{$aFoundError['file']}</b>' at line <b>{$aFoundError['line']}</b>.<br />
-Called '<b>{$aFoundError['function']}</b>' function with erroneous argument #<b>{$aFoundError['arg']}</b>.<br /><br />
+Called '<b>{$aFoundError['function']}</b>' function.<br /><br />
 EOJ;
 EOJ;
             }
             }
         }
         }
@@ -541,34 +541,8 @@ EOJ;
                     <div style="text-align:center;background-color:red;color:white;font-weight:bold;">Error</div>
                     <div style="text-align:center;background-color:red;color:white;font-weight:bold;">Error</div>
                     <div style="text-align:center;"><?php echo $sOutput; ?></div>
                     <div style="text-align:center;"><?php echo $sOutput; ?></div>
             <?php
             <?php
-            if (defined('BX_DB_FULL_DEBUG_MODE') && BX_DB_FULL_DEBUG_MODE) {
-                if (!empty($query))
-                    echo "<div><b>Query:</b><br />{$query}</div>";
-
-                if ($this->_rLink)
-                    echo '<div><b>Mysql error:</b><br />' . $this->getErrorMessage() . '</div>';
-
-                echo '<div style="overflow:scroll;height:300px;border:1px solid gray;">';
-                    echo $sFoundError;
-                    echo "<b>Debug backtrace:</b><br />";
-
-                    $sBackTrace = print_r($aBackTrace, true);
-                    $sBackTrace = str_replace('[password] => ' . BX_DATABASE_PASS, '[password] => *****', $sBackTrace);
-                    $sBackTrace = str_replace('[user] => ' . BX_DATABASE_USER, '[user] => *****', $sBackTrace);
-
-                    echo '<pre>' . htmlspecialchars_adv($sBackTrace) . '</pre>';
-
-                    if ($sParamsOutput) {
-                        echo '<hr />';
-                        echo "<b>Settings:</b><br />";
-                        echo '<pre>' . htmlspecialchars_adv($sParamsOutput) . '</pre>';
-                    }
-
-                    echo "<b>Called script:</b> " . $_SERVER['PHP_SELF'] . "<br />";
-                    echo "<b>Request parameters:</b><br />";
-                    echoDbg( $_REQUEST );
-                echo '</div>';
-            }
+            if (defined('BX_DB_FULL_DEBUG_MODE') && BX_DB_FULL_DEBUG_MODE)
+                echo $this->verboseErrorOutput ($query, $sFoundError, $aBackTrace, $sParamsOutput);
             ?>
             ?>
                 </div>
                 </div>
             <?php
             <?php
@@ -580,30 +554,47 @@ EOJ;
             $sSiteTitle = $this->getParam('site_title');
             $sSiteTitle = $this->getParam('site_title');
             $sMailBody = "Database error in " . $sSiteTitle . "<br /><br /> \n";
             $sMailBody = "Database error in " . $sSiteTitle . "<br /><br /> \n";
 
 
-            if( strlen( $query ) )
-                $sMailBody .= "Query:  <pre>" . htmlspecialchars_adv($query) . "</pre> ";
+            $sMailBody .= $this->verboseErrorOutput ($query, $sFoundError, $aBackTrace, $sParamsOutput);
+            $sMailBody .= "<hr />Auto-report system";
 
 
-            if ($this->_rLink)
-                $sMailBody .= "Mysql error: " . $this->getErrorMessage() . "<br /><br /> ";
+            sendMail($this->getParam('site_email'), "Database error in " . $sSiteTitle, $sMailBody, 0, array(), BX_EMAIL_SYSTEM, 'html', true);
+        }
 
 
-            $sMailBody .= $sFoundError. '<br /> ';
+        bx_show_service_unavailable_error_and_exit($sOutput);
+    }
+
+    protected function verboseErrorOutput ($query, $sFoundError, &$aBackTrace, $sParamsOutput)
+    {
+        ob_start();
+
+        if (!empty($query))
+            echo "<div><b>Query:</b><br />{$query}</div>";
+
+        if ($this->_rLink)
+            echo '<div><b>Mysql error:</b><br />' . $this->getErrorMessage() . '</div>';
+
+        echo '<div style="overflow:scroll;height:300px;border:1px solid gray;">';
+            echo $sFoundError;
+            echo "<b>Debug backtrace:</b><br />";
 
 
             $sBackTrace = print_r($aBackTrace, true);
             $sBackTrace = print_r($aBackTrace, true);
             $sBackTrace = str_replace('[password] => ' . BX_DATABASE_PASS, '[password] => *****', $sBackTrace);
             $sBackTrace = str_replace('[password] => ' . BX_DATABASE_PASS, '[password] => *****', $sBackTrace);
             $sBackTrace = str_replace('[user] => ' . BX_DATABASE_USER, '[user] => *****', $sBackTrace);
             $sBackTrace = str_replace('[user] => ' . BX_DATABASE_USER, '[user] => *****', $sBackTrace);
-            $sMailBody .= "Debug backtrace:\n <pre>" . htmlspecialchars_adv($sBackTrace) . "</pre> ";
 
 
-            if ($sParamsOutput)
-                $sMailBody .= "<hr />Settings:\n <pre>" . htmlspecialchars_adv($sParamsOutput) . "</pre> ";
+            echo '<pre>' . htmlspecialchars_adv($sBackTrace) . '</pre>';
 
 
-            $sMailBody .= "<hr />Called script: " . $_SERVER['PHP_SELF'] . "<br /> ";
-            $sMailBody .= "<hr />Request parameters: <pre>" . print_r( $_REQUEST, true ) . " </pre>";
-            $sMailBody .= "--\nAuto-report system\n";
+            if ($sParamsOutput) {
+                echo '<hr />';
+                echo "<b>Settings:</b><br />";
+                echo '<pre>' . htmlspecialchars_adv($sParamsOutput) . '</pre>';
+            }
 
 
-            sendMail($this->getParam('site_email'), "Database error in " . $sSiteTitle, $sMailBody, 0, array(), BX_EMAIL_SYSTEM, 'html', true);
-        }
+            echo "<b>Called script:</b> " . $_SERVER['PHP_SELF'] . "<br />";
+            echo "<b>Request parameters:</b><br />";
+            echoDbg( $_REQUEST );
+        echo '</div>';
 
 
-        bx_show_service_unavailable_error_and_exit($sOutput);
+        return ob_get_clean();
     }
     }
 
 
     function setErrorChecking ($b)
     function setErrorChecking ($b)

+ 4 - 4
inc/utils.inc.php

@@ -306,7 +306,7 @@ function sendMail($sRecipientEmail, $sMailSubject, $sMailBody, $iRecipientID = 0
         return false;
         return false;
 
 
     // get recipient account
     // get recipient account
-    $oAccount = BxDolAccount::getInstance($sRecipientEmail);
+    $oAccount = !$isDisableAlert ? BxDolAccount::getInstance($sRecipientEmail) : null;
     $aAccountInfo = $oAccount ? $oAccount->getInfo() : false;
     $aAccountInfo = $oAccount ? $oAccount->getInfo() : false;
 
 
     // don't send bulk emails if user didn't subscribed to site news or email is unconfirmed
     // don't send bulk emails if user didn't subscribed to site news or email is unconfirmed
@@ -326,11 +326,11 @@ function sendMail($sRecipientEmail, $sMailSubject, $sMailBody, $iRecipientID = 0
     }
     }
 
 
     // get site vars
     // get site vars
-    $sEmailNotify       = getParam('site_email_notify');
-    $sSiteTitle         = getParam('site_title');
+    $sEmailNotify = !$isDisableAlert ? getParam('site_email_notify') : $sRecipientEmail;
+    $sSiteTitle = !$isDisableAlert ? getParam('site_title') : 'Trident ' . BX_DOL_VERSION;
 
 
     // add unsubscribe link
     // add unsubscribe link
-    if (empty($aPlus['unsubscribe'])) {
+    if (!$isDisableAlert && empty($aPlus['unsubscribe'])) {
         $aPlus['unsubscribe'] = '';
         $aPlus['unsubscribe'] = '';
         if ($oAccount && (BX_EMAIL_MASS == $iEmailType || BX_EMAIL_NOTIFY == $iEmailType))
         if ($oAccount && (BX_EMAIL_MASS == $iEmailType || BX_EMAIL_NOTIFY == $iEmailType))
             $aPlus['unsubscribe'] = ($sLink = $oAccount->getUnsubscribeLink($iEmailType)) ? '<a href="' . BX_DOL_URL_ROOT . $sLink . '">' . _t('_sys_et_txt_unsubscribe') . '</a>' : '';
             $aPlus['unsubscribe'] = ($sLink = $oAccount->getUnsubscribeLink($iEmailType)) ? '<a href="' . BX_DOL_URL_ROOT . $sLink . '">' . _t('_sys_et_txt_unsubscribe') . '</a>' : '';