예제 #1
0
 /**
  * Imports Series from Opus3 to Opus4 in alphabetical order
  *
  * @param DOMDocument $data XML-Document to be imported
  * @return void
  */
 protected function importSeries($data)
 {
     $mf = $this->config->migration->mapping->series;
     $fp = null;
     $fp = @fopen($mf, 'w');
     if (!$fp) {
         $this->logger->log("Could not create '" . $mf . "' for Series", Zend_Log::ERR);
         return;
     }
     $series = $this->transferOpusSeries($data);
     $sort_order = 1;
     foreach ($series as $s) {
         if (array_key_exists('name', $s) === false) {
             continue;
         }
         if (array_key_exists('sr_id', $s) === false) {
             continue;
         }
         $sr = new Opus_Series();
         $sr->setTitle($s['name']);
         $sr->setVisible(1);
         $sr->setSortOrder($sort_order++);
         $sr->store();
         $this->logger->log("Series imported: " . $s['name'], Zend_Log::DEBUG);
         fputs($fp, $s['sr_id'] . ' ' . $sr->getId() . "\n");
     }
     fclose($fp);
 }
예제 #2
0
 protected function checkMandatoryFields($lic, $name)
 {
     if (is_null($lic->getActive())) {
         $this->logger->log("No Attribute 'active' for " . $name, Zend_Log::ERR);
         if (!is_null($this->config->migration->licence->active)) {
             $lic->setActive($this->config->migration->licence->active);
             $this->logger->log("Set Attribute 'active' to default value '" . $lic->getActive() . "' for " . $name, Zend_Log::ERR);
         }
     }
     if (is_null($lic->getLanguage())) {
         $this->logger->log("No Attribute 'language' for " . $name, Zend_Log::ERR);
         if (!is_null($this->config->migration->licence->language)) {
             $lic->setLanguage($this->config->migration->licence->language);
             $this->logger->log("Set Attribute 'language' to default value '" . $lic->getLanguage() . "' for " . $name, Zend_Log::ERR);
         }
     }
     if (is_null($lic->getLinkLicence())) {
         $this->logger->log("No Attribute 'link_licence' for " . $name, Zend_Log::ERR);
         if (!is_null($this->config->migration->licence->link_licence)) {
             $lic->setLinkLicence($this->config->migration->licence->link_licence);
             $this->logger->log("Set Attribute 'link_licence' to default value '" . $lic->getLinkLicence() . "' for " . $name, Zend_Log::ERR);
         }
     }
     if (is_null($lic->getMimeType())) {
         $this->logger->log("No Attribute 'mime_type' for " . $name, Zend_Log::ERR);
         if (!is_null($this->config->migration->licence->mime_type)) {
             $lic->setMimeType($this->config->migration->licence->mime_type);
             $this->logger->log("Set Attribute 'mime_type' to default value '" . $lic->getMimeType() . "' for " . $name, Zend_Log::ERR);
         }
     }
     if (is_null($lic->getNameLong())) {
         $this->logger->log("No Attribute 'name_long' for " . $name, Zend_Log::ERR);
         if (!is_null($this->config->migration->licence->name_long)) {
             $lic->setNameLong($this->config->migration->licence->name_long);
             $this->logger->log("Set Attribute 'name_long' to default value '" . $lic->getNameLong() . "' for " . $name, Zend_Log::ERR);
         }
     }
     if (is_null($lic->getPodAllowed())) {
         $this->logger->log("No Attribute 'pod_allowed' for " . $name, Zend_Log::ERR);
         if (!is_null($this->config->migration->licence->pod_allowed)) {
             $lic->setPodAllowed($this->config->migration->licence->pod_allowed);
             $this->logger->log("Set Attribute 'pod_allowed' to default value '" . $lic->getPodAllowed() . "' for " . $name, Zend_Log::ERR);
         }
     }
 }
예제 #3
0
 /** Checks if File is valid to import.
  *
  * @param string
  * @return boolean
  */
 private function isValidFile($f)
 {
     // Exclude 'index.html' and files starting with '.'
     if (basename($f) == 'index.html' || strpos(basename($f), '.') === 0) {
         $this->logger->log("Skipped File '" . basename($f) . "' of OPUS3-Id '" . $this->opus3Id . "'", Zend_Log::DEBUG);
         return false;
     }
     // ERROR: File with same Basnemae already imported
     if (array_search(basename($f), $this->filesImported) !== false) {
         $this->logger->log("File '" . basename(dirname($f)) . "/" . basename($f) . "' already imported for Opus3-Id '" . $this->opus3Id . "'", Zend_Log::ERR);
         return false;
     }
     // ERROR: Filename has no Extension
     if (strrchr($f, ".") === false) {
         $this->logger->log("File '" . basename($f) . "' of OPUS3-Id '" . $this->opus3Id . "' has no extension and will be ignored", Zend_Log::ERR);
         return false;
     }
     return true;
 }
예제 #4
0
 /**
  * Get mapped Values for a document and add it
  *
  * @mappingFile: name of the Mapping-File
  * @id: original id
  * @return new id
  */
 private function getMapping($mappingFile, $id)
 {
     /* TODO: CHECK if File exists , echo ERROR and return null if not*/
     if (!is_readable($mappingFile)) {
         $this->logger->log("MappingFile '" . $mappingFile . "' is not readable", Zend_Log::ERR);
         return null;
     }
     $fp = file($mappingFile);
     $mapping = array();
     foreach ($fp as $line) {
         $values = explode(" ", $line);
         $mapping[$values[0]] = trim($values[1]);
     }
     if (array_key_exists($id, $mapping) === false) {
         unset($fp);
         return null;
     }
     unset($fp);
     return $mapping[$id];
 }
예제 #5
0
 /**
  * Imports Institutes from Opus3 to Opus4 directly (without XML)
  *
  * @param DOMDocument $data XML-Document to be imported
  * @return array List of documents that have been imported
  */
 protected function importInstitutes($data, $pColls)
 {
     $mf = $this->_config->migration->mapping->institutes;
     $fp = null;
     try {
         $fp = @fopen($mf, 'w');
         if (!$fp) {
             throw new Exception("ERROR Opus3InstituteImport: Could not create '" . $mf . "' for Institutes.\n");
         }
     } catch (Exception $e) {
         $this->_logger->log($e->getMessage(), Zend_Log::ERR);
         return;
     }
     $classification = $this->transferOpusClassification($data);
     foreach ($classification as $class) {
         if (array_key_exists('fakultaet', $class) === false || array_key_exists('name', $class) === false || array_key_exists('nr', $class) === false) {
             $invalidInstitute = '';
             foreach ($class as $key => $val) {
                 $invalidInstitute .= "[{$key}:'{$val}'] ";
             }
             $this->_logger->log("Invalid entry for Institute will be ignored: '" . $invalidInstitute, Zend_Log::ERR);
             continue;
         }
         if (array_key_exists($class['fakultaet'], $pColls) === false) {
             $this->_logger->log("No Faculty with ID '" . $class['fakultaet'] . "' for Institute with ID '" . $class['nr'] . "'", Zend_Log::ERR);
             continue;
         }
         /*  Create a Collection for Institute */
         $root = new Opus_Collection($pColls[$class['fakultaet']]);
         $coll = $root->addLastChild();
         $coll->setName($class['name']);
         $coll->setVisible(1);
         $root->store();
         $this->_logger->log("Institute imported: " . $class['name'], Zend_Log::DEBUG);
         fputs($fp, $class['nr'] . ' ' . $coll->getId() . "\n");
     }
     fclose($fp);
 }
예제 #6
0
 /**
  * Imports Collections from Opus3 to Opus4 directly (from DB-table to DB-tables)
  *
  * @param DOMDocument $data XML-Document to be imported
  * @return array List of documents that have been imported
  */
 protected function importCollectionsDirectly($data, $collRole)
 {
     $mf = $this->_config->migration->mapping->collections;
     $fp = null;
     try {
         $fp = @fopen($mf, 'w');
         if (!$fp) {
             throw new Exception("Could not create '" . $mf . "' for Collections");
         }
     } catch (Exception $e) {
         $this->_logger->log($e->getMessage(), Zend_Log::ERR);
         return;
     }
     try {
         $collections = $this->transferOpusClassification($data);
         if (count($collections) == 0) {
             throw new Exception("No Collections in XML-Dump");
         }
         // sort by lft-values
         $sortedCollections = $this->msort($collections, 'lft');
         if (count($sortedCollections) == 0) {
             // TODO: Improve error handling in case of empty collections.
             throw new Exception("Sorted collections empty");
         }
         if ($sortedCollections[0]['lft'] != 1) {
             // var_dump($sorted_collections[0]);
             // TODO: Improve error handling in case of wrong left-ids.
             throw new Exception("First left_id is not 1");
         }
         // 1 is used as a predefined key and should not be used again!
         // so lets increment all old IDs by 1
         $previousRightStack = array();
         $previousNodeStack = array();
         $newCollection = null;
         foreach ($sortedCollections as $row) {
             //echo ".";
             // case root_node
             if (count($previousRightStack) == 0) {
                 //echo "case 1: id -" . $row['coll_id'] . "-left -" . $row['lft'] . "- right -" .$row['rgt']. "\n";
                 $root = $collRole->getRootCollection();
                 $newCollection = $root->addLastChild();
                 //              $collRole->store();
                 array_push($previousNodeStack, $newCollection);
                 array_push($previousRightStack, $row['rgt']);
             } else {
                 // Throw elements from stack as long we don't have a
                 // father *or* a brother.
                 do {
                     $previousNode = array_pop($previousNodeStack);
                     $previousRight = array_pop($previousRightStack);
                     $isChild = $row['rgt'] < $previousRight;
                     $isBrother = (int) $row['lft'] === (int) $previousRight + 1;
                 } while (!$isChild && !$isBrother);
                 // same level
                 if ($isBrother) {
                     //echo "case 2: id -" . $row['coll_id'] . "-left -" . $row['lft'] . "- right -" . $row['rgt']
                     //    . "- prevright - " . $previousRight . "-\n";
                     // its a brother of previous node
                     $leftBrother = $previousNode;
                     $newCollection = $leftBrother->addNextSibling();
                     $leftBrother->store();
                     array_push($previousNodeStack, $newCollection);
                     array_push($previousRightStack, $row['rgt']);
                 } else {
                     if ($isChild) {
                         // go down one level
                         //echo "case 3: id -" . $row['coll_id'] . "-left -" . $row['lft'] . "- right -" . $row['rgt']
                         // . "- prevright - " . $previousRight . "-\n";
                         // its a child of previous node
                         $father = $previousNode;
                         $newCollection = $father->addLastChild();
                         $father->store();
                         array_push($previousNodeStack, $father);
                         array_push($previousRightStack, $previousRight);
                         array_push($previousNodeStack, $newCollection);
                         array_push($previousRightStack, $row['rgt']);
                     } else {
                         //echo "case 4: id -" . $row['coll_id'] . "-left -" . $row['lft'] . "- right -" . $row['rgt']
                         // . "- prevright - " . $previousRight . "-\n";
                         throw new Exception("Collectionstructure of id " . $row['coll_id'] . " not valid");
                     }
                 }
             }
             $newCollection->setVisible(1);
             $newCollection->setName($row['coll_name']);
             $newCollection->store();
             $previousRight = $row['rgt'];
             $this->_logger->log("Collection imported: " . $row['coll_name'], Zend_Log::DEBUG);
             fputs($fp, $row['coll_id'] . ' ' . $newCollection->getId() . "\n");
         }
     } catch (Exception $e) {
         $this->_logger->log($e->getMessage(), Zend_Log::ERR);
     }
     fclose($fp);
 }