$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 );
if ( $ARGV[0] eq '--install-plugin' ) {
print "Activating plugin " . $ARGV[1] . "\n";
- push @plugins, $ARGV[1];
- save_data();
- exit(0);
+ if ( -d "../plugins/" . $ARGV[1]) {
+ push @plugins, $ARGV[1];
+ save_data();
+ exit(0);
+ } else {
+ print "No such plugin.\n";
+ exit(1);
+ }
} elsif ( $ARGV[0] eq '--remove-plugin' ) {
print "Removing plugin " . $ARGV[1] . "\n";
foreach $plugin (@plugins) {
print "1. Use Icons? : $WHT$use_icons$NRM\n";
# print "3. Default Icon Set : $WHT$icon_theme_def$NRM\n";
print "2. Default font size : $WHT$default_fontsize$NRM\n";
- print "3. Manage template sets\n";
+ print "3. Manage template sets (skins)\n";
print "4. Manage user themes\n";
print "5. Manage font sets\n";
print "6. Manage icon themes\n";
$num = 0;
for ( $count = 0 ; $count <= $#plugins ; $count++ ) {
$num = $count + 1;
- print " $num. $plugins[$count]" . get_plugin_version($plugins[$count]) . "\n";
+ $english_name = get_plugin_english_name($plugins[$count]);
+ if ( $english_name eq "" ) {
+ print " $num. $plugins[$count]" . get_plugin_version($plugins[$count]) . "\n";
+ } else {
+ print " $num. $english_name ($plugins[$count])" . get_plugin_version($plugins[$count]) . "\n";
+ }
}
print "\n Available Plugins:\n";
opendir( DIR, "../plugins" );
- @files = readdir(DIR);
+ @files = sort(readdir(DIR));
$pos = 0;
@unused_plugins = ();
for ( $i = 0 ; $i <= $#files ; $i++ ) {
- if ( -d "../plugins/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne "CVS" ) {
+ if ( -d "../plugins/" . $files[$i] && $files[$i] !~ /^\./ && $files[$i] ne ".svn" ) {
$match = 0;
for ( $k = 0 ; $k <= $#plugins ; $k++ ) {
if ( $plugins[$k] eq $files[$i] ) {
for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) {
$num = $num + 1;
- print " $num. $unused_plugins[$i]" . get_plugin_version($unused_plugins[$i]) . "\n";
+ $english_name = get_plugin_english_name($unused_plugins[$i]);
+ if ( $english_name eq "" ) {
+ print " $num. $unused_plugins[$i]" . get_plugin_version($unused_plugins[$i]) . "\n";
+ } else {
+ print " $num. $english_name ($unused_plugins[$i])" . get_plugin_version($unused_plugins[$i]) . "\n";
+ }
}
closedir DIR;
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";
}
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(); }
}
}
}
print " ERROR TESTING\n";
close $sock;
} else {
+ $got = <$sock>; # Discard greeting
print $sock "HELO $domain\r\n";
$got = <$sock>; # Discard
print $sock "MAIL FROM:<tester\@squirrelmail.org>\r\n";
print "SMTP connections?";
if ($smtp_sitewide_user ne '') {
$default = 'y';
- print " [Yn]:";
+ print " [Y/n]:";
} else {
$default = 'n';
- print " [yN]:";
+ print " [y/N]:";
}
$tmp=<STDIN>;
$tmp = trim($tmp);
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;
print "\nStarting detection...\n\n";
opendir( DIR, "../css" );
- @files = readdir(DIR);
+ @files = sort(readdir(DIR));
$cnt = 0;
while ( $cnt <= $#files ) {
$filename = "../css/" . $files[$cnt] .'/';
- if ( $filename ne "../css/rtl.css" && -e $filename . "default.css" ) {
+ if ( $files[$cnt] !~ /^\./ && $filename ne "../css/rtl.css" && -e $filename . "default.css" ) {
$found = 0;
for ( $x = 0 ; $x <= $#user_theme_path ; $x++ ) {
if ( $user_theme_path[$x] eq $filename ) {
}
if ( $found != 1 ) {
print "** Found user theme: $filename\n";
- print " What is its name? ";
+ $def = $files[$cnt];
+ $def =~ s/_/ /g;
+ $def = lc($def);
+ #$def =~ s/(^\w+)/ucfirst $1/eg;
+ #$def =~ s/(\s+)(\w+)/$1 . ucfirst $2/eg;
+ $def =~ s/(^\w+)|(\s+)(\w+)/ucfirst $1 . $2 . ucfirst $3/eg;
+ print " What is its name? [$def]: ";
$nm = <STDIN>;
- $nm =~ s/[\n\r]//g;
+ $nm =~ s/^\s+|\s+$|[\n\r]//g;
+ if ( $nm eq '' ) { $nm = $def; }
$user_theme_name[ $#user_theme_name + 1 ] = $nm;
$user_theme_path[ $#user_theme_path + 1 ] = $filename;
}
print "\nStarting detection...\n\n";
opendir( DIR, "../images/themes/" );
- @files = readdir(DIR);
+ @files = sort(readdir(DIR));
$cnt = 0;
while ( $cnt <= $#files ) {
$filename = "../images/themes/" . $files[$cnt] .'/';
- if ( -d "../images/themes/" . $files[$cnt] && $files[$cnt] !~ /^\./ && $files[$cnt] ne "CVS" ) {
+ if ( -d "../images/themes/" . $files[$cnt] && $files[$cnt] !~ /^\./ && $files[$cnt] ne ".svn" ) {
$found = 0;
for ( $x = 0 ; $x <= $#icon_theme_path ; $x++ ) {
if ( $icon_theme_path[$x] eq $filename ) {
}
if ( $found != 1 ) {
print "** Found icon theme: $filename\n";
- print " What is its name? ";
+ $def = $files[$cnt];
+ $def =~ s/_/ /g;
+ $def = lc($def);
+ #$def =~ s/(^\w+)/ucfirst $1/eg;
+ #$def =~ s/(\s+)(\w+)/$1 . ucfirst $2/eg;
+ $def =~ s/(^\w+)|(\s+)(\w+)/ucfirst $1 . $2 . ucfirst $3/eg;
+ print " What is its name? [$def]: ";
$nm = <STDIN>;
- $nm =~ s/[\n\r]//g;
+ $nm =~ s/^\s+|\s+$|[\n\r]//g;
+ if ( $nm eq '' ) { $nm = $def; }
$icon_theme_name[ $#icon_theme_name + 1 ] = $nm;
$icon_theme_path[ $#icon_theme_path + 1 ] = $filename;
}
}
sub command_templates {
- print "\nDefine the template sets that you wish to use. If you have added\n";
+ print "\nDefine the template sets (skins) that you wish to use. If you have added\n";
print "a template set of your own, just follow the instructions (?) about\n";
print "how to add them. You can also change the default template.\n";
. "| - N (remove template set) |\n"
. "| m N (mark default template set) |\n"
. "| f N (set fallback template set) |\n"
- . "| l (list template sets) |\n"
+ . "| l (list template sets/skins) |\n"
. "| d (done) |\n"
. "|-------------------------------------|\n"
. "| where N is a template set number |\n"
} elsif ( $input =~ /^\s*t\s*/i ) {
print "\nStarting detection...\n\n";
opendir( DIR, "../templates" );
- @files = readdir(DIR);
+ @files = sort(readdir(DIR));
$cnt = 0;
while ( $cnt <= $#files ) {
- if ( -d "../templates/" . $files[$cnt] && $files[$cnt] !~ /^\./ && $files[$cnt] ne "CVS" ) {
+ if ( -d "../templates/" . $files[$cnt] && $files[$cnt] !~ /^\./ && $files[$cnt] ne ".svn" ) {
$filename = $files[$cnt];
$found = 0;
for ( $x = 0 ; $x <= $#templateset_id ; $x++ ) {
}
if ( $found != 1) {
print "** Found template set: $filename\n";
- print " What is it's name (as shown to your users)? ";
+ $def = $files[$cnt];
+ $def =~ s/_/ /g;
+ $def = lc($def);
+ #$def =~ s/(^\w+)/ucfirst $1/eg;
+ #$def =~ s/(\s+)(\w+)/$1 . ucfirst $2/eg;
+ $def =~ s/(^\w+)|(\s+)(\w+)/ucfirst $1 . $2 . ucfirst $3/eg;
+ print " What is it's name (as shown to your users)? [$def]: ";
$nm = <STDIN>;
- $nm =~ s/[\n\r]//g;
+ $nm =~ s/^\s+|\s+$|[\n\r]//g;
+ if ( $nm eq '' ) { $nm = $def; }
$templateset_id[ $#templateset_id + 1 ] = $filename;
$templateset_name[ $#templateset_name + 1 ] = $nm;
}
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" ) ) {
print CF " * Created using the configure script, conf.pl\n";
print CF " */\n";
print CF "\n";
- print CF "global \$version;\n";
if ($print_config_version) {
print CF "\$config_version = '$print_config_version';\n";
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;
# So at this point, we have a response, and it is (hopefully) valid.
if ($service eq 'SMTP') {
- if (($response =~ /^535/) or ($response =~/^502/)) {
+ if (!($response =~ /^334/)) {
# Not supported
print $sock $logout;
close $sock;
return 'NO';
- } elsif ($response =~ /^503/) {
- #Something went wrong
- return undef;
}
} elsif ($service eq 'IMAP') {
if ($response =~ /^A01/) {
} elsif ($folder_name =~ /[&\*\%]/) {
# check for ampersand and list-wildcards
print "Folder name contains special UTF7-IMAP characters.\n";
- print "Are you sure that folder name is correct? (yN): ";
+ print "Are you sure that folder name is correct? (y/N): ";
my $tmp = <STDIN>;
$tmp = lc(trim($tmp));
if ($tmp =~ /^y$/) {
}
+# determine a plugin's English name
+#
+# parses the setup.php file, looking for the
+# English name in the <plugin>_info() function.
+#
+sub get_plugin_english_name() {
+
+ my $plugin_name = shift(@_);
+
+ $setup_file = '../plugins/' . $plugin_name . '/setup.php';
+ if ( -e "$setup_file" ) {
+ # Make sure that file is readable
+ if (! -r "$setup_file") {
+ print "\n";
+ print "WARNING:\n";
+ print "The file \"$setup_file\" was found, but you don't\n";
+ print "have rights to read it. The plugin \"";
+ print $plugin_name . "\" may not work correctly until you fix this.\n";
+ print "\nPress enter to continue";
+ $ctu = <STDIN>;
+ print "\n";
+ next;
+ }
+
+ $english_name = '';
+# FIXME: grep the file instead of reading it into memory?
+ $whole_file = '';
+ open( FILE, "$setup_file" );
+ while ( $line = <FILE> ) {
+ $whole_file .= $line;
+ }
+ close(FILE);
+
+ # the English name is in the <plugin>_info function or nothing...
+ #
+ if ($whole_file =~ /('english_name'\s*=>\s*['"](.*?)['"])/) {
+ $english_name .= $2;
+ }
+
+ return $english_name;
+
+ } else {
+ print "\n";
+ print "WARNING:\n";
+ print "The file \"$setup_file\" was not found.\n";
+ print "The plugin \"" . $plugin_name;
+ print "\" may not work correctly until you fix this.\n";
+ print "\nPress enter to continue";
+ $ctu = <STDIN>;
+ print "\n";
+ next;
+ }
+
+}
+
# parses the setup.php files for all activated plugins and
# builds static plugin hooks array so we don't have to load
# ALL plugins are runtime and build the hook array on every
}
}
+
+# 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;
+}