X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsearch.php;h=8c5532240f0300f19c5720d5d0dd4a2ad4bf21ab;hb=ccbe63bad9cfea0850e299e6be71eba5d76170d6;hp=d62f671c8e9154807dbbdf5143555465a64aaa9e;hpb=83a92ae855277d0ed84bfb85d8c8191a53e1187d;p=squirrelmail.git diff --git a/src/search.php b/src/search.php index d62f671c..8c553224 100644 --- a/src/search.php +++ b/src/search.php @@ -3,22 +3,53 @@ /** * search.php * - * Copyright (c) 1999-2002 The SquirrelMail Project Team + * Copyright (c) 1999-2003 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/array.php'); -require_once('../functions/strings.php'); +/* Path for SquirrelMail required files. */ +define('SM_PATH','../'); +/* SquirrelMail required files. */ +require_once(SM_PATH . 'include/validate.php'); +require_once(SM_PATH . 'functions/imap.php'); +require_once(SM_PATH . 'functions/imap_search.php'); +require_once(SM_PATH . 'functions/imap_mailbox.php'); +require_once(SM_PATH . 'functions/strings.php'); -// here are some functions, could go in imap_search.php -// this was here, pretty handy +global $allow_thread_sort; +/* get globals we may need */ + +$key = $_COOKIE['key']; +$username = $_SESSION['username']; +$onetimepad = $_SESSION['onetimepad']; +$delimiter = $_SESSION['delimiter']; + +if (isset($_GET['mailbox'])) { + $mailbox = strip_tags($_GET['mailbox']); +} +if (isset($_GET['submit'])) { + $submit = strip_tags($_GET['submit']); +} +if (isset($_GET['what'])) { + $what = $_GET['what']; +} +if (isset($_GET['where'])) { + $where = strip_tags($_GET['where']); +} +if (isset($_GET['checkall'])) { + $checkall = strip_tags($_GET['checkall']); +} +if (isset($_GET['count'])) { + $count = strip_tags($_GET['count']); +} +/* end of get globals */ + +/* 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 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 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); - $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]); - $n++; +/* 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 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); - $folder_array = get_recent("search_folder", $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, ""); + $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, 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++) { - 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++; + reset($types); + foreach ($types as $key) { + setPref($data_dir, $username, $key.$i, $attributes[$key][$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); - $saved_folder_array = get_saved("saved_folder", $username, $data_dir); - array_splice($saved_what_array, $delete_index, 1); - array_splice($saved_where_array, $delete_index, 1); - array_splice($saved_folder_array, $delete_index, 1); + $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($saved_what_array); + $saved_count = count($attributes['saved_what']); $last_element = $saved_count + 1; - 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++; + 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); } - removePref($data_dir, $username, "saved_what" . "$last_element"); - removePref($data_dir, $username, "saved_where" . "$last_element"); - 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); - $folder_array = get_recent("search_folder", $username, $data_dir); - $saved_what_once = array_slice($what_array, $save_index, 1); - $saved_where_once = array_slice($where_array, $save_index, 1); - $saved_folder_once = array_slice($folder_array, $save_index, 1); - $saved_array = get_saved("saved_what", $username, $data_dir); - $saved_count = (count($saved_array) + 1); - setPref($data_dir, $username, "saved_what" . "$saved_count", $saved_what_once[0]); - setPref($data_dir, $username, "saved_where" . "$saved_count", $saved_where_once[0]); - setPref($data_dir, $username, "saved_folder" . "$saved_count", $saved_folder_once[0]); + $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++; + } } +function printSearchMessages($msgs,$mailbox, $cnt, $imapConnection, $where, $what, $usecache = false, $newsort = false) { + global $sort, $color; + + if ($cnt > 0) { + $msort = calc_msort($msgs, $sort); + if ( $mailbox == 'INBOX' ) { + $showbox = _("INBOX"); + } else { + $showbox = imap_utf7_decode_local($mailbox); + } + echo html_tag( 'div', '' . _("Folder:") . ' '. $showbox.'','center') . "\n"; -/* ------------------------ main ------------------------ */ + $msg_cnt_str = get_msgcnt_str(1, $cnt, $cnt); + $toggle_all = get_selectall_link(1, $sort); -// reset these arrays on each page load just in case + echo ''; + echo ''; + echo ''; + echo '
'; -$what_array = array (); -$where_array = array (); -$folder_array = array (); -$saved_what_array = array (); -$saved_where_array = array (); -$saved_folder_array = array (); -$search_all = "none"; + mail_message_listing_beginning($imapConnection, $mailbox, $sort, + $msg_cnt_str, $toggle_all, 1); -// get mailbox names + echo '
'; + echo ' '; + echo '
'; + echo ' '; + echo '
'; -$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); -$boxes = sqimap_mailbox_list($imapConnection); + printHeader($mailbox, 6, $color, false); + + displayMessageArray($imapConnection, $cnt, 1, + $msort, $mailbox, $sort, $color, $cnt, $where, $what); + echo '
'; + mail_message_listing_end($cnt, '', $msg_cnt_str, $color); + echo '
'; + } +} -// set current mailbox to INBOX if none was selected or if page -// was called to search all folders. +/* ------------------------ main ------------------------ */ -if ($mailbox == 'None' || $mailbox == "" ) { - $mailbox = $boxes[0]['unformatted']; +/* 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 globals we may need */ + +$key = $_COOKIE['key']; +$username = $_SESSION['username']; +$onetimepad = $_SESSION['onetimepad']; +$delimiter = $_SESSION['delimiter']; + +if (isset($_GET['mailbox'])) { + $mailbox = strip_tags($_GET['mailbox']); } -if ($mailbox == "All Folders") { - $search_all = "all"; +if (isset($_GET['submit'])) { + $submit = strip_tags($_GET['submit']); +} +if (isset($_GET['what'])) { + $what = $_GET['what']; +} +if (isset($_GET['where'])) { + $where = strip_tags($_GET['where']); +} +if (isset($_GET['checkall'])) { + $checkall = strip_tags($_GET['checkall']); +} +if (isset($_GET['count'])) { + $count = strip_tags($_GET['count']); } -// page headers - -displayPageHeader($color, $mailbox); +/* get mailbox names */ +$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); +$boxes = sqimap_mailbox_list($imapConnection); -// if the page is called from a search link or button update recent values -// in pref files here +/* 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 ($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); +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); + } } -// if the page is called from a "forget recent" link remove search from pref file -elseif ($submit == "forget") { +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") { +elseif ($submit == 'save') { save_recent($count, $username, $data_dir); } -elseif ($submit == "delete") { +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 "
\n". - " \n". - " \n". - '
\n". - "
"._("Search")."
\n". - "
'; +do_hook('search_before_form'); -// update the recent and saved searches from the pref files +echo html_tag( 'table', + html_tag( 'tr', "\n" . + html_tag( 'td', '' . _("Search") . '', 'center', $color[0] ) + ) , + '', '', 'width="100%"') . "\n"; -$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); +/* 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 +/* Saved Search Table */ if ($saved_count > 0) { - echo "
Saved Searches\n". - "\n"; - for ($i=0;$i<$saved_count;$i++) { - echo "\n". - "\n". - "'; } -echo "
$saved_folder_array[$i]$saved_what_array[$i]$saved_where_array[$i]   \n". - "". - "edit\n". - " | search\n". - " | delete". - "  "; + echo "
\n" + . html_tag( 'table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"' ) + . html_tag( 'tr', + html_tag( 'td', 'Saved Searches', 'center' ) + ) + . html_tag( 'tr' ) + . html_tag( 'td' ) + . html_tag( 'table', '', 'center', '', 'width="100%" cellpadding="2" cellspacing="2" border="0"' ); + for ($i=0; $i < $saved_count; ++$i) { + if ($i % 2) { + echo html_tag( 'tr', '', '', $color[0] ); + } else { + echo html_tag( 'tr', '', '', $color[4] ); + } + echo html_tag( 'td', $saved_attributes['saved_folder'][$i], 'left', '', 'width="35%"' ) + . html_tag( 'td', $saved_attributes['saved_what'][$i], 'left' ) + . html_tag( 'td', $saved_attributes['saved_where'][$i], 'center' ) + . html_tag( 'td', '', 'right' ) + . '' . _("edit") . '' + . ' | ' + . '' . _("search") . '' + . ' | ' + . "" + . _("delete") + . '' + . '
\n"; + echo "
\n"; } -// recent search table - if ($recent_count > 0) { - echo "
Recent Searches\n". - "\n"; - for ($i=0;$i<$recent_count;$i++) { - if (!empty($what_array[$i])) { - if ($folder_array[$i] == "") { - $folder_array[$i] = "INBOX"; - } - echo "\n". - "\n". - "\n"; + 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 html_tag( 'tr', '', '', $color[0] ); + } else { + echo html_tag( 'tr', '', '', $color[0] ); + } + 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', htmlentities($attributes['search_what'][$i]), 'left' ) + . html_tag( 'td', $attributes['search_where'][$i], 'center' ) + . html_tag( 'td', '', 'right' ) + . "" + . _("save") + . '' + . ' | ' + . '' . _("search") . '' + . ' | ' + . "" + . _("forget") + . '' + . ''; } - } - echo "
$folder_array[$i]$what_array[$i]$where_array[$i]   ". - "save\n". - " | search\n". - " | forget". - "  
\n". - "
\n"; -} -// search form -echo "Current Search"; -echo " \n"; -echo "\n". - " \n". - '

'; } - echo "\n"; -echo ' '. - " \n". - " \n"; + + +if (isset($newsort)) { + $sort = $newsort; + sqsession_register($sort, '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 html_tag( 'div', '' . _("Current Search") . '', 'left' ) . "\n" + . '' + . html_tag( 'table', '', '', '', 'width="95%" cellpadding="0" cellspacing="0" border="0"' ) + . html_tag( 'tr' ) + . html_tag( 'td', '', 'left' ) + . ''. + " \n"; +if ( !isset( $what ) ) { + $what = ''; +} +if ( !isset( $where ) ) { + $where = 'FROM'; +} + + $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", 'center' ) + . html_tag( 'td', '', 'right' ) + . "\n" . - " \n". - " \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. The toggle all link does not work - +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. +*/ + +$old_value = 0; +if ($allow_thread_sort == TRUE) { + $old_value = $allow_thread_sort; + $allow_thread_sort = FALSE; +} -if ($search_all == "all") { - $mailbox == ""; +if ($search_all == 'all') { + $mailbox == ''; $boxcount = count($boxes); - echo "
Search Results

\n"; + echo '
' . + _("Search Results") . + "

\n"; for ($x=0;$x<$boxcount;$x++) { if (!in_array('noselect', $boxes[$x]['flags'])) { - $mailbox = $boxes[$x]['unformatted']; - } - echo "
Folder: $mailbox
"; - if (($submit == "Search" || $submit == "Search_no_update") && !empty($what)) { + $mailbox = $boxes[$x]['unformatted']; + } + if (($submit == _("Search") || $submit == 'Search_no_update') && !empty($what)) { sqimap_mailbox_select($imapConnection, $mailbox); - sqimap_search($imapConnection, $where, $what, $mailbox, $color, $pos); - } + $msgs = sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all); + $count_all = count($msgs); + printSearchMessages($msgs, $mailbox, $count_all, $imapConnection, + $where, $what, false, false); + array_push($perbox_count, $count_all); + } + } + for ($i=0;$i
' . _("No Messages Found") . '
'; } } -// search one folder option - +/* search one folder option */ else { - if (($submit == "Search" || $submit == "Search_no_update") && !empty($what)) { - echo "
Search Results
\n"; + if (($submit == _("Search") || $submit == 'Search_no_update') && !empty($what)) { + echo '
' + . html_tag( 'div', '' . _("Search Results") . '', 'center' ) . "\n"; sqimap_mailbox_select($imapConnection, $mailbox); - sqimap_search($imapConnection, $where, $what, $mailbox, $color, $pos); + $msgs = sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all); + if (count($msgs)) { + printSearchMessages($msgs, $mailbox, count($msgs), $imapConnection, + $where, $what, false, false); + } else { + echo '
' . _("No Messages Found") . '
'; + } } } -// must have search terms to search - -if ($submit == "Search" && empty($what)) { - echo "
Please enter something to search for
\n"; +/* must have search terms to search */ +if ($submit == _("Search") && empty($what)) { + echo '
' + . html_tag( 'div', 'Please enter something to search for', 'center' ) . "\n"; } -do_hook("search_bottom"); +$allow_thread_sort = $old_value; -// all done +do_hook('search_bottom'); sqimap_logout ($imapConnection); echo '';