From 05fb965d8ca6944f177a4abff4e7098828fb0949 Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Wed, 30 Aug 2023 17:39:25 +0200 Subject: [PATCH] Add class NodaLinkedEntityGetter for getting linked entries --- src/NodaLinkedEntityGetter.php | 120 +++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/NodaLinkedEntityGetter.php diff --git a/src/NodaLinkedEntityGetter.php b/src/NodaLinkedEntityGetter.php new file mode 100644 index 0000000..9caca00 --- /dev/null +++ b/src/NodaLinkedEntityGetter.php @@ -0,0 +1,120 @@ + + */ +declare(strict_types = 1); + +/** + * Contains a class for getting linked entities for given vocabulary data. + */ +final class NodaLinkedEntityGetter { + /** + * Returns a list of norm data repository links for an actor. + * + * @param MDMysqli $mysqli_noda DB connection. + * @param integer $persinst_id ID of the actor to get synonyms for. + * + * @return array + */ + public static function listPersinstNodaLinks(MDMysqli $mysqli_noda, int $persinst_id):array { + + $result = $mysqli_noda->query_by_stmt("SELECT `noda_source`, `noda_nrinsource` + FROM `noda` + WHERE `persinst_id` = ?", "i", $persinst_id); + + $output = []; + if ($result->num_rows !== 0) { + while ($cur = $result->fetch_row()) { + $output[] = new MDNodaLink(MDNodaRepository::fromString($cur[0]), $cur[1]); + } + } + $result->close(); + + return $output; + + } + + /** + * Returns a list of norm data repository links for a place. + * + * @param MDMysqli $mysqli_noda DB connection. + * @param integer $place_id ID of the place to get synonyms for. + * + * @return array + */ + public static function listPlaceNodaLinks(MDMysqli $mysqli_noda, int $place_id):array { + + $result = $mysqli_noda->query_by_stmt("SELECT `noda_source`, `noda_nrinsource` + FROM `noda_orte` + WHERE `ort_id` = ?", "i", $place_id); + + $output = []; + if ($result->num_rows !== 0) { + while ($cur = $result->fetch_row()) { + $output[] = new MDNodaLink(MDNodaRepository::fromString($cur[0]), $cur[1]); + } + } + $result->close(); + + return $output; + + } + + /** + * Returns a list of norm data repository links for a tag. + * + * @param MDMysqli $mysqli_noda DB connection. + * @param integer $tag_id ID of the tag to get synonyms for. + * + * @return array + */ + public static function listTagNodaLinks(MDMysqli $mysqli_noda, int $tag_id):array { + + $result = $mysqli_noda->query_by_stmt("SELECT `noda_source`, `noda_nrinsource` + FROM `noda_tag` + WHERE `tag_id` = ?", "i", $tag_id); + + $output = []; + if ($result->num_rows !== 0) { + while ($cur = $result->fetch_row()) { + $output[] = new MDNodaLink(MDNodaRepository::fromString($cur[0]), $cur[1]); + } + } + $result->close(); + + return $output; + + } + + /** + * Returns synonyms of a place. + * + * @param MDMysqli $mysqli_noda DB connection. + * @param integer $place_id ID of the place to get synonyms for. + * + * @return array + */ + public static function listPlaceSynonyms(MDMysqli $mysqli_noda, int $place_id):array { + + $result = $mysqli_noda->do_read_query("SELECT `ort_syn_main`, `ort_syn_sub` + FROM `ort_syn` + WHERE `ort_syn_main` = " . $place_id . " + OR `ort_syn_sub` = " . $place_id . " + LIMIT 1"); + + $output = []; + while ($cur = $result->fetch_row()) { + // Use keys to prevent duplicates + $id1 = (int)$cur[0]; + $id2 = (int)$cur[1]; + if ($id1 !== $place_id) $output[$id1] = true; + if ($id2 !== $place_id) $output[$id2] = true; + } + $result->close(); + + return array_keys($output); + + } +}