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], '"'));
+    }
 }