Add class NodaLinkedEntityGetter for getting linked entries
This commit is contained in:
parent
2720adf9ed
commit
05fb965d8c
120
src/NodaLinkedEntityGetter.php
Normal file
120
src/NodaLinkedEntityGetter.php
Normal file
@ -0,0 +1,120 @@
|
||||
<?PHP
|
||||
/**
|
||||
* Contains a class for getting linked entities for given vocabulary data.
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
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<MDNodaLink>
|
||||
*/
|
||||
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<MDNodaLink>
|
||||
*/
|
||||
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<MDNodaLink>
|
||||
*/
|
||||
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<int>
|
||||
*/
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user