/** * Regression test for OPUSVIER-2380 and OPUSVIER-2378 */ public function testGetRecordOaiDcDoc10SubjectDdcAndDate() { $doc = new Opus_Document(10); $ddcs = array(); foreach ($doc->getCollection() as $c) { if ($c->getRoleName() == 'ddc') { $ddcs[] = $c->getNumber(); } } $this->assertContains("004", $ddcs, "testdata changed"); $this->dispatch('/oai?verb=GetRecord&metadataPrefix=oai_dc&identifier=oai::10'); $this->assertResponseCode(200); $response = $this->getResponse(); $badStrings = array("Exception", "Error", "Stacktrace", "badVerb"); $this->checkForCustomBadStringsInHtml($response->getBody(), $badStrings); $xpath = $this->prepareXpathFromResultString($response->getBody()); // Regression test for OPUSVIER-2380 (show <dc:subject>ddc:) $elements = $xpath->query('//oai_dc:dc/dc:subject[text()="ddc:004"]'); $this->assertEquals(1, $elements->length, "Unexpected count for ddc:004"); // Regression test for OPUSVIER-2378 (show <dc:date>) $elements = $xpath->query('//oai_dc:dc/dc:date'); $this->assertEquals(1, $elements->length, "Unexpected count for dc:date"); // Regression test for OPUSVIER-2378 (show <dc:date>2003) $elements = $xpath->query('//oai_dc:dc/dc:date[text()="2003"]'); $this->assertEquals(1, $elements->length, "Unexpected count for dc:date"); }
/** * Im Rahmen der Zuweisung von Dokumenten, die Collections der Collection Role * series zugeordnet sind, müssen verschiedene Konflikte behandelt werden. * * Im Folgenden werden nur Dokumente betrachtet, die mindestens einer Collection * der Collection Role series (kurz: series-Collection) zugeordnet sind. * * Fall 1 (Dokumente ohne IdentifierSerial): * Da die Bandnummer einer Schriftenreihe Opus_Series obligatorisch ist, können * Dokumente ohne IdentifierSerial nicht migriert werden. Sie verbleiben * unangetastet. Die Zuweisung(en) zu series-Collection(s) wird (werden) nicht * verändert. * * Fall 2 (Dokumente mit mehr als einem IdentifierSerial): * Da ein Dokument pro Schriftenreihe nur eine Bandnummer besitzen kann, können * Dokumente mit mehr als einem Wert für das Feld IdentifierSerial nicht * migriert werden. Sie verbleiben unangetastet. Die Zuweisung(en) zu * series-Collection(s) wird (werden) nicht verändert. * * Fall 3 (Dokumente mit einem IdentifierSerial): * Da in einer Schriftenreihe nicht zwei Dokumente mit der gleichen Bandnummer * existieren können, muss beim Zuweisen von Dokumenten darauf geachtet werden, * dass eine Bandnummer nicht mehrfach vergeben wird. * Wird versucht ein Dokument zu einer Schriftenreihe mit einer bereits * in Benutzung befindlichen Bandnummer zuzuweisen, so wird die Zuweisung * nicht durchgeführt. Die Zuweisung des Dokuments zur series-Collection wird * in diesem Fall unverändert beibehalten. * * Im Falle der erfolgreichen Zuweisung des Dokuments zu einer Schriftenreihe * wird die Verknüpfung mit der korrespondierenden series-Collection * entfernt. Außerdem wird das Feld IdentifierSerial entfernt. * * * @return array an array that contains both the number of conflicts found and * the number of documents that were successfully migrated */ private function migrateDocuments() { $numOfConflicts = 0; $numOfDocsMigrated = 0; $finder = new Opus_DocumentFinder(); $finder->setCollectionRoleId($this->seriesRole->getId()); $serialIdsInUse = array(); foreach ($finder->ids() as $docId) { $doc = new Opus_Document($docId); $serialIds = $doc->getIdentifierSerial(); $numOfSerialIds = count($serialIds); if ($numOfSerialIds == 0) { $this->logger->warn("doc #{$docId} : does not have a field IdentifierSerial -- leave it untouched"); $numOfConflicts++; continue; } if ($numOfSerialIds > 1) { $this->logger->warn("doc #{$docId} : has {$numOfSerialIds} values for field IdentifierSerial -- leave it untouched"); $numOfConflicts++; continue; } $serialId = $serialIds[0]->getValue(); $remainingCollections = array(); foreach ($doc->getCollection() as $collection) { // only consider collection in collection role series if ($collection->getRoleId() != $this->seriesRole->getId()) { array_push($remainingCollections, $collection); } else { $collectionId = $collection->getId(); if (!$collection->isRoot()) { // check for conflict if (array_key_exists($collectionId, $serialIdsInUse) && in_array($serialId, $serialIdsInUse[$collectionId])) { // conflict was found: serialId for series $collectionId already in use $this->logger->warn("doc #{$docId} : could not assign to series #{$collectionId}: value {$serialId} already in use"); $this->logger->warn("doc #{$docId} : leave assignment to collection #{$collectionId} untouched"); array_push($remainingCollections, $collection); $numOfConflicts++; } else { // no conflict $series = new Opus_Series($collectionId); $doc->addSeries($series)->setNumber($serialId); $doc->setIdentifierSerial(array()); // mark usage of serialId for collection $collectionId if (array_key_exists($collectionId, $serialIdsInUse)) { array_push($serialIdsInUse[$collectionId], $serialId); } else { $serialIdsInUse[$collectionId] = array($serialId); } $this->logger->info("doc #{$docId} : assign document to series #{$collectionId} with value {$serialId}"); $this->logger->info("doc #{$docId} : removed assignment from collection #{$collectionId}"); $this->logger->info("doc #{$docId} : removed field IdentifierSerial with value " . $serialId); $numOfDocsMigrated++; } } else { // series root collection assignment will not be migrated $this->logger->warn("doc #{$docId} : is assigned to root collection #{$collectionId} of collection role series: leave assignment untouched"); array_push($remainingCollections, $collection); $numOfConflicts++; } } } $doc->setCollection($remainingCollections); $doc->unregisterPlugin('Opus_Document_Plugin_Index'); $doc->store(); } return array('numOfConflicts' => $numOfConflicts, 'numOfDocsMigrated' => $numOfDocsMigrated); }
/** * Regression Test for OPUSVIER-2998 and OPUSVIER-2999 */ public function testPublistActionDisplaysUrlencodedFiles() { Zend_Registry::get('Zend_Config')->merge(new Zend_Config(array('plugins' => array('export' => array('publist' => array('file' => array('allow' => array('mimetype' => array('application/xhtml+xml' => 'HTML'))))))))); // explicitly re-initialize mime type config to apply changes in Zend_Config // This is necessary due to static variable in Export_Model_PublicationList // which is not reset between tests. $config = Zend_Registry::get('Zend_Config'); $this->assertTrue(isset($config->plugins->export->publist->file->allow->mimetype), 'Failed setting configuration option'); $this->assertEquals(array('application/xhtml+xml' => 'HTML'), $config->plugins->export->publist->file->allow->mimetype->toArray(), 'Failed setting configuration option'); $doc = new Opus_Document(92); $file = $doc->getFile(1); $this->assertTrue($file instanceof Opus_File, 'Test setup has changed.'); $this->assertEquals('datei mit unüblichem Namen.xhtml', $file->getPathName(), 'Test setup has changed.'); $collection = $doc->getCollection(0); $this->assertEquals('coll_visible', $collection->getNumber(), 'Test setup has changed'); $this->assertEquals(1, $collection->getVisible(), 'Test setup has changed'); $this->dispatch('/export/index/publist/role/publists/number/coll_visible'); $this->assertResponseCode(200, $this->getResponse()->getBody()); $response = $this->getResponse(); $this->assertContains(urlencode('datei mit unüblichem Namen.xhtml'), $response->getBody()); }