From 44840971e8e405cc41f923eaff0a32d7accb496c Mon Sep 17 00:00:00 2001 From: alecpl Date: Fri, 12 Nov 2010 10:47:04 +0000 Subject: - Fix handling of folders with name "0" (#1487119) --- CHANGELOG | 1 + program/include/html.php | 2 +- program/include/main.inc | 4 +-- program/include/rcmail.php | 2 +- program/include/rcube_imap.php | 54 +++++++++++++++---------------- program/include/rcube_imap_generic.php | 17 +++------- program/steps/mail/func.inc | 2 +- program/steps/mail/move_del.inc | 4 +-- program/steps/settings/manage_folders.inc | 30 +++++++++-------- 9 files changed, 56 insertions(+), 60 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ce4509a46..21f54ae1b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -66,6 +66,7 @@ CHANGELOG Roundcube Webmail - Add option for minimum length of autocomplete's string (#1486428) - Fix operations on messages in unsubscribed folder (#1487107) - Add support for shared folders (#1403507) +- Fix handling of folders with name "0" (#1487119) RELEASE 0.4.2 ------------- diff --git a/program/include/html.php b/program/include/html.php index b73c54a8c..27d1d7750 100644 --- a/program/include/html.php +++ b/program/include/html.php @@ -75,7 +75,7 @@ class html $suffix = $attrib['nl'] || ($content && $attrib['nl'] !== false && !in_array($tagname, $inline_tags)) ? "\n" : ''; $tagname = self::$lc_tags ? strtolower($tagname) : $tagname; - if ($content || in_array($tagname, self::$containers)) { + if (isset($content) || in_array($tagname, self::$containers)) { $templ = $attrib['noclose'] ? "<%s%s>%s" : "<%s%s>%s%s"; unset($attrib['noclose']); return sprintf($templ, $tagname, self::attrib_string($attrib, $allowed_attrib), $content, $tagname, $suffix); diff --git a/program/include/main.inc b/program/include/main.inc index 31c9a0805..5bbc421af 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -1348,7 +1348,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') $currentFolder = substr($folder, 0, $pos); // sometimes folder has a delimiter as the last character - if (empty($subFolders)) + if (!strlen($subFolders)) $virtual = false; else if (!isset($arrFolders[$currentFolder])) $virtual = true; @@ -1378,7 +1378,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') else $arrFolders[$currentFolder]['virtual'] = $virtual; - if (!empty($subFolders)) + if (strlen($subFolders)) rcmail_build_folder_tree($arrFolders[$currentFolder]['folders'], $subFolders, $delm, $path.$delm); } diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 8fa9df72f..e76b1420a 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -782,7 +782,7 @@ class rcmail if ($default_folders = $this->config->get('default_imap_folders')) { $this->imap->set_default_mailboxes($default_folders); } - if (!empty($_SESSION['mbox'])) { + if (isset($_SESSION['mbox'])) { $this->imap->set_mailbox($_SESSION['mbox']); } if (isset($_SESSION['page'])) { diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 14cf396de..a9ddf865c 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -565,7 +565,7 @@ class rcube_imap */ function messagecount($mbox_name='', $mode='ALL', $force=false, $status=true) { - $mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox; + $mailbox = strlen($mbox_name) ? $this->mod_mailbox($mbox_name) : $this->mailbox; return $this->_messagecount($mailbox, $mode, $force, $status); } @@ -586,7 +586,7 @@ class rcube_imap { $mode = strtoupper($mode); - if (empty($mailbox)) + if (!strlen($mailbox)) $mailbox = $this->mailbox; // count search set @@ -2551,7 +2551,7 @@ class rcube_imap $fbox = $from_mbox; $tbox = $to_mbox; $to_mbox = $this->mod_mailbox($to_mbox); - $from_mbox = $from_mbox ? $this->mod_mailbox($from_mbox) : $this->mailbox; + $from_mbox = strlen($from_mbox) ? $this->mod_mailbox($from_mbox) : $this->mailbox; list($uids, $all_mode) = $this->_parse_uids($uids, $from_mbox); @@ -2721,7 +2721,7 @@ class rcube_imap */ function clear_mailbox($mbox_name=NULL) { - $mailbox = !empty($mbox_name) ? $this->mod_mailbox($mbox_name) : $this->mailbox; + $mailbox = strlen($mbox_name) ? $this->mod_mailbox($mbox_name) : $this->mailbox; // SELECT will set messages count for clearFolder() if ($this->conn->select($mailbox)) { @@ -2874,7 +2874,7 @@ class rcube_imap $a_mboxes = $this->_list_mailboxes($root, $filter); foreach ($a_mboxes as $idx => $mbox_row) { - if ($name = $this->mod_mailbox($mbox_row, 'out')) + if (strlen($name = $this->mod_mailbox($mbox_row, 'out'))) $a_out[] = $name; unset($a_mboxes[$idx]); } @@ -2978,7 +2978,7 @@ class rcube_imap // modify names with root dir foreach ($a_mboxes as $idx => $mbox_name) { - if ($name = $this->mod_mailbox($mbox_name, 'out')) + if (strlen($name = $this->mod_mailbox($mbox_name, 'out'))) $a_folders[] = $name; unset($a_mboxes[$idx]); } @@ -3194,27 +3194,25 @@ class rcube_imap */ function mailbox_exists($mbox_name, $subscription=false) { - if ($mbox_name) { - if ($mbox_name == 'INBOX') - return true; + if ($mbox_name == 'INBOX') + return true; - $key = $subscription ? 'subscribed' : 'existing'; - $mbox = $this->mod_mailbox($mbox_name); + $key = $subscription ? 'subscribed' : 'existing'; + $mbox = $this->mod_mailbox($mbox_name); - if (is_array($this->icache[$key]) && in_array($mbox, $this->icache[$key])) - return true; + if (is_array($this->icache[$key]) && in_array($mbox, $this->icache[$key])) + return true; - if ($subscription) { - $a_folders = $this->conn->listSubscribed('', $mbox); - } - else { - $a_folders = $this->conn->listMailboxes('', $mbox); - } + if ($subscription) { + $a_folders = $this->conn->listSubscribed('', $mbox); + } + else { + $a_folders = $this->conn->listMailboxes('', $mbox); + } - if (is_array($a_folders) && in_array($mbox, $a_folders)) { - $this->icache[$key][] = $mbox; - return true; - } + if (is_array($a_folders) && in_array($mbox, $a_folders)) { + $this->icache[$key][] = $mbox; + return true; } return false; @@ -3230,7 +3228,7 @@ class rcube_imap */ function mod_mailbox($mbox_name, $mode='in') { - if (empty($mbox_name)) + if (!strlen($mbox_name)) return ''; if ($mode == 'in') { @@ -3460,8 +3458,8 @@ class rcube_imap if ($mailbox) $mailbox = $this->mod_mailbox($mailbox); - if ($this->get_capability('METADATA') || - empty($mailbox) && $this->get_capability('METADATA-SERVER') + if ($this->get_capability('METADATA') || + (!strlen($mailbox) && $this->get_capability('METADATA-SERVER')) ) { return $this->conn->setMetadata($mailbox, $entries); } @@ -3494,7 +3492,7 @@ class rcube_imap $mailbox = $this->mod_mailbox($mailbox); if ($this->get_capability('METADATA') || - empty($mailbox) && $this->get_capability('METADATA-SERVER') + (!strlen($mailbox) && $this->get_capability('METADATA-SERVER')) ) { return $this->conn->deleteMetadata($mailbox, $entries); } @@ -3528,7 +3526,7 @@ class rcube_imap $mailbox = $this->mod_mailbox($mailbox); if ($this->get_capability('METADATA') || - empty($mailbox) && $this->get_capability('METADATA-SERVER') + !strlen(($mailbox) && $this->get_capability('METADATA-SERVER')) ) { return $this->conn->getMetadata($mailbox, $entries, $options); } diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php index 864c57193..8ee17c2ee 100644 --- a/program/include/rcube_imap_generic.php +++ b/program/include/rcube_imap_generic.php @@ -801,7 +801,7 @@ class rcube_imap_generic function select($mailbox) { - if (empty($mailbox)) { + if (!strlen($mailbox)) { return false; } @@ -852,7 +852,7 @@ class rcube_imap_generic */ function status($mailbox, $items=array()) { - if (empty($mailbox)) { + if (!strlen($mailbox)) { return false; } @@ -886,11 +886,12 @@ class rcube_imap_generic function checkForRecent($mailbox) { - if (empty($mailbox)) { + if (!strlen($mailbox)) { $mailbox = 'INBOX'; } $this->select($mailbox); + if ($this->selected == $mailbox) { return $this->data['RECENT']; } @@ -1618,10 +1619,6 @@ class rcube_imap_generic function copy($messages, $from, $to) { - if (empty($from) || empty($to)) { - return false; - } - if (!$this->select($from)) { return false; } @@ -1638,10 +1635,6 @@ class rcube_imap_generic function move($messages, $from, $to) { - if (!$from || !$to) { - return false; - } - $r = $this->copy($messages, $from, $to); if ($r) { @@ -1881,7 +1874,7 @@ class rcube_imap_generic private function _listMailboxes($ref, $mailbox, $subscribed=false, $status_opts=array(), $select_opts=array()) { - if (empty($mailbox)) { + if (!strlen($mailbox)) { $mailbox = '*'; } diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 39551c1c0..be5c26142 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -46,7 +46,7 @@ if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) { } // set imap properties and session vars -if ($mbox = get_input_value('_mbox', RCUBE_INPUT_GPC)) +if (strlen(trim($mbox = get_input_value('_mbox', RCUBE_INPUT_GPC)))) $IMAP->set_mailbox(($_SESSION['mbox'] = $mbox)); else if ($IMAP) $_SESSION['mbox'] = $IMAP->get_mailbox_name(); diff --git a/program/steps/mail/move_del.inc b/program/steps/mail/move_del.inc index 4f52a60ca..e64c32742 100644 --- a/program/steps/mail/move_del.inc +++ b/program/steps/mail/move_del.inc @@ -28,7 +28,7 @@ $old_count = $IMAP->messagecount(NULL, $IMAP->threading ? 'THREADS' : 'ALL'); $old_pages = ceil($old_count / $IMAP->page_size); // move messages -if ($RCMAIL->action=='moveto' && !empty($_POST['_uid']) && !empty($_POST['_target_mbox'])) { +if ($RCMAIL->action=='moveto' && !empty($_POST['_uid']) && strlen($_POST['_target_mbox'])) { $count = sizeof(explode(',', ($uids = get_input_value('_uid', RCUBE_INPUT_POST)))); $target = get_input_value('_target_mbox', RCUBE_INPUT_POST); $mbox = get_input_value('_mbox', RCUBE_INPUT_POST); @@ -116,7 +116,7 @@ else $_SESSION['unseen_count'][$mbox] = $unseen_count; } - if ($RCMAIL->action=='moveto' && $target) { + if ($RCMAIL->action=='moveto' && strlen($target)) { rcmail_send_unread_count($target, true); } diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc index adcb5eecf..299a7b219 100644 --- a/program/steps/settings/manage_folders.inc +++ b/program/steps/settings/manage_folders.inc @@ -27,35 +27,39 @@ $RCMAIL->imap_connect(); // subscribe to one or more mailboxes if ($RCMAIL->action=='subscribe') { - if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP')) + $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP'); + if (strlen($mbox)) $IMAP->subscribe(array($mbox)); } // unsubscribe one or more mailboxes else if ($RCMAIL->action=='unsubscribe') { - if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP')) + $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP'); + if (strlen($mbox)) $IMAP->unsubscribe(array($mbox)); } // enable threading for one or more mailboxes else if ($RCMAIL->action=='enable-threading') { - if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP')) + $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP'); + if (strlen($mbox)) rcube_set_threading($mbox, true); } // enable threading for one or more mailboxes else if ($RCMAIL->action=='disable-threading') { - if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP')) + $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF7-IMAP'); + if (strlen($mbox)) rcube_set_threading($mbox, false); } // create a new mailbox else if ($RCMAIL->action=='create-folder') { - if (!empty($_POST['_name'])) + if (strlen(trim($_POST['_name']))) { $name = trim(get_input_value('_name', RCUBE_INPUT_POST, FALSE, 'UTF7-IMAP')); $create = $IMAP->create_mailbox($name, TRUE); @@ -83,7 +87,7 @@ else if ($RCMAIL->action=='create-folder') // rename a mailbox else if ($RCMAIL->action=='rename-folder') { - if (!empty($_POST['_folder_oldname']) && !empty($_POST['_folder_newname'])) + if (strlen(trim($_POST['_folder_oldname'])) && strlen(trim($_POST['_folder_newname']))) { $name_utf8 = trim(get_input_value('_folder_newname', RCUBE_INPUT_POST)); $oldname_utf8 = get_input_value('_folder_oldname', RCUBE_INPUT_POST); @@ -101,13 +105,13 @@ else if ($RCMAIL->action=='rename-folder') foreach ($a_threaded as $key => $val) if ($key == $oldname) { unset($a_threaded[$key]); - $a_threaded[$name] = true; + $a_threaded[$name] = true; } else if (preg_match($oldprefix, $key)) { unset($a_threaded[$key]); - $a_threaded[preg_replace($oldprefix, $name.$delimiter, $key)] = true; + $a_threaded[preg_replace($oldprefix, $name.$delimiter, $key)] = true; } - + $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded)); } @@ -163,7 +167,7 @@ else if ($RCMAIL->action=='delete-folder') $mboxes_utf8 = get_input_value('_mboxes', RCUBE_INPUT_POST); $mboxes = rcube_charset_convert($mboxes_utf8, RCMAIL_CHARSET, 'UTF7-IMAP'); - if ($mboxes) + if (strlen($mboxes)) $deleted = $IMAP->delete_mailbox(array($mboxes)); if ($OUTPUT->ajax_call && $deleted) @@ -284,7 +288,7 @@ function rcube_subscription_form($attrib) $protected = ($CONFIG['protect_default_folders'] == true && in_array($folder['id'], $CONFIG['default_imap_folders'])); $classes = array($i%2 ? 'even' : 'odd'); $folder_js = JQ($folder['id']); - $display_folder = str_repeat('    ', $folder['level']) . ($protected ? rcmail_localize_foldername($folder['id']) : $folder['name']); + $display_folder = str_repeat('    ', $folder['level']) . Q($protected ? rcmail_localize_foldername($folder['id']) : $folder['name']); $folder_utf8 = rcube_charset_convert($folder['id'], 'UTF7-IMAP'); if ($folder['virtual']) { @@ -298,7 +302,7 @@ function rcube_subscription_form($attrib) $table->add_row(array('id' => 'rcmrow'.$idx, 'class' => join(' ', $classes))); - $table->add('name', Q($display_folder)); + $table->add('name', $display_folder); $table->add('msgcount', (($folder['virtual'] || $noselect) ? '' : $IMAP->messagecount($folder['id'], 'ALL', false, false))); $table->add('subscribed', $checkbox_subscribe->show(($subscribed ? $folder_utf8 : ''), array('value' => $folder_utf8, 'disabled' => ($protected || $noselect) ? 'disabled' : ''))); @@ -320,7 +324,7 @@ function rcube_subscription_form($attrib) $a_js_folders['rcmrow'.$idx] = array($folder_utf8, $display_folder, $protected || $folder['virtual']); } - rcmail::get_instance()->plugins->exec_hook('folders_list', array('table'=>$table)); + rcmail::get_instance()->plugins->exec_hook('folders_list', array('table' => $table)); $OUTPUT->add_gui_object('subscriptionlist', $attrib['id']); $OUTPUT->set_env('subscriptionrows', $a_js_folders); -- cgit v1.2.3