forked from GNUsocial/gnu-social
[COMPONENTS][Search] Slightly refactor parser, since the inline lambda was somewhat complex (and cs-fixer kept moving the comment, so doc-checker complained)
This commit is contained in:
parent
703e66fd2e
commit
8ef2d3339f
@ -27,6 +27,21 @@ use Doctrine\Common\Collections\Criteria;
|
||||
|
||||
abstract class Parser
|
||||
{
|
||||
|
||||
/**
|
||||
* Merge $parts into $criteria_arr
|
||||
*/
|
||||
private static function connectParts(array &$parts, array &$criteria_arr, string $last_op, mixed $eb, bool $force = false): void
|
||||
{
|
||||
foreach ([' ' => 'orX', '|' => 'orX', '&' => 'andX'] as $op => $func) {
|
||||
if ($last_op === $op || $force) {
|
||||
$criteria_arr[] = $eb->{$func}(...$parts);
|
||||
$note_parts = [];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse $input string into a Doctrine query Criteria
|
||||
*
|
||||
@ -53,19 +68,6 @@ abstract class Parser
|
||||
$actor_parts = [];
|
||||
$last_op = null;
|
||||
|
||||
$connect_parts = /**
|
||||
* Merge $parts into $criteria_arr
|
||||
*/
|
||||
function (array &$parts, array &$criteria_arr, bool $force = false) use ($eb, $last_op) {
|
||||
foreach ([' ' => 'orX', '|' => 'orX', '&' => 'andX'] as $op => $func) {
|
||||
if ($last_op === $op || $force) {
|
||||
$criteria_arr[] = $eb->{$func}(...$parts);
|
||||
$note_parts = [];
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for ($index = 0; $index < $lenght; ++$index) {
|
||||
$end = false;
|
||||
$match = false;
|
||||
@ -91,9 +93,9 @@ abstract class Parser
|
||||
|
||||
$right = $left = $index + 1;
|
||||
|
||||
if (!is_null($last_op) && $last_op !== $delimiter) {
|
||||
$connect_parts($note_parts, $note_criteria_arr, force: false);
|
||||
$connect_parts($actor_parts, $actor_criteria_arr, force: false);
|
||||
if (!\is_null($last_op) && $last_op !== $delimiter) {
|
||||
self::connectParts($note_parts, $note_criteria_arr, $last_op, $eb, force: false);
|
||||
self::connectParts($actor_parts, $actor_criteria_arr, $last_op, $eb, force: false);
|
||||
} else {
|
||||
$last_op = $delimiter;
|
||||
}
|
||||
@ -108,14 +110,12 @@ abstract class Parser
|
||||
|
||||
$note_criteria = $actor_criteria = null;
|
||||
if (!empty($note_parts)) {
|
||||
$connect_parts($note_parts, $note_criteria_arr, force: true);
|
||||
self::connectParts($note_parts, $note_criteria_arr, $last_op, $eb, force: true);
|
||||
$note_criteria = new Criteria($eb->orX(...$note_criteria_arr));
|
||||
} else {
|
||||
if (!empty($actor_parts)) {
|
||||
$connect_parts($actor_parts, $actor_criteria_arr, force: true);
|
||||
} elseif (!empty($actor_parts)) {
|
||||
self::connectParts($actor_parts, $actor_criteria_arr, $last_op, $eb, force: true);
|
||||
$actor_criteria = new Criteria($eb->orX(...$actor_criteria_arr));
|
||||
}
|
||||
}
|
||||
|
||||
return [$note_criteria, $actor_criteria];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user