fixed All folder save, little clean up, thanx Jimmy Conner
[squirrelmail.git] / config / conf.pl
index 8b095a6593c947c9b120b8ab7820aa9f80e9bfb5..20d736f5d110532d240c2284a0aff3bc380468cc 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 # conf.pl
 # Luke Ehresman (luke@squirrelmail.org)
 #
@@ -8,6 +8,19 @@
 ############################################################              
 $conf_pl_version = "1.2.0";
 
+############################################################
+# Check what directory we're supposed to be running in, and
+# change there if necessary.  File::Basename has been in
+# Perl since at least 5.003_7, and nobody sane runs anything
+# before that, but just in case.
+############################################################
+
+if (eval q{require "File/Basename.pm"}) {
+    my $dir = File::Basename::dirname($0);
+    chdir($dir);
+}
+
+
 ############################################################              
 # Some people try to run this as a CGI. That's wrong!
 ############################################################              
@@ -255,6 +268,27 @@ if(!$hide_sm_attributions) {
     $hide_sm_attributions = "false";
 }
 
+if ($ARGV[0] eq '--install-plugin') {
+    print "Activating plugin " . $ARGV[1]
+    . "\n";
+    push @plugins, $ARGV[1];
+    save_data();
+    exit(0);
+}
+elsif ($ARGV[0] eq '--remove-plugin') {
+    print "Removing plugin " . $ARGV[1]
+    . "\n";
+    foreach $plugin (@plugins) {
+        if ($plugin ne $ARGV[1]) {
+           push @newplugins, $plugin;
+        }
+    }
+    @plugins = @newplugins;
+    save_data();
+    exit(0);
+}
+
+
 #####################################################################################
 if ($config_use_color == 1) {
    $WHT = "\x1B[37;1m";
@@ -283,6 +317,7 @@ while (($command ne "q") && ($command ne "Q")) {
       print "6.  Address Books (LDAP)\n";
       print "7.  Message of the Day (MOTD)\n";
       print "8.  Plugins\n";
+      print "9.  Database\n";
       print "\n";
       print "D.  Set pre-defined settings for specific IMAP servers\n";
       print "\n";
@@ -293,6 +328,7 @@ while (($command ne "q") && ($command ne "Q")) {
       print "3.  Organization Title   : $WHT$org_title$NRM\n";
       print "4.  Signout Page         : $WHT$signout_page$NRM\n";
       print "5.  Default Language     : $WHT$squirrelmail_default_language$NRM\n";
+      print "6.  Top Frame            : $WHT$frame_top$NRM\n";
       print "\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 2) {
@@ -415,6 +451,12 @@ while (($command ne "q") && ($command ne "Q")) {
       print "A   Sanitize all plugins for use with Squirrelmail 1.2\n";
       print "\n";
       print "R   Return to Main Menu\n";
+   } elsif ($menu == 9) {
+      print $WHT."Database\n".$NRM;
+      print "1.  DSN for Address Book : $WHT$addrbook_dsn$NRM\n";
+      print "\n";
+      print "S   Save data\n";
+      print "R   Return to Main Menu\n";
    }
    if ($config_use_color == 1) {
       print "C.  Turn color off\n";
@@ -436,7 +478,6 @@ while (($command ne "q") && ($command ne "Q")) {
       $menu = 0;
    } elsif ($command eq "s") {
       save_data ();
-      print "Data saved in config.php\n";
       print "Press enter to continue...";
       $tmp = <STDIN>;
       $saved = 1;
@@ -462,7 +503,7 @@ while (($command ne "q") && ($command ne "Q")) {
    } else {
       $saved = 0;
       if ($menu == 0) {
-         if (($command > 0) && ($command < 9)) {
+         if (($command > 0) && ($command < 10)) {
             $menu = $command;
          }
       } elsif ($menu == 1) {
@@ -470,7 +511,8 @@ while (($command ne "q") && ($command ne "Q")) {
          elsif ($command == 2) { $org_logo   = command2 (); }
          elsif ($command == 3) { $org_title  = command3 (); }
          elsif ($command == 4) { $signout_page  = command4 (); }
-        elsif ($command == 5) { $squirrelmail_default_language = command5(); }
+         elsif ($command == 5) { $squirrelmail_default_language = command5(); }
+         elsif ($command == 6) { $frame_top = command6(); }
       } elsif ($menu == 2) {
          if    ($command == 1)  { $domain                 = command11 (); }
          elsif ($command == 2)  { $imapServerAddress      = command12 (); }
@@ -520,6 +562,8 @@ while (($command ne "q") && ($command ne "Q")) {
       } elsif ($menu == 8) {
          if    ($command =~ /^[0-9]+/) { @plugins = command81(); }
          elsif ($command eq "a") { command8s(); }
+      } elsif ($menu == 9) {
+         if    ($command == 1) { $addrbook_dsn = command91(); }
       }
    }   
 }
@@ -611,6 +655,23 @@ sub command5 {
    return $new_signout_page;
 }
 
+# Default top frame
+sub command6 {
+    print "SquirrelMail defaults to using the whole of the browser window.\n";
+    print "This allows you to keep it within a specified frame. The default\n";
+    print "is '_top'\n";
+    print "\n";
+    print "[$WHT$frame_top$NRM]: $WHT";
+    $new_frame_top = <STDIN>;
+    if ($new_frame_top eq "\n") {
+        $new_frame_top = '_top';
+    } else {
+        $new_frame_top =~ s/[\r|\n]//g;
+        $new_frame_top =~ s/^\s+$//g;
+    }
+    return $new_frame_top;
+}
+
 ####################################################################################
 
 # domain
@@ -1761,156 +1822,190 @@ sub command62 {
    return $default_use_javascript_addr_book;
 }
 
+sub command91 {
+   print "If you want to store your users address book details in a database then\n";
+   print "you need to set this DSN to a valid value. The format for this is:\n";
+   print "mysql://user:pass\@hostname/dbname\n";
+   print "Where mysql can be one of the databases PHP supports, the most common\n";
+   print "of these are mysql, msql and pgsql\n";
+   print "If the DSN is left empty (hit space and then return) the database\n";
+   print "related code for address books will not be used\n";
+   print "\n";
 
-sub save_data {
-   $tab = "    ";
-   open (CF, ">config.php");
-
-   print CF "<?php\n";
-   print CF "\n";
-
-   print CF "/**\n";
-   print CF " * SquirrelMail Configuration File\n";
-   print CF " * Created using the configure script, conf.pl\n";
-   print CF " */\n";
-   print CF "\n";
-   
-   print CF "global \$config_version, \$config_use_color;\n";
-   if ($print_config_version) {
-      print CF "\$config_version = '$print_config_version';\n";
-   }
-   print CF "\$config_use_color = $config_use_color;\n"; 
-   print CF "\n";
-
-   print CF "global \$org_name, \$org_logo, \$org_title, \$signout_page;\n";
-   print CF "\$org_name      = \"$org_name\";\n";
-   print CF "\$org_logo      = '$org_logo';\n";
-   print CF "\$org_title     = \"$org_title\";\n";
-   print CF "\$signout_page  = '$signout_page';\n";
-   print CF "\n";
-
-   print CF "global \$motd;\n";
-   print CF "\$motd = '$motd';\n";
-   print CF "\n";
-
-   print CF "global \$squirrelmail_default_language;\n";
-   print CF "\$squirrelmail_default_language = '$squirrelmail_default_language';\n";
-   print CF "\n";
-
-   print CF "global \$domain, \$imapServerAddress, \$imapPort;\n";
-   print CF "global \$useSendmail, \$smtpServerAddress, \$smtpPort;\n";
-   print CF "global \$sendmail_path, \$use_authenticated_smtp;\n";
-   print CF "global \$imap_server_type, \$invert_time;\n";
-   print CF "global \$optional_delimiter;\n";
-   print CF "\$domain                 = '$domain';\n";
-   print CF "\$imapServerAddress      = '$imapServerAddress';\n";
-   print CF "\$imapPort               = $imapPort;\n";
-   print CF "\$useSendmail            = $useSendmail;\n";
-   print CF "\$smtpServerAddress      = '$smtpServerAddress';\n";
-   print CF "\$smtpPort               = $smtpPort;\n";
-   print CF "\$sendmail_path          = '$sendmail_path';\n";
-   print CF "\$use_authenticated_smtp = $use_authenticated_smtp;\n";
-   print CF "\$imap_server_type       = '$imap_server_type';\n";
-   print CF "\$invert_time            = $invert_time;\n";
-   print CF "\$optional_delimiter     = '$optional_delimiter';\n";
-   print CF "\n";
-
-   print CF "global \$default_folder_prefix;\n";
-   print CF "global \$trash_folder, \$default_move_to_trash;\n";
-   print CF "global \$sent_folder, \$default_move_to_sent;\n";
-   print CF "global \$draft_folder, \$default_save_to_draft;\n";
-   print CF "global \$show_prefix_option, \$list_special_folders_first;\n";
-   print CF "global \$use_special_folder_color, \$auto_expunge;\n";
-   print CF "global \$default_sub_of_inbox;\n";
-   print CF "global \$show_contain_subfolders_option;\n";
-   print CF "global \$default_unseen_notify;\n";
-   print CF "global \$default_unseen_type, \$auto_create_special;\n";
-   print CF "\$default_folder_prefix          = '$default_folder_prefix';\n";
-   print CF "\$trash_folder                   = '$trash_folder';\n";
-   print CF "\$sent_folder                    = '$sent_folder';\n";
-   print CF "\$draft_folder                   = '$draft_folder';\n";
-   print CF "\$default_move_to_trash          = $default_move_to_trash;\n";
-   print CF "\$default_move_to_sent           = $default_move_to_sent;\n";
-   print CF "\$default_save_as_draft          = $default_save_as_draft;\n";
-   print CF "\$show_prefix_option             = $show_prefix_option;\n";
-   print CF "\$list_special_folders_first     = $list_special_folders_first;\n";
-   print CF "\$use_special_folder_color       = $use_special_folder_color;\n";
-   print CF "\$auto_expunge                   = $auto_expunge;\n";
-   print CF "\$default_sub_of_inbox           = $default_sub_of_inbox;\n";
-   print CF "\$show_contain_subfolders_option = $show_contain_subfolders_option;\n";
-   print CF "\$default_unseen_notify          = $default_unseen_notify;\n";
-   print CF "\$default_unseen_type            = $default_unseen_type;\n";
-   print CF "\$auto_create_special            = $auto_create_special;\n";
-   print CF "\n";
-
-   print CF "global \$default_charset;\n";
-   print CF "global \$data_dir, \$attachment_dir, \$dir_hash_level;\n";
-   print CF "global \$default_left_size, \$force_username_lowercase;\n";
-   print CF "global \$default_use_priority, \$hide_sm_attributions;\n";
-   print CF "\$default_charset          = '$default_charset';\n";
-   print CF "\$data_dir                 = '$data_dir';\n";
-   print CF "\$attachment_dir           = \"$attachment_dir\";\n";
-   print CF "\$dir_hash_level           = $dir_hash_level;\n";
-   print CF "\$default_left_size        = $default_left_size;\n";
-   print CF "\$force_username_lowercase = $force_username_lowercase;\n";
-   print CF "\$default_use_priority     = $default_use_priority;\n";
-   print CF "\$hide_sm_attributions     = $hide_sm_attributions;\n";
-   print CF "\n";
-
-   print CF "global \$plugins;\n";
-   for ($ct=0; $ct <= $#plugins; $ct++) {
-      print CF "\$plugins[$ct] = '$plugins[$ct]';\n";
-   }
-   print CF "\n";
-
-   print CF "global \$theme_css, \$theme;\n";
-   print CF "\$theme_css = '$theme_css';\n";
-   for ($count=0; $count <= $#theme_name; $count++) {
-      print CF "\$theme[$count]['PATH'] = '$theme_path[$count]';\n";
-      print CF "\$theme[$count]['NAME'] = '$theme_name[$count]';\n";
-   }
-   print CF "\n";
-
-   if ($default_use_javascript_addr_book ne "true") {
-      $default_use_javascript_addr_book = "false";
-   }   
-   print CF "global \$default_use_javascript_addr_book, \$ldap_server;\n";
-   print CF "\$default_use_javascript_addr_book = $default_use_javascript_addr_book;\n";
-   for ($count=0; $count <= $#ldap_host; $count++) {
-      print CF "\$ldap_server[$count] = array(\n";
-      print CF "    'host' => '$ldap_host[$count]',\n";
-      print CF "    'base' => '$ldap_base[$count]'";
-      if ($ldap_name[$count]) {
-         print CF ",\n";
-         print CF "    'name' => '$ldap_name[$count]'";
-      }
-      if ($ldap_port[$count]) {
-         print CF ",\n";
-         print CF "    'port' => '$ldap_port[$count]'";
-      }
-      if ($ldap_charset[$count]) {
-         print CF ",\n";
-         print CF "    'charset' => '$ldap_charset[$count]'";
-      }
-      if ($ldap_maxrows[$count]) {
-         print CF ",\n";
-         print CF "    'maxrows' => '$ldap_maxrows[$count]'";
-      }
-      print CF "\n";
-      print CF ");\n";
-      print CF "\n";
+   if ($addrbook_dsn eq "") {
+      $default_value = "Disabled";
+   } else {
+      $default_value = $addrbook_dsn;
    }
+   print "[$WHT$addrbook_dsn$NRM]: $WHT";
+   $new_dsn = <STDIN>;
+   if ($new_dsn eq "\n") {
+      $new_dsn = "";
+   } else {
+      $new_dsn =~ s/[\r|\n]//g;
+      $new_dsn =~ s/^\s+$//g;
+   }
+   return $new_dsn;
+}
 
-   print CF "/**\n";
-   print CF " * Make sure there are no characters after the PHP closing\n";
-   print CF " * tag below (including newline characters and whitespace).\n";
-   print CF " * Otherwise, that character will cause the headers to be\n";
-   print CF " * sent and regular output to begin, which will majorly screw\n";
-   print CF " * things up when we try to send more headers later.\n";
-   print CF " */\n";
-   print CF "?>";
-
-   close CF;
+sub save_data {
+    $tab = "    ";
+    if(open (CF, ">config.php"))
+    {
+        print CF "<?php\n";
+        print CF "\n";
+     
+        print CF "/**\n";
+        print CF " * SquirrelMail Configuration File\n";
+        print CF " * Created using the configure script, conf.pl\n";
+        print CF " */\n";
+        print CF "\n";
+        
+        print CF "global \$config_version, \$config_use_color;\n";
+        if ($print_config_version) {
+           print CF "\$config_version = '$print_config_version';\n";
+        }
+        print CF "\$config_use_color = $config_use_color;\n"; 
+        print CF "\n";
+     
+        print CF "global \$org_name, \$org_logo, \$org_title, \$signout_page, \$frame_top;\n";
+        print CF "\$org_name      = \"$org_name\";\n";
+        print CF "\$org_logo      = '$org_logo';\n";
+        print CF "\$org_title     = \"$org_title\";\n";
+        print CF "\$signout_page  = '$signout_page';\n";
+        print CF "\$frame_top     = '$frame_top';\n";
+        print CF "\n";
+     
+        print CF "global \$motd;\n";
+        print CF "\$motd = '$motd';\n";
+        print CF "\n";
+     
+        print CF "global \$squirrelmail_default_language;\n";
+        print CF "\$squirrelmail_default_language = '$squirrelmail_default_language';\n";
+        print CF "\n";
+     
+        print CF "global \$domain, \$imapServerAddress, \$imapPort;\n";
+        print CF "global \$useSendmail, \$smtpServerAddress, \$smtpPort;\n";
+        print CF "global \$sendmail_path, \$use_authenticated_smtp;\n";
+        print CF "global \$imap_server_type, \$invert_time;\n";
+        print CF "global \$optional_delimiter;\n";
+        print CF "\$domain                 = '$domain';\n";
+        print CF "\$imapServerAddress      = '$imapServerAddress';\n";
+        print CF "\$imapPort               = $imapPort;\n";
+        print CF "\$useSendmail            = $useSendmail;\n";
+        print CF "\$smtpServerAddress      = '$smtpServerAddress';\n";
+        print CF "\$smtpPort               = $smtpPort;\n";
+        print CF "\$sendmail_path          = '$sendmail_path';\n";
+        print CF "\$use_authenticated_smtp = $use_authenticated_smtp;\n";
+        print CF "\$imap_server_type       = '$imap_server_type';\n";
+        print CF "\$invert_time            = $invert_time;\n";
+        print CF "\$optional_delimiter     = '$optional_delimiter';\n";
+        print CF "\n";
+     
+        print CF "global \$default_folder_prefix;\n";
+        print CF "global \$trash_folder, \$default_move_to_trash;\n";
+        print CF "global \$sent_folder, \$default_move_to_sent;\n";
+        print CF "global \$draft_folder, \$default_save_to_draft;\n";
+        print CF "global \$show_prefix_option, \$list_special_folders_first;\n";
+        print CF "global \$use_special_folder_color, \$auto_expunge;\n";
+        print CF "global \$default_sub_of_inbox;\n";
+        print CF "global \$show_contain_subfolders_option;\n";
+        print CF "global \$default_unseen_notify;\n";
+        print CF "global \$default_unseen_type, \$auto_create_special;\n";
+        print CF "\$default_folder_prefix          = '$default_folder_prefix';\n";
+        print CF "\$trash_folder                   = '$trash_folder';\n";
+        print CF "\$sent_folder                    = '$sent_folder';\n";
+        print CF "\$draft_folder                   = '$draft_folder';\n";
+        print CF "\$default_move_to_trash          = $default_move_to_trash;\n";
+        print CF "\$default_move_to_sent           = $default_move_to_sent;\n";
+        print CF "\$default_save_as_draft          = $default_save_as_draft;\n";
+        print CF "\$show_prefix_option             = $show_prefix_option;\n";
+        print CF "\$list_special_folders_first     = $list_special_folders_first;\n";
+        print CF "\$use_special_folder_color       = $use_special_folder_color;\n";
+        print CF "\$auto_expunge                   = $auto_expunge;\n";
+        print CF "\$default_sub_of_inbox           = $default_sub_of_inbox;\n";
+        print CF "\$show_contain_subfolders_option = $show_contain_subfolders_option;\n";
+        print CF "\$default_unseen_notify          = $default_unseen_notify;\n";
+        print CF "\$default_unseen_type            = $default_unseen_type;\n";
+        print CF "\$auto_create_special            = $auto_create_special;\n";
+        print CF "\n";
+     
+        print CF "global \$default_charset;\n";
+        print CF "global \$data_dir, \$attachment_dir, \$dir_hash_level;\n";
+        print CF "global \$default_left_size, \$force_username_lowercase;\n";
+        print CF "global \$default_use_priority, \$hide_sm_attributions;\n";
+        print CF "\$default_charset          = '$default_charset';\n";
+        print CF "\$data_dir                 = '$data_dir';\n";
+        print CF "\$attachment_dir           = \"$attachment_dir\";\n";
+        print CF "\$dir_hash_level           = $dir_hash_level;\n";
+        print CF "\$default_left_size        = $default_left_size;\n";
+        print CF "\$force_username_lowercase = $force_username_lowercase;\n";
+        print CF "\$default_use_priority     = $default_use_priority;\n";
+        print CF "\$hide_sm_attributions     = $hide_sm_attributions;\n";
+        print CF "\n";
+     
+        print CF "global \$plugins;\n";
+        for ($ct=0; $ct <= $#plugins; $ct++) {
+           print CF "\$plugins[$ct] = '$plugins[$ct]';\n";
+        }
+        print CF "\n";
+     
+        print CF "global \$theme_css, \$theme;\n";
+        print CF "\$theme_css = '$theme_css';\n";
+        for ($count=0; $count <= $#theme_name; $count++) {
+           print CF "\$theme[$count]['PATH'] = '$theme_path[$count]';\n";
+           print CF "\$theme[$count]['NAME'] = '$theme_name[$count]';\n";
+        }
+        print CF "\n";
+     
+        if ($default_use_javascript_addr_book ne "true") {
+           $default_use_javascript_addr_book = "false";
+        }   
+        print CF "global \$default_use_javascript_addr_book, \$ldap_server;\n";
+        print CF "\$default_use_javascript_addr_book = $default_use_javascript_addr_book;\n";
+        for ($count=0; $count <= $#ldap_host; $count++) {
+           print CF "\$ldap_server[$count] = array(\n";
+           print CF "    'host' => '$ldap_host[$count]',\n";
+           print CF "    'base' => '$ldap_base[$count]'";
+           if ($ldap_name[$count]) {
+              print CF ",\n";
+              print CF "    'name' => '$ldap_name[$count]'";
+           }
+           if ($ldap_port[$count]) {
+              print CF ",\n";
+              print CF "    'port' => '$ldap_port[$count]'";
+           }
+           if ($ldap_charset[$count]) {
+              print CF ",\n";
+              print CF "    'charset' => '$ldap_charset[$count]'";
+           }
+           if ($ldap_maxrows[$count]) {
+              print CF ",\n";
+              print CF "    'maxrows' => '$ldap_maxrows[$count]'";
+           }
+           print CF "\n";
+           print CF ");\n";
+           print CF "\n";
+        }
+
+        print CF "global \$addrbook_dsn;\n";
+        print CF "\$addrbook_dsn = '$addrbook_dsn';\n\n";
+     
+        print CF "/**\n";
+        print CF " * Make sure there are no characters after the PHP closing\n";
+        print CF " * tag below (including newline characters and whitespace).\n";
+        print CF " * Otherwise, that character will cause the headers to be\n";
+        print CF " * sent and regular output to begin, which will majorly screw\n";
+        print CF " * things up when we try to send more headers later.\n";
+        print CF " */\n";
+        print CF "?>";
+     
+        close CF;
+
+        print "Data saved in config.php\n";
+    } else {
+        print "Error saving config.php: $!\n";
+    }
 }
 
 sub set_defaults {