Browse Source

added config option to specify the IMAP folder delimiter, rather than
autodetecting all the time (which doesn't work on some servers, apparently)

Luke Ehresman 24 years ago
parent
commit
4a6ff6d6d7
3 changed files with 45 additions and 14 deletions
  1. 1 0
      ChangeLog
  2. 33 9
      config/conf.pl
  3. 11 5
      functions/imap_general.php

+ 1 - 0
ChangeLog

@@ -1,5 +1,6 @@
 Version 1.0pre1 -- DEVELOPMENT
 ------------------------------
+- added config option to set IMAP folder delimiter rather than always detecting it
 - Made session cookie parameter use PHP's settings rather than making assumptions
 - Select/Deslect all implemented using only HTML (not Javascript)
 - Fixed default charset that is sent with outbound messages (now user's preferred charset)

+ 33 - 9
config/conf.pl

@@ -237,6 +237,9 @@ if (!$invert_time) {
 if (!$force_username_lowercase) {
 	$force_username_lowercase = "false";
 }
+if (!$optional_delimiter) {
+	$optional_delimiter = "detect";
+}
 
 #####################################################################################
 if ($config_use_color == 1) {
@@ -296,6 +299,7 @@ while (($command ne "q") && ($command ne "Q")) {
       }
       print "8.  Server               : $WHT$imap_server_type$NRM\n";
       print "9.  Invert Time          : $WHT$invert_time$NRM\n";
+      print "10. Delimiter            : $WHT$optional_delimiter$NRM\n";
       print "\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 3) {
@@ -441,15 +445,16 @@ while (($command ne "q") && ($command ne "Q")) {
          elsif ($command == 2) { $org_logo   = command2 (); }
          elsif ($command == 3) { $org_title  = command3 (); }
       } elsif ($menu == 2) {
-         if    ($command == 1) { $domain             = command11 (); }
-         elsif ($command == 2) { $imapServerAddress  = command12 (); }
-         elsif ($command == 3) { $imapPort           = command13 (); }
-         elsif ($command == 4) { $useSendmail        = command14 (); }
-         elsif ($command == 5) { $sendmail_path      = command15 (); }
-         elsif ($command == 6) { $smtpServerAddress  = command16 (); }
-         elsif ($command == 7) { $smtpPort           = command17 (); }
-         elsif ($command == 8) { $imap_server_type   = command18 (); }
-         elsif ($command == 9) { $invert_time        = command19 (); }
+         if    ($command == 1)  { $domain             = command11 (); }
+         elsif ($command == 2)  { $imapServerAddress  = command12 (); }
+         elsif ($command == 3)  { $imapPort           = command13 (); }
+         elsif ($command == 4)  { $useSendmail        = command14 (); }
+         elsif ($command == 5)  { $sendmail_path      = command15 (); }
+         elsif ($command == 6)  { $smtpServerAddress  = command16 (); }
+         elsif ($command == 7)  { $smtpPort           = command17 (); }
+         elsif ($command == 8)  { $imap_server_type   = command18 (); }
+         elsif ($command == 9)  { $invert_time        = command19 (); }
+         elsif ($command == 10) { $optional_delimiter = command110 (); }
       } elsif ($menu == 3) {
          if    ($command == 1) { $default_folder_prefix          = command21 (); }
          elsif ($command == 2) { $show_prefix_option             = command22 (); }
@@ -689,6 +694,24 @@ sub command19 {
    return $invert_time;
 }   
 
+sub command110 {
+	print "This is the delimiter that your IMAP server uses to distinguish between\n";
+	print "folders.  For example, Cyrus uses '.' as the delimiter and a complete\n";
+	print "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n";
+	print "look like 'INBOX/Friends/Bob'.  Normally this should be left at 'detect'\n";
+	print "but if you are sure you konw what delimiter your server uses, you can\n";
+	print "specify it here.\n";
+	print "\nTo have it autodetect the delimiter, set it to 'detect'.\n\n";
+   print "[$WHT$optional_delimiter$NRM]: $WHT";
+   $new_optional_delimiter = <STDIN>;
+   if ($new_optional_delimiter eq "\n") {
+      $new_optional_delimiter = $optional_delimiter;
+   } else {
+      $new_optional_delimiter =~ s/[\r|\n]//g;
+   }
+   return $new_optional_delimiter;
+}
+
 # MOTD
 sub command71 {
    print "\nYou can now create the welcome message that is displayed\n";
@@ -1520,6 +1543,7 @@ sub save_data {
    print FILE "\t\$sendmail_path        = \"$sendmail_path\";\n";
    print FILE "\t\$imap_server_type     = \"$imap_server_type\";\n";
    print FILE "\t\$invert_time          = $invert_time;\n";
+	print FILE "\t\$optional_delimiter   = \"$optional_delimiter\";\n";
    
    print FILE "\n";
 

+ 11 - 5
functions/imap_general.php

@@ -167,12 +167,18 @@
     **  Returns the delimeter between mailboxes:  INBOX/Test, or INBOX.Test... 
     ******************************************************************************/
    function sqimap_get_delimiter ($imap_stream = false) {
-      fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n");
-      $read = sqimap_read_data($imap_stream, ".", true, $a, $b);
-      $quote_position = strpos ($read[0], "\"");
-      $delim = substr ($read[0], $quote_position+1, 1);
+		global $optional_delimiter;
+		if (!$optional_delimiter) $optional_delimiter = "detect";
 
-      return $delim;
+		if (strtolower($optional_delimiter) == "detect") {
+      	fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n");
+      	$read = sqimap_read_data($imap_stream, ".", true, $a, $b);
+      	$quote_position = strpos ($read[0], "\"");
+      	$delim = substr ($read[0], $quote_position+1, 1);
+      	return $delim;
+		} else {
+			return $optional_delimiter;
+		}
    
    /* According to something that I can't find, this is supposed to work on all systems