diff options
author | Aleksander Machniak <alec@alec.pl> | 2013-10-30 09:35:03 +0100 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2013-10-30 09:35:03 +0100 |
commit | d72a41dc8e9bf523b45e04d4226f63fb7502c349 (patch) | |
tree | 07d1a0b59d47ba999a04342084c470fcef94f0b1 | |
parent | a222f5c045c2a6c14b3c961b83a2d8ee9d3c9331 (diff) |
Make sure all folders in the path are created - ie. if archive folder
is configured as Archive/YYYY/MM, create both Archive/YYYY and Archive/YYYY/MM.
-rw-r--r-- | plugins/archive/archive.php | 37 | ||||
-rw-r--r-- | plugins/archive/package.xml | 4 |
2 files changed, 27 insertions, 14 deletions
diff --git a/plugins/archive/archive.php b/plugins/archive/archive.php index 7a81606ab..4ef46e4f4 100644 --- a/plugins/archive/archive.php +++ b/plugins/archive/archive.php @@ -110,19 +110,20 @@ class archive extends rcube_plugin */ function move_messages() { - $rcmail = rcmail::get_instance(); $this->add_texts('localization'); - $storage = $rcmail->get_storage(); - $storage->set_folder(($current_mbox = rcube_utils::get_input_value('_mbox', RCUBE_INPUT_POST))); - - $delimiter = $storage->get_hierarchy_delimiter(); + $rcmail = rcmail::get_instance(); + $storage = $rcmail->get_storage(); + $delimiter = $storage->get_hierarchy_delimiter(); $archive_folder = $rcmail->config->get('archive_mbox'); - $archive_type = $rcmail->config->get('archive_type', ''); + $archive_type = $rcmail->config->get('archive_type', ''); - $result = array('reload' => false, 'update' => false, 'errors' => array()); + $storage->set_folder(($current_mbox = rcube_utils::get_input_value('_mbox', RCUBE_INPUT_POST))); + + $result = array('reload' => false, 'update' => false, 'errors' => array()); + $uids = explode(',', rcube_utils::get_input_value('_uid', RCUBE_INPUT_POST)); + $folders = array(); - $uids = explode(',', rcube_utils::get_input_value('_uid', RCUBE_INPUT_POST)); foreach ($uids as $uid) { if (!$archive_folder || !($message = $rcmail->storage->get_message($uid))) { continue; @@ -164,12 +165,24 @@ class archive extends rcube_plugin } // compose full folder path - $folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : ''); + $folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : ''); // create archive subfolder if it doesn't yet exist - if (!$storage->folder_exists($folder, false)) { - if ($storage->create_folder($folder, true)) - $result['reload'] = true; + // we'll create all folders in the path + if (!in_array($folder, $folders)) { + $list = $storage->list_folders('', $archive_folder . '*', 'mail', null, true); + $path = explode($delimiter, $folder); + + for ($i=0; $i<count($path); $i++) { + $_folder = implode($delimiter, array_slice($path, 0, $i+1)); + if (!in_array($_folder, $list)) { + if ($storage->create_folder($_folder, true)) { + $result['reload'] = true; + } + } + } + + $folders[] = $folder; } // move message to target folder diff --git a/plugins/archive/package.xml b/plugins/archive/package.xml index 62a009a99..9b37579ed 100644 --- a/plugins/archive/package.xml +++ b/plugins/archive/package.xml @@ -13,9 +13,9 @@ <email>roundcube@gmail.com</email> <active>yes</active> </lead> - <date>2013-01-20</date> + <date>2013-10-30</date> <version> - <release>2.0</release> + <release>2.1</release> <api>2.0</api> </version> <stability> |