From f9c107afbe9bb01627a9e6de48efdfbbda8e56e6 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Sun, 30 Jul 2006 15:38:06 -0400
Subject: [PATCH] Fixed folder renaming; added confirmation after deleting a folder

---
 program/localization/de_DE/messages.inc   |    2 +
 CHANGELOG                                 |    2 +
 program/localization/de_CH/messages.inc   |    2 +
 program/localization/en_US/messages.inc   |    2 +
 program/steps/settings/manage_folders.inc |   12 ++++--
 program/js/app.js                         |   13 ++++--
 program/include/rcube_imap.inc            |   31 ++++++++-------
 program/localization/en_GB/messages.inc   |   13 ++++++
 8 files changed, 53 insertions(+), 24 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index df15463..bfca82e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,8 @@
 - Alter links in HTML messages (Bug #1326402)
 - Added fallback if host not found in 'mail_domain' array
 - Applied patch of Charles to highlight droptargets (Ticket #1473034)
+- Fixed folder renaming (Bug #1483914)
+- Added confirmation message after deleting a folder
 
 
 2006/07/25 (thomasb)
diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index c98c480..4137d10 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -1245,28 +1245,29 @@
 
 
   // set a new name to an existing mailbox
-  function rename_mailbox($mbox_name, $new_name, $subscribe=TRUE)
+  function rename_mailbox($mbox_name, $new_name)
     {
     $result = FALSE;
 
     // replace backslashes
     $name = preg_replace('/[\\\]+/', '-', $new_name);
+        
+    // encode mailbox name and reduce it to 100 chars
+    $name_enc = substr(UTF7EncodeString($new_name), 0, 100);
 
-    $name_enc = UTF7EncodeString($new_name);
-
-    // reduce mailbox name to 100 chars
-    $name_enc = substr($name_enc, 0, 100);
-
+    // make absolute path
+    $mailbox = $this->_mod_mailbox($mbox_name);
     $abs_name = $this->_mod_mailbox($name_enc);
-    $a_mailbox_cache = $this->get_cache('mailboxes');
-
-    if (strlen($abs_name) && (!is_array($a_mailbox_cache) || !in_array($abs_name, $a_mailbox_cache)))
-      $result = iil_C_RenameFolder($this->conn, $mbox_name, $abs_name);
-
-    // update mailboxlist cache
-    if ($result && $subscribe)
-      $this->unsubscribe($mbox_name);
-      $this->subscribe($name_enc);
+    
+    if (strlen($abs_name))
+      $result = iil_C_RenameFolder($this->conn, $mailbox, $abs_name);
+    
+    // clear cache
+    if ($result)
+      {
+      $this->clear_message_cache($mailbox.'.msg');
+      $this->clear_cache('mailboxes');
+      }
 
     return $result ? $name : FALSE;
     }
diff --git a/program/js/app.js b/program/js/app.js
index 84e9e45..51d9f85 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -2848,10 +2848,12 @@
       row.cells[3].firstChild.onclick = new Function(this.ref+".command('delete-folder','"+name.replace('\'','\\\'')+"')");
 
     // add new folder to rename-folder list and clear input field
-    if (!replace && (form = this.gui_objects.editform) && form.elements['_folder_name'])
+    if (!replace && (form = this.gui_objects.editform))
       {
-      form.elements['_folder_oldname'].options[form.elements['_folder_oldname'].options.length] = new Option(name,name);
-      form.elements['_folder_name'].value = ''; 
+      if (form.elements['_folder_oldname'])
+        form.elements['_folder_oldname'].options[form.elements['_folder_oldname'].options.length] = new Option(name,name);
+      if (form.elements['_folder_name'])
+        form.elements['_folder_name'].value = ''; 
       }
 
     };
@@ -2909,7 +2911,8 @@
         }
       }
     
-    form.elements['_folder_newname'].value = '';
+    if (form && form.elements['_folder_newname'])
+      form.elements['_folder_newname'].value = '';
     };
 
 
@@ -3151,7 +3154,7 @@
   
     if (!this.gui_objects.message)
       return false;
-     
+
     if (this.message_timer)
       clearTimeout(this.message_timer);
     
diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc
index d3314a9..f1c7e5b 100644
--- a/program/localization/de_CH/messages.inc
+++ b/program/localization/de_CH/messages.inc
@@ -102,5 +102,7 @@
 
 $messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden';
 
+$messages['folderdeleted'] = 'Ordner erfolgreich gelöscht';
+
 
 ?>
\ No newline at end of file
diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc
index c6ca701..8a178ed 100644
--- a/program/localization/de_DE/messages.inc
+++ b/program/localization/de_DE/messages.inc
@@ -104,4 +104,6 @@
 
 $messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden';
 
+$messages['folderdeleted'] = 'Ordner erfolgreich gelöscht';
+
 ?>
\ No newline at end of file
diff --git a/program/localization/en_GB/messages.inc b/program/localization/en_GB/messages.inc
index 262e300..7a60b83 100644
--- a/program/localization/en_GB/messages.inc
+++ b/program/localization/en_GB/messages.inc
@@ -90,4 +90,17 @@
 
 $messages['nosearchname'] = 'Please enter a contact name or email address';
 
+$messages['searchsuccessful'] = '$nr messages found';
+
+$messages['searchnomatch'] = 'Search returned no matches';
+
+$messages['searching'] = 'Searching...';
+
+$messages['checking'] = 'Checking...';
+
+$messages['nospellerrors'] = 'No spelling errors found';
+
+$messages['folderdeleted'] = 'Folder successfully deleted';
+
+
 ?>
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index a5ffc09..f406ff1 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -104,5 +104,7 @@
 
 $messages['nospellerrors'] = 'No spelling errors found';
 
+$messages['folderdeleted'] = 'Folder successfully deleted';
+
 
 ?>
diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc
index 770bac2..457fcb5 100644
--- a/program/steps/settings/manage_folders.inc
+++ b/program/steps/settings/manage_folders.inc
@@ -67,7 +67,7 @@
 else if ($_action=='rename-folder')
   {
   if (!empty($_GET['_folder_oldname']) && !empty($_GET['_folder_newname']))
-    $rename = $IMAP->rename_mailbox(get_input_value('_folder_oldname', RCUBE_INPUT_GET), trim(get_input_value('_folder_newname', RCUBE_INPUT_GET)), TRUE);
+    $rename = $IMAP->rename_mailbox(get_input_value('_folder_oldname', RCUBE_INPUT_GET), trim(get_input_value('_folder_newname', RCUBE_INPUT_GET)));
 
   if ($rename && $REMOTE_REQUEST)
     {
@@ -89,11 +89,15 @@
 // delete an existing IMAP mailbox
 else if ($_action=='delete-folder')
   {
-  if (strlen($_GET['_mboxes']))
-    $deleted = $IMAP->delete_mailbox(array($_GET['_mboxes']));
+  if (!empty($_GET['_mboxes']))
+    $deleted = $IMAP->delete_mailbox(array(get_input_value('_mboxes', RCUBE_INPUT_GET)));
 
   if ($REMOTE_REQUEST && $deleted)
-    rcube_remote_response(sprintf("this.remove_folder_row('%s')", rep_specialchars_output($_GET['_mboxes'], 'js')));
+    {
+    $commands = sprintf("this.remove_folder_row('%s');\n", rep_specialchars_output(get_input_value('_mboxes', RCUBE_INPUT_GET), 'js'));
+    $commands .= show_message('folderdeleted', 'confirmation');
+    rcube_remote_response($commands);
+    }
   else if ($REMOTE_REQUEST)
     {
     $commands = show_message('errorsaving', 'error');

--
Gitblit v1.9.1