mirror of
https://github.com/flarum/core.git
synced 2025-08-11 02:44:04 +02:00
feat: revamp search (#3893)
* refactor: move gambits to frontend (#3885) * refactor: move gambits to frontend * test: GambitManager * refactor: merge filterer and searcher concepts (#3892) * chore: drop remaining backend regex gambits * refactor: merge filterer & searcher concept * refactor: adapt extenders * refactor: no longer need to push gambits to `q` * refactor: filters to gambits * refactor: drop shred `Query` namespace * chore: cleanup * chore: leftover gambit references on the backend (#3894) * chore: leftover gambit references on the backend * chore: namespace * feat: search driver backend extension API (#3902) * feat: first iteration of search drivers * feat: indexer API & tweaks * feat: changes after POC driver * fix: properly fire custom observables * chore: remove debugging code * fix: phpstan * fix: custom eloquent events * chore: drop POC usage * test: indexer extender API * fix: extension searcher fails without filters * fix: phpstan * fix: frontend created gambit * feat: advanced page and localized driver settings (#3905) * feat: allow getting total search results and replacing filters (#3906) * feat: allow accessing total search results * feat: allow replacing filters * chore: phpstan
This commit is contained in:
@@ -12,6 +12,7 @@ namespace Flarum\Nicknames;
|
||||
use Flarum\Api\Serializer\UserSerializer;
|
||||
use Flarum\Extend;
|
||||
use Flarum\Nicknames\Access\UserPolicy;
|
||||
use Flarum\Search\Database\DatabaseSearchDriver;
|
||||
use Flarum\User\Event\Saving;
|
||||
use Flarum\User\Search\UserSearcher;
|
||||
use Flarum\User\User;
|
||||
@@ -52,8 +53,8 @@ return [
|
||||
(new Extend\Validator(UserValidator::class))
|
||||
->configure(AddNicknameValidation::class),
|
||||
|
||||
(new Extend\SimpleFlarumSearch(UserSearcher::class))
|
||||
->setFullTextGambit(NicknameFullTextGambit::class),
|
||||
(new Extend\SearchDriver(DatabaseSearchDriver::class))
|
||||
->setFulltext(UserSearcher::class, NicknameFullTextFilter::class),
|
||||
|
||||
(new Extend\Policy())
|
||||
->modelPolicy(User::class, UserPolicy::class),
|
||||
|
@@ -1,6 +1,9 @@
|
||||
import app from 'flarum/admin/app';
|
||||
import Alert from 'flarum/common/components/Alert';
|
||||
import Link from 'flarum/common/components/Link';
|
||||
import BasicsPage from 'flarum/admin/components/BasicsPage';
|
||||
import extractText from 'flarum/common/utils/extractText';
|
||||
import { extend } from 'flarum/common/extend';
|
||||
|
||||
app.initializers.add('flarum/nicknames', () => {
|
||||
app.extensionData
|
||||
@@ -55,4 +58,8 @@ app.initializers.add('flarum/nicknames', () => {
|
||||
},
|
||||
'start'
|
||||
);
|
||||
|
||||
extend(BasicsPage.prototype, 'driverLocale', function (locale) {
|
||||
locale.display_name['nickname'] = extractText(app.translator.trans('flarum-nicknames.admin.basics.display_name_driver_options.nickname'));
|
||||
});
|
||||
});
|
||||
|
@@ -1,5 +1,8 @@
|
||||
flarum-nicknames:
|
||||
admin:
|
||||
basics:
|
||||
display_name_driver_options:
|
||||
nickname: Nickname
|
||||
permissions:
|
||||
edit_own_nickname_label: Edit own nickname
|
||||
settings:
|
||||
|
@@ -9,19 +9,16 @@
|
||||
|
||||
namespace Flarum\Nicknames;
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* For detailed copyright and license information, please view the
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Flarum\Search\GambitInterface;
|
||||
use Flarum\Search\AbstractFulltextFilter;
|
||||
use Flarum\Search\Database\DatabaseSearchState;
|
||||
use Flarum\Search\SearchState;
|
||||
use Flarum\User\UserRepository;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class NicknameFullTextGambit implements GambitInterface
|
||||
/**
|
||||
* @extends AbstractFulltextFilter<DatabaseSearchState>
|
||||
*/
|
||||
class NicknameFullTextFilter extends AbstractFulltextFilter
|
||||
{
|
||||
public function __construct(
|
||||
protected UserRepository $users
|
||||
@@ -37,14 +34,12 @@ class NicknameFullTextGambit implements GambitInterface
|
||||
->orWhere('nickname', 'like', "{$searchValue}%");
|
||||
}
|
||||
|
||||
public function apply(SearchState $search, string $bit): bool
|
||||
public function search(SearchState $state, string $value): void
|
||||
{
|
||||
$search->getQuery()
|
||||
$state->getQuery()
|
||||
->whereIn(
|
||||
'id',
|
||||
$this->getUserSearchSubQuery($bit)
|
||||
$this->getUserSearchSubQuery($value)
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user