Aleksander Machniak
2013-10-30 d72a41dc8e9bf523b45e04d4226f63fb7502c349
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.
2 files modified
29 ■■■■ changed files
plugins/archive/archive.php 25 ●●●● patch | view | raw | blame | history
plugins/archive/package.xml 4 ●●●● patch | view | raw | blame | history
plugins/archive/archive.php
@@ -110,19 +110,20 @@
   */
  function move_messages()
  {
    $rcmail = rcmail::get_instance();
    $this->add_texts('localization');
    $rcmail         = rcmail::get_instance();
    $storage = $rcmail->get_storage();
    $storage->set_folder(($current_mbox = rcube_utils::get_input_value('_mbox', RCUBE_INPUT_POST)));
    $delimiter = $storage->get_hierarchy_delimiter();
    $archive_folder = $rcmail->config->get('archive_mbox');
    $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();
    foreach ($uids as $uid) {
      if (!$archive_folder || !($message = $rcmail->storage->get_message($uid))) {
        continue;
@@ -167,10 +168,22 @@
      $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))
      // 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
      if ($storage->move_message(array($uid), $folder)) {
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>