From 61c07303dcec2b38947b7949de260876f5a7bfda Mon Sep 17 00:00:00 2001
From: Cyril Vazquez <cyril.vazquez@maarch.org>
Date: Fri, 4 Oct 2024 12:51:04 +0200
Subject: [PATCH] =?UTF-8?q?Fonction=20de=20simplification=20de=20l'arbre?=
 =?UTF-8?q?=20SEDA=202=20avec=20limitation=20de=20profondeur=20(r=C3=A9cur?=
 =?UTF-8?q?sivit=C3=A9)=20et=20du=20longueur=20de=20liste=20(it=C3=A9ratio?=
 =?UTF-8?q?ns)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../maarchRM/Presenter/seda2/message.php      |  30 +++
 .../Resources/view/seda2/message/archive.html | 181 +++++++++---------
 2 files changed, 120 insertions(+), 91 deletions(-)

diff --git a/presentation/maarchRM/Presenter/seda2/message.php b/presentation/maarchRM/Presenter/seda2/message.php
index c8bc90a2..65ba64b3 100644
--- a/presentation/maarchRM/Presenter/seda2/message.php
+++ b/presentation/maarchRM/Presenter/seda2/message.php
@@ -114,6 +114,8 @@ class message
                         }
                     }
                 }
+
+                $this->simplifyTree($message->object->dataObjectPackage->descriptiveMetadata);
             }
         }
 
@@ -124,4 +126,32 @@ class message
 
         return $this->view->saveHtml();
     }
+
+    protected function simplifyTree($archiveUnitContainer, $depth=1)
+    {
+        // No child node
+        if (!is_array($archiveUnitContainer->archiveUnit)) {
+            return;
+        }
+
+        // Keep only 10 child nodes
+        $childNodeCount = count($archiveUnitContainer->archiveUnit);
+        if ($childNodeCount > 10) {
+            $archiveUnitContainer->archiveUnit = array_slice($archiveUnitContainer->archiveUnit, 0, 10);
+            $archiveUnitContainer->siblingArchiveUnits = $childNodeCount - 10;
+        }
+        
+        // Keep only 4 levels 
+        if ($depth > 3) {
+            $archiveUnitContainer->archiveUnit = null;
+            $archiveUnitContainer->otherArchiveUnits = $childNodeCount;
+            return;
+        }
+        
+        // recursively apply procedure
+        $depth++;
+        foreach ($archiveUnitContainer->archiveUnit as $key => $archiveUnit) {
+            $this->simplifyTree($archiveUnit, $depth);
+        }
+    }
 }
diff --git a/presentation/maarchRM/Resources/view/seda2/message/archive.html b/presentation/maarchRM/Resources/view/seda2/message/archive.html
index 871f9aaa..7179be2d 100644
--- a/presentation/maarchRM/Resources/view/seda2/message/archive.html
+++ b/presentation/maarchRM/Resources/view/seda2/message/archive.html
@@ -11,6 +11,7 @@
         </div>
         <div id="archive[?merge $archiveCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne" style="height: 0px;">
             <div class="panel-body">
+                <?merge .content.bool() ?>
                 <div class="panel panel-warning">
                     <?merge .newId() $managementCollapsId ?>
                     <div class="panel-heading" role="tab">
@@ -173,40 +174,38 @@
                                     </dd>
                                 </span>
                                 <?merge .content.coverage.bool() ?>
-                                <?merge .newId() $coverageCollapsId ?>
-                                <div>
-                                    <div class="panel panel-warning">
-                                        <div class="panel-heading" role="tab">
-                                            <h4 class="panel-title">
-                                                <a role="button" data-toggle="collapse" href="#coverage-[?merge $coverageCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Couverture</a>
-                                            </h4>
-                                        </div>
-                                        <div id ="coverage-[?merge $coverageCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
-                                        <div class="panel-body">
-                                            <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
-                                                <?merge .content.coverage.spatial.bool() ?>
-                                                <span>
-                                                    <dt>Spatiale</dt>
-                                                    <?merge .content.coverage.spatial ?>
-                                                    <dd><?merge . ?></dd>
-                                                </span>
-                                                <?merge .content.coverage.temporal.bool() ?>
-                                                <span>
-                                                    <dt>Temporelle</dt>
-                                                    <?merge .content.coverage.temporal?>
-                                                    <dd><?merge . ?></dd>
-                                                </span>
-                                                <?merge .content.coverage.juridictional.bool() ?>
-                                                <span>
-                                                    <dt>Juridirictionnelle</dt>
-                                                    <?merge .content.coverage.juridictional?>
-                                                    <dd><?merge . ?></dd>
-                                                </span>
-                                            </dl>
-                                        </div>
+                                <div class="panel panel-warning">
+                                    <?merge .newId() $coverageCollapsId ?>
+                                    <div class="panel-heading" role="tab">
+                                        <h4 class="panel-title">
+                                            <a role="button" data-toggle="collapse" href="#coverage-[?merge $coverageCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Couverture</a>
+                                        </h4>
                                     </div>
+                                    <div id ="coverage-[?merge $coverageCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
+                                    <div class="panel-body">
+                                        <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
+                                            <?merge .content.coverage.spatial.bool() ?>
+                                            <span>
+                                                <dt>Spatiale</dt>
+                                                <?merge .content.coverage.spatial ?>
+                                                <dd><?merge . ?></dd>
+                                            </span>
+                                            <?merge .content.coverage.temporal.bool() ?>
+                                            <span>
+                                                <dt>Temporelle</dt>
+                                                <?merge .content.coverage.temporal?>
+                                                <dd><?merge . ?></dd>
+                                            </span>
+                                            <?merge .content.coverage.juridictional.bool() ?>
+                                            <span>
+                                                <dt>Juridirictionnelle</dt>
+                                                <?merge .content.coverage.juridictional?>
+                                                <dd><?merge . ?></dd>
+                                            </span>
+                                        </dl>
+                                    </div>
+                                    <br>
                                 </div>
-                                <br>
                             </div>
                             <div>
                                 <?merge .content.originatingAgency.bool() ?>
@@ -221,10 +220,9 @@
                                     <dt>Service versant</dt>
                                     <dd><?merge .content.submissionAgency.identifier.value ?></dd>
                                 </span>
-                                <br>
                                 <?merge .content.authorizedAgent.bool() ?>
-                                <?merge .newId() $authorizedAgentCollapsId ?>
                                 <div class="panel panel-warning">
+                                    <?merge .newId() $authorizedAgentCollapsId ?>
                                     <div class="panel-heading" role="tab">
                                         <h4 class="panel-title">
                                             <a role="button" data-toggle="collapse" href="#authorizedAgent-[?merge $authorizedAgentCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Titulaire des droits de propriété intellectuelle</a>
@@ -239,12 +237,11 @@
                                         </div>
                                     </div>
                                 </div>
-                                <br>
                             </div>
                             <div>
                                 <?merge .content.writer.bool() ?>
-                                <?merge .newId() $writerCollapsId ?>
                                 <div class="panel panel-warning">
+                                    <?merge .newId() $writerCollapsId ?>
                                     <div class="panel-heading" role="tab">
                                         <h4 class="panel-title">
                                             <a role="button" data-toggle="collapse" href="#writer-[?merge $writerCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Rédacteur</a>
@@ -259,12 +256,11 @@
                                         </div>
                                     </div>
                                 </div>
-                                <br>
                             </div>
                             <div>
                                 <?merge .content.addressee.bool() ?>
-                                <?merge .newId() $addresseeCollapsId ?>
                                 <div class="panel panel-warning">
+                                    <?merge .newId() $addresseeCollapsId ?>
                                     <div class="panel-heading" role="tab">
                                         <h4 class="panel-title">
                                             <a role="button" data-toggle="collapse" href="#addressee-[?merge $addresseeCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Destinataire(s) pour action</a>
@@ -279,12 +275,11 @@
                                         </div>
                                     </div>
                                 </div>
-                                <br>
                             </div>
                             <div>
                                 <?merge .content.recipient.bool() ?>
-                                <?merge .newId() $recipientCollapsId ?>
                                 <div class="panel panel-warning">
+                                    <?merge .newId() $recipientCollapsId ?>
                                     <div class="panel-heading" role="tab">
                                         <h4 class="panel-title">
                                             <a role="button" data-toggle="collapse" href="#recipient-[?merge $recipientCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Destinataire(s) pour information</a>
@@ -299,12 +294,11 @@
                                         </div>
                                     </div>
                                 </div>
-                                <br>
                             </div>
                             <div>
                                 <?merge .content.transmitter.bool() ?>
-                                <?merge .newId() $transmitterCollapsId ?>
                                 <div class="panel panel-warning">
+                                    <?merge .newId() $transmitterCollapsId ?>
                                     <div class="panel-heading" role="tab">
                                         <h4 class="panel-title">
                                             <a role="button" data-toggle="collapse" href="#transmitter-[?merge $transmitterCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Émetteur</a>
@@ -319,25 +313,22 @@
                                         </div>
                                     </div>
                                 </div>
-                                <br>
                             </div>
                             <div>
                                 <?merge .content.sender.bool() ?>
-                                <?merge .newId() $senderCollapsId ?>
-                                <div>
-                                    <div class="panel panel-warning">
-                                        <div class="panel-heading" role="tab">
-                                            <h4 class="panel-title">
-                                                <a role="button" data-toggle="collapse" href="#sender-[?merge $senderCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Éxpéditeur</a>
-                                            </h4>
-                                        </div>
-                                        <div id ="sender-[?merge $senderCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
-                                            <?merge .content.sender ?>
-                                            <div class="panel-body">
-                                                <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
-                                                    <span><?hinclude seda2/message/personOrEntityGroup.html ?><?hinclude seda2/message/businessGroup.html ?></span>
-                                                </dl>
-                                            </div>
+                                <div class="panel panel-warning">
+                                    <?merge .newId() $senderCollapsId ?>
+                                    <div class="panel-heading" role="tab">
+                                        <h4 class="panel-title">
+                                            <a role="button" data-toggle="collapse" href="#sender-[?merge $senderCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Éxpéditeur</a>
+                                        </h4>
+                                    </div>
+                                    <div id ="sender-[?merge $senderCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
+                                        <?merge .content.sender ?>
+                                        <div class="panel-body">
+                                            <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
+                                                <span><?hinclude seda2/message/personOrEntityGroup.html ?><?hinclude seda2/message/businessGroup.html ?></span>
+                                            </dl>
                                         </div>
                                     </div>
                                 </div>
@@ -394,44 +385,38 @@
                                     <dd><?merge .content.endDate ?></dd>
                                 </span>
                                 <?merge .content.signature.bool() ?>
-                                <?merge .newId() $signatureCollapsId ?>
-                                <div>
-                                    <div class="panel panel-warning">
-                                        <div class="panel-heading" role="tab">
-                                            <h4 class="panel-title">
-                                                <a role="button" data-toggle="collapse" href="#signature-[?merge $signatureCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Signature(s)</a>
-                                            </h4>
-                                        </div>
-                                        <div id ="signature-[?merge $signatureCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
-                                            <?merge .content.signature $signature ?>
-                                            <div class="panel-body">
-                                                <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
-                                                    <span><?hinclude seda2/message/signature.html ?></span>
-                                                </dl>
-                                            </div>
+                                <div class="panel panel-warning">
+                                    <?merge .newId() $signatureCollapsId ?>
+                                    <div class="panel-heading" role="tab">
+                                        <h4 class="panel-title">
+                                            <a role="button" data-toggle="collapse" href="#signature-[?merge $signatureCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Signature(s)</a>
+                                        </h4>
+                                    </div>
+                                    <div id ="signature-[?merge $signatureCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
+                                        <?merge .content.signature $signature ?>
+                                        <div class="panel-body">
+                                            <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
+                                                <span><?hinclude seda2/message/signature.html ?></span>
+                                            </dl>
                                         </div>
                                     </div>
-                                    <br>
                                 </div>
                                 <?merge .content.gps.bool() ?>
-                                <?merge .newId() $gpsCollapsId ?>
-                                <div>
-                                    <div class="panel panel-warning">
-                                        <div class="panel-heading" role="tab">
-                                            <h4 class="panel-title">
-                                                <a role="button" data-toggle="collapse" href="#gps-[?merge $gpsCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Coordonnées GPS</a>
-                                            </h4>
-                                        </div>
-                                        <div id ="gps-[?merge $gpsCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
-                                            <?merge .content.gps $gps ?>
-                                            <div class="panel-body">
-                                                <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
-                                                    <span><?hinclude seda2/message/gps.html ?></span>
-                                                </dl>
-                                            </div>
+                                <div class="panel panel-warning">
+                                    <?merge .newId() $gpsCollapsId ?>
+                                    <div class="panel-heading" role="tab">
+                                        <h4 class="panel-title">
+                                            <a role="button" data-toggle="collapse" href="#gps-[?merge $gpsCollapsId ?]" aria-expanded="true" aria-controls="collapseOne" data-translate-catalog="medona/messages">Coordonnées GPS</a>
+                                        </h4>
+                                    </div>
+                                    <div id ="gps-[?merge $gpsCollapsId ?]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
+                                        <?merge .content.gps $gps ?>
+                                        <div class="panel-body">
+                                            <dl class="dl-horizontal" data-translate-catalog="recordsManagement/messages">
+                                                <span><?hinclude seda2/message/gps.html ?></span>
+                                            </dl>
                                         </div>
                                     </div>
-                                    <br>
                                 </div>
                             </dl>
                         </div>
@@ -459,8 +444,22 @@
                         </div>
                     </div>
                 </div>
-                <br>
+                <br/>
                 <?merge .archiveUnit /seda2/message/archive.html ?>
+                
+                <?merge .siblingArchiveUnits.bool() ?>
+                <div class="alert alert-danger">
+                    <span>
+                        &nbsp;<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> <?merge .siblingArchiveUnits ?> unités d'archive supplémentaires non affichées.
+                    </span>
+                    
+                </div>
+                <?merge .otherArchiveUnits.bool() ?>
+                <div class="alert alert-danger">
+                    <span>
+                        &nbsp;<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> <?merge .otherArchiveUnits ?> unités d'archive contenues non affichées.
+                    </span>
+                </div>
             </div><!-- end panel body -->
         </div> <!-- end collapse -->
     </div> <!-- end panel -->
-- 
GitLab