[COMPONENT][Collection] Add mechanism for specifying the ordering of note and actor queries
This commit is contained in:
parent
45c7888676
commit
35f3781a32
@ -23,20 +23,31 @@ class Collection extends Component
|
|||||||
* Supports a variety of query terms and is used both in feeds and
|
* Supports a variety of query terms and is used both in feeds and
|
||||||
* in search. Uses query builders to allow for extension
|
* in search. Uses query builders to allow for extension
|
||||||
*/
|
*/
|
||||||
public static function query(string $query, int $page, ?string $locale = null, ?Actor $actor = null): array
|
public static function query(string $query, int $page, ?string $locale = null, ?Actor $actor = null, array $note_order_by = [], array $actor_order_by = []): array
|
||||||
{
|
{
|
||||||
$note_criteria = null;
|
$note_criteria = null;
|
||||||
$actor_criteria = null;
|
$actor_criteria = null;
|
||||||
if (!empty($query = trim($query))) {
|
if (!empty($query = trim($query))) {
|
||||||
[$note_criteria, $actor_criteria] = Parser::parse($query, $locale, $actor);
|
[$note_criteria, $actor_criteria] = Parser::parse($query, $locale, $actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
$note_qb = DB::createQueryBuilder();
|
$note_qb = DB::createQueryBuilder();
|
||||||
$actor_qb = DB::createQueryBuilder();
|
$actor_qb = DB::createQueryBuilder();
|
||||||
// TODO consider selecting note related stuff, to avoid separate queries (though they're cached, so maybe it's okay)
|
// TODO consider selecting note related stuff, to avoid separate queries (though they're cached, so maybe it's okay)
|
||||||
$note_qb->select('note')->from('App\Entity\Note', 'note')->orderBy('note.created', 'DESC')->addOrderBy('note.id', 'DESC');
|
$note_qb->select('note')->from('App\Entity\Note', 'note');
|
||||||
$actor_qb->select('actor')->from('App\Entity\Actor', 'actor')->orderBy('actor.created', 'DESC')->addOrderBy('actor.id', 'DESC');
|
$actor_qb->select('actor')->from('App\Entity\Actor', 'actor');
|
||||||
Event::handle('CollectionQueryAddJoins', [&$note_qb, &$actor_qb, $note_criteria, $actor_criteria]);
|
Event::handle('CollectionQueryAddJoins', [&$note_qb, &$actor_qb, $note_criteria, $actor_criteria]);
|
||||||
|
|
||||||
|
// Handle ordering
|
||||||
|
$note_order_by = !empty($note_order_by) ? $note_order_by : ['note.created' => 'DESC', 'note.id' => 'DESC'];
|
||||||
|
$actor_order_by = !empty($actor_order_by) ? $actor_order_by : ['actor.created' => 'DESC', 'actor.id' => 'DESC'];
|
||||||
|
foreach ($note_order_by as $field => $order) {
|
||||||
|
$note_qb->addOrderBy($field, $order);
|
||||||
|
}
|
||||||
|
foreach ($actor_order_by as $field => $order) {
|
||||||
|
$actor_qb->addOrderBy($field, $order);
|
||||||
|
}
|
||||||
|
|
||||||
$notes = [];
|
$notes = [];
|
||||||
$actors = [];
|
$actors = [];
|
||||||
if (!\is_null($note_criteria)) {
|
if (!\is_null($note_criteria)) {
|
||||||
|
@ -11,10 +11,10 @@ use Component\Collection\Collection as CollectionModule;
|
|||||||
|
|
||||||
class Collection extends Controller
|
class Collection extends Controller
|
||||||
{
|
{
|
||||||
public function query(string $query, ?string $locale = null, ?Actor $actor = null): array
|
public function query(string $query, ?string $locale = null, ?Actor $actor = null, array $note_order_by = [], array $actor_order_by = []): array
|
||||||
{
|
{
|
||||||
$actor ??= Common::actor();
|
$actor ??= Common::actor();
|
||||||
$locale ??= Common::currentLanguage()->getLocale();
|
$locale ??= Common::currentLanguage()->getLocale();
|
||||||
return CollectionModule::query($query, $this->int('page') ?? 1, $locale, $actor);
|
return CollectionModule::query($query, $this->int('page') ?? 1, $locale, $actor, $note_order_by, $actor_order_by);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user