From c89def0d78babbaec06036c0d05001d28ccd327f Mon Sep 17 00:00:00 2001 From: Franz Liedke <franz@develophp.org> Date: Tue, 3 Jan 2017 21:22:19 +0100 Subject: [PATCH] Clean up gambit --- .../src/Core/Search/SearchServiceProvider.php | 1 + .../src/Core/Search/User/Gambit/GroupGambit.php | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/framework/core/src/Core/Search/SearchServiceProvider.php b/framework/core/src/Core/Search/SearchServiceProvider.php index aaf53a481..3f5a80065 100644 --- a/framework/core/src/Core/Search/SearchServiceProvider.php +++ b/framework/core/src/Core/Search/SearchServiceProvider.php @@ -45,6 +45,7 @@ class SearchServiceProvider extends AbstractServiceProvider $gambits->setFulltextGambit('Flarum\Core\Search\User\Gambit\FulltextGambit'); $gambits->add('Flarum\Core\Search\User\Gambit\EmailGambit'); $gambits->add('Flarum\Core\Search\User\Gambit\GroupGambit'); + $app->make('events')->fire( new ConfigureUserGambits($gambits) ); diff --git a/framework/core/src/Core/Search/User/Gambit/GroupGambit.php b/framework/core/src/Core/Search/User/Gambit/GroupGambit.php index 4d5481f0e..4f020904d 100644 --- a/framework/core/src/Core/Search/User/Gambit/GroupGambit.php +++ b/framework/core/src/Core/Search/User/Gambit/GroupGambit.php @@ -46,11 +46,11 @@ class GroupGambit extends AbstractRegexGambit throw new LogicException('This gambit can only be applied on a UserSearch'); } - $groupName = trim($matches[1], '"'); - $groupName = explode(',', $groupName); + $groupNames = $this->extractGroupNames($matches); + // TODO: Use a JOIN instead (and don't forget to remove the findByName() method again) $ids = []; - foreach ($groupName as $name) { + foreach ($groupNames as $name) { $group = $this->groups->findByName($name); if ($group && count($group->users)) { $ids = array_merge($ids, $group->users->pluck('id')->all()); @@ -59,4 +59,15 @@ class GroupGambit extends AbstractRegexGambit $search->getQuery()->whereIn('id', $ids, 'and', $negate); } + + /** + * Extract the group names from the pattern match. + * + * @param array $matches + * @return array + */ + protected function extractGroupNames(array $matches) + { + return explode(',', trim($matches[1], '"')); + } }