Explorar o código

Removed special folders, made them user preferences

Luke Ehresman %!s(int64=25) %!d(string=hai) anos
pai
achega
454df37188
Modificáronse 11 ficheiros con 386 adicións e 200 borrados
  1. 1 1
      BUG
  2. 4 4
      TODO
  3. 217 103
      config/conf.pl
  4. 10 8
      config/config_default.php
  5. 14 10
      functions/imap_mailbox.php
  6. 2 0
      functions/smtp.php
  7. 33 40
      src/folders.php
  8. 10 10
      src/left_main.php
  9. 22 4
      src/load_prefs.php
  10. 57 19
      src/options.php
  11. 16 1
      src/options_submit.php

+ 1 - 1
BUG

@@ -4,7 +4,6 @@ Known BUGS to be fixed before 0.4pre1:
        list, the space is allocated, but it is blank.
        list, the space is allocated, but it is blank.
 (lme)  I'm not convinced that the cache gets deleted all the time.  I'll 
 (lme)  I'm not convinced that the cache gets deleted all the time.  I'll 
        look into this one.  
        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
   -    When reading through 7 unread messages, every time I would read
        a message and click on "Message List" to go back, they would stay
        a message and click on "Message List" to go back, they would stay
 		 marked "unread".  The caching was doing too good of a job.  (:
 		 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 <lehresma@css.tayloru.edu>" (without quotes)
        "Luke Ehresman <lehresma@css.tayloru.edu>" (without quotes)
        translates to the SMTP server as:
        translates to the SMTP server as:
        <lehresma@css.tayloru.edu>>
        <lehresma@css.tayloru.edu>>
+(lme)  In UW, removing folders with a / at the end is broke
 
 

+ 4 - 4
TODO

@@ -6,19 +6,16 @@ initials = taken by that person
 (pl?)   Importing of address books
 (pl?)   Importing of address books
 (nre)   Use PHP4 Session management, get rid of cookies
 (nre)   Use PHP4 Session management, get rid of cookies
   -     Make it possible to save preferences in MySQL DB or on Filesystem
   -     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
   -     Configurable headers shown on the message listing, like:  cc, to, etc
   -     Filters
   -     Filters
   -     Better inline HTML support including graphics (content-disposition)
   -     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)
   -     Make Location redirects absolute rather than relative (index.php)
   -     Foreground themes
   -     Foreground themes
   -     When deleting or moving messages (empty trash too), go back to the 
   -     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
             list for the mail box you were looking at without having to click
             a link
             a link
 (mcp)   Spell checking
 (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
   -     Search mailbox(es) for given criteria
 
 
 
 
@@ -33,4 +30,7 @@ Finished:
 (lme) (9.4.00)   Better email message body parsing
 (lme) (9.4.00)   Better email message body parsing
 (lme) (10.4.00)  Advanced statuses on messages (Seen, Answered, etc)
 (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
 (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
 (lme) (21.4.00)  Configure script

+ 217 - 103
config/conf.pl

@@ -12,11 +12,16 @@ $NRM = "\x1B[0m";
 # First, lets read in the data already in there...
 # First, lets read in the data already in there...
 ############################################################              
 ############################################################              
 if ( -e "config.php") {
 if ( -e "config.php") {
-   print "The file \"config.php\" exists.  Using it for defaults.\n\n";
+	$config = 1;
    open (FILE, "config.php");
    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");
    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
 #  Reads and parses the current configuration file (either
@@ -34,15 +39,7 @@ while ($line = <FILE>) {
          $options[1] =~ s/;.*$//g;
          $options[1] =~ s/;.*$//g;
          $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 = $options[0];
             $sub =~ s/\]\["PATH"\]//;
             $sub =~ s/\]\["PATH"\]//;
             $sub = substr ($sub, @sub-1, 1);
             $sub = substr ($sub, @sub-1, 1);
@@ -52,6 +49,54 @@ while ($line = <FILE>) {
             $sub =~ s/\]\["NAME"\]//;
             $sub =~ s/\]\["NAME"\]//;
             $sub = substr ($sub, @sub-1, 1);
             $sub = substr ($sub, @sub-1, 1);
             $theme_name[$sub] = $options[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 = <FILE>) && ($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 {
          } else {
             ${$options[0]} = $options[1];
             ${$options[0]} = $options[1];
          }   
          }   
@@ -65,13 +110,16 @@ if (!$sendmail_path) {
    $sendmail_path = "/usr/sbin/sendmail";
    $sendmail_path = "/usr/sbin/sendmail";
 }
 }
 
 
-
 #####################################################################################
 #####################################################################################
 
 
 while (($command ne "q") && ($command ne "Q")) {
 while (($command ne "q") && ($command ne "Q")) {
    system "clear";
    system "clear";
    if ($menu == 0) {
    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 $WHT."Main Menu --\n".$NRM;
       print "1.  Organization Preferences\n";
       print "1.  Organization Preferences\n";
       print "2.  Server Settings\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 "8.  Auto Expunge               : $WHT$auto_expunge$NRM\n";
       print "9.  Default Sub. of INBOX      : $WHT$default_sub_of_inbox$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 "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 "\n";
       print "R   Return to Main Menu\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 4) {
    } elsif ($menu == 4) {
@@ -139,6 +183,10 @@ while (($command ne "q") && ($command ne "Q")) {
       print "R   Return to Main Menu\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 6) {
    } elsif ($menu == 6) {
       print $WHT."Address Books (LDAP)\n".$NRM;
       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 "\n";
       print "R   Return to Main Menu\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 7) {
    } elsif ($menu == 7) {
@@ -203,7 +251,6 @@ while (($command ne "q") && ($command ne "Q")) {
          elsif ($command == 8) { $auto_expunge                   = command28 (); }
          elsif ($command == 8) { $auto_expunge                   = command28 (); }
          elsif ($command == 9) { $default_sub_of_inbox           = command29 (); }
          elsif ($command == 9) { $default_sub_of_inbox           = command29 (); }
          elsif ($command == 10){ $show_contain_subfolders_option = command210(); }
          elsif ($command == 10){ $show_contain_subfolders_option = command210(); }
-         elsif ($command == 11){ $special_folders                = command211(); }
       } elsif ($menu == 4) {
       } elsif ($menu == 4) {
          if    ($command == 1) { $default_charset    = command31 (); }
          if    ($command == 1) { $default_charset    = command31 (); }
          elsif ($command == 2) { $auto_forward       = command32 (); }
          elsif ($command == 2) { $auto_forward       = command32 (); }
@@ -215,6 +262,7 @@ while (($command ne "q") && ($command ne "Q")) {
             command41 (); 
             command41 (); 
          }
          }
       } elsif ($menu == 6) {
       } elsif ($menu == 6) {
+			if ($command == 1) { command61(); }
       } elsif ($menu == 7) {
       } elsif ($menu == 7) {
          if    ($command == 1) { $motd = command71 (); $motd =~ s/"/\\"/g;}
          if    ($command == 1) { $motd = command71 (); $motd =~ s/"/\\"/g;}
       }
       }
@@ -645,87 +693,6 @@ sub command210 {
    return $show_contain_subfolders_option;
    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 = <STDIN>;
-   $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 = <STDIN>;
-      $input =~ s/[\r|\n]//g;
-   }
-   return @special_folders;
-}
-
 ############# GENERAL OPTIONS #####################
 ############# GENERAL OPTIONS #####################
 
 
 # Default Charset
 # Default Charset
@@ -938,6 +905,137 @@ sub command41 {
 }   
 }   
 
 
 
 
+sub command61 {
+	print "You can now define different LDAP servers.\n";
+   print "[ldap] command (?=help) > ";
+   $input = <STDIN>;
+   $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 = <STDIN>;
+         $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 = <STDIN>;
+         $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 = <STDIN>;
+         $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 = <STDIN>;
+         $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 = <STDIN>;
+         $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 = <STDIN>;
+         $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 = <STDIN>;
+      $input =~ s/[\r|\n]//g;
+   }
+}   
+
+
 
 
 sub save_data {
 sub save_data {
    open (FILE, ">config.php");
    open (FILE, ">config.php");
@@ -971,9 +1069,6 @@ sub save_data {
    print FILE "\t\$auto_expunge                     =  $auto_expunge;\n";
    print FILE "\t\$auto_expunge                     =  $auto_expunge;\n";
    print FILE "\t\$default_sub_of_inbox             =  $default_sub_of_inbox;\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";
    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 "\n";
 
 
    print FILE "\t\$default_charset   = \"$default_charset\";\n";
    print FILE "\t\$default_charset   = \"$default_charset\";\n";
@@ -991,6 +1086,25 @@ sub save_data {
    
    
    print FILE "\n";
    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 "\t\$motd = \"$motd\";\n";
 
 
    print FILE "?>\n";
    print FILE "?>\n";

+ 10 - 8
config/config_default.php

@@ -203,13 +203,15 @@
 //    functions/abook_ldap_server.php for a list of possible
 //    functions/abook_ldap_server.php for a list of possible
 //    parameters
 //    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");
 
 
 ?>
 ?>

+ 14 - 10
functions/imap_mailbox.php

@@ -134,7 +134,8 @@
     ******************************************************************************/
     ******************************************************************************/
    function sqimap_mailbox_list ($imap_stream) {
    function sqimap_mailbox_list ($imap_stream) {
       global $load_prefs_php, $prefs_php, $config_php, $data_dir, $username, $list_special_folders_first;
       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_in_list = false;
       $inbox_subscribed = false;
       $inbox_subscribed = false;
@@ -209,7 +210,7 @@
 		
 		
 		/** Now, lets sort for special folders **/
 		/** Now, lets sort for special folders **/
       for ($i = 0; $i < count($boxes); $i++) {
       for ($i = 0; $i < count($boxes); $i++) {
-         if ($boxes[$i]["unformatted"] == $special_folders[0]) {
+         if (strtolower($boxes[$i]["unformatted"]) == "inbox") {
             $boxesnew[0] = $boxes[$i];
             $boxesnew[0] = $boxes[$i];
             $boxes[$i]["used"] = true;
             $boxes[$i]["used"] = true;
          }
          }
@@ -217,18 +218,21 @@
 
 
       if ($list_special_folders_first == true) {
       if ($list_special_folders_first == true) {
          for ($i = 0; $i < count($boxes); $i++) {
          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++) {
       for ($i = 0; $i < count($boxes); $i++) {
-         if (($boxes[$i]["unformatted"] != $special_folders[0]) &&
+         if ((strtolower($boxes[$i]["unformatted"]) != "inbox") &&
              ($boxes[$i]["used"] == false))  {
              ($boxes[$i]["used"] == false))  {
             $pos = count($boxesnew);
             $pos = count($boxesnew);
             $boxesnew[$pos] = $boxes[$i];
             $boxesnew[$pos] = $boxes[$i];
@@ -243,7 +247,7 @@
     **  Returns a list of all folders, subscribed or not
     **  Returns a list of all folders, subscribed or not
     ******************************************************************************/
     ******************************************************************************/
    function sqimap_mailbox_list_all ($imap_stream) {
    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"))
       if (!function_exists ("ary_sort"))
          include ("../functions/array.php");
          include ("../functions/array.php");

+ 2 - 0
functions/smtp.php

@@ -440,6 +440,7 @@
       $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 1);
       $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 1);
       if (sqimap_mailbox_exists ($imap_stream, $sent_folder)) {
       if (sqimap_mailbox_exists ($imap_stream, $sent_folder)) {
          sqimap_append ($imap_stream, $sent_folder, $length);
          sqimap_append ($imap_stream, $sent_folder, $length);
+         echo "sqimap_append ($imap_stream, $sent_folder, $length)";
          write822Header ($imap_stream, $t, $c, $b, $subject);
          write822Header ($imap_stream, $t, $c, $b, $subject);
          writeBody ($imap_stream, $body); 
          writeBody ($imap_stream, $body); 
          sqimap_append_done ($imap_stream);
          sqimap_append_done ($imap_stream);
@@ -447,5 +448,6 @@
 
 
       // Delete the files uploaded for attaching (if any).
       // Delete the files uploaded for attaching (if any).
       deleteAttachments();
       deleteAttachments();
+		exit;
    }
    }
 ?>
 ?>

+ 33 - 40
src/folders.php

@@ -75,28 +75,26 @@
    echo _("Delete Folder");
    echo _("Delete Folder");
    echo "</B></TD></TR>";
    echo "</B></TD></TR>";
    echo "<TR><TD BGCOLOR=\"$color[4]\" ALIGN=CENTER>";
    echo "<TR><TD BGCOLOR=\"$color[4]\" ALIGN=CENTER>";
+
    $count_special_folders = 0;
    $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)) {
    if ($count_special_folders < count($boxes)) {
       echo "<FORM ACTION=\"folders_delete.php\" METHOD=\"POST\">\n";
       echo "<FORM ACTION=\"folders_delete.php\" METHOD=\"POST\">\n";
       echo "<TT><SELECT NAME=mailbox>\n";
       echo "<TT><SELECT NAME=mailbox>\n";
       for ($i = 0; $i < count($boxes); $i++) {
       for ($i = 0; $i < count($boxes); $i++) {
          $use_folder = true;
          $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"];
             $box = $boxes[$i]["unformatted-dm"];
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             echo "         <OPTION VALUE=\"$box\">$box2\n";
             echo "         <OPTION VALUE=\"$box\">$box2\n";
@@ -131,7 +129,7 @@
       if (count($boxes[$i]["flags"]) > 0) {
       if (count($boxes[$i]["flags"]) > 0) {
          for ($j = 0; $j < count($boxes[$i]["flags"]); $j++) {
          for ($j = 0; $j < count($boxes[$i]["flags"]); $j++) {
             if ($boxes[$i]["flags"][$j] != "noinferiors") {
             if ($boxes[$i]["flags"][$j] != "noinferiors") {
-               if (($boxes[$i]["unformatted"] == $special_folders[0]) && ($default_sub_of_inbox == true)) {
+               if ((strtolower($boxes[$i]["unformatted"]) == "inbox") && ($default_sub_of_inbox == true)) {
                   $box = $boxes[$i]["unformatted"];
                   $box = $boxes[$i]["unformatted"];
                   $box2 = replace_spaces($boxes[$i]["formatted"]);
                   $box2 = replace_spaces($boxes[$i]["formatted"]);
                   echo "<OPTION SELECTED VALUE=\"$box\">$box2\n";
                   echo "<OPTION SELECTED VALUE=\"$box\">$box2\n";
@@ -143,7 +141,7 @@
             }   
             }   
          }    
          }    
       } else {
       } else {
-         if (($boxes[$i]["unformatted"] == $special_folders[0]) && ($default_sub_of_inbox == true)) {
+         if ((strtolower($boxes[$i]["unformatted"]) == "inbox") && ($default_sub_of_inbox == true)) {
             $box = $boxes[$i]["unformatted"];
             $box = $boxes[$i]["unformatted"];
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             echo "<OPTION SELECTED VALUE=\"$box\">$box2\n";
             echo "<OPTION SELECTED VALUE=\"$box\">$box2\n";
@@ -173,14 +171,11 @@
       echo "<TT><SELECT NAME=old>\n";
       echo "<TT><SELECT NAME=old>\n";
       for ($i = 0; $i < count($boxes); $i++) {
       for ($i = 0; $i < count($boxes); $i++) {
          $use_folder = true;
          $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"];
             $box = $boxes[$i]["unformatted-dm"];
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             echo "         <OPTION VALUE=\"$box\">$box2\n";
             echo "         <OPTION VALUE=\"$box\">$box2\n";
@@ -206,14 +201,10 @@
       echo "<TT><SELECT NAME=mailbox>\n";
       echo "<TT><SELECT NAME=mailbox>\n";
       for ($i = 0; $i < count($boxes); $i++) {
       for ($i = 0; $i < count($boxes); $i++) {
          $use_folder = true;
          $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"];
             $box = $boxes[$i]["unformatted-dm"];
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             $box2 = replace_spaces($boxes[$i]["formatted"]);
             echo "         <OPTION VALUE=\"$box\">$box2\n";
             echo "         <OPTION VALUE=\"$box\">$box2\n";
@@ -240,13 +231,15 @@
       echo "<tt><select name=mailbox>";
       echo "<tt><select name=mailbox>";
       for ($i = 0; $i < count($boxes_all); $i++) {
       for ($i = 0; $i < count($boxes_all); $i++) {
          $use_folder = true;
          $use_folder = true;
-         for ($p = 0; $p < count ($boxes); $p++) {
-            if ($boxes_all[$i]["unformatted"] == $boxes[$p]["unformatted"]) {
-               $use_folder = false;
-               continue;
-            }
-         }
-         if ($use_folder == true) {
+			for ($p = 0; $p < count ($boxes); $p++) {
+				if ($boxes_all[$i]["unformatted"] == $boxes[$p]["unformatted"]) {
+					$use_folder = false;
+					continue;
+				} else if ($boxes_all[$i]["unformatted-dm"] == $folder_prefix) {
+					$use_folder = false;
+				}
+			}
+			if ($use_folder == true) {	
             $box = $boxes_all[$i]["unformatted-dm"];
             $box = $boxes_all[$i]["unformatted-dm"];
             $box2 = replace_spaces($boxes_all[$i]["formatted"]);
             $box2 = replace_spaces($boxes_all[$i]["formatted"]);
             echo "         <OPTION VALUE=\"$box\">$box2\n";
             echo "         <OPTION VALUE=\"$box\">$box2\n";

+ 10 - 10
src/left_main.php

@@ -30,9 +30,9 @@
 
 
    echo "<HTML>";
    echo "<HTML>";
 
 
-   function formatMailboxName($imapConnection, $mailbox, $real_box, $delimeter, $color, $move_to_trash) {
-		global $folder_prefix;
-      require ("../config/config.php");
+   function formatMailboxName($imapConnection, $mailbox, $real_box, $delimeter, $color) {
+		global $folder_prefix, $trash_folder, $sent_folder;
+		global $color, $move_to_sent, $move_to_trash;
 
 
       $mailboxURL = urlencode($real_box);
       $mailboxURL = urlencode($real_box);
       sqimap_mailbox_select ($imapConnection, $real_box);
       sqimap_mailbox_select ($imapConnection, $real_box);
@@ -43,10 +43,10 @@
          $line .= "<B>";
          $line .= "<B>";
 
 
       $special_color = false;
       $special_color = false;
-      for ($i = 0; $i < count($special_folders); $i++) {
-         if (((substr($real_box, strlen($folder_prefix), strlen($special_folders[$i])) == $special_folders[$i]) || ($real_box == $special_folders[0])) && ($use_special_folder_color == true))
-            $special_color = true;
-      }
+		if ((strtolower($real_box) == "inbox") ||
+		    (($real_box == $trash_folder) && ($move_to_trash)) ||
+			 (($real_box == $sent_folder) && ($move_to_sent)))
+			$special_color = true;
 
 
       if ($special_color == true) {
       if ($special_color == true) {
          $line .= "<a href=\"right_main.php?sort=0&startMessage=1&mailbox=$mailboxURL\" target=\"right\" style=\"text-decoration:none\"><FONT COLOR=\"$color[11]\">";
          $line .= "<a href=\"right_main.php?sort=0&startMessage=1&mailbox=$mailboxURL\" target=\"right\" style=\"text-decoration:none\"><FONT COLOR=\"$color[11]\">";
@@ -65,7 +65,7 @@
          $line .= "&nbsp;<small>($numUnseen)</small>";
          $line .= "&nbsp;<small>($numUnseen)</small>";
       }
       }
 
 
-      if (($move_to_trash == true) && (substr($real_box, strlen($folder_prefix), strlen($trash_folder)) == $trash_folder)) {
+      if (($move_to_trash == true) && ($real_box == $trash_folder)) {
          $urlMailbox = urlencode($real_box);
          $urlMailbox = urlencode($real_box);
          $line .= "<small>";
          $line .= "<small>";
          $line .= "&nbsp;&nbsp;&nbsp;&nbsp;(<B><A HREF=\"empty_trash.php?numMessages=$numMessages&mailbox=$urlMailbox\" TARGET=right style=\"text-decoration:none\">"._("purge")."</A></B>)";
          $line .= "&nbsp;&nbsp;&nbsp;&nbsp;(<B><A HREF=\"empty_trash.php?numMessages=$numMessages&mailbox=$urlMailbox\" TARGET=right style=\"text-decoration:none\">"._("purge")."</A></B>)";
@@ -115,10 +115,10 @@
             $line .= replace_spaces(readShortMailboxName($mailbox, $delimeter));
             $line .= replace_spaces(readShortMailboxName($mailbox, $delimeter));
             $line .= "</FONT>";
             $line .= "</FONT>";
          } else {
          } else {
-            $line .= formatMailboxName($imapConnection, $mailbox, $boxes[$i]["unformatted"], $delimeter, $color, $move_to_trash);
+            $line .= formatMailboxName($imapConnection, $mailbox, $boxes[$i]["unformatted"], $delimeter, $color);
          }
          }
       } else {
       } else {
-         $line .= formatMailboxName($imapConnection, $mailbox, $boxes[$i]["unformatted"], $delimeter, $color, $move_to_trash);
+         $line .= formatMailboxName($imapConnection, $mailbox, $boxes[$i]["unformatted"], $delimeter, $color);
       }
       }
       echo "$line<BR>";
       echo "$line<BR>";
    }
    }

+ 22 - 4
src/load_prefs.php

@@ -24,6 +24,28 @@
       }
       }
    }
    }
 
 
+   $folder_prefix = getPref($data_dir, $username, "folder_prefix");
+   if ($folder_prefix == "")
+      $folder_prefix = $default_folder_prefix;
+
+	/** Load special folders **/
+	$new_trash_folder = getPref($data_dir, $username, "trash_folder");
+	if (($new_trash_folder == "") && ($move_to_trash == true))
+		$trash_folder = $folder_prefix . $trash_folder;
+	else
+		$trash_folder = $new_trash_folder;
+
+	/** Load special folders **/
+	$new_sent_folder = getPref($data_dir, $username, "sent_folder");
+	if (($new_sent_folder == "") && ($move_to_sent == true))
+		$sent_folder = $folder_prefix . $sent_folder;
+	else
+		$sent_folder = $new_sent_folder;
+	
+   /** Load the user's sent folder preferences **/
+   $move_to_sent = getPref($data_dir, $username, "move_to_sent");
+   if ($move_to_sent == "")
+      $move_to_sent = $default_move_to_sent;
 
 
    /** Load the user's trash folder preferences **/
    /** Load the user's trash folder preferences **/
    $move_to_trash = getPref($data_dir, $username, "move_to_trash");
    $move_to_trash = getPref($data_dir, $username, "move_to_trash");
@@ -46,10 +68,6 @@
          $left_size = 200;
          $left_size = 200;
    }      
    }      
 
 
-   $folder_prefix = getPref($data_dir, $username, "folder_prefix");
-   if ($folder_prefix == "")
-      $folder_prefix = $default_folder_prefix;
-
    $editor_size = getPref($data_dir, $username, "editor_size");
    $editor_size = getPref($data_dir, $username, "editor_size");
    if ($editor_size == "")
    if ($editor_size == "")
       $editor_size = 76;
       $editor_size = 76;

+ 57 - 19
src/options.php

@@ -118,30 +118,68 @@
 
 
    echo "      </TD>";
    echo "      </TD>";
    echo "   </TR>";
    echo "   </TR>";
-   echo "</TABLE>";
 
 
 
 
+	// TRASH FOLDER
 
 
-   echo "<TABLE WIDTH=100% COLS=2 ALIGN=CENTER>\n";
-   // MOVE_TO_TRASH
-   echo "   <TR>";
-   echo "      <TD WIDTH=60% ALIGN=RIGHT>";
-   echo           _("Move deleted messages to ");
-   echo "\"$trash_folder\"?";
-   echo "      </TD>";
-   echo "      <TD WIDTH=40% ALIGN=LEFT>";
-   if ($move_to_trash == true)
-      echo "         <INPUT TYPE=RADIO NAME=movetotrash VALUE=1 CHECKED>&nbsp;True<BR>";
-   else
-      echo "         <INPUT TYPE=RADIO NAME=movetotrash VALUE=1>&nbsp;True<BR>";
+	echo "<tr><td align=right>";
+	echo _("Trash Folder:");
+	echo "</td><td>";
+      echo "<TT><SELECT NAME=trash>\n";
+		if ($move_to_trash == true)
+			echo "<option value=none>" . _("Don't use Trash");
+		else
+			echo "<option value=none selected>" . _("Do not use Trash");
 
 
-   if ($move_to_trash == false)
-      echo "         <INPUT TYPE=RADIO NAME=movetotrash VALUE=0 CHECKED>&nbsp;False";
-   else
-      echo "         <INPUT TYPE=RADIO NAME=movetotrash VALUE=0>&nbsp;False";
+      for ($i = 0; $i < count($boxes); $i++) {
+         $use_folder = true;
+			if (strtolower($boxes[$i]["unformatted"]) == "inbox") {
+            $use_folder = false;
+         }
+         if ($use_folder == true) {
+            $box = $boxes[$i]["unformatted-dm"];
+            $box2 = replace_spaces($boxes[$i]["formatted"]);
+				if (($boxes[$i]["unformatted"] == $trash_folder) && ($move_to_trash == true))
+            	echo "         <OPTION SELECTED VALUE=\"$box\">$box2\n";
+				else
+            	echo "         <OPTION VALUE=\"$box\">$box2\n";
+         }
+      }
+      echo "</SELECT></TT>\n";
+	echo "</td></tr>";	
 
 
-   echo "      </TD>";
-   echo "   </TR>";
+	// SENT FOLDER
+
+	echo "<tr><td align=right>";
+	echo _("Sent Folder:");
+	echo "</td><td>";
+      echo "<TT><SELECT NAME=sent>\n";
+		if ($move_to_sent == true)
+			echo "<option value=none>" . _("Don't use Sent");
+		else
+			echo "<option value=none selected>" . _("Do not use Sent");
+
+      for ($i = 0; $i < count($boxes); $i++) {
+         $use_folder = true;
+			if (strtolower($boxes[$i]["unformatted"]) == "inbox") {
+            $use_folder = false;
+         }
+         if ($use_folder == true) {
+            $box = $boxes[$i]["unformatted-dm"];
+            $box2 = replace_spaces($boxes[$i]["formatted"]);
+				if (($boxes[$i]["unformatted"] == $sent_folder) && ($move_to_sent == true))
+            	echo "         <OPTION SELECTED VALUE=\"$box\">$box2\n";
+				else
+            	echo "         <OPTION VALUE=\"$box\">$box2\n";
+         }
+      }
+      echo "</SELECT></TT>\n";
+	echo "</td></tr>";	
+
+
+   echo "</TABLE>";
+
+   echo "<TABLE WIDTH=100% COLS=2 ALIGN=CENTER>\n";
 
 
    // SHOW_NUM
    // SHOW_NUM
    echo "   <TR>";
    echo "   <TR>";

+ 16 - 1
src/options_submit.php

@@ -21,7 +21,6 @@
    setPref($data_dir, $username, "email_address", stripslashes($email_address));
    setPref($data_dir, $username, "email_address", stripslashes($email_address));
    setPref($data_dir, $username, "reply_to", stripslashes($reply_to));
    setPref($data_dir, $username, "reply_to", stripslashes($reply_to));
    setPref($data_dir, $username, "chosen_theme", $chosentheme);
    setPref($data_dir, $username, "chosen_theme", $chosentheme);
-   setPref($data_dir, $username, "move_to_trash", $movetotrash);
    setPref($data_dir, $username, "show_num", $shownum);
    setPref($data_dir, $username, "show_num", $shownum);
    setPref($data_dir, $username, "wrap_at", $wrapat);
    setPref($data_dir, $username, "wrap_at", $wrapat);
    setPref($data_dir, $username, "editor_size", $editorsize);
    setPref($data_dir, $username, "editor_size", $editorsize);
@@ -30,6 +29,22 @@
    setPref($data_dir, $username, "language", $language);
    setPref($data_dir, $username, "language", $language);
    setPref($data_dir, $username, "left_size", $leftsize);
    setPref($data_dir, $username, "left_size", $leftsize);
    setPref($data_dir, $username, "folder_prefix", $folderprefix);
    setPref($data_dir, $username, "folder_prefix", $folderprefix);
+
+	if ($trash != "none") {
+   	setPref($data_dir, $username, "move_to_trash", true);
+		setPref($data_dir, $username, "trash_folder", $trash);
+	} else {
+   	setPref($data_dir, $username, "move_to_trash", false);
+		setPref($data_dir, $username, "trash_folder", "");
+	}
+   
+	if ($sent != "none") {
+   	setPref($data_dir, $username, "move_to_sent", true);
+		setPref($data_dir, $username, "sent_folder", $sent);
+	} else {
+   	setPref($data_dir, $username, "move_to_sent", false);
+		setPref($data_dir, $username, "sent_folder", "");
+	}
    
    
    setSig($data_dir, $username, stripslashes($signature_edit));
    setSig($data_dir, $username, stripslashes($signature_edit));