From 8c593bb9e83f1c335837deba7f7778c3bbd1c325 Mon Sep 17 00:00:00 2001
From: Cyril Vazquez <cyril.vazquez@maarch.org>
Date: Fri, 4 Oct 2024 13:41:25 +0200
Subject: [PATCH] Add configuration of depth and length

---
 .../maarchRM/Presenter/seda2/message.php      | 29 ++++++++++---------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/presentation/maarchRM/Presenter/seda2/message.php b/presentation/maarchRM/Presenter/seda2/message.php
index 5603f9f..79b8027 100644
--- a/presentation/maarchRM/Presenter/seda2/message.php
+++ b/presentation/maarchRM/Presenter/seda2/message.php
@@ -115,10 +115,12 @@ class message
                     }
                 }
 
-                $maxDepth = 3;
-                $maxCount = 10;
+                $conf = \laabs::Configuration('presentation.maarchRM');
+                
+                $maxDepth = isset($conf['seda2.displayMaxDepth'])? $conf['seda2.displayMaxDepth'] :10;
+                $maxCount = isset($conf['seda2.displayMaxLength'])? $conf['seda2.displayMaxLength'] :1000;
 
-                $this->simplifyTree($message->object->dataObjectPackage->descriptiveMetadata);
+                $this->simplifyTree($message->object->dataObjectPackage->descriptiveMetadata, 1, $maxDepth, $maxCount);
             }
         }
 
@@ -133,31 +135,32 @@ class message
         return $this->view->saveHtml();
     }
 
-    protected function simplifyTree($archiveUnitContainer, $depth=1)
+    protected function simplifyTree($archiveUnitContainer, $depth=1, $maxDepth, $maxCount)
     {
         // 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) {
+
+        // Keep only allowed depth levels 
+        if ($depth > $maxDepth) {
             $archiveUnitContainer->archiveUnit = null;
             $archiveUnitContainer->otherArchiveUnits = $childNodeCount;
             return;
         }
+
+        // Keep only allowed child nodes length
+        if ($childNodeCount > $maxCount) {
+            $archiveUnitContainer->archiveUnit = array_slice($archiveUnitContainer->archiveUnit, 0, $maxCount);
+            $archiveUnitContainer->siblingArchiveUnits = $childNodeCount - $maxCount;
+        }
         
         // recursively apply procedure
         $depth++;
         foreach ($archiveUnitContainer->archiveUnit as $key => $archiveUnit) {
-            $this->simplifyTree($archiveUnit, $depth);
+            $this->simplifyTree($archiveUnit, $depth, $maxDepth, $maxCount);
         }
     }
 }
-- 
GitLab