diff options
| author | Thomas Bruederli <thomas@roundcube.net> | 2014-04-08 19:11:12 +0200 | 
|---|---|---|
| committer | Thomas Bruederli <thomas@roundcube.net> | 2014-04-08 19:11:12 +0200 | 
| commit | 188247894f6aff3a11f68bbdf94626b8bf58b852 (patch) | |
| tree | b6997429e9b4d1bdf787dbfdf3e29cdbc72cf5db | |
| parent | 05e3d11554f751ed6a614abe343141aa1e6ea6da (diff) | |
Make multi-folder message identifiers work with folders containing commas
| -rw-r--r-- | program/include/rcmail.php | 10 | ||||
| -rw-r--r-- | program/js/app.js | 5 | ||||
| -rw-r--r-- | program/lib/Roundcube/rcube_imap.php | 4 | ||||
| -rw-r--r-- | program/lib/Roundcube/rcube_message.php | 2 | ||||
| -rw-r--r-- | program/steps/mail/copy.inc | 7 | ||||
| -rw-r--r-- | program/steps/mail/func.inc | 2 | ||||
| -rw-r--r-- | program/steps/mail/mark.inc | 4 | 
7 files changed, 22 insertions, 12 deletions
| diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 2ccad03c6..5da181438 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -2025,8 +2025,9 @@ class rcmail extends rcube          $_uid  = $uids ?: rcube_utils::get_input_value('_uid', RCUBE_INPUT_GPC);          $_mbox = $mbox ?: (string)rcube_utils::get_input_value('_mbox', RCUBE_INPUT_GPC); -        if (is_array($uid)) { -            return $uid; +        // already a hash array +        if (is_array($_uid) && !isset($_uid[0])) { +            return $_uid;          }          $result = array(); @@ -2040,8 +2041,11 @@ class rcmail extends rcube              }          }          else { +            if (is_string($_uid)) +                $_uid = explode(',', $_uid); +              // create a per-folder UIDs array -            foreach (explode(',', $_uid) as $uid) { +            foreach ((array)$_uid as $uid) {                  list($uid, $mbox) = explode('-', $uid, 2);                  if (empty($mbox))                      $mbox = $_mbox; diff --git a/program/js/app.js b/program/js/app.js index 952c542a0..7f19382e0 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3014,7 +3014,8 @@ function rcube_webmail()      var icn_src, uid, i, len,        rows = this.message_list ? this.message_list.rows : {}; -    uids = String(uids).split(','); +    if (typeof uids == 'string') +      uids = String(uids).split(',');      for (i=0, len=uids.length; i<len; i++) {        uid = uids[i]; @@ -3027,7 +3028,7 @@ function rcube_webmail()    // with select_all mode checking    this.uids_to_list = function(uids)    { -    return this.select_all_mode ? '*' : uids.join(','); +    return this.select_all_mode ? '*' : (uids.length <= 1 ? uids.join(',') : uids);    };    // Sets title of the delete button diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php index a2f610a0a..5c30327a1 100644 --- a/program/lib/Roundcube/rcube_imap.php +++ b/program/lib/Roundcube/rcube_imap.php @@ -1712,7 +1712,7 @@ class rcube_imap extends rcube_storage          }          // decode combined UID-folder identifier -        if (preg_match('/^\d+-[^,]+$/', $uid)) { +        if (preg_match('/^\d+-.+/', $uid)) {              list($uid, $folder) = explode('-', $uid, 2);          } @@ -1748,7 +1748,7 @@ class rcube_imap extends rcube_storage          }          // decode combined UID-folder identifier -        if (preg_match('/^\d+-[^,]+$/', $uid)) { +        if (preg_match('/^\d+-.+/', $uid)) {              list($uid, $folder) = explode('-', $uid, 2);          } diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php index edfd339d8..a648ae722 100644 --- a/program/lib/Roundcube/rcube_message.php +++ b/program/lib/Roundcube/rcube_message.php @@ -75,7 +75,7 @@ class rcube_message      function __construct($uid, $folder = null)      {          // decode combined UID-folder identifier -        if (preg_match('/^\d+-[^,]+$/', $uid)) { +        if (preg_match('/^\d+-.+/', $uid)) {              list($uid, $folder) = explode('-', $uid, 2);          } diff --git a/program/steps/mail/copy.inc b/program/steps/mail/copy.inc index 79e207aa7..5668f7c4b 100644 --- a/program/steps/mail/copy.inc +++ b/program/steps/mail/copy.inc @@ -5,7 +5,7 @@   | program/steps/mail/copy.inc                                           |   |                                                                       |   | This file is part of the Roundcube Webmail client                     | - | Copyright (C) 2005-2013, The Roundcube Dev Team                       | + | Copyright (C) 2005-2014, The Roundcube Dev Team                       |   |                                                                       |   | Licensed under the GNU General Public License version 3 or            |   | any later version with exceptions for skins & plugins.                | @@ -29,7 +29,10 @@ if (!empty($_POST['_uid']) && strlen($_POST['_target_mbox'])) {      $target = rcube_utils::get_input_value('_target_mbox', rcube_utils::INPUT_POST, true);      foreach (rcmail::get_uids() as $mbox => $uids) { -      $copied += (int)$RCMAIL->storage->copy_message($uids, $target, $mbox); +        if ($mbox == $target) +            $copied++; +        else +            $copied += (int)$RCMAIL->storage->copy_message($uids, $target, $mbox);      }      if (!$copied) { diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 630086a68..f711da3e1 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -69,7 +69,7 @@ if (!empty($_REQUEST['_search']) && isset($_SESSION['search'])  }  // remove mbox part from _uid -if (($_uid  = get_input_value('_uid', RCUBE_INPUT_GPC)) && preg_match('/^\d+-[^,]+$/', $_uid)) { +if (($_uid  = rcube_utils::get_input_value('_uid', RCUBE_INPUT_GPC)) && !is_array($_uid) && preg_match('/^\d+-.+/', $_uid)) {    list($_uid, $mbox) = explode('-', $_uid, 2);    if (isset($_GET['_uid']))  $_GET['_uid']  = $_uid;    if (isset($_POST['_uid'])) $_POST['_uid'] = $_uid; diff --git a/program/steps/mail/mark.inc b/program/steps/mail/mark.inc index e81f6c9f5..4e83f975c 100644 --- a/program/steps/mail/mark.inc +++ b/program/steps/mail/mark.inc @@ -68,7 +68,9 @@ if (($_uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST))      if ($flag == 'DELETED' && $read_deleted && !empty($_POST['_ruid'])) {          $ruids = rcube_utils::get_input_value('_ruid', rcube_utils::INPUT_POST); -        $read  = $RCMAIL->storage->set_flag($ruids, 'SEEN'); +        foreach (rcmail::get_uids($ruids) as $mbox => $uids) { +            $read += (int)$RCMAIL->storage->set_flag($uids, 'SEEN', $mbox); +        }          if ($read && !$skip_deleted) {              $OUTPUT->command('flag_deleted_as_read', $ruids); | 
