[prev in list] [next in list] [prev in thread] [next in thread] 

List:       squirrelmail-cvs
Subject:    [SM-CVS] SF.net SVN: squirrelmail: [12787] trunk/squirrelmail
From:       pdontthink () users ! sourceforge ! net
Date:       2007-11-27 9:12:07
Message-ID: E1IwwUB-0003M7-9B () sc8-pr-svn2 ! sourceforge ! net
[Download RAW message or body]

Revision: 12787
          http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=12787&view=rev
Author:   pdontthink
Date:     2007-11-27 01:12:05 -0800 (Tue, 27 Nov 2007)

Log Message:
-----------
Adding debug mode to core.  Please run the configuration utility once after \
retrieving this update.  Note that this update includes a change that makes it \
possible to use SquirrelMail constants in the configuration file(s).

Modified Paths:
--------------
    trunk/squirrelmail/ChangeLog
    trunk/squirrelmail/config/conf.pl
    trunk/squirrelmail/functions/global.php
    trunk/squirrelmail/include/constants.php
    trunk/squirrelmail/include/init.php

Modified: trunk/squirrelmail/ChangeLog
===================================================================
--- trunk/squirrelmail/ChangeLog	2007-11-27 01:50:43 UTC (rev 12786)
+++ trunk/squirrelmail/ChangeLog	2007-11-27 09:12:05 UTC (rev 12787)
@@ -233,6 +233,7 @@
     a body location part (e.g. Sun Java System Messaging Server). Thanks
     John Callahan (#1808382).
   - Invalid initialization of To: header (#1772893).
+  - Added SquirrelMail debug mode.
 
 Version 1.5.1 (branched on 2006-02-12)
 --------------------------------------

Modified: trunk/squirrelmail/config/conf.pl
===================================================================
--- trunk/squirrelmail/config/conf.pl	2007-11-27 01:50:43 UTC (rev 12786)
+++ trunk/squirrelmail/config/conf.pl	2007-11-27 09:12:05 UTC (rev 12787)
@@ -424,6 +424,12 @@
 $use_iframe = 'false'                   if ( !$use_iframe );
 $lossy_encoding = 'false'               if ( !$lossy_encoding );
 $allow_remote_configtest = 'false'      if ( !$allow_remote_configtest );
+
+$sm_debug_mode = 'SM_DEBUG_MODE_MODERATE' if ( !$sm_debug_mode );
+#FIXME: When this is STABLE software, remove the line above and uncomment the one \
below: +#$sm_debug_mode = 'SM_DEBUG_MODE_OFF'    if ( !$sm_debug_mode );
+$sm_debug_mode = convert_debug_binary_integer_to_constants($sm_debug_mode);
+
 $addrbook_global_table = 'global_abook' if ( !$addrbook_global_table );
 $addrbook_global_writeable = 'false'    if ( !$addrbook_global_writeable );
 $addrbook_global_listing = 'false'      if ( !$addrbook_global_listing );
@@ -809,6 +815,7 @@
     print "\n";
     print $WHT. "Configuration tweaks\n" . $NRM;
     print "6.  Allow remote configtest     : $WHT$allow_remote_configtest$NRM\n";
+    print "7.  Debug mode                  : $WHT$sm_debug_mode$NRM\n";
     print "\n";
         print "R   Return to Main Menu\n";
     }
@@ -981,6 +988,7 @@
             elsif ( $command == 4 ) { $use_php_recode = commandB4(); }
             elsif ( $command == 5 ) { $use_php_iconv  = commandB5(); }
             elsif ( $command == 6 ) { $allow_remote_configtest = commandB6(); }
+            elsif ( $command == 7 ) { $sm_debug_mode = commandB8(); }
         }
     }
 }
@@ -2609,7 +2617,7 @@
     print "See SquirrelMail documentation about format of config/timezones.php \
file.\n";  print "\n";
 
-    print "Used time zone configuration (0,1,2,3)? [$WHT$time_zone_type$NRM]: $WHT";
+    print "Desired time zone configuration (0,1,2,3)? [$WHT$time_zone_type$NRM]: \
$WHT";  $new_time_zone_type = <STDIN>;
     if ( $new_time_zone_type =~ /^[0123]\n/i ) {
         $time_zone_type = $new_time_zone_type;
@@ -4336,6 +4344,86 @@
     return $new_icon_theme_def;
 }
 
+# SquirrelMail debug mode (since 1.5.2)
+sub commandB8 {
+    print "When debugging or developing SquirrelMail, you may want to increase\n";
+    print "the verbosity of certain kinds of errors, notices, and/or \
diagnostics.\n"; +    print "You may enable one or more of the debugging modes here.  \
Please make\n"; +    print "sure that you have turned off debugging if you are using \
SquirrelMail\n"; +    print "in a production environment.\n\n";
+
+    $input = "";
+    while ( $input ne "d\n" ) {
+        $sm_debug_mode = convert_debug_constants_to_binary_integer($sm_debug_mode);
+
+        # per include/constants.php, here are the debug mode values:
+        #
+        # 0          SM_DEBUG_MODE_OFF
+        # 1          SM_DEBUG_MODE_SIMPLE
+        # 512        SM_DEBUG_MODE_MODERATE
+        # 524288     SM_DEBUG_MODE_ADVANCED
+        # 536870912  SM_DEBUG_MODE_STRICT
+        #
+        print "\n#  Enabled?  Description\n";
+        print "---------------------------------------------------------------------\n";
 +        print "0     " . ($sm_debug_mode == 0 ? "y" : " ")
+            . "      No debugging (recommended in production environments)\n";
+        print "1     " . ($sm_debug_mode & 1 ? "y" : " ")
+            . "      Simple debugging (PHP E_ERROR)\n";
+        print "2     " . ($sm_debug_mode & 512 ? "y" : " ")
+            . "      Moderate debugging (PHP E_ALL)\n";
+        print "3     " . ($sm_debug_mode & 524288 ? "y" : " ")
+            . "      Advanced debugging (PHP E_ALL plus log errors\n";
+        print "             intentionally suppressed)\n";
+        print "4     " . ($sm_debug_mode & 536870912 ? "y" : " ")
+            . "      Strict debugging (PHP E_STRICT)\n";
+        print "\n";
+    
+        print "SquirrelMail debug mode (0,1,2,3,4) or d when done? : $WHT";
+        $input = <STDIN>;
+        if ( $input eq "d\n" ) {
+            # nothing
+        } elsif ($input !~ /^[0-9]+\n$/) {
+            print "\nInvalid configuration value.\n";
+            print "\nPress enter to continue...";
+            $tmp = <STDIN>;
+        } elsif ( $input == "0\n" ) {
+            $sm_debug_mode = 0;
+        } elsif ( $input == "1\n" ) {
+            if ($sm_debug_mode & 1) {
+                $sm_debug_mode ^= 1;
+            } else {
+                $sm_debug_mode |= 1;
+            }
+        } elsif ( $input == "2\n" ) {
+            if ($sm_debug_mode & 512) {
+                $sm_debug_mode ^= 512;
+            } else {
+                $sm_debug_mode |= 512;
+            }
+        } elsif ( $input == "3\n" ) {
+            if ($sm_debug_mode & 524288) {
+                $sm_debug_mode ^= 524288;
+            } else {
+                $sm_debug_mode |= 524288;
+            }
+        } elsif ( $input == "4\n" ) {
+            if ($sm_debug_mode & 536870912) {
+                $sm_debug_mode ^= 536870912;
+            } else {
+                $sm_debug_mode |= 536870912;
+            }
+        } else {
+            print "\nInvalid configuration value.\n";
+            print "\nPress enter to continue...";
+            $tmp = <STDIN>;
+        }
+        print "\n";
+    }
+    $sm_debug_mode = convert_debug_binary_integer_to_constants($sm_debug_mode);
+    return $sm_debug_mode;
+}
+
 sub save_data {
     $tab = "    ";
     if ( open( CF, ">config.php" ) ) {
@@ -4731,6 +4819,10 @@
         print CF "\n";
         # boolean
         print CF "\$allow_remote_configtest = $allow_remote_configtest;\n";
+        # (binary) integer or constant - convert integer 
+        # values to constants before output
+        $sm_debug_mode = convert_debug_binary_integer_to_constants($sm_debug_mode);
+        print CF "\$sm_debug_mode = $sm_debug_mode;\n";
         print CF "\n";
 
         close CF;
@@ -5471,3 +5563,91 @@
     }
 
 }
+
+# converts (binary) integer values that correspond 
+# to the SquirrelMail debug mode constants (see 
+# include/constants.php) into those constant strings 
+# (bitwise or'd if more than one is enabled)
+#
+# if the value passed in is not an integer, it is 
+# returned unmolested
+#
+sub convert_debug_binary_integer_to_constants() {
+
+    my ($debug_mode) = @_;
+    if ($debug_mode =~ /^[^0-9]/) {
+        return $debug_mode;
+    }
+    $debug_mode = int($debug_mode);
+    $new_debug_mode = '';
+
+    # per include/constants.php, here are their values:
+    #
+    # 0          SM_DEBUG_MODE_OFF
+    # 1          SM_DEBUG_MODE_SIMPLE
+    # 512        SM_DEBUG_MODE_MODERATE
+    # 524288     SM_DEBUG_MODE_ADVANCED
+    # 536870912  SM_DEBUG_MODE_STRICT
+    #
+    if ($debug_mode & 1) {
+        $new_debug_mode .= ' | SM_DEBUG_MODE_SIMPLE';
+    }
+    if ($debug_mode & 512) {
+        $new_debug_mode .= ' | SM_DEBUG_MODE_MODERATE';
+    }
+    if ($debug_mode & 524288) {
+        $new_debug_mode .= ' | SM_DEBUG_MODE_ADVANCED';
+    }
+    if ($debug_mode & 536870912) {
+        $new_debug_mode .= ' | SM_DEBUG_MODE_STRICT';
+    }
+
+    $new_debug_mode =~ s/^ \| //;
+    if (!$new_debug_mode) {
+        $new_debug_mode = 'SM_DEBUG_MODE_OFF';
+    }
+
+    return $new_debug_mode;
+}
+
+# converts SquirrelMail debug mode constants (see
+# include/constants.php) into their corresponding
+# (binary) integer values
+#
+# if the value passed in is an integer already, it
+# is returned unmolested
+#
+sub convert_debug_constants_to_binary_integer() {
+
+    my ($debug_mode) = @_;
+    if ($debug_mode =~ /^[0-9]/) {
+        return $debug_mode;
+    }
+    $new_debug_mode = 0;
+
+    # per include/constants.php, here are their values:
+    #
+    # 0          SM_DEBUG_MODE_OFF
+    # 1          SM_DEBUG_MODE_SIMPLE
+    # 512        SM_DEBUG_MODE_MODERATE
+    # 524288     SM_DEBUG_MODE_ADVANCED
+    # 536870912  SM_DEBUG_MODE_STRICT
+    #
+    if ($debug_mode =~ /\bSM_DEBUG_MODE_OFF\b/) {
+        $new_debug_mode = 0;
+    }
+    if ($debug_mode =~ /\bSM_DEBUG_MODE_SIMPLE\b/) {
+        $new_debug_mode |= 1;
+    }
+    if ($debug_mode =~ /\bSM_DEBUG_MODE_MODERATE\b/) {
+        $new_debug_mode |= 512;
+    }
+    if ($debug_mode =~ /\bSM_DEBUG_MODE_ADVANCED\b/) {
+        $new_debug_mode |= 524288;
+    }
+    if ($debug_mode =~ /\bSM_DEBUG_MODE_STRICT\b/) {
+        $new_debug_mode |= 536870912;
+    }
+
+    return $new_debug_mode;
+}

Modified: trunk/squirrelmail/functions/global.php
===================================================================
--- trunk/squirrelmail/functions/global.php	2007-11-27 01:50:43 UTC (rev 12786)
+++ trunk/squirrelmail/functions/global.php	2007-11-27 09:12:05 UTC (rev 12787)
@@ -85,6 +85,8 @@
 
 /**
  * Squelch error output to screen (only) for the given function.
+ * If the SquirrelMail debug mode SM_DEBUG_MODE_ADVANCED is not 
+ * enabled, error output will not go to the log, either.
  *
  * This provides an alternative to the @ error-suppression
  * operator where errors will not be shown in the interface
@@ -110,9 +112,21 @@
  *
  */
 function sq_call_function_suppress_errors($function, $args=NULL) {
+   global $sm_debug_mode;
+
    $display_errors = ini_get('display_errors');
    ini_set('display_errors', '0');
+
+   // if advanced debug mode isn't enabled, don't log the error, either
+   //
+   if (!($sm_debug_mode & SM_DEBUG_MODE_ADVANCED))
+      $error_reporting = error_reporting(0);
+
    $ret = call_user_func_array($function, $args);
+
+   if (!($sm_debug_mode & SM_DEBUG_MODE_ADVANCED))
+      error_reporting($error_reporting);
+
    ini_set('display_errors', $display_errors);
    return $ret;
 }

Modified: trunk/squirrelmail/include/constants.php
===================================================================
--- trunk/squirrelmail/include/constants.php	2007-11-27 01:50:43 UTC (rev 12786)
+++ trunk/squirrelmail/include/constants.php	2007-11-27 09:12:05 UTC (rev 12787)
@@ -26,6 +26,21 @@
 /**************************************************************/
 
 /**
+ * Define constants for SquirrelMail debug modes.
+ * Note that these are binary so that modes can be
+ * mixed and matched, and they are also ordered from
+ * minor to severe.  When adding new modes, please
+ * order them in a sensical way (MODERATE is the 10th
+ * bit; ADVANCED is the 20th bit).
+ * @since 1.5.2
+ */
+define('SM_DEBUG_MODE_OFF', 0);             // complete error suppression
+define('SM_DEBUG_MODE_SIMPLE', 1);          // PHP E_ERROR
+define('SM_DEBUG_MODE_MODERATE', 512);      // PHP E_ALL
+define('SM_DEBUG_MODE_ADVANCED', 524288);   // PHP E_ALL plus log errors \
intentionally suppressed +define('SM_DEBUG_MODE_STRICT', 536870912);  // PHP E_STRICT
+
+/**
  * Define basic, general purpose preference constants.
  * @since 1.2.0
  */

Modified: trunk/squirrelmail/include/init.php
===================================================================
--- trunk/squirrelmail/include/init.php	2007-11-27 01:50:43 UTC (rev 12786)
+++ trunk/squirrelmail/include/init.php	2007-11-27 09:12:05 UTC (rev 12787)
@@ -14,10 +14,12 @@
 /**
  * This is a development version so in order to track programmer mistakes we
  * set the error reporting to E_ALL
+FIXME: disabling this for now, because we now have $sm_debug_mode, but the problem \
with that is that we don't know what it will be until we have loaded the config file, \
a good 175 lines below after several important files have been included, etc.  For \
now, we'll trust that developers have turned on E_ALL in php.ini anyway, but this can \
                be uncommented if not.
  */
-error_reporting(E_ALL);
+//error_reporting(E_ALL);
 
 
+
 /**
  * Make sure we have a page name
  *
@@ -148,6 +150,7 @@
 $color[15] = '#002266';  /* (dark blue)   Unselectable folders */
 $color[16] = '#ff9933';  /* (orange)      Highlight color */
 
+require(SM_PATH . 'include/constants.php');
 require(SM_PATH . 'functions/global.php');
 require(SM_PATH . 'functions/strings.php');
 require(SM_PATH . 'functions/arrays.php');
@@ -169,8 +172,22 @@
     require(SM_PATH . 'config/config_local.php');
 }
 
+
+/**
+ * Set PHP error reporting level based on the SquirrelMail debug mode
+ */
+$error_level = 0;
+if ($sm_debug_mode & SM_DEBUG_MODE_SIMPLE)
+    $error_level |= E_ERROR;
+if ($sm_debug_mode & SM_DEBUG_MODE_MODERATE
+ || $sm_debug_mode & SM_DEBUG_MODE_ADVANCED)
+    $error_level |= E_ALL;
+if ($sm_debug_mode & SM_DEBUG_MODE_STRICT)
+    $error_level |= E_STRICT;
+error_reporting($error_level);
+
+
 require(SM_PATH . 'functions/plugin.php');
-require(SM_PATH . 'include/constants.php');
 require(SM_PATH . 'include/languages.php');
 require(SM_PATH . 'class/template/Template.class.php');
 require(SM_PATH . 'class/error.class.php');


This was sent by the SourceForge.net collaborative development platform, the world's \
largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
-----
squirrelmail-cvs mailing list
List address: squirrelmail-cvs@lists.sourceforge.net
List info (subscribe/unsubscribe/change options): \
                https://lists.sourceforge.net/lists/listinfo/squirrelmail-cvs
Repository: http://squirrelmail.org/svn


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic