From 9bf14d7d9163c08796494f7d37186fa534a0b501 Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Fri, 31 Jan 2025 23:25:40 +0100 Subject: [PATCH] Add search function for getting entries in NodaIDGetter across vocabs --- src/NodaIDGetter.php | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/NodaIDGetter.php b/src/NodaIDGetter.php index a826be4..40bb0fc 100644 --- a/src/NodaIDGetter.php +++ b/src/NodaIDGetter.php @@ -999,4 +999,63 @@ final class NodaIDGetter { return 0; } + + /** + * Checks each string in a list of strings for its existence as a tag name. + * + * @param MDMysqli $mysqli_noda Database connection. + * @param string $lang Language to check in. + * @param non-empty-array $phrases List of phrases to check. + * + * @return array{count: int, tag: integer[], actor: integer[], time: integer[], place: integer[]} + */ + public static function searchEntryNamesByList(MDMysqli $mysqli_noda, string $lang, array $phrases):array { + + $output = [ + 'count' => 0, + 'tag' => [], + 'actor' => [], + 'time' => [], + 'place' => [], + ]; + + foreach ($phrases as $phrase) { + + if (($tag_id = NodaIDGetter::getTagIDByNamesAndRewrites($mysqli_noda, $lang, $phrase)) !== 0 && !in_array($tag_id, $output['tag'], true)) { + $output['tag'][] = $tag_id; + ++$output['count']; + } + else if (($place_id = NodaIDGetter::getPlaceIDByNamesAndRewrites($mysqli_noda, $lang, $phrase)) !== 0 && !in_array($place_id, $output['place'], true)) { + $output['place'][] = $place_id; + ++$output['count']; + } + else if (($persinst_id = NodaIDGetter::getPersinstIDByNamesAndRewrites($mysqli_noda, $lang, $phrase, '', '')) !== 0 && !in_array($persinst_id, $output['actor'], true)) { + $output['actor'][] = $persinst_id; + ++$output['count']; + } + else if (($time_id = NodaIDGetter::getTimeIDByNamesAndRewrites($mysqli_noda, $lang, $phrase)) !== 0 && !in_array($time_id, $output['time'], true)) { + $output['time'][] = $time_id; + ++$output['count']; + } + + } + + if (count($phrases) !== $output['count']) { + return [ + 'count' => 0, + 'tag' => [], + 'actor' => [], + 'time' => [], + 'place' => [], + ]; + } + + if (!empty($output['tag'])) sort($output['tag']); + if (!empty($output['actor'])) sort($output['actor']); + if (!empty($output['time'])) sort($output['time']); + if (!empty($output['place'])) sort($output['place']); + + return $output; + + } }