Add an event to modify search queries

This commit is contained in:
Toby Zerner 2015-04-03 17:04:41 +10:30
parent 3d9c99ef69
commit 0bcaaaa9b9
3 changed files with 24 additions and 5 deletions

View File

@ -0,0 +1,16 @@
<?php namespace Flarum\Core\Events;
use Flarum\Core\Search\SearcherInterface;
class SearchWillBePerformed
{
public $searcher;
public $criteria;
public function __construct(SearcherInterface $searcher, $criteria)
{
$this->searcher = $searcher;
$this->criteria = $criteria;
}
}

View File

@ -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) {

View File

@ -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 = [])