From 68972a2be4ea36fd2b207d4a9e13087c67908f7e Mon Sep 17 00:00:00 2001
From: Thibault Dockx <thibault.dockx@fusiondirectory.org>
Date: Tue, 25 Feb 2025 14:03:32 +0000
Subject: [PATCH] :sparkles: Feat(plugins/management) - adapt to php8.2

Adapt to php 8.2
---
 .../acl/class_ACLsAssignmentAttribute.inc     | 24 ++++-----
 .../management/acl/class_aclManagement.inc    |  2 +-
 .../aclrole/class_aclEditionDialog.inc        |  4 +-
 plugins/management/aclrole/class_aclRole.inc  |  2 +-
 .../groups/class_GroupContentColumn.inc       |  4 +-
 .../class_GroupContentFilterElement.inc       |  6 +--
 .../groups/class_GroupMembersAttribute.inc    |  4 +-
 plugins/management/groups/class_ogroup.inc    |  6 +--
 .../management/groups/class_roleGeneric.inc   |  4 +-
 plugins/management/groups/tabs_ogroups.inc    | 16 +++---
 .../management/tasks/class_tasksColumn.inc    | 49 ++++++-------------
 .../management/users/class_userManagement.inc |  2 +-
 12 files changed, 52 insertions(+), 71 deletions(-)

diff --git a/plugins/management/acl/class_ACLsAssignmentAttribute.inc b/plugins/management/acl/class_ACLsAssignmentAttribute.inc
index 09d791301..07d05c54a 100755
--- a/plugins/management/acl/class_ACLsAssignmentAttribute.inc
+++ b/plugins/management/acl/class_ACLsAssignmentAttribute.inc
@@ -29,7 +29,7 @@ class ACLsAssignmentAttribute extends DialogOrderedArrayAttribute
     /* Convert text value to displayable array value */
     sort($value['members']);
     static $nbShown = 4;
-    $members = join(', ', array_slice($value['members'], 0, $nbShown));
+    $members = implode(', ', array_slice($value['members'], 0, $nbShown));
     if (count($value['members']) > $nbShown) {
       $members .= sprintf(_(', and %d others'), (count($value['members']) - $nbShown));
     }
@@ -39,7 +39,7 @@ class ACLsAssignmentAttribute extends DialogOrderedArrayAttribute
 
   function readValue ($value)
   {
-    $acl = explode(':', $value);
+    $acl = explode(':', (string) $value);
     return [$acl[0], [
       'scope'         => $acl[1],
       'role'          => base64_decode($acl[2]),
@@ -53,10 +53,10 @@ class ACLsAssignmentAttribute extends DialogOrderedArrayAttribute
   {
     return $key.
             ':'.$value['scope'].
-            ':'.base64_encode($value['role']).
-            ':'.join(',', array_map('base64_encode', $value['members'])).
-            ':'.base64_encode($value['userfilter']).
-            ':'.base64_encode($value['targetfilter']);
+            ':'.base64_encode((string) $value['role']).
+            ':'.implode(',', array_map('base64_encode', $value['members'])).
+            ':'.base64_encode((string) $value['userfilter']).
+            ':'.base64_encode((string) $value['targetfilter']);
   }
 
   function foreignKeyUpdate ($oldvalue, $newvalue, array $source)
@@ -64,26 +64,26 @@ class ACLsAssignmentAttribute extends DialogOrderedArrayAttribute
     foreach ($this->value as $key => &$value) {
       if ($source['FIELD'] == 'dn') {
         if ($newvalue === NULL) {
-          if (preg_match('/'.preg_quote($oldvalue, '/').'$/', $value['role'])) {
+          if (preg_match('/'.preg_quote((string) $oldvalue, '/').'$/', (string) $value['role'])) {
             unset($this->value[$key]);
           }
           foreach ($value['members'] as $member_key => $member) {
-            if (preg_match('/'.preg_quote($oldvalue, '/').'$/', $member)) {
+            if (preg_match('/'.preg_quote((string) $oldvalue, '/').'$/', (string) $member)) {
               unset($value['members'][$member_key]);
             }
           }
           unset($member);
         } elseif ($source['MODE'] == 'move') {
-          $value['role'] = preg_replace('/'.preg_quote($oldvalue, '/').'$/', $newvalue, $value['role']);
+          $value['role'] = preg_replace('/'.preg_quote((string) $oldvalue, '/').'$/', $newvalue, (string) $value['role']);
           foreach ($value['members'] as &$member) {
-            $member = preg_replace('/'.preg_quote($oldvalue, '/').'$/', $newvalue, $member);
+            $member = preg_replace('/'.preg_quote((string) $oldvalue, '/').'$/', $newvalue, $member);
           }
           unset($member);
         } elseif ($source['MODE'] == 'copy') {
           /* Copied members are added */
           foreach ($value['members'] as $member) {
-            if (preg_match('/'.preg_quote($oldvalue, '/').'$/', $member)) {
-              $value['members'][] = preg_replace('/'.preg_quote($oldvalue, '/').'$/', $newvalue, $member);
+            if (preg_match('/'.preg_quote((string) $oldvalue, '/').'$/', (string) $member)) {
+              $value['members'][] = preg_replace('/'.preg_quote((string) $oldvalue, '/').'$/', $newvalue, (string) $member);
             }
           }
         }
diff --git a/plugins/management/acl/class_aclManagement.inc b/plugins/management/acl/class_aclManagement.inc
index 857fa2c3f..73d1e3550 100755
--- a/plugins/management/acl/class_aclManagement.inc
+++ b/plugins/management/acl/class_aclManagement.inc
@@ -51,7 +51,7 @@ class aclAssignmentCreationDialog extends simplePlugin
             _('Dn'), _('DN you wish to add assignments for'),
             'baseDn', TRUE,
             $config->current['BASE'], 'aclMode',
-            '/^([^=,]+=[^=,]+,)+'.preg_quote($config->current['BASE'], '/').'$/',
+            '/^([^=,]+=[^=,]+,)+'.preg_quote((string) $config->current['BASE'], '/').'$/',
             'ou=people,'.$config->current['BASE']
           ),
         ]
diff --git a/plugins/management/aclrole/class_aclEditionDialog.inc b/plugins/management/aclrole/class_aclEditionDialog.inc
index 9dc188993..b31b4bb3f 100755
--- a/plugins/management/aclrole/class_aclEditionDialog.inc
+++ b/plugins/management/aclrole/class_aclEditionDialog.inc
@@ -201,7 +201,7 @@ class ACLEditionDialog implements FusionDirectoryDialog
         if (empty($summary)) {
           $summary = '<i>'._('No ACL settings for this category').'</i>';
         } else {
-          $summary = sprintf(_('ACL for these objects: %s'), join(', ', $summary));
+          $summary = sprintf(_('ACL for these objects: %s'), implode(', ', $summary));
         }
 
         $action = '<input class="center" type="image" src="geticon.php?context=actions&amp;icon=document-edit&amp;size=16"
@@ -233,7 +233,7 @@ class ACLEditionDialog implements FusionDirectoryDialog
         if (!isset($this->aclContents[$key][0])) {
           $this->aclContents[$key][0] = '';
         }
-        if ((strtolower($class) === 'archivedobject') && (strtolower($this->aclObject) !== 'archivedobject')) {
+        if ((strtolower((string) $class) === 'archivedobject') && (strtolower((string) $this->aclObject) !== 'archivedobject')) {
           $attrs = [];
           $rights = [
             'create'  => TRUE,
diff --git a/plugins/management/aclrole/class_aclRole.inc b/plugins/management/aclrole/class_aclRole.inc
index 64d9ecb51..edc0db384 100755
--- a/plugins/management/aclrole/class_aclRole.inc
+++ b/plugins/management/aclrole/class_aclRole.inc
@@ -41,7 +41,7 @@ class ACLsAttribute extends DialogOrderedArrayAttribute
 
   function readValue ($value)
   {
-    $acl = explode(':', $value, 2);
+    $acl = explode(':', (string) $value, 2);
     return [$acl[0], acl::extractACL($acl[1])];
   }
 
diff --git a/plugins/management/groups/class_GroupContentColumn.inc b/plugins/management/groups/class_GroupContentColumn.inc
index 1731c6274..8712ba69b 100755
--- a/plugins/management/groups/class_GroupContentColumn.inc
+++ b/plugins/management/groups/class_GroupContentColumn.inc
@@ -35,7 +35,7 @@ class GroupContentColumn extends Column
     }
 
     $result = '';
-    for ($i = 0; $i < strlen($types); $i++) {
+    for ($i = 0; $i < strlen((string) $types); $i++) {
       if ($types[$i] == 'I') {
         continue;
       }
@@ -44,7 +44,7 @@ class GroupContentColumn extends Column
         $result .= '<img src="'.htmlescape($infos['icon']).'"'.
                     ' alt="'.htmlescape($infos['name']).'"'.
                     ' title="'.htmlescape($infos['name']).'"/>';
-      } catch (NonExistingObjectTypeException $e) {
+      } catch (NonExistingObjectTypeException) {
         continue;
       }
     }
diff --git a/plugins/management/groups/class_GroupContentFilterElement.inc b/plugins/management/groups/class_GroupContentFilterElement.inc
index e2289fcae..40ef41c54 100755
--- a/plugins/management/groups/class_GroupContentFilterElement.inc
+++ b/plugins/management/groups/class_GroupContentFilterElement.inc
@@ -40,7 +40,7 @@ class GroupContentFilterElement extends FilterElement
           'infos'   => $infos,
           'checked' => FALSE,
         ];
-      } catch (NonExistingObjectTypeException $e) {
+      } catch (NonExistingObjectTypeException) {
         continue;
       }
     }
@@ -74,14 +74,14 @@ class GroupContentFilterElement extends FilterElement
   public function getFilters (string $type, array &$filters): bool
   {
     if (strtoupper($type) == 'OGROUP') {
-      foreach ($this->types as $type => $infos) {
+      foreach ($this->types as $infos) {
         if ($infos['checked']) {
           $filters[] = $infos['filter'];
         }
       }
     } elseif (!$this->types['user']['checked']) {
       /* Skip POSIX groups and roles if users are unchecked and at least one type is checked */
-      foreach ($this->types as $type => $infos) {
+      foreach ($this->types as $infos) {
         if ($infos['checked']) {
           return TRUE;
         }
diff --git a/plugins/management/groups/class_GroupMembersAttribute.inc b/plugins/management/groups/class_GroupMembersAttribute.inc
index e2aac3c29..420849ba6 100755
--- a/plugins/management/groups/class_GroupMembersAttribute.inc
+++ b/plugins/management/groups/class_GroupMembersAttribute.inc
@@ -44,7 +44,7 @@ class GroupMembersAttribute extends ObjectsAttribute
     if ($type === FALSE) {
       return 'I';
     } else {
-      return $this->typeToCodeMap[strtolower($type)];
+      return $this->typeToCodeMap[strtolower((string) $type)];
     }
   }
 
@@ -56,7 +56,7 @@ class GroupMembersAttribute extends ObjectsAttribute
     $codes = array_unique(
       array_merge(
         array_map([$this, 'typeToCode'], array_unique($this->types)),
-        str_split(preg_replace('/[^a-z]/i', '', implode('', $this->childTypes)))
+        str_split((string) preg_replace('/[^a-z]/i', '', implode('', $this->childTypes)))
       )
     );
     sort($codes);
diff --git a/plugins/management/groups/class_ogroup.inc b/plugins/management/groups/class_ogroup.inc
index 9dc759976..570493ccd 100755
--- a/plugins/management/groups/class_ogroup.inc
+++ b/plugins/management/groups/class_ogroup.inc
@@ -153,7 +153,7 @@ class ogroup extends simplePlugin
     try {
       $ws_dns = array_keys(objects::ls(['workstation','terminal']));
       $res = objects::ls('ogroup', ['member' => '*'], NULL, '(&(member=*)(|(gosaGroupObjects=[W])(gosaGroupObjects=[T])))');
-    } catch (NonExistingObjectTypeException $e) {
+    } catch (NonExistingObjectTypeException) {
       /* If workstation/terminal objectType is not existing, systems plugin is missing so there are no systems */
       $ws_dns = [];
       $res    = [];
@@ -226,12 +226,12 @@ class ogroup extends simplePlugin
       $addingMembers    = array_diff($userMembers, $savedMembers);
       $removingMembers  = array_diff($savedMembers, $userMembers);
       foreach ($addingMembers as $dn) {
-        if (strpos($ui->get_permissions($dn, 'user/userRoles', 'groupsMembership', $this->acl_skip_write()), 'w') === FALSE) {
+        if (!str_contains((string) $ui->get_permissions($dn, 'user/userRoles', 'groupsMembership', $this->acl_skip_write()), 'w')) {
           $errors[] = new SimplePluginPermissionError($this, msgPool::permModify($dn, 'groupsMembership'));
         }
       }
       foreach ($removingMembers as $dn) {
-        if (strpos($ui->get_permissions($dn, 'user/userRoles', 'groupsMembership', $this->acl_skip_write()), 'w') === FALSE) {
+        if (!str_contains((string) $ui->get_permissions($dn, 'user/userRoles', 'groupsMembership', $this->acl_skip_write()), 'w')) {
           $errors[] = new SimplePluginPermissionError($this, msgPool::permModify($dn, 'groupsMembership'));
         }
       }
diff --git a/plugins/management/groups/class_roleGeneric.inc b/plugins/management/groups/class_roleGeneric.inc
index 399d0d696..451e5478d 100755
--- a/plugins/management/groups/class_roleGeneric.inc
+++ b/plugins/management/groups/class_roleGeneric.inc
@@ -124,12 +124,12 @@ class roleGeneric extends simplePlugin
       $addingOccupants    = array_diff($this->roleOccupant, $savedOccupants);
       $removingOccupants  = array_diff($savedOccupants, $this->roleOccupant);
       foreach ($addingOccupants as $dn) {
-        if (strpos($ui->get_permissions($dn, 'user/userRoles', 'rolesMembership', $this->acl_skip_write()), 'w') === FALSE) {
+        if (!str_contains((string) $ui->get_permissions($dn, 'user/userRoles', 'rolesMembership', $this->acl_skip_write()), 'w')) {
           $errors[] = new SimplePluginPermissionError($this, msgPool::permModify($dn, 'rolesMembership'));
         }
       }
       foreach ($removingOccupants as $dn) {
-        if (strpos($ui->get_permissions($dn, 'user/userRoles', 'rolesMembership', $this->acl_skip_write()), 'w') === FALSE) {
+        if (!str_contains((string) $ui->get_permissions($dn, 'user/userRoles', 'rolesMembership', $this->acl_skip_write()), 'w')) {
           $errors[] = new SimplePluginPermissionError($this, msgPool::permModify($dn, 'rolesMembership'));
         }
       }
diff --git a/plugins/management/groups/tabs_ogroups.inc b/plugins/management/groups/tabs_ogroups.inc
index f600dd382..e9842eee5 100755
--- a/plugins/management/groups/tabs_ogroups.inc
+++ b/plugins/management/groups/tabs_ogroups.inc
@@ -43,7 +43,7 @@ class ogrouptabs extends simpleTabs_noSpecial
       return;
     }
     $this->groupObjects = $gosaGroupObjects;
-    $objects = preg_replace('/[\[\]]/', '', $gosaGroupObjects);
+    $objects = preg_replace('/[\[\]]/', '', (string) $gosaGroupObjects);
 
     $tabs = [];
     if (strlen($objects)) {
@@ -60,20 +60,20 @@ class ogrouptabs extends simpleTabs_noSpecial
         }
         $otype = ogroup::$objectTypes[$objects[$i]];
         $otabs = [];
-        if (isset($config->data['TABS'][strtoupper($otype).'TABS'])) {
+        if (isset($config->data['TABS'][strtoupper((string) $otype).'TABS'])) {
           $otabs = array_uintersect(
             $dtabs,
-            $config->data['TABS'][strtoupper($otype).'TABS'],
+            $config->data['TABS'][strtoupper((string) $otype).'TABS'],
             function ($a, $b)
             {
-              return strcmp($a['CLASS'], $b['CLASS']);
+              return strcmp((string) $a['CLASS'], (string) $b['CLASS']);
             }
           );
         }
-        if (isset($config->data['TABS']['OGROUP-'.strtoupper($otype).'TABS'])) {
+        if (isset($config->data['TABS']['OGROUP-'.strtoupper((string) $otype).'TABS'])) {
           $otabs = array_merge(
             $otabs,
-            $config->data['TABS']['OGROUP-'.strtoupper($otype).'TABS']
+            $config->data['TABS']['OGROUP-'.strtoupper((string) $otype).'TABS']
           );
         }
         if ($tabs === FALSE) {
@@ -84,7 +84,7 @@ class ogrouptabs extends simpleTabs_noSpecial
             $otabs,
             function ($a, $b)
             {
-              return strcmp($a['CLASS'], $b['CLASS']);
+              return strcmp((string) $a['CLASS'], (string) $b['CLASS']);
             }
           );
         }
@@ -152,7 +152,7 @@ class ogrouptabs extends simpleTabs_noSpecial
     $tabList  = parent::getPotentialTabList($type, $infos);
     $prefix   = strtoupper($type).'-';
     foreach ($config->data['TABS'] as $tabgroup => $tabs) {
-      if (strpos($tabgroup, $prefix) === 0) {
+      if (str_starts_with((string) $tabgroup, $prefix)) {
         $tabList = array_merge($tabList, $tabs);
       }
     }
diff --git a/plugins/management/tasks/class_tasksColumn.inc b/plugins/management/tasks/class_tasksColumn.inc
index 191daf42c..5d5ca9605 100755
--- a/plugins/management/tasks/class_tasksColumn.inc
+++ b/plugins/management/tasks/class_tasksColumn.inc
@@ -30,45 +30,26 @@ class TasksColumn extends Column
     if ($value == '') {
       return '&nbsp;';
     } else {
-      switch ($this->attributes[0]) {
-        case 'fdTasksStatus':
-          return static::filterStatus($value);
-
-        case 'fdTasksGranularStatus':
-          return static::filterStatus($value);
-
-        // This case needs optimization
-        case 'fdTasksMailObject':
-          return "Mail Object";
-
-        case 'fdTasksScheduleDate':
-          return static::generateDateFormat($value);
-
-        case 'fdTasksGranularSchedule':
-          return static::generateDateFormat($value);
-
-        case 'fdTasksGranularMaster':
-          return static::generateMasterTaskName($value);
-
-        default:
-          return parent::renderSingleValue($entry, $value);
-      }
+      return match ($this->attributes[0]) {
+          'fdTasksStatus' => static::filterStatus($value),
+          'fdTasksGranularStatus' => static::filterStatus($value),
+          'fdTasksMailObject' => "Mail Object",
+          'fdTasksScheduleDate' => static::generateDateFormat($value),
+          'fdTasksGranularSchedule' => static::generateDateFormat($value),
+          'fdTasksGranularMaster' => static::generateMasterTaskName($value),
+          default => parent::renderSingleValue($entry, $value),
+      };
     }
   }
 
   static function filterStatus (string $status = NULL): string
   {
     // A call towards a status map would be interesting here.
-    switch ($status) {
-      case "1" :
-        return "Scheduled";
-
-      case "2" :
-        return "Completed";
-
-      default :
-        return $status;
-    }
+    return match ($status) {
+        "1" => "Scheduled",
+        "2" => "Completed",
+        default => $status,
+    };
   }
 
   static function generateDateFormat ($value) : string
@@ -82,7 +63,7 @@ class TasksColumn extends Column
   static function generateMasterTaskName ($value) : string
   {
     // remove 'dn' keeping only 'cn'
-    $rmDn = preg_replace('/(?=,).*/', '', $value);
+    $rmDn = preg_replace('/(?=,).*/', '', (string) $value);
     // only take the cn without dc
     preg_match('/cn=(.*)/', $rmDn, $matches);
     return $matches[1];
diff --git a/plugins/management/users/class_userManagement.inc b/plugins/management/users/class_userManagement.inc
index 454e7a03b..442988608 100755
--- a/plugins/management/users/class_userManagement.inc
+++ b/plugins/management/users/class_userManagement.inc
@@ -76,7 +76,7 @@ class userManagement extends management
     $disallowed = [];
     $allowed    = [];
     foreach ($action['targets'] as $dn) {
-      if (strpos($ui->get_permissions($dn, 'user/user', 'userLock'), 'w') === FALSE) {
+      if (!str_contains((string) $ui->get_permissions($dn, 'user/user', 'userLock'), 'w')) {
         $disallowed[] = $dn;
       } else {
         $allowed[] = $dn;
-- 
GitLab