From 868deb5dabdc4d63210e4f53a2a80a904247af6a Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 06 Oct 2010 13:15:38 -0400
Subject: [PATCH] - Make htmleditor option behaviour consistent, add option to use HTML on reply to HTML message (#1485840)

---
 program/include/rcube_imap_generic.php |   91 ++++++++++++++++++++-------------------------
 1 files changed, 40 insertions(+), 51 deletions(-)

diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index b60ddc7..2c8f4f0 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -423,23 +423,7 @@
 		    return true;
 	    }
 
-        if (!$this->getCapability('NAMESPACE')) {
-	        return false;
-	    }
-
-	    if (!$this->putLine("ns1 NAMESPACE")) {
-            return false;
-        }
-	    do {
-		    $line = $this->readLine(1024);
-		    if (preg_match('/^\* NAMESPACE/', $line)) {
-			    $i    = 0;
-			    $line = $this->unEscape($line);
-			    $data = $this->parseNamespace(substr($line,11), $i, 0, 0);
-		    }
-	    } while (!$this->startsWith($line, 'ns1', true, true));
-
-	    if (!is_array($data)) {
+	    if (!is_array($data = $this->_namespace())) {
 	        return false;
 	    }
 
@@ -488,13 +472,9 @@
 	    }
 
 	    do {
-		    $line = $this->readLine(500);
-		    if ($line[0] == '*') {
-			    $line = rtrim($line);
-			    $a = rcube_explode_quoted_string(' ', $this->unEscape($line));
-			    if ($a[0] == '*') {
-			        $delimiter = str_replace('"', '', $a[count($a)-2]);
-        		}
+		    $line = $this->readLine(1024);
+		    if (preg_match('/^\* LIST \([^\)]*\) "*([^"]+)"* ""/', $line, $m)) {
+    	        $delimiter = $this->unEscape($m[1]);
 		    }
 	    } while (!$this->startsWith($line, 'ghd', true, true));
 
@@ -504,22 +484,9 @@
 
 	    // if that fails, try namespace extension
 	    // try to fetch namespace data
-	    if (!$this->putLine("ns1 NAMESPACE")) {
+	    if (!is_array($data = $this->_namespace())) {
             return false;
         }
-
-	    do {
-		    $line = $this->readLine(1024);
-		    if (preg_match('/^\* NAMESPACE/', $line)) {
-			    $i = 0;
-			    $line = $this->unEscape($line);
-			    $data = $this->parseNamespace(substr($line,11), $i, 0, 0);
-		    }
-	    } while (!$this->startsWith($line, 'ns1', true, true));
-
-	    if (!is_array($data)) {
-	        return false;
-	    }
 
 	    // extract user space data (opposed to global/shared space)
 	    $user_space_data = $data[0];
@@ -537,6 +504,31 @@
 	    $delimiter = $first_userspace[1];
 
 	    return $delimiter;
+    }
+
+    function _namespace()
+    {
+        if (!$this->getCapability('NAMESPACE')) {
+	        return false;
+	    }
+
+	    if (!$this->putLine("ns1 NAMESPACE")) {
+            return false;
+        }
+
+	    do {
+		    $line = $this->readLine(1024);
+		    if (preg_match('/^\* NAMESPACE/', $line)) {
+			    $i = 0;
+			    $data = $this->parseNamespace(substr($line,11), $i, 0, 0);
+		    }
+	    } while (!$this->startsWith($line, 'ns1', true, true));
+
+	    if (!is_array($data)) {
+	        return false;
+	    }
+
+        return $data;
     }
 
     function connect($host, $user, $password, $options=null)
@@ -1059,7 +1051,7 @@
 	    $message_set = $this->compressMessageSet($message_set);
 
 	    if ($add)
-		    $add = ' '.strtoupper(trim($add));
+		    $add = ' '.trim($add);
 
 	    /* FETCH uid, size, flags and headers */
 	    $key  	  = 'FH12';
@@ -1067,11 +1059,8 @@
 	    $request .= "(UID RFC822.SIZE FLAGS INTERNALDATE ";
 	    if ($bodystr)
 		    $request .= "BODYSTRUCTURE ";
-	    $request .= "BODY.PEEK[HEADER.FIELDS ";
-	    $request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC ";
-	    $request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID ";
-	    $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY ";
-	    $request .= "X-DRAFT-INFO".$add.")])";
+	    $request .= "BODY.PEEK[HEADER.FIELDS (DATE FROM TO SUBJECT CONTENT-TYPE ";
+	    $request .= "LIST-POST DISPOSITION-NOTIFICATION-TO".$add.")])";
 
 	    if (!$this->putLine($request)) {
 		    return false;
@@ -1084,7 +1073,7 @@
                 break;
 
 		    if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) {
-			    $id = $m[1];
+			    $id = intval($m[1]);
 
 			    $result[$id]            = new rcube_mail_header;
 			    $result[$id]->id        = $id;
@@ -1111,9 +1100,9 @@
 				    if ($parts_count>=6) {
 					    for ($i=0; $i<$parts_count; $i=$i+2) {
 						    if ($a[$i] == 'UID')
-							    $result[$id]->uid = $a[$i+1];
+							    $result[$id]->uid = intval($a[$i+1]);
 						    else if ($a[$i] == 'RFC822.SIZE')
-							    $result[$id]->size = $a[$i+1];
+							    $result[$id]->size = intval($a[$i+1]);
     						else if ($a[$i] == 'INTERNALDATE')
 	    						$time_str = $a[$i+1];
 		    				else if ($a[$i] == 'FLAGS')
@@ -1660,9 +1649,9 @@
         		// folder name
    			    $folders[] = preg_replace(array('/^"/', '/"$/'), '', $this->unEscape($m[3]));
 		        // attributes
-//        		$attrib = explode(' ', $m[1]);
+//        		$attrib = explode(' ', $this->unEscape($m[1]));
 		        // delimiter
-//        		$delim = $m[2];
+//        		$delim = $this->unEscape($m[2]);
 		    }
 	    } while (!$this->startsWith($line, $key, true));
 
@@ -2173,7 +2162,7 @@
 	    $in_quotes = false;
 	    $elem      = 0;
 
-        for ($i;$i<$len;$i++) {
+        for ($i; $i<$len; $i++) {
 		    $c = (string)$str[$i];
 		    if ($c == '(' && !$in_quotes) {
 			    $i++;
@@ -2184,7 +2173,7 @@
     		} else if ($c == '\\') {
 			    $i++;
 			    if ($in_quotes) {
-				    $data[$elem] .= $c.$str[$i];
+				    $data[$elem] .= $str[$i];
         		}
 		    } else if ($c == '"') {
 			    $in_quotes = !$in_quotes;

--
Gitblit v1.9.1