From cc7550fbf47d939efd5b241baeb08e73032af316 Mon Sep 17 00:00:00 2001
From: Cyril Vazquez <cyril.vazquez@maarch.org>
Date: Thu, 8 Jun 2023 15:29:57 +0200
Subject: [PATCH] fix/22668 Transformation for ArchivalProfile
 ArchiveUnitProfile and ArchivalAgreement

---
 .../xslt/restitution_v02totransfer_v20.xsl    |  9 +++--
 bundle/seda2/Connectors/Seda02Restitution.php | 34 +++++++++++--------
 2 files changed, 27 insertions(+), 16 deletions(-)

diff --git a/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl b/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl
index 8c683ccc..263c66c0 100644
--- a/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl
+++ b/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl
@@ -60,7 +60,7 @@
                     <xsl:apply-templates select="//seda:ArchiveRestitution/seda:Archive"/>
                 </DescriptiveMetadata>
                 <ManagementMetadata>
-                    <xsl:if test="seda:Archive/seda:ArchivalProfile">
+                    <!--xsl:if test="seda:Archive/seda:ArchivalProfile">
                         <ArchivalProfile>
                             <xsl:attribute name="schemeAgencyName">
                                 <xsl:value-of
@@ -72,7 +72,7 @@
                             </xsl:attribute>
                             <xsl:value-of select="seda:Archive/seda:ArchivalProfile"/>
                         </ArchivalProfile>
-                    </xsl:if>
+                    </xsl:if-->
                 </ManagementMetadata>
             </DataObjectPackage>
 			<ArchivalAgency>
@@ -141,6 +141,11 @@
 				<xsl:text>Id</xsl:text>
 				<xsl:value-of select="seda:ArchivalAgencyArchiveIdentifier"/>
             </xsl:attribute>
+			<xsl:if test="seda:ArchivalProfile">
+                <ArchiveUnitProfile>
+					<xsl:value-of select="seda:ArchivalProfile"/>
+                </ArchiveUnitProfile>
+            </xsl:if>
             <xsl:if test="seda:AccessRestriction | seda:Appraisal">
                 <Management>
                     <xsl:apply-templates select="seda:Appraisal | seda:AccessRestriction"/>
diff --git a/bundle/seda2/Connectors/Seda02Restitution.php b/bundle/seda2/Connectors/Seda02Restitution.php
index 3e48eb61..377d3de0 100644
--- a/bundle/seda2/Connectors/Seda02Restitution.php
+++ b/bundle/seda2/Connectors/Seda02Restitution.php
@@ -77,6 +77,13 @@ class Seda02Restitution extends \bundle\medona\Connectors\Zip
         // Load CSV to get conversion between agency identifiers
         $descriptionRefController = \laabs::newController('recordsManagement/descriptionRef');
 
+        // Set ArchivalAgreement
+        $archivalAgreements = $xml2->xpath->query('/seda2:ArchiveTransfer/seda2:ArchivalAgreement');
+        if ($archivalAgreements->length > 0) {
+            $archivalAgreement = $archivalAgreements->item(0);
+            $archivalAgreement->nodeValue = $this->translate($params['translationFilesDir'].'/archivalAgreement', $archivalAgreement->nodeValue);
+        }
+
         // Set ArchivalAgency
         $archivalAgencyIdentifier = $xml2->xpath->query('/seda2:ArchiveTransfer/seda2:ArchivalAgency/seda2:Identifier')->item(0);
         $archivalAgencyIdentifier->nodeValue = $this->translate($params['translationFilesDir'].'/archivalAgency', $archivalAgencyIdentifier->nodeValue);
@@ -85,6 +92,13 @@ class Seda02Restitution extends \bundle\medona\Connectors\Zip
         $transferringAgencyIdentifier = $xml2->xpath->query('/seda2:ArchiveTransfer/seda2:TransferringAgency/seda2:Identifier')->item(0);
         $transferringAgencyIdentifier->nodeValue = $this->translate($params['translationFilesDir'].'/transferringAgency', $transferringAgencyIdentifier->nodeValue);
 
+        // Set ManagementMetadata ArchivalProfile
+        $archivalProfiles = $xml2->xpath->query('/seda2:ArchiveTransfer/seda2:DataObjectPackage/seda2:ManagementMetadata/seda2:ArchivalProfile');
+        if ($archivalProfiles->length > 0) {
+            $archivalprofile = $archivalProfiles->item(0);
+            $archivalProfile->nodeValue = $this->translate($params['translationFilesDir'].'/archivalProfile', $archivalProfile->nodeValue);
+        }
+
         $archiveUnits = $xml2->xpath->query('/seda2:ArchiveTransfer/seda2:DataObjectPackage/seda2:DescriptiveMetadata/seda2:ArchiveUnit');
         $files = [];
         $root = dirname($messagePath);
@@ -103,23 +117,15 @@ class Seda02Restitution extends \bundle\medona\Connectors\Zip
             }
 
             // Convert profiles
-            $archivalProfileIdentifiers = $xml2->xpath->query('.//seda2:Content/seda2:archivalProfile/seda2:Identifier', $archiveUnit);
-            foreach ($archivalProfileIdentifiers as $archivalProfileIdentifier) {
-                if (!isset($archivalProfiles[$archivalProfileIdentifier->nodeValue])) {
-                    $archivalProfiles[$archivalProfileIdentifier->nodeValue] = $this->translate($params['translationFilesDir'].'/archivalProfile', $archivalProfileIdentifier->nodeValue);
+            $archiveUnitProfiles = $xml2->xpath->query('./seda2:ArchiveUnitProfile', $archiveUnit);
+            if ($archiveUnitProfiles->length > 0) {
+                $archiveUnitProfile = $archiveUnitProfiles->item(0);
+                if (!isset($archivalProfiles[$archiveUnitProfile->nodeValue])) {
+                    $archivalProfiles[$archiveUnitProfile->nodeValue] = $this->translate($params['translationFilesDir'].'/archivalProfile', $archiveUnitProfile->nodeValue);
                 }
-                $archivalProfileIdentifier->nodeValue = $archivalProfiles[$archivalProfileIdentifier->nodeValue];
+                $archiveUnitProfile->nodeValue = $archivalProfiles[$archiveUnitProfile->nodeValue];
             }
             
-            // Convert archival Agreement
-            $archivalAgreementIdentifiers = $xml2->xpath->query('.//seda2:Content/seda2:archivalAgreement/seda2:Identifier', $archiveUnit);
-            foreach ($archivalAgreementIdentifiers as $archivalAgreementIdentifier) {
-                if (!isset($archivalAgreements[$archivalAgreementIdentifier->nodeValue])) {
-                    $archivalAgreements[$archivalAgreementIdentifier->nodeValue] = $this->translate($params['translationFilesDir'].'/archivalAgreement', $archivalAgreementIdentifier->nodeValue);
-                }
-                $archivalAgreementIdentifier->nodeValue = $archivalAgreements[$archivalAgreementIdentifier->nodeValue];
-            }
-
             // Get binary data objects filename, MessageDigest and Size
             $archiveUnitId = $archiveUnit->getAttribute('id');
             $dirname = substr($archiveUnitId, 2);
-- 
GitLab