EIMS workaround. EIMS returns the SEARCH response as multiple untagged
authorstekkel <stekkel@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 4 Nov 2003 00:00:21 +0000 (00:00 +0000)
committerstekkel <stekkel@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 4 Nov 2003 00:00:21 +0000 (00:00 +0000)
SEARCH responses. That is against RFC3501 !!!
example:

A005 UID SEARCH UID 1:*
* SEARCH 5949 8160 8401 8402 8413 8470 8471 8472 8497 8499
* SEARCH 8502 8504 8514
A005 OK SEARCH completed

We only use that call in case of non server side sorting.

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@6090 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/imap_messages.php

index 5fd73fc5923da31444e1462b66cc4bf19eadd17b..bc3561d118ff0a2183b0835b1c1a004af9f27236 100755 (executable)
@@ -211,7 +211,14 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
     return $server_sort_array;
 }
 
-
+/**
+ * Get sort order from server if server does not have the SORT extension
+ * and return it as array for mailbox_display.
+ *
+ * @param  resource $imap_stream
+ * @param  array    $mbxresponse response from a sqimap_mailbox_select
+ * @return array    $php_sort_array
+ */
 function sqimap_get_php_sort_order ($imap_stream, $mbxresponse) {
     global $uid_support;
 
@@ -230,8 +237,12 @@ function sqimap_get_php_sort_order ($imap_stream, $mbxresponse) {
         $query = "SEARCH UID 1:$uidnext";
         $uids = sqimap_run_command ($imap_stream, $query, true, $response, $message, true);
         if (isset($uids[0])) {
-            if (preg_match("/^\* SEARCH (.+)$/", $uids[0], $regs)) {
-                $php_sort_array = preg_split("/ /", trim($regs[1]));
+            $php_sort_array = array();
+            // EIMS workaround. EIMS returns the result as multiple untagged SEARCH responses
+            foreach($uids as $line) {
+                if (preg_match("/^\* SEARCH (.+)$/", $line, $regs)) {
+                     $php_sort_array += preg_split("/ /", trim($regs[1]));
+                }
             }
         }
         if (!preg_match("/OK/", $response)) {