From 0bcaaaa9b91f48d0da3a5e521976aeef9d01042e Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Fri, 3 Apr 2015 17:04:41 +1030 Subject: [PATCH] Add an event to modify search queries --- src/Core/Events/SearchWillBePerformed.php | 16 ++++++++++++++++ .../Search/Discussions/DiscussionSearcher.php | 11 +++++++---- src/Core/Search/Users/UserSearcher.php | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 src/Core/Events/SearchWillBePerformed.php diff --git a/src/Core/Events/SearchWillBePerformed.php b/src/Core/Events/SearchWillBePerformed.php new file mode 100644 index 000000000..7e141f1bb --- /dev/null +++ b/src/Core/Events/SearchWillBePerformed.php @@ -0,0 +1,16 @@ +searcher = $searcher; + $this->criteria = $criteria; + } +} diff --git a/src/Core/Search/Discussions/DiscussionSearcher.php b/src/Core/Search/Discussions/DiscussionSearcher.php index 827ce0663..0f607c7d0 100644 --- a/src/Core/Search/Discussions/DiscussionSearcher.php +++ b/src/Core/Search/Discussions/DiscussionSearcher.php @@ -5,6 +5,7 @@ use Flarum\Core\Search\SearcherInterface; use Flarum\Core\Search\GambitManager; use Flarum\Core\Repositories\DiscussionRepositoryInterface; use Flarum\Core\Repositories\PostRepositoryInterface; +use Flarum\Core\Events\SearchWillBePerformed; class DiscussionSearcher implements SearcherInterface { @@ -46,7 +47,7 @@ class DiscussionSearcher implements SearcherInterface public function query() { - return $this->query; + return $this->query->getQuery(); } public function search(DiscussionSearchCriteria $criteria, $count = null, $start = 0, $load = []) @@ -58,10 +59,10 @@ class DiscussionSearcher implements SearcherInterface $total = $this->query->count(); - $sort = $criteria->sort; - if (empty($sort)) { - $sort = $this->defaultSort; + if (empty($criteria->sort)) { + $criteria->sort = $this->defaultSort; } + $sort = $criteria->sort; if (is_array($sort)) { foreach ($sort as $id) { $this->query->orderByRaw('id != '.(int) $id); @@ -78,6 +79,8 @@ class DiscussionSearcher implements SearcherInterface $this->query->take($count + 1); } + event(new SearchWillBePerformed($this, $criteria)); + $discussions = $this->query->get(); if ($count > 0 && $areMoreResults = $discussions->count() > $count) { diff --git a/src/Core/Search/Users/UserSearcher.php b/src/Core/Search/Users/UserSearcher.php index 51beb3793..bce48e947 100644 --- a/src/Core/Search/Users/UserSearcher.php +++ b/src/Core/Search/Users/UserSearcher.php @@ -34,7 +34,7 @@ class UserSearcher implements SearcherInterface public function query() { - return $this->query; + return $this->query->getQuery(); } public function search(UserSearchCriteria $criteria, $count = null, $start = 0, $load = [])