本文整理汇总了PHP中Opus_Document::setCollection方法的典型用法代码示例。如果您正苦于以下问题:PHP Opus_Document::setCollection方法的具体用法?PHP Opus_Document::setCollection怎么用?PHP Opus_Document::setCollection使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Opus_Document
的用法示例。
在下文中一共展示了Opus_Document::setCollection方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: migrateDocuments
/**
* 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();
//.........这里部分代码省略.........