Source for file search.php
Documentation is available at search.php
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: search.php 14840 2020-01-07 07:42:38Z pdontthink $
/** This is the search page */
define('PAGE_NAME', 'search');
* Path for SquirrelMail required files.
/** 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');
require_once(SM_PATH .
'functions/forms.php');
global $allow_thread_sort;
/* get globals we may need */
! in_array( $where, array('BODY','TEXT','SUBJECT','FROM','CC','TO','TO_CC','TO_CC_FROM','TO_CC_FROM_SUBJECT'))) {
// make sure that 'where' is one if standard IMAP SEARCH keywords
/* 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\"";
echo
' selected="selected"';
/* function to get the recent searches and put them in the 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++
) {
foreach ($types as $key) {
$attributes[$key][$x] =
getPref($data_dir, $username, $key.
$x, "");
/* function to get the saved searches and put them in the saved_attributes array */
$saved_attributes =
array();
$types =
array('saved_what', 'saved_where', 'saved_folder');
foreach ($types as $key) {
$prefval =
getPref($data_dir, $username, $key.
"$x", "");
$saved_attributes[$key][$x] =
$prefval;
return $saved_attributes;
/* function to update recent pref arrays */
function update_recent($what, $where, $mailbox, $username, $data_dir) {
$types =
array('search_what', 'search_where', 'search_folder');
$input =
array($what, $where, $mailbox);
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]) {
foreach ($types as $key) {
$recent_count =
getPref($data_dir, $username, 'search_memory', 0);
for ($i=
1;$i<=
$recent_count;$i++
) {
foreach ($types as $key) {
setPref($data_dir, $username, $key.
$i, $attributes[$key][$n]);
/* function to forget a recent search */
$types =
array('search_what', 'search_where', 'search_folder');
foreach ($types as $key) {
$recent_count =
getPref($data_dir, $username, 'search_memory', 0);
for ($i=
1;$i<=
$recent_count;$i++
) {
foreach ($types as $key) {
setPref($data_dir, $username, $key.
$i, $attributes[$key][$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) {
$saved_count =
count($attributes['saved_what']);
$last_element =
$saved_count +
1;
for ($i=
1;$i<=
$saved_count;$i++
) {
foreach ($types as $key) {
setPref($data_dir, $username, $key.
$i, $attributes[$key][$n]);
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) {
$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;
if (isset
($saved_array['saved_what'])) {
$saved_count =
(count($saved_array['saved_what']) +
1);
// there are no saved searches. Function is used to save first search
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]);
function printSearchMessages($msgs,$mailbox, $cnt, $imapConnection, $where, $what, $usecache =
false, $newsort =
false) {
if ((!empty($allow_server_sort) &&
$allow_server_sort) ||
(!empty($allow_server_thread) &&
$allow_server_thread)) {
if ( $mailbox ==
'INBOX' ) {
echo
html_tag( 'div', '<b><big>' .
_("Folder:") .
' '.
$safe_name =
preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
$form_name =
"FormMsgs" .
$safe_name;
echo
'<form name="' .
$form_name .
'" method="post" action="move_messages.php">' .
"\n" .
'<input type="hidden" name="startMessage" value="1">' .
"\n" .
echo
'<table border="0" width="100%" cellpadding="0" cellspacing="0">';
$msg_cnt_str, $toggle_all, 1);
echo
'<tr><td height="5" bgcolor="'.
$color[4].
'"></td></tr>';
echo
' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.
' border="0" bgcolor="'.
$color[9].
'">';
echo
' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.
$color[5].
'">';
$msort, $mailbox, $sort, $color, $cnt, $where, $what);
echo
'</table></td></tr></table>';
// space for paginator argument is intentional, so html_tag() closes the tag
echo
"\n</table></form>\n\n";
/* ------------------------ main ------------------------ */
/* reset these arrays on each page load just in case */
$saved_attributes =
array ();
$perbox_count =
array ();
$recent_count =
getPref($data_dir, $username, 'search_memory', 0);
global $imap_stream_options; // in case not defined in config
$imapConnection =
sqimap_login($username, $key, $imapServerAddress, $imapPort, 0, $imap_stream_options);
/* 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') {
// the preg_match() is a fix for Dovecot wherein UIDs can be bigger than
// normal integers - this isn't in 1.4 yet, but when adding new code, why not...
if (isset
($composenew) &&
$composenew) {
$comp_uri =
"../src/compose.php?mailbox=".
urlencode($mailbox).
"&session=$composesession&";
/* See how the page was called and fire off correct function */
if (empty($submit) &&
!empty($what)) {
// need to verify security token if user wants to do anything
if ($submit ==
'forget' && isset
($count)) {
elseif ($submit ==
'save' && isset
($count)) {
elseif ($submit ==
'delete' && isset
($count)) {
elseif (!empty($submit) &&
!empty($what)) {
html_tag( 'td', '<b>' .
_("Search") .
'</b>', 'center', $color[0] )
'', '', 'width="100%"') .
"\n";
/* update the recent and saved searches from the pref files */
$saved_attributes =
get_saved($username, $data_dir);
if (isset
($saved_attributes['saved_what'])) {
$saved_count =
count($saved_attributes['saved_what']);
.
html_tag( 'table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"' )
html_tag( 'td', '<b>'.
_("Saved Searches") .
'</b>', 'center' )
.
html_tag( 'table', '', 'center', '', 'width="100%" cellpadding="2" cellspacing="2" border="0"' );
for ($i=
0; $i <
$saved_count; ++
$i) {
echo
html_tag( 'tr', '', '', $color[0] );
echo
html_tag( 'tr', '', '', $color[4] );
.
'?mailbox=' .
urlencode($saved_attributes['saved_folder'][$i +
1])
.
'&what=' .
urlencode($saved_attributes['saved_what'][$i +
1])
.
'&where=' .
urlencode($saved_attributes['saved_where'][$i +
1])
.
'">' .
_("edit") .
'</a>'
.
'?mailbox=' .
urlencode($saved_attributes['saved_folder'][$i +
1])
.
'&what=' .
urlencode($saved_attributes['saved_what'][$i +
1])
.
'&where=' .
urlencode($saved_attributes['saved_where'][$i +
1])
.
'&submit=Search_no_update'
.
'">' .
_("search") .
'</a>'
echo
"</table></td></tr></table>\n";
.
html_tag( 'table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"' )
html_tag( 'td', '<b>' .
_("Recent Searches") .
'</b>', 'center' )
.
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";
echo
html_tag( 'tr', '', '', $color[0] );
echo
html_tag( 'tr', '', '', $color[0] );
if (isset
($attributes['search_what'][$i]) &&
!empty($attributes['search_what'][$i])) {
.
'?mailbox=' .
urlencode($attributes['search_folder'][$i])
.
'&what=' .
urlencode($attributes['search_what'][$i])
.
'&where=' .
urlencode($attributes['search_where'][$i])
.
'&submit=Search_no_update'
.
'">' .
_("search") .
'</a>'
echo
'</table></td></tr></table><br />';
/** FIXME: remove or fix it. $newsort is not set and not extracted from request
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. :) *
*********************************************************************/
/** FIXME: remove or fix it. $use_mailbox_cache is not set and not extracted from request
if (! isset($use_mailbox_cache)) {
/* There is a problem with registered vars in 4.1 */
if( substr( phpversion(), 0, 3 ) == '4.1' ) {
$use_mailbox_cache = FALSE;
echo
html_tag( 'div', '<b>' .
_("Current Search") .
'</b>', 'left' ) .
"\n"
.
'<form action="search.php" name="s">'
.
'<select name="mailbox">'
.
'<option value="All Folders"';
if ($mailbox ==
'All Folders') {
echo
' selected="selected"';
echo
'>[ ' .
_("All Folders") .
" ]</option>\n";
// FIXME: explain all str_replace calls.
.
'<input type="text" size="35" name="what" value="' .
$what_disp .
'" />'
.
"<select name=\"where\">";
s_opt( 'BODY', $where, _("Body") );
s_opt( 'TEXT', $where, _("Everywhere") );
s_opt( 'SUBJECT', $where, _("Subject") );
s_opt( 'FROM', $where, _("From") );
s_opt( 'CC', $where, _("Cc") );
s_opt( 'TO', $where, _("To") );
s_opt( 'TO_CC', $where, _("To/Cc") );
s_opt( 'TO_CC_FROM', $where, _("To/Cc/From") );
s_opt( 'TO_CC_FROM_SUBJECT', $where, _("To/Cc/From/Subject") );
.
'<input type="submit" name="submit" value="' .
_("Search") .
'" />'
search all folders option still in the works. returns a table for each
folder it finds a match in.
if ($allow_thread_sort ==
TRUE) {
$old_value =
$allow_thread_sort;
$allow_thread_sort =
FALSE;
if ($search_all ==
'all') {
$boxcount =
count($boxes);
echo
'<br /><center><b>' .
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)) {
$msgs =
sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all);
$count_all =
count($msgs);
$where, $what, false, false);
for ($i=
0;$i<
count($perbox_count);$i++
) {
echo
'<br /><center>' .
_("No Messages Found") .
'</center>';
/* search one folder option */
if (($submit ==
_("Search") ||
$submit ==
'Search_no_update') &&
!empty($what)) {
.
html_tag( 'div', '<b>' .
_("Search Results") .
'</b>', 'center' ) .
"\n";
$msgs =
sqimap_search($imapConnection, $where, $what, $mailbox, $color, 0, $search_all, $count_all);
$where, $what, false, false);
echo
'<br /><center>' .
_("No Messages Found") .
'</center>';
/* must have search terms to search */
if ($submit ==
_("Search") &&
empty($what)) {
.
html_tag( 'div', '<b>' .
_("Please enter something to search for") .
'</b>', 'center' ) .
"\n";
$allow_thread_sort =
$old_value;
Documentation generated on Mon, 13 Jan 2020 04:25:15 +0100 by phpDocumentor 1.4.3