- global $messages, $go_debug;
-
- // error_reporting==0 when messages are set off with @
- if ($errno & error_reporting())
- $messages[] = array($errno, $errstr, $file, $line);
- else if($errno&~E_NOTICE)// log all not displayed messages
- error_log(user_company() . ':' . $_SESSION["wa_current_user"]->loginname.':'
- . basename($file) .":$line: $errstr");
+ global $messages, $SysPrefs, $cur_error_level;
+
+ // skip well known warnings we don't care about.
+ // Please use restrainedly to not risk loss of important messages
+ $excluded_warnings = array(
+ 'html_entity_decode', // nevermind encodings, special chars are processed anyway
+ 'should be compatible with that', // ignore cpdf/frontreport wrapper warnings
+ 'mysql extension is deprecated' // ignore strict warning in 5.4
+ );
+ foreach($excluded_warnings as $ref) {
+ if (strpos($errstr, $ref) !== false) {
+ return true;
+ }
+ }
+
+ $bt = isset($SysPrefs) && $SysPrefs->go_debug>1 ? get_backtrace(true, 1) : array();
+
+ // error_reporting!=cur_error_level when messages are set off with @
+ if ($cur_error_level == error_reporting()) {
+ if ($errno & $cur_error_level) {
+ // suppress duplicated errors
+ if (!in_array(array($errno, $errstr, $file, $line, @$bt), $messages))
+ $messages[] = array($errno, $errstr, $file, $line, @$bt);
+ }
+ else if ($errno&~E_NOTICE && $errstr != '') { // log all not displayed messages
+ $user = @$_SESSION["wa_current_user"]->loginname;
+ $context = isset($SysPrefs) && !$SysPrefs->db_ok ? '[before upgrade]' : '';
+ error_log(user_company() . ":$user:". basename($file) .":$line:$context $errstr");
+ }
+ }