[COMPONENT][Search] Add support for searching for a given actor type

This commit is contained in:
Hugo Sales 2021-12-11 22:21:31 +00:00
parent 4be226edd5
commit f6a8ee86b6
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0
2 changed files with 20 additions and 3 deletions

View File

@ -27,6 +27,7 @@ use App\Core\Event;
use App\Core\Form;
use function App\Core\I18n\_m;
use App\Core\Modules\Component;
use App\Entity\Actor;
use App\Util\Common;
use App\Util\Exception\RedirectException;
use App\Util\Formatting;
@ -147,6 +148,23 @@ class Search extends Component
} else {
$note_expr[] = $eb->eq('note.rendered', null);
}
} elseif (Formatting::startsWith($term, ['actor-types:', 'actors-incude:', 'actor-filter:'])) {
if (\is_null($actor_expr)) {
$actor_expr = [];
}
foreach ([
Actor::PERSON => ['person', 'people'],
Actor::GROUP => ['group', 'groups'],
Actor::ORGANIZATION => ['org', 'orgs', 'organization', 'organizations', 'organisation', 'organisations'],
Actor::BUSINESS => ['business', 'businesses'],
Actor::BOT => ['bot', 'bots'],
] as $type => $match) {
if (array_intersect(explode(',', $include_term), $match) !== []) {
$actor_expr[] = $eb->eq('actor.type', $type);
} else {
$actor_expr[] = $eb->neq('actor.type', $type);
}
}
}
return Event::next;
}

View File

@ -37,7 +37,6 @@ abstract class Parser
foreach ([' ' => 'orX', '|' => 'orX', '&' => 'andX'] as $op => $func) {
if ($last_op === $op || $force) {
$criteria_arr[] = $eb->{$func}(...$parts);
$note_parts = [];
break;
}
}
@ -81,13 +80,13 @@ abstract class Parser
if (\is_null($note_res) && \is_null($actor_res)) {
throw new ServerException("No one claimed responsibility for a match term: {$term}");
}
if (!\is_null($note_res)) {
if (!\is_null($note_res) && !empty($note_res)) {
if (\is_array($note_res)) {
$note_res = $eb->orX(...$note_res);
}
$note_parts[] = $note_res;
}
if (!\is_null($actor_res)) {
if (!\is_null($actor_res) && !empty($note_res)) {
if (\is_array($actor_res)) {
$actor_res = $ex->orX(...$actor_res);
}