mirror of
https://github.com/flarum/core.git
synced 2025-08-03 23:17:43 +02:00
Massive refactor
- Use contextual namespaces within Flarum\Core - Clean up and docblock everything - Refactor Activity/Notification blueprint stuff - Refactor Formatter stuff - Refactor Search stuff - Upgrade to JSON-API 1.0 - Removed “addedPosts” and “removedPosts” relationships from discussion API. This was used for adding/removing event posts after renaming a discussion etc. Instead we should make an additional request to get all new posts Todo: - Fix Extenders and extensions - Get rid of repository interfaces - Fix other bugs I’ve inevitably introduced
This commit is contained in:
33
src/Core/Users/Search/Gambits/FulltextGambit.php
Normal file
33
src/Core/Users/Search/Gambits/FulltextGambit.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php namespace Flarum\Core\Users\Search\Gambits;
|
||||
|
||||
use Flarum\Core\Users\UserRepositoryInterface;
|
||||
use Flarum\Core\Search\Search;
|
||||
use Flarum\Core\Search\GambitInterface;
|
||||
|
||||
class FulltextGambit implements GambitInterface
|
||||
{
|
||||
/**
|
||||
* @var UserRepositoryInterface
|
||||
*/
|
||||
protected $users;
|
||||
|
||||
/**
|
||||
* @param UserRepositoryInterface $users
|
||||
*/
|
||||
public function __construct(UserRepositoryInterface $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function apply(Search $search, $bit)
|
||||
{
|
||||
$users = $this->users->getIdsForUsername($bit, $search->getActor());
|
||||
|
||||
$search->getQuery()->whereIn('id', $users);
|
||||
|
||||
$search->setDefaultSort(['id' => $users]);
|
||||
}
|
||||
}
|
7
src/Core/Users/Search/UserSearch.php
Normal file
7
src/Core/Users/Search/UserSearch.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php namespace Flarum\Core\Users\Search;
|
||||
|
||||
use Flarum\Core\Search\Search;
|
||||
|
||||
class UserSearch extends Search
|
||||
{
|
||||
}
|
76
src/Core/Users/Search/UserSearcher.php
Normal file
76
src/Core/Users/Search/UserSearcher.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php namespace Flarum\Core\Users\Search;
|
||||
|
||||
use Flarum\Core\Search\AppliesParametersToSearch;
|
||||
use Flarum\Core\Search\GambitManager;
|
||||
use Flarum\Core\Search\SearchCriteria;
|
||||
use Flarum\Core\Search\SearchResults;
|
||||
use Flarum\Core\Users\UserRepositoryInterface;
|
||||
use Flarum\Core\Users\Events\UserSearchWillBePerformed;
|
||||
|
||||
/**
|
||||
* Takes a UserSearchCriteria object, performs a search using gambits,
|
||||
* and spits out a UserSearchResults object.
|
||||
*/
|
||||
class UserSearcher
|
||||
{
|
||||
use AppliesParametersToSearch;
|
||||
|
||||
/**
|
||||
* @var GambitManager
|
||||
*/
|
||||
protected $gambits;
|
||||
|
||||
/**
|
||||
* @var UserRepositoryInterface
|
||||
*/
|
||||
protected $users;
|
||||
|
||||
/**
|
||||
* @param GambitManager $gambits
|
||||
* @param UserRepositoryInterface $users
|
||||
*/
|
||||
public function __construct(GambitManager $gambits, UserRepositoryInterface $users)
|
||||
{
|
||||
$this->gambits = $gambits;
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SearchCriteria $criteria
|
||||
* @param int|null $limit
|
||||
* @param int $offset
|
||||
* @param array $load An array of relationships to load on the results.
|
||||
* @return SearchResults
|
||||
*/
|
||||
public function search(SearchCriteria $criteria, $limit = null, $offset = 0, array $load = [])
|
||||
{
|
||||
$actor = $criteria->actor;
|
||||
|
||||
$query = $this->users->query()->whereVisibleTo($actor);
|
||||
|
||||
// Construct an object which represents this search for users.
|
||||
// Apply gambits to it, sort, and paging criteria. Also give extensions
|
||||
// an opportunity to modify it.
|
||||
$search = new UserSearch($query->getQuery(), $actor);
|
||||
|
||||
$this->gambits->apply($search, $criteria->query);
|
||||
$this->applySort($search, $criteria->sort);
|
||||
$this->applyOffset($search, $offset);
|
||||
$this->applyLimit($search, $limit + 1);
|
||||
|
||||
event(new UserSearchWillBePerformed($search, $criteria));
|
||||
|
||||
// Execute the search query and retrieve the results. We get one more
|
||||
// results than the user asked for, so that we can say if there are more
|
||||
// results. If there are, we will get rid of that extra result.
|
||||
$users = $query->get();
|
||||
|
||||
if ($areMoreResults = ($limit > 0 && $users->count() > $limit)) {
|
||||
$users->pop();
|
||||
}
|
||||
|
||||
$users->load($load);
|
||||
|
||||
return new SearchResults($users, $areMoreResults);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user