X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fsearch.php;h=1c29fe064158efa19bb1960c49c0314f377c9b88;hp=de730d096deb3a7f7bbff3d35b934ae8a65da7e3;hb=d7f8e6e69e33b218bf6d7775a53c811d839bce61;hpb=06ad27a2ea5e8cef7e172f2d39a5c43b06dd2410;ds=sidebyside diff --git a/src/search.php b/src/search.php index de730d09..1c29fe06 100644 --- a/src/search.php +++ b/src/search.php @@ -1,103 +1,433 @@ - - -
-
"._("Search")."
-
"; - - echo "
\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " "; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo " "; - echo " \n"; - $what_disp = ereg_replace(",", " ", $what); - $what_disp = str_replace("\\\\", "\\", $what_disp); - $what_disp = str_replace("\\\"", "\"", $what_disp); - $what_disp = str_replace("\"", """, $what_disp); - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo "
"; - echo "
"; - do_hook("search_after_form"); - if ($where && $what) { - sqimap_mailbox_select($imapConnection, $mailbox); - sqimap_search($imapConnection, $where, $what, $mailbox, $color); - } - do_hook("search_bottom"); - sqimap_logout ($imapConnection); + +/** + * search.php + * + * Copyright (c) 1999-2002 The SquirrelMail Project Team + * Licensed under the GNU GPL. For full terms see the file COPYING. + * + * $Id$ + */ + +require_once('../src/validate.php'); +require_once('../functions/imap.php'); +require_once('../functions/imap_search.php'); +require_once('../functions/imap_utf7_decode_local.php'); +require_once('../functions/array.php'); +require_once('../functions/strings.php'); + +global $allow_thread_sort; + +/* here are some functions, could go in imap_search.php + + this was here, pretty handy */ +function s_opt( $val, $sel, $tit ) { + echo " \n"; +} + +/* function to get the recent searches and put them in the attributes array */ +function get_recent($username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $recent_count = getPref($data_dir, $username, 'search_memory', 0); + for ($x=1;$x<=$recent_count;$x++) { + reset($types); + foreach ($types as $key) { + $attributes[$key][$x] = getPref($data_dir, $username, $key.$x, ""); + } + } + return $attributes; +} + +/* function to get the saved searches and put them in the saved_attributes array */ +function get_saved($username, $data_dir) { + $saved_attributes = array(); + $types = array('saved_what', 'saved_where', 'saved_folder'); + foreach ($types as $key) { + for ($x=1;;$x++) { + $saved_attributes[$key][$x] = getPref($data_dir, $username, $key."$x", ""); + if ($saved_attributes[$key][$x] == "") { + array_pop($saved_attributes[$key]); + break; + } + } + } + return $saved_attributes; +} + +/* function to update recent pref arrays */ +function update_recent($what, $where, $mailbox, $username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $input = array($what, $where, $mailbox); + $attributes = get_recent( $username, $data_dir); + reset($types); + $dupe = 'no'; + for ($i=1;$i<=count($attributes['search_what']);$i++) { + if (isset($attributes['search_what'][$i])) { + if ($what == $attributes['search_what'][$i] && + $where == $attributes['search_where'][$i] && + $mailbox == $attributes['search_folder'][$i]) { + $dupe = 'yes'; + } + } + } + if ($dupe == 'no') { + $i = 0; + foreach ($types as $key) { + array_push ($attributes[$key], $input[$i]); + array_shift ($attributes[$key]); + $i++; + } + $recent_count = getPref($data_dir, $username, 'search_memory', 0); + $n=0; + for ($i=1;$i<=$recent_count;$i++) { + reset($types); + foreach ($types as $key) { + setPref($data_dir, $username, $key.$i, $attributes[$key][$n]); + } + $n++; + } + } +} + +/* function to forget a recent search */ +function forget_recent($forget_index, $username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $attributes = get_recent( $username, $data_dir); + reset($types); + foreach ($types as $key) { + array_splice($attributes[$key], $forget_index, 1); + array_unshift($attributes[$key], ''); + } + reset($types); + $recent_count = getPref($data_dir, $username, 'search_memory', 0); + $n=0; + for ($i=1;$i<=$recent_count;$i++) { + reset($types); + foreach ($types as $key) { + setPref($data_dir, $username, $key.$i, $attributes[$key][$n]); + } + $n++; + } +} + +/* function to delete a saved search */ +function delete_saved($delete_index, $username, $data_dir) { + $types = array('saved_what', 'saved_where', 'saved_folder'); + $attributes = get_saved($username, $data_dir); + foreach ($types as $key) { + array_splice($attributes[$key], $delete_index, 1); + } + reset($types); + $n=0; + $saved_count = count($attributes['saved_what']); + $last_element = $saved_count + 1; + for ($i=1;$i<=$saved_count;$i++) { + reset($types); + foreach ($types as $key) { + setPref($data_dir, $username, $key.$i, $attributes[$key][$n]); + } + $n++; + } + reset($types); + foreach($types as $key) { + removePref($data_dir, $username, $key.$last_element); + } +} + +/* function to save a search from recent to saved */ +function save_recent($save_index, $username, $data_dir) { + $attributes = array(); + $types = array('search_what', 'search_where', 'search_folder'); + $saved_types = array(0 => 'saved_what', 1 => 'saved_where', 2 => 'saved_folder'); + $saved_array = get_saved($username, $data_dir); + $save_index = $save_index -1; + $saved_count = (count($saved_array['saved_what']) + 1); + $attributes = get_recent ($username, $data_dir); + $n = 0; + foreach ($types as $key) { + $slice = array_slice($attributes[$key], $save_index, 1); + $name = $saved_types[$n]; + setPref($data_dir, $username, $name.$saved_count, $slice[0]); + $n++; + } +} + +/* ------------------------ main ------------------------ */ + +/* reset these arrays on each page load just in case */ +$attributes = array (); +$saved_attributes = array (); +$search_all = 'none'; +$perbox_count = array (); +$recent_count = getPref($data_dir, $username, 'search_memory', 0); + +/* 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. */ +if ( !isset($mailbox) || $mailbox == 'None' || $mailbox == '' ) { + $mailbox = $boxes[0]['unformatted']; +} +if ($mailbox == 'All Folders') { + $search_all = 'all'; +} + +if (isset($composenew) && $composenew) { + $comp_uri = "../src/compose.php?mailbox=". urlencode($mailbox). + "&session=$composesession&attachedmessages=true&"; + displayPageHeader($color, $mailbox, "comp_in_new(false,'$comp_uri');", false); +} else { + displayPageHeader($color, $mailbox); +} +/* See how the page was called and fire off correct function */ +if ((!isset($submit) || empty($submit)) && !empty($what)) { + $submit = _("Search"); +} +if ( !isset( $submit ) ) { + $submit = ''; +} else if ($submit == _("Search") && !empty($what)) { + if ($recent_count > 0) { + update_recent($what, $where, $mailbox, $username, $data_dir); + } +} +elseif ($submit == 'forget') { + forget_recent($count, $username, $data_dir); +} +elseif ($submit == 'save') { + save_recent($count, $username, $data_dir); +} +elseif ($submit == 'delete') { + delete_saved($count, $username, $data_dir); +} + +do_hook('search_before_form'); + +echo "
\n". + "\n". + "\n". + "
\n". + "
" . _("Search") . "
\n". + "
\n"; + +/* update the recent and saved searches from the pref files */ +$attributes = get_recent($username, $data_dir); +$saved_attributes = get_saved($username, $data_dir); +$saved_count = count($saved_attributes['saved_what']); +$count_all = 0; + +/* Saved Search Table */ +if ($saved_count > 0) { + echo "
\n" + . "" + . '
Saved Searches
' + . ''; + for ($i=0; $i < $saved_count; ++$i) { + if ($i % 2) { + echo ""; + } else { + echo ""; + } + echo "" + . "" + . "" + . ''; + } + echo "
".$saved_attributes['saved_folder'][$i]."".$saved_attributes['saved_what'][$i]."".$saved_attributes['saved_where'][$i]."' + . '' . _("edit") . '' + . ' | ' + . '' . _("search") . '' + . ' | ' + . "" + . _("delete") + . '' + . '
\n"; +} + +/* Recent Search Table */ +if ($recent_count > 0) { + echo "
\n" + . "\n" + . '
' . _("Recent Searches") . '
' + . ''; + for ($i=1; $i <= $recent_count; ++$i) { + if (isset($attributes['search_folder'][$i])) { + if ($attributes['search_folder'][$i] == "") { + $attributes['search_folder'][$i] = "INBOX"; + } + } + if ($i % 2) { + echo ""; + } else { + echo ""; + } + if (isset($attributes['search_what'][$i]) && + !empty($attributes['search_what'][$i])) { + echo "" + . "" + . "" + . ''; + } + } + echo '
".$attributes['search_folder'][$i]."".$attributes['search_what'][$i]."".$attributes['search_where'][$i]."' + . "" + . _("save") + . '' + . ' | ' + . '' . _("search") . '' + . ' | ' + . "" + . _("forget") + . '' + . '

'; +} + +/* Search Form */ +echo '' . _("Current Search") . '' + . '
' + . ' ' + . ' ' + . ' \n". + " \n". + "\n". + " \n". + " \n". + "\n". + "
'. + " \n"; +if ( !isset( $what ) ) { + $what = ''; +} +if ( !isset( $where ) ) { + $where = ''; +} + + +$what_disp = str_replace(',', ' ', $what); +$what_disp = str_replace('\\\\', '\\', $what_disp); +$what_disp = str_replace('\\"', '"', $what_disp); +$what_disp = str_replace('"', '"', $what_disp); +echo " \n". + " \n". + "\n" . + " \n". + " \n". + "
\n". + "\n"; + + +do_hook('search_after_form'); + +/* + search all folders option still in the works. returns a table for each + folder it finds a match in. +*/ + +$old_value = 0; +if ($allow_thread_sort == TRUE) { + $old_value = $allow_thread_sort; + $allow_thread_sort = FALSE; +} + +if ($search_all == 'all') { + $mailbox == ''; + $boxcount = count($boxes); + echo '
' . + _("Search Results") . + "

\n"; + for ($x=0;$x<$boxcount;$x++) { + if (!in_array('noselect', $boxes[$x]['flags'])) { + $mailbox = $boxes[$x]['unformatted']; + } + 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' . + _("No Messages found") . + '
'; + } +} + +/* search one folder option */ +else { + if (($submit == _("Search") || $submit == 'Search_no_update') && !empty($what)) { + echo '
' . + _("Search Results") . + "
\n"; + sqimap_mailbox_select($imapConnection, $mailbox); + sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all); + } +} + +/* must have search terms to search */ +if ($submit == _("Search") && empty($what)) { + echo "
Please enter something to search for
\n"; +} + +$allow_thread_sort = $old_value; + +do_hook('search_bottom'); +sqimap_logout ($imapConnection); +echo ''; + ?> -