From 244cad07e9da95ccb03b399857c773340cb4add8 Mon Sep 17 00:00:00 2001 From: Kaitlin Newson Date: Wed, 12 Feb 2025 14:13:03 -0400 Subject: [PATCH] pkp/pkp-lib#10922 fix handling for identification codes --- .../filter/MonographONIX30XmlFilter.php | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/plugins/importexport/onix30/filter/MonographONIX30XmlFilter.php b/plugins/importexport/onix30/filter/MonographONIX30XmlFilter.php index 0ca2dce1b2..bfd9c5631a 100644 --- a/plugins/importexport/onix30/filter/MonographONIX30XmlFilter.php +++ b/plugins/importexport/onix30/filter/MonographONIX30XmlFilter.php @@ -105,19 +105,9 @@ public function createSubmissionNode(DOMDocument $doc, DOMElement $rootNode, Sub { $publicationFormats = $submission->getCurrentPublication()->getData('publicationFormats'); - // Collect identifiers for all publication formats to connect related products - $identificationCodes = []; - foreach ($publicationFormats as $publicationFormat) { - $pubIdentificationCodes = $publicationFormat->getIdentificationCodes(); - $pubId = $publicationFormat->getId(); - while ($code = $pubIdentificationCodes->next()) { - $identificationCodes[$pubId][$code->getCode()] = $code->getValue(); - } - } - // Append all publication formats as Product nodes. foreach ($publicationFormats as $publicationFormat) { - $rootNode->appendChild($this->createProductNode($doc, $submission, $publicationFormat, $identificationCodes)); + $rootNode->appendChild($this->createProductNode($doc, $submission, $publicationFormat)); } } @@ -168,7 +158,7 @@ public function createHeaderNode($doc) * @throws DOMException * @throws Exception */ - public function createProductNode(DOMDocument $doc, Submission $submission, PublicationFormat $publicationFormat, array $identificationCodes): DOMElement + public function createProductNode(DOMDocument $doc, Submission $submission, PublicationFormat $publicationFormat): DOMElement { /** @var Onix30ExportDeployment $deployment */ $deployment = $this->getDeployment(); @@ -192,6 +182,19 @@ public function createProductNode(DOMDocument $doc, Submission $submission, Publ $identifierGiven = false; + $publication = $submission->getCurrentPublication(); + $publicationFormats = $publication->getData('publicationFormats'); + + // Collect identifiers for all publication formats to connect related products (see Related Material) + $identificationCodes = []; + foreach ($publicationFormats as $pubFormat) { + $pubIdentificationCodes = $pubFormat->getIdentificationCodes(); + $pubId = $pubFormat->getId(); + while ($code = $pubIdentificationCodes->next()) { + $identificationCodes[$pubId][$code->getCode()] = $code->getValue(); + } + } + if (array_key_exists($publicationFormat->getId(), $identificationCodes)) { foreach ($identificationCodes[$publicationFormat->getId()] as $code => $value) { $productIdentifierNode = $doc->createElementNS($deployment->getNamespace(), 'ProductIdentifier'); @@ -280,7 +283,6 @@ public function createProductNode(DOMDocument $doc, Submission $submission, Publ /* --- License information --- */ - $publication = $submission->getCurrentPublication(); $pubLocale = $publication->getData('locale'); if ($publication->isCCLicense()) {