source: subversion/trunk/roundcubemail/program/steps/mail/search.inc @ 976

Last change on this file since 976 was 976, checked in by robin, 5 years ago

Remember search results (closes #1483883).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1<?php
2/*
3 +-----------------------------------------------------------------------+
4 | steps/mail/search.inc                                                 |
5 |                                                                       |
6 | Search functions for rc webmail                                       |
7 | Licensed under the GNU GPL                                            |
8 |                                                                       |
9 +-----------------------------------------------------------------------+
10 | Author: Benjamin Smith <defitro@gmail.com>                            |
11 |         Thomas Bruederli <roundcube@gmail.com>                        |
12 +-----------------------------------------------------------------------+
13
14*/
15
16$REMOTE_REQUEST = TRUE;
17
18// reset list_page and old search results
19$IMAP->set_page(1);
20$IMAP->set_search_set(NULL);
21$_SESSION['page'] = 1;
22
23// using encodeURI with javascript "should" give us
24// a correctly UTF-8 encoded query string
25$imap_charset = 'UTF-8';
26
27// get search string
28$str = get_input_value('_q', RCUBE_INPUT_GET);
29$mbox = get_input_value('_mbox', RCUBE_INPUT_GET);
30$search_request = md5($mbox.$str);
31
32
33// Check the search string for type of search
34if (preg_match("/^from:/i", $str))
35{
36  list(,$srch) = explode(":", $str);
37  $subject =  "HEADER FROM";
38  $search = trim($srch);
39}
40else if (preg_match("/^to:/i", $str))
41{
42  list(,$srch) = explode(":", $str);
43  $subject = "HEADER TO";
44  $search = trim($srch);
45}
46else if (preg_match("/^cc:/i", $str))
47{
48  list(,$srch) = explode(":", $str);
49  $subject = "HEADER CC";
50  $search = trim($srch);
51}
52else if (preg_match("/^subject:/i", $str))
53{
54  list(,$srch) = explode(":", $str);
55  $subject = "HEADER SUBJECT";
56  $search = trim($srch);
57}
58else if (preg_match("/^body:/i", $str))
59{
60  list(,$srch) = explode(":", $str);
61  $subject = "TEXT";
62  $search = trim($srch);
63}
64// search in subject and sender by default
65else
66{
67  $from = ($mbox == $CONFIG['sent_mbox'] || $mbox == $CONFIG['drafts_mbox']) ? "TO" : "FROM";
68  $subject = array("HEADER SUBJECT", "HEADER $from");
69  $search = trim($str);
70}
71
72
73// execute IMAP search
74$result = $IMAP->search($mbox, $subject, $search, $imap_charset);
75$count = 0;
76 
77// Make sure our $result is legit..
78if (is_array($result) && $result[0] != '')
79{
80  // Get the headers
81  $result_h = $IMAP->list_header_set($mbox, $result, 1, $_SESSION['sort_col'], $_SESSION['sort_order']);
82  $count = $IMAP->messagecount();
83
84  // save search results in session
85  if (!is_array($_SESSION['search']))
86    $_SESSION['search'] = array();
87
88  // Make sure we got the headers
89  if ($result_h != NULL)
90  {
91    $_SESSION['search'][$search_request] = $IMAP->get_search_set();
92    $_SESSION['last_text_search'] = $str;
93    rcmail_js_message_list($result_h);
94    $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $count));
95  }
96}
97else
98{
99  $OUTPUT->show_message('searchnomatch', 'warning');
100  $search_request = -1;
101}
102
103// update message count display
104$pages = ceil($count/$IMAP->page_size);
105$OUTPUT->set_env('search_request', $search_request);
106$OUTPUT->set_env('messagecount', $count);
107$OUTPUT->set_env('pagecount', $pages);
108$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($count, 1));
109$OUTPUT->send();
110
111?>
Note: See TracBrowser for help on using the repository browser.