/**
  * Import Klosterstandort table into the FLOW domain_model tabel subugoe_germaniasacra_domain_model_klosterstandort
  * @return int
  */
 public function importKlosterstandortAction()
 {
     if ($this->logger) {
         $start = microtime(true);
     }
     $csvArr = $this->citekeysAction();
     /** @var \Doctrine\DBAL\Connection $sqlConnection */
     $sqlConnection = $this->entityManager->getConnection();
     $sql = 'SELECT * FROM Klosterstandort ORDER  BY Klosternummer ASC';
     $Klosterstandorts = $sqlConnection->fetchAll($sql);
     $literaturKeyArr = [];
     if (isset($Klosterstandorts) and is_array($Klosterstandorts)) {
         $nKlosterstandort = 0;
         foreach ($Klosterstandorts as $Klosterstandort) {
             $uid = $Klosterstandort['ID_Kloster'];
             $kloster = $Klosterstandort['Klosternummer'];
             $ort = $Klosterstandort['ID_alleOrte'];
             $von_von = $Klosterstandort['Standort_von_von'];
             $von_bis = $Klosterstandort['Standort_Datum_von_bis'];
             $von_verbal = $Klosterstandort['Standort_von_Verbal'];
             $bis_von = $Klosterstandort['Standort_Datum_bis_von'];
             $bis_bis = $Klosterstandort['Standort_Datum_bis_bis'];
             $bis_verbal = $Klosterstandort['Standort_bis_Verbal'];
             $gruender = $Klosterstandort['Gruender'];
             $bemerkung = $Klosterstandort['interne_Anmerkungen'];
             $breite = $Klosterstandort['Breite'];
             $laenge = $Klosterstandort['Laenge'];
             if ($laenge > 180 || $laenge < -180) {
                 $laenge = '';
             }
             if ($breite > 90 || $breite < -90) {
                 $breite = '';
             }
             $bemerkung_standort = $Klosterstandort['BemerkungenStandort'];
             $temp_literatur_alt = $Klosterstandort['Literaturnachweise'];
             $lit = $temp_literatur_alt;
             $ortObject = $this->ortRepository->findOneByUid($ort);
             $klosterObject = $this->klosterRepository->findOneByUid($kloster);
             if (is_object($klosterObject) && $klosterObject !== null && (is_object($ortObject) && $ortObject !== null)) {
                 $KlosterstandortObject = new Klosterstandort();
                 $KlosterstandortObject->setUid($uid);
                 if (isset($kloster) && !empty($kloster)) {
                     $klosterObject = $this->klosterRepository->findOneByUid($kloster);
                     $KlosterstandortObject->setKloster($klosterObject);
                 }
                 if (isset($ort) && !empty($ort)) {
                     $ortObject = $this->ortRepository->findOneByUid($ort);
                     $KlosterstandortObject->setOrt($ortObject);
                 }
                 $KlosterstandortObject->setVon_von($von_von);
                 $KlosterstandortObject->setVon_bis($von_bis);
                 $KlosterstandortObject->setVon_verbal($von_verbal);
                 $KlosterstandortObject->setBis_von($bis_von);
                 $KlosterstandortObject->setBis_bis($bis_bis);
                 $KlosterstandortObject->setBis_verbal($bis_verbal);
                 $KlosterstandortObject->setGruender($gruender);
                 $KlosterstandortObject->setBemerkung($bemerkung);
                 $KlosterstandortObject->setBreite($breite);
                 $KlosterstandortObject->setLaenge($laenge);
                 $KlosterstandortObject->setBemerkung_standort($bemerkung_standort);
                 $KlosterstandortObject->setTemp_literatur_alt($temp_literatur_alt);
                 $this->klosterstandortRepository->add($KlosterstandortObject);
                 $this->persistenceManager->persistAll();
                 if (isset($lit) && !empty($lit)) {
                     $lit = trim($lit, "- −");
                     $lit = str_replace(" − ", " - ", $lit);
                     $lit = str_replace(" — ", " - ", $lit);
                     $lit = str_replace("\r\n", " - ", $lit);
                     $lit = str_replace("—", " - ", $lit);
                     $lit = str_replace(" – ", " - ", $lit);
                     $lit = str_replace(", S[^.]", ", S.", $lit);
                     $lit = str_replace(",S.", ", S.", $lit);
                     $lits = explode(" - ", $lit);
                     foreach ($lits as $key => $litItem) {
                         $parts = trim($litItem);
                         $parts = explode(', S.', $parts);
                         $buch = trim($parts[0]);
                         $buch = utf8_decode($buch);
                         $seite = "";
                         if (count($parts) > 1) {
                             $seite = 'S. ' . trim($parts[1], ' .');
                         }
                         $beschreibung = $seite;
                         if (array_key_exists($buch, $csvArr)) {
                             $citekey = $csvArr[$buch]['citekey'];
                             if (!empty($citekey)) {
                                 if ($citekey and $csvArr[$buch]['detail'] and $csvArr[$buch]['detail'] != '#N/A') {
                                     if ($beschreibung and !strpos($csvArr[$buch]['detail'], $beschreibung)) {
                                         $beschreibung = $csvArr[$buch]['detail'] . ', ' . $beschreibung;
                                     } else {
                                         $beschreibung = $csvArr[$buch]['detail'];
                                     }
                                 }
                                 $literaturKey = $uid . "-" . $citekey . "-" . utf8_decode($beschreibung);
                                 if (!in_array($literaturKey, $literaturKeyArr)) {
                                     array_push($literaturKeyArr, $literaturKey);
                                     $literaturObject = new Literatur();
                                     $literaturObject->setCitekey($citekey);
                                     $literaturObject->setBeschreibung($beschreibung);
                                     $this->literaturRepository->add($literaturObject);
                                     $this->persistenceManager->persistAll();
                                     $literaturUUID = $literaturObject->getUUID();
                                     $klosterhasliteraturObject = new KlosterHasLiteratur();
                                     $klosterhasliteraturObject->setKloster($klosterObject);
                                     $literaturObject = $this->literaturRepository->findByIdentifier($literaturUUID);
                                     $klosterhasliteraturObject->setLiteratur($literaturObject);
                                     $this->klosterHasLiteraturRepository->add($klosterhasliteraturObject);
                                     $this->persistenceManager->persistAll();
                                 }
                             } else {
                                 $this->importExportLogger->log('Kein citekey für das Buch ' . $buch . ' beim Kloster mit der Id = ' . $kloster . ' vorhanden.', LOG_ERR);
                             }
                         } else {
                             $this->importExportLogger->log('Entweder keine Literatur oder keine Übereinstimmung für das Kloster mit der Id = ' . $kloster . ' vorhanden.', LOG_ERR);
                             $this->importExportLogger->log('Der Buchtitel lautet: ' . utf8_encode($buch), LOG_INFO);
                         }
                     }
                 }
                 $nKlosterstandort++;
             } else {
                 if ($klosterObject === null) {
                     $this->importExportLogger->log('Entweder ist das Feld Klosternummer in Klosterstandorttabelle leer oder das Klosterobject in der Klostertabelle für das Kloster mit der Id = ' . $kloster . ' wurde nicht gefunden.', LOG_ERR);
                 }
                 if ($ortObject === null) {
                     $this->importExportLogger->log('Entweder ist das Feld ID_alleOrte in Klosterstandorttabelle leer oder das Ortobject in der Orttabelle für den Ort mit der Id = ' . $ort . ' wurde nicht gefunden.', LOG_ERR);
                 }
             }
         }
         if ($this->logger) {
             $end = microtime(true);
             $time = number_format($end - $start, 2);
             $this->logger->log('Klosterstandort import completed in ' . round($time / 60, 2) . ' minutes.');
         }
         return $nKlosterstandort;
     }
 }
 /**
  * Create a new Kloster with attached Klosterstandort/Klosterorden/Klosterliteratur/Klosterurl
  */
 public function createAction()
 {
     $bearbeitungsstatus_uuid = $this->request->getArgument('bearbeitungsstatus');
     $bearbeitungsstatus = $this->bearbeitungsstatusRepository->findByIdentifier($bearbeitungsstatus_uuid);
     $role = array_keys($this->securityContext->getAccount()->getRoles())[0];
     if (trim($role) == 'Flow.Login:Hiwi') {
         if (is_object($bearbeitungsstatus)) {
             $bearbeitungsstatusName = $bearbeitungsstatus->getName();
         }
         if (isset($bearbeitungsstatusName) && !empty($bearbeitungsstatusName)) {
             if (trim($bearbeitungsstatusName) == 'Online') {
                 $this->throwStatus(400, 'You are not allowed to set a Kloster entry online', null);
             }
         }
     }
     $lastKlosterId = $this->getLastKlosterIdAction();
     if (!empty($lastKlosterId)) {
         $kloster_uid = $lastKlosterId + 1;
         $kloster = new Kloster();
         $kloster->setUid($kloster_uid);
         $kloster->setKloster_id($kloster_uid);
         // Add Kloster
         $kloster->setKloster($this->request->getArgument('kloster_name'));
         $kloster->setPatrozinium($this->request->getArgument('patrozinium'));
         $kloster->setBemerkung($this->request->getArgument('bemerkung'));
         $kloster->setBand_seite($this->request->getArgument('band_seite'));
         $kloster->setText_gs_band($this->request->getArgument('text_gs_band'));
         $kloster->setBearbeitungsstand($this->request->getArgument('bearbeitungsstand'));
         $bearbeitungsstatus_uuid = $this->request->getArgument('bearbeitungsstatus');
         /** @var \Subugoe\GermaniaSacra\Domain\Model\Bearbeitungsstatus $bearbeitungsstatus */
         $bearbeitungsstatus = $this->bearbeitungsstatusRepository->findByIdentifier($bearbeitungsstatus_uuid);
         $kloster->setBearbeitungsstatus($bearbeitungsstatus);
         $kloster->setBearbeiter($this->bearbeiterObj);
         $personallistenstatus_uuid = $this->request->getArgument('personallistenstatus');
         /** @var \Subugoe\GermaniaSacra\Domain\Model\Personallistenstatus $personallistenstatus */
         $personallistenstatus = $this->personallistenstatusRepository->findByIdentifier($personallistenstatus_uuid);
         $kloster->setPersonallistenstatus($personallistenstatus);
         if ($this->request->hasArgument('band')) {
             $band_uuid = $this->request->getArgument('band');
             if (isset($band_uuid) && !empty($band_uuid)) {
                 /** @var \Subugoe\GermaniaSacra\Domain\Model\Band $band */
                 $band = $this->bandRepository->findByIdentifier($band_uuid);
                 $kloster->setBand($band);
             }
         }
         $this->klosterRepository->add($kloster);
         $uuid = $kloster->getUUID();
         // Add Klosterstandort
         if ($this->request->hasArgument('ort')) {
             $ortArr = $this->request->getArgument('ort');
         }
         if ($this->request->hasArgument('bistum')) {
             $bistumArr = $this->request->getArgument('bistum');
         }
         $gruenderArr = $this->request->getArgument('gruender');
         $breiteArr = $this->request->getArgument('breite');
         $laengeArr = $this->request->getArgument('laenge');
         $bemerkungArr = $this->request->getArgument('bemerkung_standort');
         $bemerkung_standortArr = $this->request->getArgument('bemerkung_standort');
         if ($this->request->hasArgument('temp_literatur_alt')) {
             $temp_literatur_altArr = $this->request->getArgument('temp_literatur_alt');
         }
         $von_vonArr = $this->request->getArgument('von_von');
         $von_bisArr = $this->request->getArgument('von_bis');
         $von_verbalArr = $this->request->getArgument('von_verbal');
         $bis_vonArr = $this->request->getArgument('bis_von');
         $bis_bisArr = $this->request->getArgument('bis_bis');
         $bis_verbalArr = $this->request->getArgument('bis_verbal');
         if ($this->request->hasArgument('wuestung')) {
             $wuestungArr = $this->request->getArgument('wuestung');
         }
         if (isset($ortArr) && !empty($ortArr)) {
             $klosterstandortNumber = count($ortArr);
         } else {
             $klosterstandortNumber = count($bistumArr);
         }
         $klosterstandortArr = [];
         for ($i = 0; $i < $klosterstandortNumber; $i++) {
             $klosterstandortArr[$i]['kloster'] = $uuid;
             if (isset($ortArr[$i]) && !empty($ortArr[$i])) {
                 $klosterstandortArr[$i]['ort'] = $ortArr[$i];
             }
             if (isset($bistumArr[$i]) && !empty($bistumArr[$i])) {
                 $klosterstandortArr[$i]['bistum'] = $bistumArr[$i];
             }
             $klosterstandortArr[$i]['gruender'] = $gruenderArr[$i];
             $klosterstandortArr[$i]['breite'] = $breiteArr[$i];
             $klosterstandortArr[$i]['laenge'] = $laengeArr[$i];
             $klosterstandortArr[$i]['bemerkung'] = $bemerkungArr[$i];
             $klosterstandortArr[$i]['bemerkung_standort'] = $bemerkung_standortArr[$i];
             if (isset($klosterstandortArr[$i]['temp_literatur_alt']) && !empty($klosterstandortArr[$i]['temp_literatur_alt'])) {
                 $klosterstandortArr[$i]['temp_literatur_alt'] = $temp_literatur_altArr[$i];
             }
             $klosterstandortArr[$i]['von_von'] = $von_vonArr[$i];
             $klosterstandortArr[$i]['von_bis'] = $von_bisArr[$i];
             $klosterstandortArr[$i]['von_verbal'] = $von_verbalArr[$i];
             $klosterstandortArr[$i]['bis_von'] = $bis_vonArr[$i];
             $klosterstandortArr[$i]['bis_bis'] = $bis_bisArr[$i];
             $klosterstandortArr[$i]['bis_verbal'] = $bis_verbalArr[$i];
             if (isset($wuestungArr[$i]) && !empty($wuestungArr[$i])) {
                 $klosterstandortArr[$i]['wuestung'] = 1;
             } else {
                 $klosterstandortArr[$i]['wuestung'] = 0;
             }
         }
         $lastKlosterstandortId = $this->getLastKlosterstandortIdAction();
         foreach ($klosterstandortArr as $ko) {
             $klosterstandort = new Klosterstandort();
             $kloster_uuid = $ko['kloster'];
             $kloster = $this->klosterRepository->findByIdentifier($kloster_uuid);
             $klosterstandort->setUid(++$lastKlosterstandortId);
             $klosterstandort->setKloster($kloster);
             if (!empty($ko['ort'])) {
                 $ort_uuid = $ko['ort'];
                 $ort = $this->ortRepository->findByIdentifier($ort_uuid);
                 $klosterstandort->setOrt($ort);
                 $ort->setWuestung($ko['wuestung']);
                 if (!empty($ko['bistum'])) {
                     $bistumObject = $this->bistumRepository->findByIdentifier($ko['bistum']);
                     if (is_object($bistumObject)) {
                         $ort->setBistum($bistumObject);
                     }
                 }
                 $this->ortRepository->update($ort);
             }
             $klosterstandort->setGruender($ko['gruender']);
             $klosterstandort->setBreite($ko['breite']);
             $klosterstandort->setLaenge($ko['laenge']);
             $klosterstandort->setBemerkung($ko['bemerkung']);
             $klosterstandort->setBemerkung_standort($ko['bemerkung_standort']);
             if (isset($ko['temp_literatur_alt']) && !empty($ko['temp_literatur_alt'])) {
                 $klosterstandort->setTemp_literatur_alt($ko['temp_literatur_alt']);
             }
             $klosterstandort->setVon_von($ko['von_von']);
             $klosterstandort->setVon_bis($ko['von_bis']);
             $klosterstandort->setVon_verbal($ko['von_verbal']);
             $klosterstandort->setBis_von($ko['bis_von']);
             $klosterstandort->setBis_bis($ko['bis_bis']);
             $klosterstandort->setBis_verbal($ko['bis_verbal']);
             $this->klosterstandortRepository->add($klosterstandort);
         }
         // Add Orden
         $ordenArr = $this->request->getArgument('orden');
         $orden_von_vonArr = $this->request->getArgument('orden_von_von');
         $orden_von_bisArr = $this->request->getArgument('orden_von_bis');
         $orden_von_verbalArr = $this->request->getArgument('orden_von_verbal');
         $orden_bis_vonArr = $this->request->getArgument('orden_bis_von');
         $orden_bis_bisArr = $this->request->getArgument('orden_bis_bis');
         $orden_bis_verbalArr = $this->request->getArgument('orden_bis_verbal');
         $klosterstatusArr = $this->request->getArgument('klosterstatus');
         $bemerkung_ordenArr = $this->request->getArgument('bemerkung_orden');
         $klosterordenNumber = count($ordenArr);
         $klosterordenArr = [];
         for ($i = 0; $i < $klosterordenNumber; $i++) {
             $klosterordenArr[$i]['kloster'] = $uuid;
             $klosterordenArr[$i]['orden'] = $ordenArr[$i];
             $klosterordenArr[$i]['klosterstatus'] = $klosterstatusArr[$i];
             $klosterordenArr[$i]['bemerkung_orden'] = $bemerkung_ordenArr[$i];
             $klosterordenArr[$i]['orden_von_von'] = $orden_von_vonArr[$i];
             $klosterordenArr[$i]['orden_von_bis'] = $orden_von_bisArr[$i];
             $klosterordenArr[$i]['orden_von_verbal'] = $orden_von_verbalArr[$i];
             $klosterordenArr[$i]['orden_bis_von'] = $orden_bis_vonArr[$i];
             $klosterordenArr[$i]['orden_bis_bis'] = $orden_bis_bisArr[$i];
             $klosterordenArr[$i]['orden_bis_verbal'] = $orden_bis_verbalArr[$i];
         }
         $lastKlosterordentId = $this->getLastKlosterordenIdAction();
         foreach ($klosterordenArr as $ko) {
             $klosterorden = new Klosterorden();
             $kloster_uuid = $ko['kloster'];
             $kloster = $this->klosterRepository->findByIdentifier($kloster_uuid);
             $klosterorden->setUid(++$lastKlosterordentId);
             $klosterorden->setKloster($kloster);
             $klosterorden->setVon_von($ko['orden_von_von']);
             $klosterorden->setVon_bis($ko['orden_von_bis']);
             $klosterorden->setVon_verbal($ko['orden_von_verbal']);
             $klosterorden->setBis_von($ko['orden_bis_von']);
             $klosterorden->setBis_bis($ko['orden_bis_bis']);
             $klosterorden->setBis_verbal($ko['orden_bis_verbal']);
             $orden_uuid = $ko['orden'];
             $orden = $this->ordenRepository->findByIdentifier($orden_uuid);
             $klosterorden->setOrden($orden);
             $klosterstatus_uuid = $ko['klosterstatus'];
             $klosterstatus = $this->klosterstatusRepository->findByIdentifier($klosterstatus_uuid);
             $klosterorden->setKlosterstatus($klosterstatus);
             $klosterorden->setBemerkung($ko['bemerkung_orden']);
             $this->klosterordenRepository->add($klosterorden);
         }
         if ($this->request->hasArgument('literatur')) {
             $literaturArr = $this->request->getArgument('literatur');
             if ($this->request->hasArgument('fundstelle')) {
                 $fundstelleArr = $this->request->getArgument('fundstelle');
             }
             if (isset($literaturArr) && !empty($literaturArr) && is_array($literaturArr)) {
                 foreach ($literaturArr as $k => $lit) {
                     if (isset($lit) && !empty($lit)) {
                         $lit = trim($lit);
                         $fundstelle = trim($fundstelleArr[$k]);
                         if (!empty($fundstelle)) {
                             $literatur = $this->literaturRepository->findByProperties(['citekey' => $lit, 'beschreibung' => $fundstelle]);
                             if (count($literatur) > 0) {
                                 $litUUID = $literatur->getFirst()->getUUID();
                                 if (!empty($litUUID)) {
                                     $literatur = $this->literaturRepository->findByIdentifier($litUUID);
                                 }
                             } else {
                                 $literatur = new Literatur();
                                 $literatur->setCitekey($lit);
                                 $literatur->setBeschreibung($fundstelle);
                                 $this->literaturRepository->add($literatur);
                             }
                             $kloster_uuid = $uuid;
                             $kloster = $this->klosterRepository->findByIdentifier($kloster_uuid);
                             if (is_object($kloster) && is_object($literatur)) {
                                 $klosterHasLiteratur = new KlosterHasLiteratur();
                                 $klosterHasLiteratur->setKloster($kloster);
                                 $klosterHasLiteratur->setLiteratur($literatur);
                                 $this->klosterHasLiteraturRepository->add($klosterHasLiteratur);
                             }
                         }
                     }
                 }
             }
         }
         // Add GND if set
         if ($this->request->hasArgument('gnd')) {
             $gnd = $this->request->getArgument('gnd');
             if (isset($gnd) && !empty($gnd)) {
                 $url = new Url();
                 $url->setUrl($gnd);
                 if ($this->request->hasArgument('gnd_label')) {
                     $gnd_label = $this->request->getArgument('gnd_label');
                 }
                 if (empty($gnd_label)) {
                     $gndid = str_replace('http://d-nb.info/gnd/', '', trim($gnd));
                     $gnd_label = $kloster . ' [' . $gndid . ']';
                 }
                 if (!empty($gnd_label)) {
                     $url->setBemerkung($gnd_label);
                 }
                 $urlTypObj = $this->urltypRepository->findOneByName('GND');
                 $url->setUrltyp($urlTypObj);
                 $this->urlRepository->add($url);
                 $urlUUID = $url->getUUID();
                 $urlObj = $this->urlRepository->findByIdentifier($urlUUID);
                 $klosterhasurl = new KlosterHasUrl();
                 $klosterhasurl->setKloster($kloster);
                 $klosterhasurl->setUrl($urlObj);
                 $this->klosterHasUrlRepository->add($klosterhasurl);
             }
         }
         // Add Wikipedia if set
         if ($this->request->hasArgument('wikipedia')) {
             $wikipedia = $this->request->getArgument('wikipedia');
             if (isset($wikipedia) && !empty($wikipedia)) {
                 $url = new Url();
                 $url->setUrl($wikipedia);
                 if ($this->request->hasArgument('wikipedia_label')) {
                     $wikipedia_label = $this->request->getArgument('wikipedia_label');
                 }
                 if (empty($wikipedia_label)) {
                     $wikipedia_label = str_replace('http://de.wikipedia.org/wiki/', '', trim($wikipedia));
                     $wikipedia_label = str_replace('_', ' ', $wikipedia_label);
                     $wikipedia_label = rawurldecode($wikipedia_label);
                 }
                 if (!empty($wikipedia_label)) {
                     $url->setBemerkung($wikipedia_label);
                 }
                 $urlTypObj = $this->urltypRepository->findOneByName('Wikipedia');
                 $url->setUrltyp($urlTypObj);
                 $this->urlRepository->add($url);
                 $urlUUID = $url->getUUID();
                 $urlObj = $this->urlRepository->findByIdentifier($urlUUID);
                 $klosterhasurl = new KlosterHasUrl();
                 $klosterhasurl->setKloster($kloster);
                 $klosterhasurl->setUrl($urlObj);
                 $this->klosterHasUrlRepository->add($klosterhasurl);
             }
         }
         // Add Url if set
         if ($this->request->hasArgument('url')) {
             $urlArr = $this->request->getArgument('url');
             if (isset($urlArr) && $urlArr !== []) {
                 if ($this->request->hasArgument('url_typ')) {
                     $urlTypArr = $this->request->getArgument('url_typ');
                 }
                 if ($this->request->hasArgument('links_label')) {
                     $linksLabelArr = $this->request->getArgument('links_label');
                 }
                 if (isset($urlArr) && !empty($urlArr) && (isset($urlTypArr) && !empty($urlTypArr))) {
                     foreach ($urlArr as $k => $url) {
                         if (!empty($url)) {
                             $urlObj = new Url();
                             $urlObj->setUrl($url);
                             $urlTypObj = $this->urltypRepository->findByIdentifier($urlTypArr[$k]);
                             $urlTyp = $urlTypObj->getName();
                             $urlObj->setUrltyp($urlTypObj);
                             if (isset($linksLabelArr[$k]) && !empty($linksLabelArr[$k])) {
                                 $urlObj->setBemerkung($linksLabelArr[$k]);
                             } else {
                                 $urlObj->setBemerkung($urlTyp);
                             }
                             $this->urlRepository->add($urlObj);
                             $klosterhasurlObj = new KlosterHasUrl();
                             $klosterhasurlObj->setKloster($kloster);
                             $klosterhasurlObj->setUrl($urlObj);
                             $this->klosterHasUrlRepository->add($klosterhasurlObj);
                         }
                     }
                 }
             }
         }
         $this->throwStatus(201, null, null);
     } else {
         $this->throwStatus(400, 'Kloster id could not be set', null);
     }
 }