X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fsearch.php;h=73f997d0f0a529c971ab8c5543f224a9489341c3;hp=12121f7c0cc8adc9bd9f3a77dbf52e96ba4faff4;hb=d81e351b2f345643213edbf94fd37e7866dc8c86;hpb=d4144adf2453439095a468f36c36abaa020203a5 diff --git a/src/search.php b/src/search.php index 12121f7c..73f997d0 100644 --- a/src/search.php +++ b/src/search.php @@ -12,9 +12,11 @@ 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 @@ -27,162 +29,182 @@ function s_opt( $val, $sel, $tit ) { echo ">$tit\n"; } -/* function to get the recent searches and put them in arrays */ -function get_recent($pref_name, $username, $data_dir) { - $array = array (); +/* 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); - $n = 0; for ($x=1;$x<=$recent_count;$x++) { - $array[$n] = getPref($data_dir, $username, "$pref_name" . "$x", ""); - $n++; + reset($types); + foreach ($types as $key) { + $attributes[$key][$x] = getPref($data_dir, $username, $key.$x, ""); + } } - return $array; + return $attributes; } -/* 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++; +/* 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 $array; + return $saved_attributes; } /* 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 '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 */ -$what_array = array (); -$where_array = array (); -$folder_array = array (); -$saved_what_array = array (); -$saved_where_array = array (); -$saved_folder_array = array (); -$search_all = "none"; +$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); +if (isset($newsort)) { + printSearchMessages('',$mailbox, '', $imapConnection, true, $newsort); +} + + /* set current mailbox to INBOX if none was selected or if page was called to search all folders. */ -if ($mailbox == 'None' || $mailbox == '' ) { +if ( !isset($mailbox) || $mailbox == 'None' || $mailbox == '' ) { $mailbox = $boxes[0]['unformatted']; } if ($mailbox == 'All Folders') { - $search_all = "all"; + $search_all = 'all'; } -displayPageHeader($color, $mailbox); - +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 ) ) { -// $submit = ''; -//} else if ($submit == 'Search' && !empty($what)) { if ((!isset($submit) || empty($submit)) && !empty($what)) { - $submit = 'Search'; + $submit = _("Search"); } -if ($submit == 'Search' && !empty($what)) { - update_recent($what, $where, $mailbox, $username, $data_dir); +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); @@ -204,14 +226,9 @@ echo "
\n". "\n"; /* 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); -$recent_count = getPref($data_dir, $username, 'search_memory', 0); -$saved_what_array = get_saved("saved_what", $username, $data_dir); -$saved_where_array = get_saved("saved_where", $username, $data_dir); -$saved_folder_array = get_saved("saved_folder", $username, $data_dir); -$saved_count = count($saved_what_array); +$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 */ @@ -226,24 +243,24 @@ if ($saved_count > 0) { } else { echo ""; } - echo "$saved_folder_array[$i]" - . "$saved_what_array[$i]" - . "$saved_where_array[$i]" + echo "".$saved_attributes['saved_folder'][$i]."" + . "".$saved_attributes['saved_what'][$i]."" + . "".$saved_attributes['saved_where'][$i]."" . '' . '' . _("edit") . '' . ' | ' . '' . _("search") . '' . ' | ' - . "" + . "" . _("delete") . '' . ''; @@ -251,110 +268,177 @@ if ($saved_count > 0) { echo "\n"; } -/* Recent Search Table */ if ($recent_count > 0) { - echo "
\n" - . "\n" - . '
Recent Searches
' - . ''; - for ($i=0; $i < $recent_count; ++$i) { - if (!empty($what_array[$i])) { - if ($folder_array[$i] == "") { - $folder_array[$i] = "INBOX"; + echo "
\n" + . html_tag( 'table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"' ) + . html_tag( 'tr', + html_tag( 'td', '' . _("Recent Searches") . '', 'center' ) + ) + . html_tag( 'tr' ) + . html_tag( 'td' ) + . html_tag( 'table', '', 'center', '', 'width="100%" cellpadding="0" cellspacing="0" border="0"' ); + 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 ""; + echo html_tag( 'tr', '', '', $color[0] ); } else { - echo ""; + echo html_tag( 'tr', '', '', $color[0] ); } - echo "" - . "" - . "" - . ''; + . '' + . ''; } + } + echo '
$folder_array[$i]$what_array[$i]$where_array[$i]' - . "" + if (isset($attributes['search_what'][$i]) && + !empty($attributes['search_what'][$i])) { + echo html_tag( 'td', $attributes['search_folder'][$i], 'left', '', 'width="35%"' ) + . html_tag( 'td', $attributes['search_what'][$i], 'left' ) + . html_tag( 'td', $attributes['search_where'][$i], 'center' ) + . html_tag( 'td', '', 'right' ) + . "" . _("save") - . '' + . '' . ' | ' - . '' . _("search") . '' + . '' . _("search") . '' . ' | ' - . "" + . "" . _("forget") - . '' - . '

'; +} + +function printSearchMessages($msgs,$mailbox, $cnt, $imapConnection, $usecache = false, $newsort = false) { + global $sort, $color; + + if (!$usecache) { + if (!isset($search_msgs) || !session_is_registered('search_msgs')) { + $search_msgs = array(); + $search_msgs[$mailbox] = $msgs; + session_register('search_msgs'); + } else { + $old_search_msgs = $search_msgs; + session_unregister('search_msgs'); + $old_search_msgs[$mailbox] = $msgs; + $search_msgs = $old_search_msgs; + session_register('search_msgs'); + } + } else { +// if (session_is_registered('search_msgs')) { +// global $search_msgs; + $msgs = $search_msgs[$mailbox]; +// } else { +// $msgs = $search_msgs[$mailbox]; +// } + } + if ($newsort) { + $cnt = count($msgs); + $sort = $newsort; } - echo '
'; + $msort = calc_msort($msgs, $sort, $cnt, true); + displayMessageArray($imapConnection, $cnt, 1, + $msgs, $msort, $mailbox, $sort, $color, + $cnt, true); +} + +if (isset($newsort)) { + $sort = $newsort; + session_register('sort'); +} + +/********************************************************************* + * Check to see if we can use cache or not. Currently the only time * + * when you will not use it is when a link on the left hand frame is * + * used. Also check to make sure we actually have the array in the * + * registered session data. :) * + *********************************************************************/ +if (! isset($use_mailbox_cache)) { + $use_mailbox_cache = 0; } +/* There is a problem with registered vars in 4.1 */ +/* +if( substr( phpversion(), 0, 3 ) == '4.1' ) { + $use_mailbox_cache = FALSE; +} +*/ + /* Search Form */ -echo '' . _("Current Search") . '' - . '
' - . ' ' - . ' ' - . ' \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". - "
'; for ($i = 0; $i < count($boxes); $i++) { if (!in_array('noselect', $boxes[$i]['flags'])) { $box = $boxes[$i]['unformatted']; - $box2 = str_replace(' ', ' ', $boxes[$i]['unformatted-disp']); + $box2 = str_replace(' ', ' ', + imap_utf7_decode_local($boxes[$i]['unformatted-disp'])); if( $box2 == 'INBOX' ) { $box2 = _("INBOX"); - } - if ($mailbox == $box) { - echo " \n"; - } - else { - echo " \n"; } + echo ' ' . "\n"; } } - echo "\n"; -echo ' '. - " \n"; + echo ">All folders\n"; +echo ' '. + " \n". - "' . "\n", 'center' ) + . html_tag( 'td', '', 'right' ) + . "\n" . - " \n". - " \n". - "
\n". - "\n"; +echo " \n" . + " \n". + html_tag( 'td', '' . "\n", 'center', '', 'colspan="3"' ) . + " \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. + 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); @@ -365,19 +449,21 @@ if ($search_all == 'all') { if (!in_array('noselect', $boxes[$x]['flags'])) { $mailbox = $boxes[$x]['unformatted']; } - if (($submit == "Search" || $submit == "Search_no_update") && !empty($what)) { + 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); + $msgs = sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all); + $count_all = count($msgs); + printSearchMessages($msgs, $mailbox, $count_all, $imapConnection); + array_push($perbox_count, $count_all); } } for ($i=0;$i' . _("No Messages found") . '
'; @@ -386,21 +472,25 @@ if ($search_all == 'all') { /* search one folder option */ else { - if (($submit == 'Search' || $submit == 'Search_no_update') && !empty($what)) { + 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); + $msgs = sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all); + printSearchMessages($msgs, $mailbox, count($msgs), $imapConnection); } } /* must have search terms to search */ -if ($submit == 'Search' && empty($what)) { +if ($submit == _("Search") && empty($what)) { echo "
Please enter something to search for
\n"; } -do_hook("search_bottom"); +$allow_thread_sort = $old_value; + + +do_hook('search_bottom'); sqimap_logout ($imapConnection); echo '';