Aleksander Machniak
2013-12-31 f5d2eef55c89b7f1a5549704705c25fd7f0c0185
program/steps/mail/search.inc
@@ -1,14 +1,18 @@
<?php
/*
 +-----------------------------------------------------------------------+
 | steps/mail/search.inc                                                 |
 |                                                                       |
 | Search functions for rc webmail                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Mail messages search action                                         |
 +-----------------------------------------------------------------------+
 | Author: Benjamin Smith <defitro@gmail.com>                            |
 |         Thomas Bruederli <roundcube@gmail.com>                        |
@@ -41,38 +45,31 @@
$_SESSION['search_filter'] = $filter;
// Check the search string for type of search
if (preg_match("/^from:.*/i", $str))
{
if (preg_match("/^from:.*/i", $str)) {
  list(,$srch) = explode(":", $str);
  $subject['from'] = "HEADER FROM";
}
else if (preg_match("/^to:.*/i", $str))
{
else if (preg_match("/^to:.*/i", $str)) {
  list(,$srch) = explode(":", $str);
  $subject['to'] = "HEADER TO";
}
else if (preg_match("/^cc:.*/i", $str))
{
else if (preg_match("/^cc:.*/i", $str)) {
  list(,$srch) = explode(":", $str);
  $subject['cc'] = "HEADER CC";
}
else if (preg_match("/^bcc:.*/i", $str))
{
else if (preg_match("/^bcc:.*/i", $str)) {
  list(,$srch) = explode(":", $str);
  $subject['bcc'] = "HEADER BCC";
}
else if (preg_match("/^subject:.*/i", $str))
{
else if (preg_match("/^subject:.*/i", $str)) {
  list(,$srch) = explode(":", $str);
  $subject['subject'] = "HEADER SUBJECT";
}
else if (preg_match("/^body:.*/i", $str))
{
else if (preg_match("/^body:.*/i", $str)) {
  list(,$srch) = explode(":", $str);
  $subject['body'] = "BODY";
}
else if (strlen(trim($str)))
{
else if (strlen(trim($str))) {
  if ($headers) {
    foreach (explode(',', $headers) as $header) {
      if ($header == 'text') {
@@ -86,8 +83,9 @@
    }
    // save search modifiers for the current folder to user prefs
    $search_mods = $RCMAIL->config->get('search_mods', $SEARCH_MODS_DEFAULT);
        $search_mods        = rcmail_search_mods();
    $search_mods[$mbox] = array_fill_keys(array_keys($subject), 1);
    $RCMAIL->user->save_prefs(array('search_mods' => $search_mods));
  }
  else {
@@ -100,20 +98,23 @@
if (!empty($subject)) {
  $search_str .= str_repeat(' OR', count($subject)-1);
  foreach ($subject as $sub)
    foreach ($subject as $sub) {
    $search_str .= ' ' . $sub . ' ' . rcube_imap_generic::escape($search);
    }
}
$search_str  = trim($search_str);
$sort_column = rcmail_sort_column();
// execute IMAP search
if ($search_str)
if ($search_str) {
  $RCMAIL->storage->search($mbox, $search_str, $imap_charset, $sort_column);
}
// save search results in session
if (!is_array($_SESSION['search']))
if (!is_array($_SESSION['search'])) {
  $_SESSION['search'] = array();
}
if ($search_str) {
  $_SESSION['search'] = $RCMAIL->storage->get_search_set();
@@ -129,8 +130,9 @@
// Make sure we got the headers
if (!empty($result_h)) {
  rcmail_js_message_list($result_h);
  if ($search_str)
    if ($search_str) {
    $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $RCMAIL->storage->count(NULL, 'ALL')));
    }
  // remember last HIGHESTMODSEQ value (if supported)
  // we need it for flag updates in check-recent