From 1e0628fbfe24eeea183f77b653eb282dafccb48d Mon Sep 17 00:00:00 2001 From: lkehresman Date: Fri, 21 Apr 2000 21:36:59 +0000 Subject: [PATCH] Removed special folders, made them user preferences git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@452 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- BUG | 2 +- TODO | 8 +- config/conf.pl | 320 +++++++++++++++++++++++++------------ config/config_default.php | 18 ++- functions/imap_mailbox.php | 24 +-- functions/smtp.php | 2 + src/folders.php | 73 ++++----- src/left_main.php | 20 +-- src/load_prefs.php | 26 ++- src/options.php | 76 ++++++--- src/options_submit.php | 17 +- 11 files changed, 386 insertions(+), 200 deletions(-) diff --git a/BUG b/BUG index 4179caa7..b199bc28 100644 --- a/BUG +++ b/BUG @@ -4,7 +4,6 @@ Known BUGS to be fixed before 0.4pre1: list, the space is allocated, but it is blank. (lme) I'm not convinced that the cache gets deleted all the time. I'll look into this one. -(lme) In UW, removing folders with a / at the end is broke - When reading through 7 unread messages, every time I would read a message and click on "Message List" to go back, they would stay marked "unread". The caching was doing too good of a job. (: @@ -24,4 +23,5 @@ Known BUGS to be fixed before 0.4pre1: "Luke Ehresman " (without quotes) translates to the SMTP server as: > +(lme) In UW, removing folders with a / at the end is broke diff --git a/TODO b/TODO index 2a55965e..f252d0ed 100644 --- a/TODO +++ b/TODO @@ -6,19 +6,16 @@ initials = taken by that person (pl?) Importing of address books (nre) Use PHP4 Session management, get rid of cookies - Make it possible to save preferences in MySQL DB or on Filesystem - - Navigation between messages without going to folder list (next, prev) - Configurable headers shown on the message listing, like: cc, to, etc - Filters - Better inline HTML support including graphics (content-disposition) - - Maybe a rewrite of mime.php (see Gustav before any work is done) + - Rewrite of mime.php (see Gustav before any work is done) - Make Location redirects absolute rather than relative (index.php) - Foreground themes - When deleting or moving messages (empty trash too), go back to the list for the mail box you were looking at without having to click a link (mcp) Spell checking - - Cache the sorted messages in mailbox and use that for navigation inside - of mailbox (next 25, prev 25, etc.) - Search mailbox(es) for given criteria @@ -33,4 +30,7 @@ Finished: (lme) (9.4.00) Better email message body parsing (lme) (10.4.00) Advanced statuses on messages (Seen, Answered, etc) (glp) (12.4.00) Customize how many messages are shown at once while reading a mailbox +(nre) (16.4.00) Navigation between messages without going to folder list (next, prev) +(nre) (16.4.00) Cache the sorted messages in mailbox and use that for navigation inside + of mailbox (next 25, prev 25, etc.) (lme) (21.4.00) Configure script diff --git a/config/conf.pl b/config/conf.pl index 3dd67f0e..61a49a4c 100755 --- a/config/conf.pl +++ b/config/conf.pl @@ -12,11 +12,16 @@ $NRM = "\x1B[0m"; # First, lets read in the data already in there... ############################################################ if ( -e "config.php") { - print "The file \"config.php\" exists. Using it for defaults.\n\n"; + $config = 1; open (FILE, "config.php"); -} else { - print "No config file found. Reading from config_defaults.php.\n\n"; +} elsif (-e "config_default.php") { + $config = 2; open (FILE, "config_default.php"); +} else { + print "No configuration file found. Please get config_default.php or\n"; + print "config.php before running this again. This program needs a\n"; + print "default config file to get default values.\n"; + exit; } # Reads and parses the current configuration file (either @@ -34,15 +39,7 @@ while ($line = ) { $options[1] =~ s/;.*$//g; $options[1] =~ s/"$//g; - if ($options[0] =~ /^special_folders/) { - if ($options[0] =~ /\[.*\]$/) { - $sub = $options[0]; - $sub =~ s/\]$//; - $sub = substr ($sub, @sub-1, 1); - - $special_folders[$sub] = $options[1]; - } - } elsif ($options[0] =~ /^theme\[[0-9]+\]\["PATH"\]/) { + if ($options[0] =~ /^theme\[[0-9]+\]\["PATH"\]/) { $sub = $options[0]; $sub =~ s/\]\["PATH"\]//; $sub = substr ($sub, @sub-1, 1); @@ -52,6 +49,54 @@ while ($line = ) { $sub =~ s/\]\["NAME"\]//; $sub = substr ($sub, @sub-1, 1); $theme_name[$sub] = $options[1]; + } elsif ($options[0] =~ /^ldap_server\[[0-9]+\]/) { + $sub = $options[0]; + $sub = substr ($sub, length($sub)-2, 1); + $continue = 0; + while (($tmp = ) && ($continue != 1)) { + if ($tmp =~ /\);\s*$/) { + $continue = 1; + } + + if ($tmp =~ /^\s*"host"/i) { + $tmp =~ s/^\s*"host"\s*=>\s*"//i; + $tmp =~ s/",\s*$//; + $tmp =~ s/"\);\s*$//; + $host = $tmp; + } elsif ($tmp =~ /^\s*"base"/i) { + $tmp =~ s/^\s*"base"\s*=>\s*"//i; + $tmp =~ s/",\s*$//; + $tmp =~ s/"\);\s*$//; + print $tmp."\n"; + $base = $tmp; + } elsif ($tmp =~ /^\s*"charset"/i) { + $tmp =~ s/^\s*"charset"\s*=>\s*"//i; + $tmp =~ s/",\s*$//; + $tmp =~ s/"\);\s*$//; + $charset = $tmp; + } elsif ($tmp =~ /^\s*"port"/i) { + $tmp =~ s/^\s*"port"\s*=>\s*"//i; + $tmp =~ s/",\s*$//; + $tmp =~ s/"\);\s*$//; + $port = $tmp; + } elsif ($tmp =~ /^\s*"maxrows"/i) { + $tmp =~ s/^\s*"maxrows"\s*=>\s*"//i; + $tmp =~ s/",\s*$//; + $tmp =~ s/"\);\s*$//; + $maxrows = $tmp; + } elsif ($tmp =~ /^\s*"name"/i) { + $tmp =~ s/^\s*"name"\s*=>\s*"//i; + $tmp =~ s/",\s*$//; + $tmp =~ s/"\);\s*$//; + $name = $tmp; + } + } + $ldap_host[$sub] = $host; + $ldap_base[$sub] = $base; + $ldap_name[$sub] = $name; + $ldap_port[$sub] = $port; + $ldap_maxrows[$sub] = $maxrows; + $ldap_charset[$sub] = $charset; } else { ${$options[0]} = $options[1]; } @@ -65,13 +110,16 @@ if (!$sendmail_path) { $sendmail_path = "/usr/sbin/sendmail"; } - ##################################################################################### while (($command ne "q") && ($command ne "Q")) { system "clear"; if ($menu == 0) { - print $WHT."SquirrelMail Configuration Utility\n".$NRM; + print $WHT."SquirrelMail Configuration : ".$NRM; + if ($config == 1) { print "Read: config.php"; } + elsif ($config == 2) { print "Read: config_default.php"; } + print "\n"; + print $WHT."Main Menu --\n".$NRM; print "1. Organization Preferences\n"; print "2. Server Settings\n"; @@ -114,10 +162,6 @@ while (($command ne "q") && ($command ne "Q")) { print "8. Auto Expunge : $WHT$auto_expunge$NRM\n"; print "9. Default Sub. of INBOX : $WHT$default_sub_of_inbox$NRM\n"; print "10. Show 'Contain Sub.' Option : $WHT$show_contain_subfolders_option$NRM\n"; - print "11. Special Folders > $WHT$special_folders[0]$NRM\n"; - for ($count = 1; $count <= $#special_folders; $count++) { - print " > $WHT$special_folders[$count]$NRM\n"; - } print "\n"; print "R Return to Main Menu\n"; } elsif ($menu == 4) { @@ -139,6 +183,10 @@ while (($command ne "q") && ($command ne "Q")) { print "R Return to Main Menu\n"; } elsif ($menu == 6) { print $WHT."Address Books (LDAP)\n".$NRM; + print "1. Change Servers\n"; + for ($count = 0; $count <= $#ldap_host; $count++) { + print " > $ldap_host[$count]\n"; + } print "\n"; print "R Return to Main Menu\n"; } elsif ($menu == 7) { @@ -203,7 +251,6 @@ while (($command ne "q") && ($command ne "Q")) { elsif ($command == 8) { $auto_expunge = command28 (); } elsif ($command == 9) { $default_sub_of_inbox = command29 (); } elsif ($command == 10){ $show_contain_subfolders_option = command210(); } - elsif ($command == 11){ $special_folders = command211(); } } elsif ($menu == 4) { if ($command == 1) { $default_charset = command31 (); } elsif ($command == 2) { $auto_forward = command32 (); } @@ -215,6 +262,7 @@ while (($command ne "q") && ($command ne "Q")) { command41 (); } } elsif ($menu == 6) { + if ($command == 1) { command61(); } } elsif ($menu == 7) { if ($command == 1) { $motd = command71 (); $motd =~ s/"/\\"/g;} } @@ -645,87 +693,6 @@ sub command210 { return $show_contain_subfolders_option; } -# special folders -sub command211 { - print "\nSpecial folders are folders that can't be manipulated like normal\n"; - print "user-created folders. A couple of examples of these would be the\n"; - print "trash folder, the sent folder, etc.\n"; - print "Special Folders:\n"; - $count = 0; - print "\n"; - while ($count < @special_folders) { - print " $count) $WHT" . $special_folders[$count] . "$NRM\n"; - $count++; - } - print "\n[folders] command (?=help) > "; - $input = ; - $input =~ s/[\r|\n]//g; - while ($input !~ /^d$/i) { - ## ADD - if ($input =~ /^\s*\+\s*.*/) { - $input =~ s/^\s*\+\s*//; - $special_folders[$#special_folders+1] = $input; - } - - elsif ($input =~ /^\s*-\s*[0-9]?/i) { - if ($input =~ /[0-9]+\s*$/) { - $rem_num = $input; - $rem_num =~ s/^\s*-\s*//g; - $rem_num =~ s/\s*$//; - } else { - $rem_num = $#special_folders; - } - - if ($rem_num == 0) { - print "You cannot remove INBOX. It is a very special folder.\n"; - } else { - $count = 0; - @new_special_folders = (); - $removed = 0; - while ($count <= $#special_folders) { - if ($count != $rem_num) { - @new_special_folders = (@new_special_folders, $special_folders[$count]); - } - if ($count == $rem_num) { - print "Removed: $special_folders[$rem_num]\n"; - $removed = 1; - } - $count++; - } - if ($removed != 1) { - print "Error: Can't delete an entry that's not there!\n"; - } - @special_folders = @new_special_folders; - } - } - - elsif ($input =~ /^\s*l\s*/i) { - $count = 0; - print "\n"; - while ($count < @special_folders) { - print " $count) $WHT" . $special_folders[$count] . "$NRM\n"; - $count++; - } - } elsif ($input =~ /^\s*\?\s*/) { - print ".-------------------------.\n"; - print "| + Folder (add folder) |\n"; - print "| - N (remove folder) |\n"; - print "| l (list folders) |\n"; - print "| d (done) |\n"; - print "`-------------------------'\n"; - } - - else { - print "Unrecognized command.\n"; - } - - print "\n[folders] command (?=help) > "; - $input = ; - $input =~ s/[\r|\n]//g; - } - return @special_folders; -} - ############# GENERAL OPTIONS ##################### # Default Charset @@ -938,6 +905,137 @@ sub command41 { } +sub command61 { + print "You can now define different LDAP servers.\n"; + print "[ldap] command (?=help) > "; + $input = ; + $input =~ s/[\r|\n]//g; + while ($input ne "d") { + if ($input =~ /^\s*l\s*/i) { + $count = 0; + while ($count <= $#ldap_host) { + print "$count. $ldap_host[$count]\n"; + print " base: $ldap_base[$count]\n"; + if ($ldap_charset[$count]) { + print " charset: $ldap_charset[$count]\n"; + } + if ($ldap_port[$count]) { + print " port: $ldap_port[$count]\n"; + } + if ($ldap_name[$count]) { + print " name: $ldap_name[$count]\n"; + } + if ($ldap_maxrows[$count]) { + print " maxrows: $ldap_maxrows[$count]\n"; + } + print "\n"; + $count++; + } + } elsif ($input =~ /^\s*\+/) { + $sub = $#ldap_host + 1; + + print "First, we need to have the hostname or the IP address where\n"; + print "this LDAP server resides. Example: ldap.bigfoot.com\n"; + print "hostname: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_host[$sub] = $name; + + print "\n"; + + print "Next, we need the server root (base dn). For this, an empty\n"; + print "string is allowed.\n"; + print "Example: ou=member_directory,o=netcenter.com\n"; + print "base: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_base[$sub] = $name; + + print "\n"; + + print "This is the TCP/IP port number for the LDAP server. Default\n"; + print "port is 389. This is optional. Press ENTER for default.\n"; + print "port: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_port[$sub] = $name; + + print "\n"; + + print "This is the charset for the server. Default is utf-8. This\n"; + print "is also optional. Press ENTER for default.\n"; + print "charset: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_charset[$sub] = $name; + + print "\n"; + + print "This is the name for the server, used to tag the results of\n"; + print "the search. Default it \"LDAP: hostname\". Press ENTER for default\n"; + print "name: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_name[$sub] = $name; + + print "\n"; + + print "You can specify the maximum number of rows in the search result.\n"; + print "Default is unlimited. Press ENTER for default.\n"; + print "maxrows: "; + $name = ; + $name =~ s/[\r|\n]//g; + $ldap_maxrows[$sub] = $name; + + print "\n"; + + } elsif ($input =~ /^\s*-\s*[0-9]?/) { + if ($input =~ /[0-9]+\s*$/) { + $rem_num = $input; + $rem_num =~ s/^\s*-\s*//g; + $rem_num =~ s/\s*$//; + } else { + $rem_num = $#ldap_host; + } + $count = 0; + @new_ldap_host = (); + @new_ldap_base = (); + @new_ldap_port = (); + @new_ldap_name = (); + @new_ldap_charset = (); + @new_ldap_maxrows = (); + while ($count <= $#ldap_host) { + if ($count != $rem_num) { + @new_ldap_host = (@new_ldap_host, $ldap_host[$count]); + @new_ldap_base = (@new_ldap_base, $ldap_base[$count]); + @new_ldap_port = (@new_ldap_port, $ldap_port[$count]); + @new_ldap_name = (@new_ldap_name, $ldap_name[$count]); + @new_ldap_charset = (@new_ldap_charset, $ldap_charset[$count]); + @new_ldap_maxrows = (@new_ldap_maxrows, $ldap_maxrows[$count]); + } + $count++; + } + @ldap_host = @new_ldap_host; + @ldap_base = @new_ldap_base; + @ldap_port = @new_ldap_port; + @ldap_name = @new_ldap_name; + @ldap_charset = @new_ldap_charset; + @ldap_maxrows = @new_ldap_maxrows; + } elsif ($input =~ /^\s*\?\s*/) { + print ".-------------------------.\n"; + print "| + (add host) |\n"; + print "| - N (remove host) |\n"; + print "| l (list hosts) |\n"; + print "| d (done) |\n"; + print "`-------------------------'\n"; + } + print "[ldap] command (?=help) > "; + $input = ; + $input =~ s/[\r|\n]//g; + } +} + + sub save_data { open (FILE, ">config.php"); @@ -971,9 +1069,6 @@ sub save_data { print FILE "\t\$auto_expunge = $auto_expunge;\n"; print FILE "\t\$default_sub_of_inbox = $default_sub_of_inbox;\n"; print FILE "\t\$show_contain_subfolders_option = $show_contain_subfolders_option;\n"; - for ($count=0; $count <= $#special_folders; $count++) { - print FILE "\t\$special_folders[$count] = \"$special_folders[$count]\";\n"; - } print FILE "\n"; print FILE "\t\$default_charset = \"$default_charset\";\n"; @@ -991,6 +1086,25 @@ sub save_data { print FILE "\n"; + for ($count=0; $count <= $#ldap_host; $count++) { + print FILE "\t\$ldap_server[$count] = Array(\n"; + print FILE "\t\t\t\"host\" => \"$ldap_host[$count]\",\n"; + print FILE "\t\t\t\"base\" => \"$ldap_base[$count]\""; + if ($ldap_name[$count]) { + print FILE ",\n\t\t\t\"name\" => \"$ldap_name[$count]\""; + } + if ($ldap_port[$count]) { + print FILE ",\n\t\t\t\"port\" => \"$ldap_port[$count]\""; + } + if ($ldap_charset[$count]) { + print FILE ",\n\t\t\t\"charset\" => \"$ldap_charset[$count]\""; + } + if ($ldap_maxrows[$count]) { + print FILE ",\n\t\t\t\"maxrows\" => \"$ldap_maxrows[$count]\""; + } + print FILE ");\n\n"; + } + print FILE "\t\$motd = \"$motd\";\n"; print FILE "?>\n"; diff --git a/config/config_default.php b/config/config_default.php index a05f69ec..1fbdcad9 100644 --- a/config/config_default.php +++ b/config/config_default.php @@ -203,13 +203,15 @@ // functions/abook_ldap_server.php for a list of possible // parameters - $ldap_server[0] = Array("host" => "memberdir.netscape.com", - "name" => "Netcenter Member Directory", - "base" => "ou=member_directory,o=netcenter.com"); - - $ldap_server[1] = Array("host" => "ldap.bigfoot.com", - "name" => "Bigfoot Directory", - "base" => "", - "charset" => "iso8859-1"); + $ldap_server[0] = Array( + "host" => "memberdir.netscape.com", + "name" => "Netcenter Member Directory", + "base" => "ou=member_directory,o=netcenter.com"); + + $ldap_server[1] = Array( + "host" => "ldap.bigfoot.com", + "name" => "Bigfoot Directory", + "base" => "", + "charset" => "iso8859-1"); ?> diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index ecb5dd24..c4dc474b 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -134,7 +134,8 @@ ******************************************************************************/ function sqimap_mailbox_list ($imap_stream) { global $load_prefs_php, $prefs_php, $config_php, $data_dir, $username, $list_special_folders_first; - global $special_folders; + global $trash_folder, $sent_folder; + global $move_to_trash, $move_to_sent; $inbox_in_list = false; $inbox_subscribed = false; @@ -209,7 +210,7 @@ /** Now, lets sort for special folders **/ for ($i = 0; $i < count($boxes); $i++) { - if ($boxes[$i]["unformatted"] == $special_folders[0]) { + if (strtolower($boxes[$i]["unformatted"]) == "inbox") { $boxesnew[0] = $boxes[$i]; $boxes[$i]["used"] = true; } @@ -217,18 +218,21 @@ if ($list_special_folders_first == true) { for ($i = 0; $i < count($boxes); $i++) { - for ($j = 1; $j < count($special_folders); $j++) { - if (substr($boxes[$i]["unformatted"], strlen($folder_prefix), strlen($special_folders[$j])) == $special_folders[$j]) { - $pos = count($boxesnew); - $boxesnew[$pos] = $boxes[$i]; - $boxes[$i]["used"] = true; - } + if (($boxes[$i]["unformatted"] == $trash_folder) && ($move_to_trash)) { + $pos = count($boxesnew); + $boxesnew[$pos] = $boxes[$i]; + $boxes[$i]["used"] = true; + } + else if (($boxes[$i]["unformatted"] == $sent_folder) && ($move_to_sent)) { + $pos = count($boxesnew); + $boxesnew[$pos] = $boxes[$i]; + $boxes[$i]["used"] = true; } } } for ($i = 0; $i < count($boxes); $i++) { - if (($boxes[$i]["unformatted"] != $special_folders[0]) && + if ((strtolower($boxes[$i]["unformatted"]) != "inbox") && ($boxes[$i]["used"] == false)) { $pos = count($boxesnew); $boxesnew[$pos] = $boxes[$i]; @@ -243,7 +247,7 @@ ** Returns a list of all folders, subscribed or not ******************************************************************************/ function sqimap_mailbox_list_all ($imap_stream) { - global $special_folders, $list_special_folders_first, $folder_prefix; + global $list_special_folders_first, $folder_prefix; if (!function_exists ("ary_sort")) include ("../functions/array.php"); diff --git a/functions/smtp.php b/functions/smtp.php index 049b8da2..dda8f848 100644 --- a/functions/smtp.php +++ b/functions/smtp.php @@ -440,6 +440,7 @@ $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 1); if (sqimap_mailbox_exists ($imap_stream, $sent_folder)) { sqimap_append ($imap_stream, $sent_folder, $length); + echo "sqimap_append ($imap_stream, $sent_folder, $length)"; write822Header ($imap_stream, $t, $c, $b, $subject); writeBody ($imap_stream, $body); sqimap_append_done ($imap_stream); @@ -447,5 +448,6 @@ // Delete the files uploaded for attaching (if any). deleteAttachments(); + exit; } ?> diff --git a/src/folders.php b/src/folders.php index ac03efe8..2a8889f7 100644 --- a/src/folders.php +++ b/src/folders.php @@ -75,28 +75,26 @@ echo _("Delete Folder"); echo ""; echo ""; + $count_special_folders = 0; - for ($i = 0; $i < count($special_folders); $i++) { - for ($p = 0; $p < count($special_folders); $p++) { - if ($boxes[$i]["unformatted"] == $special_folders[$p]) { - $count_special_folders++; - } - } - } + for ($p = 0; $p < count($boxes); $p++) { + if (strtolower($boxes[$i]["unformatted"]) == "inbox") + $count_special_folders++; + else if ($boxes[$i]["unformatted"] == $trash_folder) + $count_special_folders++; + else if ($boxes[$i]["unformatted"] == $sent_folder) + $count_special_folders++; + } if ($count_special_folders < count($boxes)) { echo "
\n"; echo "\n"; for ($i = 0; $i < count($boxes); $i++) { $use_folder = true; - for ($p = 0; $p < count($special_folders); $p++) { - if ($boxes[$i]["unformatted"] == $special_folders[$p]) { - $use_folder = false; - } else if (($trash_folder) && (substr($boxes[$i]["unformatted"], 0, strlen($trash_folder)) == $trash_folder)) { - $use_folder = false; - } - } - if ($use_folder == true) { + + if ((strtolower($boxes[$i]["unformatted"]) != "inbox") && + ($boxes[$i]["unformatted"] != $trash_folder) && + ($boxes[$i]["unformatted"] != $sent_folder)) + { $box = $boxes[$i]["unformatted-dm"]; $box2 = replace_spaces($boxes[$i]["formatted"]); echo "