434 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			434 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?PHP
 | |
| /**
 | |
|  * Contains class NodaIDGetter.
 | |
|  *
 | |
|  * @author Joshua Ramon Enslin <joshua@museum-digital.de>
 | |
|  */
 | |
| declare(strict_types = 1);
 | |
| 
 | |
| /**
 | |
|  * Contains static functions for getting IDs for noda entries by various means.
 | |
|  */
 | |
| final class NodaIDGetter {
 | |
|     /**
 | |
|      * Returns persinst ID by entry in persinst name rewriting table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $lang        Language to check in.
 | |
|      * @param string   $name        Name of the persinst to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPersinstIDByRewrite(MDMysqli $mysqli_noda, string $lang, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $persinstRewriteResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `persinst_id`
 | |
|             FROM `persinst_rewriting`
 | |
|             WHERE `language` = ?
 | |
|                 AND `input_name` = ?
 | |
|             LIMIT 1", "ss", $lang, $name);
 | |
| 
 | |
|         if ($persinstRewriteData = $persinstRewriteResult->fetch_row()) {
 | |
|             $output = $persinstRewriteData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $persinstRewriteResult->close();
 | |
|         $persinstRewriteResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns persinst ID by entry in persinst translations table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $lang        Language to check in.
 | |
|      * @param string   $name        Name of the persinst to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPersinstIDByTransName(MDMysqli $mysqli_noda, string $lang, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $persinstByTLNameResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `persinst_id`
 | |
|             FROM `persinst_translation`
 | |
|             WHERE `trans_name` = ?
 | |
|                 AND `trans_language` = ?
 | |
|             LIMIT 2", "ss", $name, $lang);
 | |
| 
 | |
|         if ($persinstByTlData = $persinstByTLNameResult->fetch_row()) {
 | |
|             $output = $persinstByTlData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $persinstByTLNameResult->close();
 | |
|         $persinstByTLNameResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns persinst ID by entry in persinst translations table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda    Database connection.
 | |
|      * @param string   $instance       Instance in which the import was run.
 | |
|      * @param integer  $institution_id ID of the importing institution.
 | |
|      * @param string   $name           Name of the persinst to search for.
 | |
|      * @param string   $birthYear      Year of birth. Optional.
 | |
|      * @param string   $deathYear      Year of death. Optional.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPersinstIDByImportLog(MDMysqli $mysqli_noda, string $instance, int $institution_id, string $name, string $birthYear = "", string $deathYear = ""):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $lookUpName = $name . $birthYear . $deathYear;
 | |
|         $persinstByImportLogResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `persinst_id`
 | |
|             FROM `persinst_logged_imports`
 | |
|             WHERE `instance` = ?
 | |
|                 AND `institution_id` = ?
 | |
|                 AND `input_string` = ?
 | |
|             LIMIT 2", "sis", $instance, $institution_id, $lookUpName);
 | |
| 
 | |
|         if ($persinstByImportLogData = $persinstByImportLogResult->fetch_row()) {
 | |
|             $output = $persinstByImportLogData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $persinstByImportLogResult->close();
 | |
|         $persinstByImportLogResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns place ID by entry in place name rewriting table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $lang        Language to check in.
 | |
|      * @param string   $name        Name of the place to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPlaceIDByRewrite(MDMysqli $mysqli_noda, string $lang, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $placeRewriteResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `ort_id`
 | |
|             FROM `ort_rewriting`
 | |
|             WHERE `language` = ?
 | |
|                 AND `input_name` = ?
 | |
|             LIMIT 1", "ss", $lang, $name);
 | |
| 
 | |
|         if ($placeRewriteData = $placeRewriteResult->fetch_row()) {
 | |
|             $output = $placeRewriteData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $placeRewriteResult->close();
 | |
|         $placeRewriteResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns place ID by base name.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $name        Name of the place to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPlaceIDByBaseName(MDMysqli $mysqli_noda, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $placeByBaseNameResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `ort_id`
 | |
|             FROM `orte`
 | |
|             WHERE `ort_name` = ?
 | |
|             LIMIT 2", "s", $name);
 | |
| 
 | |
|         if ($placeByBaseData = $placeByBaseNameResult->fetch_row()) {
 | |
|             $output = $placeByBaseData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $placeByBaseNameResult->close();
 | |
|         $placeByBaseNameResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns place ID by entry in place translations table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $lang        Language to check in.
 | |
|      * @param string   $name        Name of the place to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPlaceIDByTransName(MDMysqli $mysqli_noda, string $lang, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $placeByTLNameResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `ort_id`
 | |
|             FROM `ort_translation`
 | |
|             WHERE `trans_name` = ?
 | |
|                 AND `trans_language` = ?
 | |
|             LIMIT 2", "ss", $name, $lang);
 | |
| 
 | |
|         if ($placeByTlData = $placeByTLNameResult->fetch_row()) {
 | |
|             $output = $placeByTlData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $placeByTLNameResult->close();
 | |
|         $placeByTLNameResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns place ID by entry in place noda table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda     Database connection.
 | |
|      * @param string   $noda_source     Language to check in.
 | |
|      * @param string   $noda_nrinsource Name of the place to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPlaceIDByNodaLink(MDMysqli $mysqli_noda, string $noda_source, string $noda_nrinsource):int {
 | |
| 
 | |
|         if (empty($noda_nrinsource)) return 0;
 | |
| 
 | |
|         $placeByNodaResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `ort_id`
 | |
|             FROM `noda_orte`
 | |
|             WHERE `noda_source` = ?
 | |
|                 AND `noda_nrinsource` = ?
 | |
|             LIMIT 2", "ss", $noda_source, $noda_nrinsource);
 | |
| 
 | |
|         if ($placeByNodaData = $placeByNodaResult->fetch_row()) {
 | |
|             $output = $placeByNodaData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $placeByNodaResult->close();
 | |
|         $placeByNodaResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns place ID by entry in place translations table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda    Database connection.
 | |
|      * @param string   $instance       Instance in which the import was run.
 | |
|      * @param integer  $institution_id ID of the importing institution.
 | |
|      * @param string   $name           Name of the place to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getPlaceIDByImportLog(MDMysqli $mysqli_noda, string $instance, int $institution_id, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $placeByImportLogResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `ort_id`
 | |
|             FROM `orte_logged_imports`
 | |
|             WHERE `instance` = ?
 | |
|                 AND `institution_id` = ?
 | |
|                 AND `input_string` = ?
 | |
|             LIMIT 2", "sis", $instance, $institution_id, $name);
 | |
| 
 | |
|         if ($placeByImportLogData = $placeByImportLogResult->fetch_row()) {
 | |
|             $output = $placeByImportLogData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $placeByImportLogResult->close();
 | |
|         $placeByImportLogResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns tag ID by entry in tag translations table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $name        Name of the tag to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getTagIDByBaseName(MDMysqli $mysqli_noda, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $tagByBaseNameResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `tag_id`
 | |
|             FROM `tag`
 | |
|             WHERE `tag_name` = ?
 | |
|             LIMIT 2", "s", $name);
 | |
| 
 | |
|         if ($tagByBaseData = $tagByBaseNameResult->fetch_row()) {
 | |
|             $output = $tagByBaseData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $tagByBaseNameResult->close();
 | |
|         $tagByBaseNameResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns tag ID by entry in tag translations table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $lang        Language to check in.
 | |
|      * @param string   $name        Name of the tag to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getTagIDByTransName(MDMysqli $mysqli_noda, string $lang, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $tagByTLNameResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `tag_id`
 | |
|             FROM `tag_translation`
 | |
|             WHERE `trans_name` = ?
 | |
|                 AND `trans_language` = ?
 | |
|             LIMIT 2", "ss", $name, $lang);
 | |
| 
 | |
|         if ($tagByTlData = $tagByTLNameResult->fetch_row()) {
 | |
|             $output = $tagByTlData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $tagByTLNameResult->close();
 | |
|         $tagByTLNameResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns tag ID by entry in tag noda table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda     Database connection.
 | |
|      * @param string   $noda_source     Language to check in.
 | |
|      * @param string   $noda_nrinsource Name of the tag to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getTagIDByNodaLink(MDMysqli $mysqli_noda, string $noda_source, string $noda_nrinsource):int {
 | |
| 
 | |
|         if (empty($noda_nrinsource)) return 0;
 | |
| 
 | |
|         $tagByNodaResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `tag_id`
 | |
|             FROM `noda_tag`
 | |
|             WHERE `noda_source` = ?
 | |
|                 AND `noda_nrinsource` = ?
 | |
|             LIMIT 2", "ss", $noda_source, $noda_nrinsource);
 | |
| 
 | |
|         if ($tagByNodaData = $tagByNodaResult->fetch_row()) {
 | |
|             $output = $tagByNodaData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $tagByNodaResult->close();
 | |
|         $tagByNodaResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns tag ID by entry in tag name rewriting table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda Database connection.
 | |
|      * @param string   $lang        Language to check in.
 | |
|      * @param string   $name        Name of the tag to search for.
 | |
|      *
 | |
|      * @return array<integer>
 | |
|      */
 | |
|     public static function getTagIDByRewrite(MDMysqli $mysqli_noda, string $lang, string $name):array {
 | |
| 
 | |
|         if (empty($name)) return [];
 | |
| 
 | |
|         $output = [];
 | |
| 
 | |
|         $tagRewriteResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `tag_id`
 | |
|             FROM `tag_rewriting`
 | |
|             WHERE `tag_language` = ?
 | |
|                 AND `input_name` = ?", "ss", $lang, $name);
 | |
| 
 | |
|         while ($tagRewriteData = $tagRewriteResult->fetch_row()) {
 | |
|             $output[] = $tagRewriteData[0];
 | |
|         }
 | |
| 
 | |
|         $tagRewriteResult->close();
 | |
|         $tagRewriteResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns tag ID by entry in tag translations table.
 | |
|      *
 | |
|      * @param MDMysqli $mysqli_noda    Database connection.
 | |
|      * @param string   $instance       Instance in which the import was run.
 | |
|      * @param integer  $institution_id ID of the importing institution.
 | |
|      * @param string   $name           Name of the tag to search for.
 | |
|      *
 | |
|      * @return integer
 | |
|      */
 | |
|     public static function getTagIDByImportLog(MDMysqli $mysqli_noda, string $instance, int $institution_id, string $name):int {
 | |
| 
 | |
|         if (empty($name)) return 0;
 | |
| 
 | |
|         $tagByImportLogResult = $mysqli_noda->query_by_stmt("
 | |
|             SELECT `tag_id`
 | |
|             FROM `tag_logged_imports`
 | |
|             WHERE `instance` = ?
 | |
|                 AND `institution_id` = ?
 | |
|                 AND `input_string` = ?
 | |
|             LIMIT 2", "sis", $instance, $institution_id, $name);
 | |
| 
 | |
|         if ($tagByImportLogData = $tagByImportLogResult->fetch_row()) {
 | |
|             $output = $tagByImportLogData[0];
 | |
|         }
 | |
|         else $output = 0;
 | |
| 
 | |
|         $tagByImportLogResult->close();
 | |
|         $tagByImportLogResult = null;
 | |
| 
 | |
|         return $output;
 | |
| 
 | |
|     }
 | |
| }
 |