Fixes flarum/core#2168 negated tags not working (#88)

orWhereIn doesn't have the $not parameter and the argument was ignored by PHP
This commit is contained in:
Clark Winkelmann 2020-08-16 22:33:41 +02:00 committed by GitHub
parent d105879392
commit bf223071f2

View File

@ -12,6 +12,7 @@ namespace Flarum\Tags\Gambit;
use Flarum\Search\AbstractRegexGambit; use Flarum\Search\AbstractRegexGambit;
use Flarum\Search\AbstractSearch; use Flarum\Search\AbstractSearch;
use Flarum\Tags\TagRepository; use Flarum\Tags\TagRepository;
use Illuminate\Database\Query\Builder;
class TagGambit extends AbstractRegexGambit class TagGambit extends AbstractRegexGambit
{ {
@ -40,21 +41,21 @@ class TagGambit extends AbstractRegexGambit
{ {
$slugs = explode(',', trim($matches[1], '"')); $slugs = explode(',', trim($matches[1], '"'));
$search->getQuery()->where(function ($query) use ($slugs, $negate) { $search->getQuery()->where(function (Builder $query) use ($slugs, $negate) {
foreach ($slugs as $slug) { foreach ($slugs as $slug) {
if ($slug === 'untagged') { if ($slug === 'untagged') {
$query->orWhereIn('discussions.id', function ($query) { $query->whereIn('discussions.id', function (Builder $query) {
$query->select('discussion_id') $query->select('discussion_id')
->from('discussion_tag'); ->from('discussion_tag');
}, ! $negate); }, 'or', ! $negate);
} else { } else {
$id = $this->tags->getIdForSlug($slug); $id = $this->tags->getIdForSlug($slug);
$query->orWhereIn('discussions.id', function ($query) use ($id) { $query->whereIn('discussions.id', function (Builder $query) use ($id) {
$query->select('discussion_id') $query->select('discussion_id')
->from('discussion_tag') ->from('discussion_tag')
->where('tag_id', $id); ->where('tag_id', $id);
}, $negate); }, 'or', $negate);
} }
} }
}); });