[COMPONENT][Search] Fix searching for actors

This commit is contained in:
Hugo Sales 2021-12-08 21:25:48 +00:00
parent 139da2c07f
commit bc3e6ac704
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0
3 changed files with 12 additions and 8 deletions

View File

@ -47,11 +47,14 @@ class Search extends FeedController
$note_qb->select('note')->from('App\Entity\Note', 'note')->orderBy('note.created', 'DESC'); $note_qb->select('note')->from('App\Entity\Note', 'note')->orderBy('note.created', 'DESC');
$actor_qb->select('actor')->from('App\Entity\Actor', 'actor')->orderBy('actor.created', 'DESC'); $actor_qb->select('actor')->from('App\Entity\Actor', 'actor')->orderBy('actor.created', 'DESC');
Event::handle('SearchQueryAddJoins', [&$note_qb, &$actor_qb]); Event::handle('SearchQueryAddJoins', [&$note_qb, &$actor_qb]);
$notes = $actors = []; $notes = $actors = [];
if (!\is_null($note_criteria)) { if (!\is_null($note_criteria)) {
$note_qb->addCriteria($note_criteria); $note_qb->addCriteria($note_criteria);
$notes = $note_qb->getQuery()->execute(); $notes = $note_qb->getQuery()->execute();
} elseif (!\is_null($actor_criteria)) { }
if (!\is_null($actor_criteria)) {
$actor_qb->addCriteria($actor_criteria); $actor_qb->addCriteria($actor_criteria);
$actors = $actor_qb->getQuery()->execute(); $actors = $actor_qb->getQuery()->execute();
} }

View File

@ -99,8 +99,8 @@ class Search extends Component
{ {
if (Formatting::startsWith($term, ['lang', 'language'])) { if (Formatting::startsWith($term, ['lang', 'language'])) {
$search_term = str_contains($term, ':') ? explode(':', $term)[1] : $term; $search_term = str_contains($term, ':') ? explode(':', $term)[1] : $term;
$note_expr = $eb->eq('language.locale', $search_term); $note_expr = $eb->startsWith('language.locale', $search_term);
$actor_expr = $eb->eq('language.locale', $search_term); $actor_expr = $eb->startsWith('language.locale', $search_term);
return Event::stop; return Event::stop;
} }
return Event::next; return Event::next;

View File

@ -80,12 +80,12 @@ abstract class Parser
$ret = Event::handle('SearchCreateExpression', [$eb, $term, $language, &$note_res, &$actor_res]); $ret = Event::handle('SearchCreateExpression', [$eb, $term, $language, &$note_res, &$actor_res]);
if (\is_null($note_res) && \is_null($actor_res)) { if (\is_null($note_res) && \is_null($actor_res)) {
throw new ServerException("No one claimed responsibility for a match term: {$term}"); throw new ServerException("No one claimed responsibility for a match term: {$term}");
} elseif (!\is_null($note_res)) { }
if (!\is_null($note_res)) {
$note_parts[] = $note_res; $note_parts[] = $note_res;
} elseif (!\is_null($actor_res)) { }
if (!\is_null($actor_res)) {
$actor_parts[] = $actor_res; $actor_parts[] = $actor_res;
} else {
throw new ServerException('Unexpected state in Search parser');
} }
$right = $left = $index + 1; $right = $left = $index + 1;
@ -109,7 +109,8 @@ abstract class Parser
if (!empty($note_parts)) { if (!empty($note_parts)) {
self::connectParts($note_parts, $note_criteria_arr, $last_op, $eb, force: true); self::connectParts($note_parts, $note_criteria_arr, $last_op, $eb, force: true);
$note_criteria = new Criteria($eb->orX(...$note_criteria_arr)); $note_criteria = new Criteria($eb->orX(...$note_criteria_arr));
} elseif (!empty($actor_parts)) { }
if (!empty($actor_parts)) {
self::connectParts($actor_parts, $actor_criteria_arr, $last_op, $eb, force: true); self::connectParts($actor_parts, $actor_criteria_arr, $last_op, $eb, force: true);
$actor_criteria = new Criteria($eb->orX(...$actor_criteria_arr)); $actor_criteria = new Criteria($eb->orX(...$actor_criteria_arr));
} }