search on multiple terms, with patch of Jason Munro
[squirrelmail.git] / functions / imap_search.php
index 4190597ffca77b500273a3a7bb96ab5939fb211f..566189555096340ef8f702b23f9db6c1465c3f2c 100644 (file)
@@ -17,29 +17,48 @@ require_once('../functions/array.php');
 require_once('../functions/mailbox_display.php');
 require_once('../functions/mime.php');
 
-function sqimap_search($imapConnection,$search_where,$search_what,$mailbox,$color) {
+function sqimap_search($imapConnection,$search_where,$search_what,$mailbox,$color, $search_position = '') {
 
     global $msgs, $message_highlight_list, $squirrelmail_language, $languages, $index_order;
+    global $pos;
+
+    $pos = $search_position;
 
     $urlMailbox = urlencode($mailbox);
-    $isid = sqimap_session_id();
 
     /* Construct the Search QuERY */
-    $ss = $isid;
+
+#  account for multiple search terms
+
+        $multi_search = array ();
+        $search_what = ereg_replace("[ ]{2,}", " ", $search_what);
+        $multi_search = split (" ", $search_what);
+        if (count($multi_search)==1) {
+                $search_string = $search_where . " " . "\"" . $multi_search[0] . "\"";
+        }
+        else {
+                $search_string = "";
+               $count = count($multi_search);
+                for ($x=0;$x<$count;$x++) {
+                       $search_string = $search_string . " " . $search_where . " " . "\"" . $multi_search[$x] . "\"";
+                }
+        }
+       $search_string = ereg_replace("^ ", "", $search_string);
+
+# now use $search_string in the imap search
+
     if (isset($languages[$squirrelmail_language]['CHARSET']) &&
         $languages[$squirrelmail_language]['CHARSET']) {
-        $ss .= " SEARCH CHARSET ".$languages[$squirrelmail_language]['CHARSET']." ALL $search_where \"$search_what\"\r\n";
+        $ss = "SEARCH CHARSET ".$languages[$squirrelmail_language]['CHARSET']." ALL $search_string";
     } else {
-        $ss .= " SEARCH ALL $search_where \"$search_what\"\r\n";
+        $ss .= "SEARCH ALL $search_string\"";
     }
-    fputs($imapConnection,$ss);
 
     /* Read Data Back From IMAP */
-    $readin = sqimap_read_data ($imapConnection, $isid, false, $result, $message);
+    $readin = sqimap_run_command ($imapConnection, $ss, true, $result, $message);
     if (isset($languages[$squirrelmail_language]['CHARSET']) && strtolower($result) == 'no') {
-        $ss = $isid . " SEARCH CHARSET \"US-ASCII\" ALL $search_where \"$search_what\"\r\n";
-        fputs ($imapConnection, $ss);
-        $readin = sqimap_read_data ($imapConnection, $isid, true, $result, $message);
+        $ss = "SEARCH CHARSET \"US-ASCII\" ALL $search_where \"$search_what\"";
+        $readin = sqimap_run_command ($imapConnection, $ss, true, $result, $message);
     }
 
     unset($messagelist); $msgs=""; $c = 0;
@@ -141,12 +160,14 @@ function sqimap_search($imapConnection,$search_where,$search_what,$mailbox,$colo
 
     if (count($messagelist) > 0) {
         $j=0;
-        if (!isset ($msg)) { $msg = ""; }
-        
+        if (!isset ($msg)) { 
+            $msg = ''; 
+        }
+
         mail_message_listing_beginning( $imapConnection,
-            "move_messages.php?msg=$msg&mailbox=$urlMailbox&where=" . urlencode($search_where) . "&what=".urlencode($search_what),
-            $mailbox, 
-            -1, 
+            "move_messages.php?msg=$msg&mailbox=$urlMailbox&pos=$pos&where=" . urlencode($search_where) . "&what=".urlencode($search_what),
+            $mailbox,
+            -1,
             '<b>' . _("Found") . ' ' . count($messagelist) . ' ' . _("messages") . '</b>',
             get_selectall_link($start_msg, $sort) );
 
@@ -155,7 +176,8 @@ function sqimap_search($imapConnection,$search_where,$search_what,$mailbox,$colo
             printMessageInfo($imapConnection, $msgs[$j]["ID"], 0, $j, $mailbox, '', 0, $search_where, $search_what);
             $j++;
         }
-        echo '</table></tr></td></table>';
+        echo '</table></td></tr></table></form>';
+
     }
 }