From c77060133a17a84efa7cea467c9d3a27a38eb93c Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Tue, 29 Sep 2009 13:02:34 -0600 Subject: [PATCH] In an OR clause, 2nd element must not contain the OR search key --- .../lib/Horde/Imap/Client/Search/Query.php | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/framework/Imap_Client/lib/Horde/Imap/Client/Search/Query.php b/framework/Imap_Client/lib/Horde/Imap/Client/Search/Query.php index 9b1c6393d..5b23283cb 100644 --- a/framework/Imap_Client/lib/Horde/Imap/Client/Search/Query.php +++ b/framework/Imap_Client/lib/Horde/Imap/Client/Search/Query.php @@ -276,22 +276,26 @@ class Horde_Imap_Client_Search_Query $query = ''; + // Add AND'ed queries + if (!empty($ptr['and'])) { + foreach ($ptr['and'] as $val) { + $ret = $val->build(); + $query .= ' ' . $ret['query']; + } + } + // Add OR'ed queries if (!empty($ptr['or'])) { - foreach ($ptr['or'] as $key => $val) { + foreach ($ptr['or'] as $val) { // OR queries were not in IMAP 2 $imap4 = true; $ret = $val->build(); - $query = 'OR (' . $ret['query'] . ') ' . $query; - } - } - // Add AND'ed queries - if (!empty($ptr['and'])) { - foreach ($ptr['and'] as $key => $val) { - $ret = $val->build(); - $query .= ' ' . $ret['query']; + // First OR'd query + $query = (empty($query) && empty($cmds)) + ? trim($ret['query']) . ' ' + : 'OR (' . trim($ret['query']) . ') ' . $query; } } -- 2.11.0