From bf2c9be06640c1ce1fff6da893ddb55297069af9 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Fri, 28 Nov 2014 11:18:15 +0100 Subject: [PATCH] concatenate queries with 'or' --- lib/private/activitymanager.php | 16 ++++++++++++++-- tests/lib/activitymanager.php | 7 +++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/private/activitymanager.php b/lib/private/activitymanager.php index f31b121c8e..e0ee7c1b05 100644 --- a/lib/private/activitymanager.php +++ b/lib/private/activitymanager.php @@ -247,16 +247,28 @@ class ActivityManager implements IManager { * @return array */ function getQueryForFilter($filter) { + + $conditions = array(); + $parameters = array(); + foreach($this->extensions as $extension) { $c = $extension(); if ($c instanceof IExtension) { $result = $c->getQueryForFilter($filter); if (is_array($result)) { - return $result; + list($condition, $parameter) = $result; + if ($condition && is_array($parameter)) { + $conditions[] = $condition; + $parameters = array_merge($parameters, $parameter); + } } } } - return array(null, null); + if (empty($conditions)) { + return array(null, null); + } + + return array(' and ((' . implode(') or (', $conditions) . '))', $parameters); } } diff --git a/tests/lib/activitymanager.php b/tests/lib/activitymanager.php index 85f8320de0..0683eb6819 100644 --- a/tests/lib/activitymanager.php +++ b/tests/lib/activitymanager.php @@ -87,11 +87,14 @@ class Test_ActivityManager extends \Test\TestCase { } public function testQueryForFilter() { + $this->activityManager->registerExtension(function() { + return new SimpleExtension(); + }); $result = $this->activityManager->getQueryForFilter('filter1'); $this->assertEquals( array( - '`app` = ? and `message` like ?', - array('mail', 'ownCloud%') + ' and ((`app` = ? and `message` like ?) or (`app` = ? and `message` like ?))', + array('mail', 'ownCloud%', 'mail', 'ownCloud%') ), $result );