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

Last change on this file since 2046 was 2046, checked in by alec, 5 years ago
  • Use SORT for searching on servers with SORT capability
  • 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// execute IMAP search
73$result = $IMAP->search($mbox, $subject, $search, $imap_charset, $_SESSION['sort_col']);
74$count = 0;
75
76// Make sure our $result is legit..
77if (is_array($result) && $result[0] != '')
78{
79  // Get the headers
80  $result_h = $IMAP->list_headers($mbox, 1, $_SESSION['sort_col'], $_SESSION['sort_order']);
81  $count = $IMAP->messagecount();
82
83  // save search results in session
84  if (!is_array($_SESSION['search']))
85    $_SESSION['search'] = array();
86
87  // Make sure we got the headers
88  if ($result_h != NULL)
89  {
90    $_SESSION['search'][$search_request] = $IMAP->get_search_set();
91    $_SESSION['last_text_search'] = $str;
92    rcmail_js_message_list($result_h);
93    $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $count));
94  }
95}
96else
97{
98  $OUTPUT->show_message('searchnomatch', 'notice');
99  $search_request = -1;
100}
101
102// update message count display
103$pages = ceil($count/$IMAP->page_size);
104$OUTPUT->set_env('search_request', $search_request);
105$OUTPUT->set_env('messagecount', $count);
106$OUTPUT->set_env('pagecount', $pages);
107$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($count, 1));
108$OUTPUT->send();
109
110?>
Note: See TracBrowser for help on using the repository browser.