From 44840971e8e405cc41f923eaff0a32d7accb496c Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 12 Nov 2010 05:47:04 -0500
Subject: [PATCH] - Fix handling of folders with name "0" (#1487119)

---
 CHANGELOG                                 |    1 
 program/include/html.php                  |    2 
 program/include/main.inc                  |    4 +-
 program/include/rcube_imap.php            |   54 +++++++++++++--------------
 program/include/rcmail.php                |    2 
 program/steps/mail/func.inc               |    2 
 program/steps/settings/manage_folders.inc |   30 ++++++++------
 program/include/rcube_imap_generic.php    |   17 ++------
 program/steps/mail/move_del.inc           |    4 +-
 9 files changed, 56 insertions(+), 60 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index ce4509a..21f54ae 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -66,6 +66,7 @@
 - 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 b73c54a..27d1d77 100644
--- a/program/include/html.php
+++ b/program/include/html.php
@@ -75,7 +75,7 @@
         $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>%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 31c9a08..5bbc421 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -1348,7 +1348,7 @@
     $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 @@
   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 8fa9df7..e76b142 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -782,7 +782,7 @@
     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 14cf396..a9ddf86 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -565,7 +565,7 @@
      */
     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 @@
     {
         $mode = strtoupper($mode);
 
-        if (empty($mailbox))
+        if (!strlen($mailbox))
             $mailbox = $this->mailbox;
 
         // count search set
@@ -2551,7 +2551,7 @@
         $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 @@
      */
     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 @@
         $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 @@
 
         // 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 @@
      */
     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 @@
      */
     function mod_mailbox($mbox_name, $mode='in')
     {
-        if (empty($mbox_name))
+        if (!strlen($mbox_name))
             return '';
 
         if ($mode == 'in') {
@@ -3460,8 +3458,8 @@
         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 @@
             $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 @@
             $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 864c571..8ee17c2 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -801,7 +801,7 @@
 
     function select($mailbox)
     {
-	    if (empty($mailbox)) {
+	    if (!strlen($mailbox)) {
 		    return false;
 	    }
 
@@ -852,7 +852,7 @@
      */
     function status($mailbox, $items=array())
     {
-	    if (empty($mailbox)) {
+	    if (!strlen($mailbox)) {
 		    return false;
 	    }
 
@@ -886,11 +886,12 @@
 
     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 @@
 
     function copy($messages, $from, $to)
     {
-	    if (empty($from) || empty($to)) {
-	        return false;
-	    }
-
 	    if (!$this->select($from)) {
 	        return false;
 	    }
@@ -1638,10 +1635,6 @@
 
     function move($messages, $from, $to)
     {
-        if (!$from || !$to) {
-            return false;
-        }
-
         $r = $this->copy($messages, $from, $to);
 
         if ($r) {
@@ -1881,7 +1874,7 @@
     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 39551c1..be5c261 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -46,7 +46,7 @@
 }
 
 // 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 4f52a60..e64c327 100644
--- a/program/steps/mail/move_del.inc
+++ b/program/steps/mail/move_del.inc
@@ -28,7 +28,7 @@
 $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 @@
     $_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 adcb5ee..299a7b2 100644
--- a/program/steps/settings/manage_folders.inc
+++ b/program/steps/settings/manage_folders.inc
@@ -27,35 +27,39 @@
 // 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 @@
 // 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 @@
     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 @@
   $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 @@
     $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('&nbsp;&nbsp;&nbsp;&nbsp;', $folder['level']) . ($protected ? rcmail_localize_foldername($folder['id']) : $folder['name']);
+    $display_folder = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $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 @@
 
     $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 @@
     $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);

--
Gitblit v1.9.1