Initial
This commit is contained in:
94
parsers/gos.php
Normal file
94
parsers/gos.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?PHP
|
||||
/**
|
||||
* Parser for GOS XML as provided by the MBK (Berlin).
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
declare(strict_types = 1);
|
||||
|
||||
/**
|
||||
* Parse function.
|
||||
*
|
||||
* @param array<mixed> $version Instance to import into.
|
||||
* @param integer $institution_id Institution to import to.
|
||||
* @param non-empty-string $XMLFolder Folder of the XML files to import.
|
||||
* @param string $dataFolder Data folder.
|
||||
* @param integer $sammlung_id Collection ID. Optional.
|
||||
* @param boolean $visibility Import objects to be directly visible?.
|
||||
* @param boolean $insertOnly If set to true, only new objects are added,
|
||||
* old are not updated.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function parseImportXML(array $version, int $institution_id, string $XMLFolder, string $dataFolder = "", int $sammlung_id = 0, bool $visibility = false, bool $insertOnly = false) {
|
||||
|
||||
if (!is_dir(MD_IMPORTER_CONF::$import_dir_xml . "{$XMLFolder}")) throw new MDFileDoesNotExist("The folder to import from ($XMLFolder) does not exist.");
|
||||
|
||||
if (empty($dataFolder)) {
|
||||
$importImages = false;
|
||||
}
|
||||
else $importImages = true;
|
||||
|
||||
$collectionWriter = new MDCollectionWriter($version['mainDB']);
|
||||
$seriesWriter = new MDSeriesWriter($version['mainDB']);
|
||||
$literatureWriter = new MDLiteratureWriter($version['mainDB']);
|
||||
$tagWriter = new MDTagWriter($version['nodaDB']);
|
||||
|
||||
// Set up writers
|
||||
$outputHandler = new MDOutputHandler;
|
||||
$outputHandler->setVerbosity(2);
|
||||
|
||||
$objectWriter = new MDObjectWriter($version['mainDB'], $version['nodaDB'], $version['link'], $version['filepath'], $version['dataFolderLink']);
|
||||
|
||||
$startFile = 0;
|
||||
$counter = 0;
|
||||
foreach (MD_STD::scandir(MD_IMPORTER_CONF::$import_dir_xml . "{$XMLFolder}") as $xmlFile) {
|
||||
|
||||
++$counter;
|
||||
if (pathinfo($xmlFile, PATHINFO_EXTENSION) !== "xml") {
|
||||
continue;
|
||||
}
|
||||
if ($counter < $startFile) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// LIDO contains : in tag names. SimpleXML can't handle those.
|
||||
|
||||
$rawData = MD_STD::file_get_contents(MD_IMPORTER_CONF::$import_dir_xml . "{$XMLFolder}/{$xmlFile}");
|
||||
$rawData = strtr(str_replace(":", "___", str_replace("lido:", "", $rawData)), [
|
||||
"http___//" => "http://", "xmlns___" => "xmlns:", "xsi___" => "xsi:"
|
||||
]);
|
||||
|
||||
if (($xmlData = simplexml_load_string($rawData)) === false) {
|
||||
throw new Exception("XML couldn't be loaded");
|
||||
}
|
||||
|
||||
//echo "HI";
|
||||
$lidoObject = new GosParser($version['mainDB'], $version['nodaDB'],
|
||||
$version['filepath'],
|
||||
$version['language'], $institution_id,
|
||||
$xmlData, $dataFolder, $outputHandler,
|
||||
$collectionWriter,
|
||||
$seriesWriter,
|
||||
$literatureWriter,
|
||||
$tagWriter,
|
||||
$sammlung_id, $visibility,
|
||||
);
|
||||
$insertOnly = false;
|
||||
|
||||
$newObjectID = $objectWriter->writeObject($lidoObject->get_mdobject(), true, $insertOnly, $outputHandler);
|
||||
|
||||
// Sleep for a millisecond
|
||||
$outputHandler->toLog("Done with object $counter", 2);
|
||||
usleep(IMPORTER_DELAY_PER_OBJECT);
|
||||
|
||||
/*
|
||||
if ($counter === 100) {
|
||||
break;
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user