From: Michael M Slusarz Date: Tue, 29 Sep 2009 19:02:34 +0000 (-0600) Subject: In an OR clause, 2nd element must not contain the OR search key X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=c77060133a17a84efa7cea467c9d3a27a38eb93c;p=horde.git In an OR clause, 2nd element must not contain the OR search key --- 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; } }