small changes/fixes. duplicate searches are not saved in recent table.
[squirrelmail.git] / src / search.php
index 035cedc7d7c93bb225e93bc9565f4f695bacb57f..5d6cc4ec431719a495c71aa02c31fa66b7504453 100644 (file)
@@ -16,9 +16,9 @@ require_once('../functions/array.php');
 require_once('../functions/strings.php');
 
 
-//     here are some functions, could go in imap_search.php
-//     this was here, pretty handy
+/*  here are some functions, could go in imap_search.php
 
+    this was here, pretty handy  */
 function s_opt( $val, $sel, $tit ) {
     echo "            <option value=\"$val\"";
     if ( $sel == $val ) {
@@ -27,51 +27,66 @@ function s_opt( $val, $sel, $tit ) {
     echo  ">$tit</option>\n";
 }
 
-//     function to get the recent searches and put them in arrays
-
+/*  function to get the recent searches and put them in arrays  */
 function get_recent($pref_name, $username, $data_dir) {
     $array = array ();
     $recent_count = getPref($data_dir, $username, 'search_memory', 0);
     $n = 0;
     for ($x=1;$x<=$recent_count;$x++) {
-       $array[$n] = getPref($data_dir, $username, "$pref_name" . "$x", "");
-       $n++;
+    $array[$n] = getPref($data_dir, $username, "$pref_name" . "$x", "");
+    $n++;
     }
     return $array;
 }
 
-//     function to get the saved searches and put them in arrays
-
+/*  function to get the saved searches and put them in arrays  */
 function get_saved($pref_name, $username, $data_dir) {
     $array = array ();
     $n = 0;
     for ($x=1;;$x++) {
         $array[$n] = getPref($data_dir, $username, "$pref_name" . "$x", "");
-       if ($array[$n] == "") {
-           array_pop($array);
-           return $array;
-       }
-       $n++;
+    if ($array[$n] == "") {
+        array_pop($array);
+        return $array;
+    }
+    $n++;
     }
     return $array;
 }
 
-//     function to update pref file with recent searches
-
-function update_recent($array, $recent_value, $pref_name, $username, $data_dir) {
-    $array = get_recent($pref_name, $username, $data_dir);
-    array_push ($array, $recent_value);
-    array_shift ($array);
+/*  function to update recent pref arrays  */
+function update_recent($what, $where, $mailbox, $username, $data_dir) {
+    $what_array = get_recent("search_what", $username, $data_dir);
+    $where_array = get_recent("search_where", $username, $data_dir);
+    $folder_array = get_recent("search_folder", $username, $data_dir);
+    $dupe = "no";
+    for ($i=0;$i<count($what_array);$i++) {
+        if ($what == $what_array[$i] &&
+            $where == $where_array[$i] &&
+            $mailbox == $folder_array[$i]) {
+            
+            $dupe = "yes";
+        }
+    }
+    if ($dupe == "no") {    
+    array_push ($what_array, $what);
+    array_push ($where_array, $where);
+    array_push ($folder_array, $mailbox);
+    array_shift ($what_array);
+    array_shift ($where_array);
+    array_shift ($folder_array);
     $recent_count = getPref($data_dir, $username, 'search_memory', 0);
     $n=0;
     for ($i=1;$i<=$recent_count;$i++) {
-       setPref($data_dir, $username, "$pref_name" . "$i", $array[$n]);
+        setPref($data_dir, $username, "search_what" . "$i", $what_array[$n]);
+        setPref($data_dir, $username, "search_where" . "$i", $where_array[$n]);
+        setPref($data_dir, $username, "search_folder" . "$i", $folder_array[$n]);
        $n++;
+       }
     }
 }
 
-//     function to "forget" a recent search
-
+/*  function to forget a recent search  */
 function forget_recent($forget_index, $username, $data_dir) {
     $what_array = get_recent("search_what", $username, $data_dir);
     $where_array = get_recent("search_where", $username, $data_dir);
@@ -79,20 +94,20 @@ function forget_recent($forget_index, $username, $data_dir) {
     array_splice($what_array, $forget_index, 1);
     array_splice($where_array, $forget_index, 1);
     array_splice($folder_array, $forget_index, 1);
-       array_unshift($what_array, "");
-       array_unshift($where_array, "");
-       array_unshift($folder_array, "");
+    array_unshift($what_array, "");
+    array_unshift($where_array, "");
+    array_unshift($folder_array, "");
     $recent_count = getPref($data_dir, $username, 'search_memory', 0);
     $n=0;
     for ($i=1;$i<=$recent_count;$i++) {
         setPref($data_dir, $username, "search_what" . "$i", $what_array[$n]);
-       setPref($data_dir, $username, "search_where" . "$i", $where_array[$n]);
-       setPref($data_dir, $username, "search_folder" . "$i", $folder_array[$n]);
-       $n++;
+        setPref($data_dir, $username, "search_where" . "$i", $where_array[$n]);
+        setPref($data_dir, $username, "search_folder" . "$i", $folder_array[$n]);
+        $n++;
     }
-
-//             function to delete a saved search
 }
+
+/*  function to delete a saved search  */
 function delete_saved($delete_index, $username, $data_dir) {
     $saved_what_array = get_saved("saved_what", $username, $data_dir); 
     $saved_where_array = get_saved("saved_where", $username, $data_dir);
@@ -106,9 +121,9 @@ function delete_saved($delete_index, $username, $data_dir) {
     if ($last_element < 1) {
         for ($i=1;$i<=$saved_count;$i++) {
             setPref($data_dir, $username, "saved_what" . "$i", $saved_what_array[$n]);
-           setPref($data_dir, $username, "saved_where" . "$i", $saved_where_array[$n]);
-           setPref($data_dir, $username, "saved_folder" . "$i", $saved_folder_array[$n]);
-           $n++;
+        setPref($data_dir, $username, "saved_where" . "$i", $saved_where_array[$n]);
+        setPref($data_dir, $username, "saved_folder" . "$i", $saved_folder_array[$n]);
+        $n++;
         }
     }
     removePref($data_dir, $username, "saved_what" . "$last_element");
@@ -116,8 +131,7 @@ function delete_saved($delete_index, $username, $data_dir) {
     removePref($data_dir, $username, "saved_folder" . "$last_element");
 }    
 
-//             function to save a search from recent to saved
-
+/*  function to save a search from recent to saved  */
 function save_recent($save_index, $username, $data_dir) {
     $what_array = get_recent("search_what", $username, $data_dir);
     $where_array = get_recent("search_where", $username, $data_dir);
@@ -132,12 +146,9 @@ function save_recent($save_index, $username, $data_dir) {
     setPref($data_dir, $username, "saved_folder" . "$saved_count", $saved_folder_once[0]);
 }
 
-
-
 /* ------------------------ main ------------------------ */
 
-//     reset these arrays on each page load just in case
-
+/*  reset these arrays on each page load just in case  */
 $what_array = array ();
 $where_array = array ();
 $folder_array = array ();
@@ -145,16 +156,15 @@ $saved_what_array = array ();
 $saved_where_array = array ();
 $saved_folder_array = array ();
 $search_all = "none";
+$perbox_count = array ();
 
-//     get mailbox names
-
+/*  get mailbox names  */
 $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
 $boxes = sqimap_mailbox_list($imapConnection);
 
 
-//     set current mailbox to INBOX if none was selected or if page
-//     was called to search all folders.
-
+/*  set current mailbox to INBOX if none was selected or if page
+    was called to search all folders.  */
 if ($mailbox == 'None' || $mailbox == '' ) {
     $mailbox = $boxes[0]['unformatted'];
 }
@@ -162,32 +172,24 @@ if ($mailbox == 'All Folders') {
     $search_all = "all";
 }
 
-//     page headers
-
 displayPageHeader($color, $mailbox);
 
-//     if the page is called from a search link or button  update recent values
-//     in pref files here
-
+/*  See how the page was called and fire off correct function  */
 if ( !isset( $submit ) ) {
     $submit = '';
 } else if ($submit == 'Search' && !empty($what)) {
-    update_recent($what_array, $what, "search_what", $username, $data_dir);
-    update_recent($where_array, $where, "search_where", $username, $data_dir);
-    update_recent($folder_array, $mailbox, "search_folder", $username, $data_dir);
+    update_recent($what, $where, $mailbox, $username, $data_dir); 
 }
-//     if the page is called from a "forget recent" link remove search from pref file
 elseif ($submit == 'forget') {
     forget_recent($count, $username, $data_dir);
 }
-//     if the page is called from a "save recent" link add search to saved searches
 elseif ($submit == 'save') {
     save_recent($count, $username, $data_dir);
 }
 elseif ($submit == 'delete') {
     delete_saved($count, $username, $data_dir);
 }
-//     if the page is called from a "delete saved" link delete saved search
+
 do_hook('search_before_form');
 
 echo "<BR>\n".
@@ -197,8 +199,7 @@ echo "<BR>\n".
         "</TD></TR>\n".
      "</TABLE>\n";
 
-//  update the recent and saved searches from the pref files
-
+/*  update the recent and saved searches from the pref files  */
 $what_array = get_recent("search_what", $username, $data_dir);
 $where_array = get_recent("search_where", $username, $data_dir);
 $folder_array = get_recent("search_folder", $username, $data_dir);
@@ -347,7 +348,7 @@ do_hook('search_after_form');
 
 /*
     search all folders option still in the works. returns a table for each
-    folder it finds a match in. The toggle all link does not work
+    folder it finds a match in. 
 */
 
 if ($search_all == 'all') {
@@ -363,17 +364,23 @@ if ($search_all == 'all') {
         if (($submit == "Search" || $submit == "Search_no_update") && !empty($what)) {
             sqimap_mailbox_select($imapConnection, $mailbox);
             $count_all = sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all);
+        array_push($perbox_count, $count_all);
+        }
+    }
+    for ($i=0;$i<count($perbox_count);$i++) {
+        if ($perbox_count[$i] != "") {
+           break;
         }
+        $count_all = "none";
     }
-    if ($count_all == 0) {
+    if ($count_all == "none") {
         echo '<br><b>' .
              _("No Messages found") .
              '</b><br>';
     }
 }
 
-//  search one folder option
-
+/*  search one folder option  */
 else {
     if (($submit == 'Search' || $submit == 'Search_no_update') && !empty($what)) {
         echo '<BR><CENTER><B>' .
@@ -384,16 +391,12 @@ else {
     }
 }
 
-//  must have search terms to search
-
+/*  must have search terms to search  */
 if ($submit == 'Search' && empty($what)) {
     echo "<BR><CENTER><B>Please enter something to search for</B></CENTER>\n";
 }
 
 do_hook("search_bottom");
-
-//     all done
-
 sqimap_logout ($imapConnection);
 echo '</body></html>';