From f8ae8902ce51ea625047423bd6688000962acf68 Mon Sep 17 00:00:00 2001
From: "Hahn Axel (hahn)" <axel.hahn@unibe.ch>
Date: Fri, 29 Nov 2024 13:26:47 +0100
Subject: [PATCH]   multiple instances for rollout plugins

---
 .../deployment/classes/project.class.php      |  7 +++++--
 .../deployment/classes/project_gui.class.php  | 21 +++++++++++--------
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/public_html/deployment/classes/project.class.php b/public_html/deployment/classes/project.class.php
index bd67b5ef..8f521105 100644
--- a/public_html/deployment/classes/project.class.php
+++ b/public_html/deployment/classes/project.class.php
@@ -28,6 +28,7 @@ require_once 'htmlguielements.class.php';
   (...)
   2024-08-28  Axel   php8 only; added variable types; short array syntax
   2024-09-20  Axel   build(): check if checkout of sources failed
+  2024-11-29  Axel   multiple instances for rollout plugins
   ###################################################################### */
 
 /**
@@ -1579,17 +1580,19 @@ class project extends base
 
         // ----- init rollout plugin
         // set name of the activated plugin for this project
-        $sPluginName = (isset($this->_aPrjConfig['deploy']['enabled_rollout_plugin']) && $this->_aPrjConfig['deploy']['enabled_rollout_plugin'])
+        $sPluginId = (isset($this->_aPrjConfig['deploy']['enabled_rollout_plugin']) && $this->_aPrjConfig['deploy']['enabled_rollout_plugin'])
             ? $this->_aPrjConfig['deploy']['enabled_rollout_plugin']
             : 'default';
+        $sPluginName=$this->_aConfig['plugins']['rollout'][$sPluginId]['plugin'];
         unset($this->oRolloutPlugin);
         try {
             require_once $this->_getPluginFilename('rollout', $sPluginName);
             $sPluginClassname = 'rollout_' . $sPluginName;
             $this->oRolloutPlugin = new $sPluginClassname([
+                'id' => $sPluginId,
                 'lang' => $this->_aConfig['lang'],
                 'phase' => false,
-                'globalcfg' => isset($this->_aConfig['plugins']['rollout'][$sPluginName]) ? $this->_aConfig['plugins']['rollout'][$sPluginName] : [],
+                'globalcfg' => isset($this->_aConfig['plugins']['rollout'][$sPluginId]) ? $this->_aConfig['plugins']['rollout'][$sPluginId] : [],
                 'projectcfg' => $this->_aPrjConfig,
             ]);
             // print_r($this->_oRolloutPlugin->getPluginfos());
diff --git a/public_html/deployment/classes/project_gui.class.php b/public_html/deployment/classes/project_gui.class.php
index d6fef253..e43497ff 100644
--- a/public_html/deployment/classes/project_gui.class.php
+++ b/public_html/deployment/classes/project_gui.class.php
@@ -15,6 +15,7 @@ require_once 'htmlguielements.class.php';
   2013-11-08  Axel <axel.hahn@iml.unibe.ch>
   (...)
   2024-08-26  Axel   php8 only; added variable types; short array syntax
+  2024-11-29  Axel   multiple instances for rollout plugins
   ###################################################################### */
 
 /**
@@ -841,27 +842,29 @@ class projectgui extends project
             ],
             'project-config' => '',
         ];
-        foreach (array_keys($this->getConfiguredPlugins('rollout')) as $sPluginName) {
+        foreach ($this->getConfiguredPlugins('rollout') as $sPluginId => $aPluginCfg) {
 
+            $sPluginName=$aPluginCfg['plugin'];
             $sPluginFile = $this->_getPluginFilename('rollout', $sPluginName);
             $TmpRolloutPlugin = false;
             $sMyClassname = 'rollout_' . $sPluginName;
-            $sMyDivId = 'rollout-' . $sPluginName . '-config';
+            $sMyDivId = 'rollout-' . $sPluginId . '-config';
             $sMyDivClass = 'rolloutconfigdiv';
-            $sMyDivClassActive = 'rolloutconfigdiv-' . $sPluginName;
-            $bActive = $sPluginName === $this->oRolloutPlugin->getId();
+            $sMyDivClassActive = 'rolloutconfigdiv-' . $sPluginId;
+            $bActive = $sPluginId === $this->oRolloutPlugin->getId();
 
             if (file_exists($sPluginFile)) {
                 try {
-                    include_once $this->_getPluginFilename('rollout', $sPluginName);
+                    include_once $sPluginFile;
                     $TmpRolloutPlugin = new $sMyClassname([
+                        'id' => $sPluginId,
                         'lang' => $this->_aConfig['lang'],
                         'phase' => false,
-                        'globalcfg' => $this->_aConfig['plugins']['rollout'][$sPluginName],
+                        'globalcfg' => $this->_aConfig['plugins']['rollout'][$sPluginId],
                         'projectcfg' => $this->_aPrjConfig,
                     ]);
-                    $aRollout['project-select']['options'][$sPluginName] = [
-                        'label' => $TmpRolloutPlugin->getName(),
+                    $aRollout['project-select']['options'][$sPluginId] = [
+                        'label' => $aPluginCfg['label'] ?: $TmpRolloutPlugin->getName(),
                         'checked' => $bActive,
                         'onclick' => '$(\'.' . $sMyDivClass . '\').hide(); $(\'.' . $sMyDivClassActive . '\').show();',
                     ];
@@ -888,7 +891,7 @@ class projectgui extends project
 
                 }
             } else {
-                $aRollout['project-select']['options'][$sPluginName] = [
+                $aRollout['project-select']['options'][$sPluginId] = [
                     'label' => 'not found: <span class="error">' . $sMyClassname . '</span>',
                     'checked' => false,
                     'disabled' => "disabled",
-- 
GitLab