/** * Import Kloster table into the FLOW domain_model tabel subugoe_germaniasacra_domain_model_kloster * @return int */ public function importKlosterAction() { if ($this->logger) { $start = microtime(true); } /** @var \Doctrine\DBAL\Connection $sqlConnection */ $sqlConnection = $this->entityManager->getConnection(); $tbl = 'subugoe_germaniasacra_domain_model_urltyp'; $sql = 'SELECT * FROM ' . $tbl . ' WHERE name = "Quelle"'; $urltyp = $sqlConnection->fetchAll($sql); if (count($urltyp) > 0) { $urltypUUID = $urltyp[0]['persistence_object_identifier']; } if (!isset($urltypUUID)) { $urlTypeName = "Quelle"; $urltypObject = new Urltyp(); $urltypObject->setName($urlTypeName); $this->urltypRepository->add($urltypObject); $this->persistenceManager->persistAll(); $urltypUUID = $urltypObject->getUUID(); } $sql = 'SELECT * FROM ' . $tbl . ' WHERE name = "GND"'; $gndurltyp = $sqlConnection->fetchAll($sql); if (count($gndurltyp) > 0) { $gndurltypUUID = $gndurltyp[0]['persistence_object_identifier']; } if (!isset($gndurltypUUID)) { $gndurlTypeName = "GND"; $urltypObject = new Urltyp(); $urltypObject->setName($gndurlTypeName); $this->urltypRepository->add($urltypObject); $this->persistenceManager->persistAll(); $gndurltypUUID = $urltypObject->getUUID(); } $sql = 'SELECT * FROM ' . $tbl . ' WHERE name = "Wikipedia"'; $wikiurltyp = $sqlConnection->fetchAll($sql); if (count($wikiurltyp) > 0) { $wikiurltypUUID = $wikiurltyp[0]['persistence_object_identifier']; } if (!isset($wikiurltypUUID)) { $wikiurlTypeName = "Wikipedia"; $urltypObject = new Urltyp(); $urltypObject->setName($wikiurlTypeName); $this->urltypRepository->add($urltypObject); $this->persistenceManager->persistAll(); $wikiurltypUUID = $urltypObject->getUUID(); } $sql = 'SELECT * FROM Kloster ORDER BY Klosternummer ASC'; $klosters = $sqlConnection->fetchAll($sql); if (isset($klosters) and is_array($klosters)) { $nKloster = 0; foreach ($klosters as $key => $kloster) { $uid = $kloster['Klosternummer']; $numberOfKloster = count($this->klosterRepository->findOneByKloster_id($uid)); if ($numberOfKloster == 0) { $wikipedia = $kloster['Wikipedia']; $gnd = $kloster['GND']; $hauptRessource = $kloster['HauptRessource']; $bearbeitungsstand = $kloster['Bearbeitungsstand']; $patrozinium = $kloster['Patrozinium']; $bemerkung = $kloster['Bemerkungen']; $creationdate = $kloster['Datensatz_angelegt']; $bearbeiter = trim($kloster['Bearbeiter']); $bearbeitungsstatus = trim($kloster['Status']); $personallistenstatus = trim($kloster['Personallisten']); if (!empty($bearbeiter)) { /** @var Bearbeiter $bearbeiterObject */ $bearbeiterObject = $this->bearbeiterRepository->findOneByUid($bearbeiter); if (!empty($bearbeitungsstatus)) { /** @var Bearbeitungsstatus $bearbeitungsstatusObject */ $bearbeitungsstatusObject = $this->bearbeitungsstatusRepository->findOneByName($bearbeitungsstatus); if (!empty($personallistenstatus)) { /** @var Personallistenstatus $personallistenstatusObject */ $personallistenstatusObject = $this->personallistenstatusRepository->findOneByName($personallistenstatus); $band = $kloster['GermaniaSacraBandNr']; $band_seite = $kloster['GSBandSeite']; $text_gs_band = $kloster['TextGSBand']; $kloster = $kloster['Klostername']; $klosterObject = new Kloster(); $klosterObject->setUid($uid); if (is_object($bearbeiterObject)) { $klosterObject->setBearbeiter($bearbeiterObject); } if (is_object($bearbeitungsstatusObject) and $bearbeitungsstatusObject->getName() !== null) { $klosterObject->setBearbeitungsstatus($bearbeitungsstatusObject); } else { $result = $this->bearbeitungsstatusRepository->findLastEntry(); if (count($result) === 1) { foreach ($result as $res) { $lastBearbeitungsstatusEntry = $res->getUid(); } $bearbeitungsstatusUid = $lastBearbeitungsstatusEntry + 1; } else { $bearbeitungsstatusUid = 1; } $bearbeitungsstatusObject = new Bearbeitungsstatus(); $bearbeitungsstatusObject->setUid($bearbeitungsstatusUid); $bearbeitungsstatusObject->setName($bearbeitungsstatus); $this->bearbeitungsstatusRepository->add($bearbeitungsstatusObject); $this->persistenceManager->persistAll(); $bearbeitungsstatusUUID = $bearbeitungsstatusObject->getUUID(); $bearbeitungsstatusObject = $this->bearbeitungsstatusRepository->findByIdentifier($bearbeitungsstatusUUID); $klosterObject->setBearbeitungsstatus($bearbeitungsstatusObject); $this->importExportLogger->log('Bearbeitungsstatus "' . $bearbeitungsstatus . '" fehlte in der Bearbeitungsstatustabelle. Er ist nun hinzugefügt. Kloster-uid: ' . $klosterObject->getUid(), LOG_INFO); } if (is_object($personallistenstatusObject)) { $klosterObject->setPersonallistenstatus($personallistenstatusObject); } $klosterObject->setKloster_id($uid); $klosterObject->setKloster($kloster); $klosterObject->setPatrozinium($patrozinium); $klosterObject->setBemerkung($bemerkung); if (null !== $band) { /** @var Band $bandObject */ $bandObject = $this->bandRepository->findOneByUid($band); $klosterObject->setBand($bandObject); $klosterObject->setBand_seite($band_seite); $klosterObject->setText_gs_band($text_gs_band); } $klosterObject->setBearbeitungsstand($bearbeitungsstand); $klosterObject->setcreationDate(new \DateTime($creationdate)); $this->klosterRepository->add($klosterObject); $this->persistenceManager->persistAll(); $klosterUUID = $klosterObject->getUUID(); if ($hauptRessource) { $parts = explode("#", $hauptRessource); if (count($parts) > 1) { $urlTypeName = "Quelle"; if (!isset($urltypUUID)) { $urltypObject = new Urltyp(); $urltypObject->setName($urlTypeName); $this->urltypRepository->add($urltypObject); $this->persistenceManager->persistAll(); $urltypUUID = $urltypObject->getUUID(); } foreach ($parts as $k => $value) { if (!($k % 2)) { if (!empty($value)) { $urlBemerkung = $value; } } if ($k % 2) { if (!empty($value)) { $url = $value; } } if (isset($url) && !empty($url)) { $urlObject = new Url(); $urlObject->setUrl($url); $urlObject->setBemerkung($urlBemerkung); /** @var UrlTyp $urltypObject */ $urltypObject = $this->urltypRepository->findByIdentifier($urltypUUID); $urlObject->setUrltyp($urltypObject); $this->urlRepository->add($urlObject); $this->persistenceManager->persistAll(); $urlUUID = $urlObject->getUUID(); $klosterhasurlObject = new Klosterhasurl(); /** @var Kloster $klosterObject */ $klosterObject = $this->klosterRepository->findByIdentifier($klosterUUID); $klosterhasurlObject->setKloster($klosterObject); /** @var Url $urlObject */ $urlObject = $this->urlRepository->findByIdentifier($urlUUID); $klosterhasurlObject->setUrl($urlObject); $this->klosterHasUrlRepository->add($klosterhasurlObject); $this->persistenceManager->persistAll(); } if (isset($url)) { unset($url); } } } } if (isset($gnd) && !empty($gnd)) { $gnd = str_replace("\t", " ", $gnd); $gnd = str_replace("http:// ", " ", $gnd); $gnd = str_replace(" http", ";http", $gnd); $gnd = str_replace(";", "#", $gnd); $gnds = explode("#", $gnd); if (isset($gnds) && is_array($gnds)) { $oldgnd = ""; foreach ($gnds as $gnd) { if (isset($gnd) && !empty($gnd)) { if ($gnd != $oldgnd) { $gnd = str_replace(" ", "", $gnd); $gnd = str_replace("# ", "", $gnd); $gndid = str_replace("http://d-nb.info/gnd/", "", $gnd); $gndbemerkung = $kloster . " [" . $gndid . "]"; $urlObject = new Url(); $urlObject->setUrl($gnd); $urlObject->setBemerkung($gndbemerkung); /** @var UrlTyp $gndurltypObject */ $gndurltypObject = $this->urltypRepository->findByIdentifier($gndurltypUUID); $urlObject->setUrltyp($gndurltypObject); $this->urlRepository->add($urlObject); $this->persistenceManager->persistAll(); $gndurlUUID = $urlObject->getUUID(); $oldgnd = $gnd; $klosterhasurlObject = new Klosterhasurl(); /** @var Kloster $klosterObject */ $klosterObject = $this->klosterRepository->findByIdentifier($klosterUUID); $klosterhasurlObject->setKloster($klosterObject); /** @var Url $gndurlObject */ $gndurlObject = $this->urlRepository->findByIdentifier($gndurlUUID); $klosterhasurlObject->setUrl($gndurlObject); $this->klosterHasUrlRepository->add($klosterhasurlObject); $this->persistenceManager->persistAll(); } } } } } if (isset($wikipedia) && !empty($wikipedia)) { $wikipedia = str_replace("http:// ", " ", $wikipedia); $wikipedia = str_replace(";", "#", $wikipedia); $wikipedias = explode("#", $wikipedia); if (isset($wikipedias) && is_array($wikipedias)) { $oldwikipedia = ""; foreach ($wikipedias as $wikipedia) { if (isset($wikipedia) && !empty($wikipedia)) { if ($wikipedia != $oldwikipedia) { $wikipediabemerkung = str_replace("http://de.wikipedia.org/wiki/", "", $wikipedia); $wikipediabemerkung = str_replace("_", " ", $wikipediabemerkung); $wikipediabemerkung = rawurldecode($wikipediabemerkung); $urlObject = new Url(); $urlObject->setUrl($wikipedia); $urlObject->setBemerkung($wikipediabemerkung); $wikiurltypObject = $this->urltypRepository->findByIdentifier($wikiurltypUUID); $urlObject->setUrltyp($wikiurltypObject); $this->urlRepository->add($urlObject); $this->persistenceManager->persistAll(); $wikiurlUUID = $urlObject->getUUID(); $oldwikipedia = $wikipedia; $klosterhasurlObject = new Klosterhasurl(); $klosterObject = $this->klosterRepository->findByIdentifier($klosterUUID); $klosterhasurlObject->setKloster($klosterObject); $wikiurlObject = $this->urlRepository->findByIdentifier($wikiurlUUID); $klosterhasurlObject->setUrl($wikiurlObject); $this->klosterHasUrlRepository->add($klosterhasurlObject); $this->persistenceManager->persistAll(); } } } } } } else { $this->importExportLogger->log('Personallistenstatus zum Kloster ' . $uid . ' fehlt.', LOG_ERR); } } else { $this->importExportLogger->log('Bearbeitungsstatus zum Kloster ' . $uid . ' fehlt.', LOG_ERR); if (empty($personallistenstatus)) { $this->importExportLogger->log('Personallistenstatus zum Kloster ' . $uid . ' fehlt.', LOG_ERR); } } } else { $this->importExportLogger->log('Bearbeiter zum Kloster ' . $uid . ' fehlt.', LOG_ERR); if (empty($bearbeitungsstatus)) { $this->importExportLogger->log('Bearbeitungsstatus zum Kloster ' . $uid . ' fehlt.', LOG_ERR); } if (empty($personallistenstatus)) { $this->importExportLogger->log('Personallistenstatus zum Kloster ' . $uid . ' fehlt.', LOG_ERR); } } $nKloster++; } else { $this->importExportLogger->log('Doppelter Eintrag mit der Id = ' . $uid . ' in Klostertabelle. Der 2. Eintrag wurde ausgelassen.', LOG_ERR); } if (empty($uid)) { $this->importExportLogger->log('Das Kloster ' . $kloster . ' hat keine Klosternummer.', LOG_ERR); } } if ($this->logger) { $end = microtime(true); $time = number_format($end - $start, 2); $this->logger->log('Kloster import completed in ' . round($time / 60, 2) . ' minutes.'); } return $nKloster; } }
/** Updates the list of Kloster * @FLOW\SkipCsrfProtection * @return int $status http status */ public function updateListAction() { if ($this->request->hasArgument('data')) { $klosterlist = $this->request->getArgument('data'); } if (empty($klosterlist)) { $this->throwStatus(400, 'Required data arguemnts not provided', null); } $role = array_keys($this->securityContext->getAccount()->getRoles())[0]; if (trim($role) == 'Flow.Login:Hiwi') { if (is_array($klosterlist) && !empty($klosterlist)) { $error = 0; foreach ($klosterlist as $k => $v) { $bearbeitungsstatus = $this->bearbeitungsstatusRepository->findByIdentifier($v['bearbeitungsstatus']); if (is_object($bearbeitungsstatus)) { $bearbeitungsstatusName = $bearbeitungsstatus->getName(); } if (isset($bearbeitungsstatusName) && !empty($bearbeitungsstatusName)) { if (trim($bearbeitungsstatusName) == 'Online') { $error++; } } } } if ($error > 0) { $this->throwStatus(400, 'You are not allowed to set a Kloster entry online', null); } } if (is_array($klosterlist) && !empty($klosterlist)) { foreach ($klosterlist as $k => $v) { $klosterObject = $this->klosterRepository->findByIdentifier((string) $k); $klosterObject->setKloster($v['kloster']); $bearbeitungsstatusObject = $this->bearbeitungsstatusRepository->findByIdentifier($v['bearbeitungsstatus']); $klosterObject->setBearbeitungsstatus($bearbeitungsstatusObject); $klosterObject->setBearbeitungsstand($v['bearbeitungsstand']); $this->klosterRepository->update($klosterObject); $gndAlreadyExists = false; $klosterHasUrls = $klosterObject->getKlosterHasUrls(); if (is_object($klosterHasUrls) && count($klosterHasUrls) > 0) { foreach ($klosterHasUrls as $klosterHasUrl) { $urlObject = $klosterHasUrl->getUrl(); $urlTypObject = $urlObject->getUrltyp(); $urlTyp = $urlTypObject->getName(); if ($urlTyp == "GND") { if (!empty($v['gnd'])) { $urlObject->setUrl($v['gnd']); $this->urlRepository->update($urlObject); } elseif (isset($v['gnd']) && empty($v['gnd'])) { $this->klosterHasUrlRepository->remove($klosterHasUrl); $this->urlRepository->remove($urlObject); } $gndAlreadyExists = true; } } } if (!$gndAlreadyExists) { $urlObject = new Url(); $urlObject->setUrl($v['gnd']); $gndid = str_replace('http://d-nb.info/gnd/', '', $v['gnd']); $gndbemerkung = $v['kloster'] . ' [' . $gndid . ']'; $urlObject->setBemerkung($gndbemerkung); $urlTypObj = $this->urltypRepository->findOneByName('GND'); $urlObject->setUrltyp($urlTypObj); $this->urlRepository->add($urlObject); $klosterhasurl = new KlosterHasUrl(); $klosterhasurl->setKloster($klosterObject); $klosterhasurl->setUrl($urlObject); $this->klosterHasUrlRepository->add($klosterhasurl); } } $this->persistenceManager->persistAll(); } $this->throwStatus(200, null, null); }