From 6fb0cf2f7a6d87d39e6fa9e6c9db34cd3ebe682e Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen.haas@lakedrops.com>
Date: Fri, 16 Feb 2024 12:07:56 +0100
Subject: [PATCH] Raise dependencies - PHP >= 8.1 - Composer >= 2 Remove module
 dependencies for http_client_retry and redis, move them to scaffold projects
 Code cleanup

---
 .editorconfig           |   3 -
 composer.json           | 134 ++++++++++++++++++++--------------------
 src/CommandProvider.php |   2 +-
 src/ConfigCommand.php   |   2 +-
 src/Handler.php         | 101 ++++++++++++++++--------------
 src/Plugin.php          |   4 +-
 6 files changed, 125 insertions(+), 121 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index 12bcb27..ccc6a28 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -12,6 +12,3 @@ indent_size = 2
 charset = utf-8
 trim_trailing_whitespace = true
 insert_final_newline = true
-
-[{composer.json,composer.lock}]
-indent_size = 4
diff --git a/composer.json b/composer.json
index e3a6f95..74a4aea 100644
--- a/composer.json
+++ b/composer.json
@@ -1,72 +1,72 @@
 {
-    "name": "lakedrops/drupal-environment",
-    "description": "Composer Plugin for Drupal Environments",
-    "type": "composer-plugin",
-    "keywords": [
-        "Drupal",
-        "Install",
-        "Update"
-    ],
-    "homepage": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment",
-    "license": "GPL-2.0-or-later",
-    "authors": [
-        {
-            "name": "Jürgen Haas",
-            "email": "juergen.haas@lakedrops.com",
-            "homepage": "https://www.lakedrops.com",
-            "role": "Drupal Expert"
-        },
-        {
-            "name": "Daniel Speicher",
-            "email": "daniel.speicher@lakedrops.com",
-            "homepage": "https://www.lakedrops.com",
-            "role": "Drupal Expert"
-        },
-        {
-            "name": "Richard Papp",
-            "email": "richard.papp@lakedrops.com",
-            "homepage": "https://www.lakedrops.com",
-            "role": "Drupal Expert"
-        }
-    ],
-    "support": {
-        "issues": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/issues",
-        "source": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/tree/main",
-        "docs": "https://devops-tools.docs.lakedrops.com/composer/plugin/drupal-environment/"
+  "name": "lakedrops/drupal-environment",
+  "description": "Composer Plugin for Drupal Environments",
+  "type": "composer-plugin",
+  "keywords": [
+    "Drupal",
+    "Install",
+    "Update"
+  ],
+  "homepage": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment",
+  "license": "GPL-2.0-or-later",
+  "authors": [
+    {
+      "name": "Jürgen Haas",
+      "email": "juergen.haas@lakedrops.com",
+      "homepage": "https://www.lakedrops.com",
+      "role": "Drupal Expert"
     },
-    "repositories": [
-        {
-            "type": "composer",
-            "url": "https://packages.drupal.org/8"
-        }
-    ],
-    "require": {
-        "php": ">=7.4",
-        "composer-plugin-api": "^1||^2",
-        "drupal/http_client_retry": "^2.0",
-        "drupal/redis": "^1.5",
-        "lakedrops/composer-json-utils": "^2.4||dev-develop"
+    {
+      "name": "Daniel Speicher",
+      "email": "daniel.speicher@lakedrops.com",
+      "homepage": "https://www.lakedrops.com",
+      "role": "Drupal Expert"
     },
-    "require-dev": {
-        "composer/composer": "^1||^2",
-        "drupal/coder": "^8.3",
-        "phpunit/phpunit": "^9.5",
-        "roave/security-advisories": "dev-master",
-        "squizlabs/php_codesniffer": "^3.7"
-    },
-    "config": {
-        "allow-plugins": {
-            "dealerdirect/phpcodesniffer-composer-installer": true
-        }
-    },
-    "minimum-stability": "dev",
-    "prefer-stable": true,
-    "autoload": {
-        "psr-4": {
-            "LakeDrops\\DrupalEnvironment\\": "src/"
-        }
-    },
-    "extra": {
-        "class": "LakeDrops\\DrupalEnvironment\\Plugin"
+    {
+      "name": "Richard Papp",
+      "email": "richard.papp@lakedrops.com",
+      "homepage": "https://www.lakedrops.com",
+      "role": "Drupal Expert"
+    }
+  ],
+  "support": {
+    "issues": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/issues",
+    "source": "https://gitlab.lakedrops.com/composer/plugin/drupal-environment/tree/main",
+    "docs": "https://devops-tools.docs.lakedrops.com/composer/plugin/drupal-environment/"
+  },
+  "repositories": [
+    {
+      "type": "composer",
+      "url": "https://packages.drupal.org/8"
+    }
+  ],
+  "require": {
+    "php": ">=8.1",
+    "composer-plugin-api": "^2",
+    "lakedrops/composer-json-utils": "^2.4||dev-develop"
+  },
+  "require-dev": {
+    "composer/composer": "^2",
+    "lakedrops/drupal-development-environment": "^3.2||dev-develop",
+    "roave/security-advisories": "dev-latest"
+  },
+  "config": {
+    "allow-plugins": {
+      "dealerdirect/phpcodesniffer-composer-installer": true,
+      "drupal/core-composer-scaffold": false,
+      "lakedrops/*": false,
+      "php-http/discovery": false,
+      "phpstan/extension-installer": true
+    }
+  },
+  "minimum-stability": "dev",
+  "prefer-stable": true,
+  "autoload": {
+    "psr-4": {
+      "LakeDrops\\DrupalEnvironment\\": "src/"
     }
+  },
+  "extra": {
+    "class": "LakeDrops\\DrupalEnvironment\\Plugin"
+  }
 }
diff --git a/src/CommandProvider.php b/src/CommandProvider.php
index 154b39e..3dcc925 100644
--- a/src/CommandProvider.php
+++ b/src/CommandProvider.php
@@ -5,7 +5,7 @@ namespace LakeDrops\DrupalEnvironment;
 use Composer\Plugin\Capability\CommandProvider as CommandProviderCapability;
 
 /**
- * Class CommandProvider.
+ * Composer Command Provider for LakeDrops drupal environments.
  *
  * @package LakeDrops\DrupalEnvironment
  */
diff --git a/src/ConfigCommand.php b/src/ConfigCommand.php
index 8138641..e1657d6 100644
--- a/src/ConfigCommand.php
+++ b/src/ConfigCommand.php
@@ -7,7 +7,7 @@ use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
- * Class ConfigCommand.
+ * Composer Config Command for LakeDrops Drupal environments.
  *
  * @package LakeDrops\DrupalEnvironment
  */
diff --git a/src/Handler.php b/src/Handler.php
index b53e7af..5fcad4d 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -2,12 +2,11 @@
 
 namespace LakeDrops\DrupalEnvironment;
 
-use Exception;
 use LakeDrops\Component\Composer\BaseHandler;
 use Symfony\Component\Filesystem\Filesystem;
 
 /**
- * Class Handler.
+ * Handler class to setup LakeDrops tool based Drupal projects.
  *
  * @package LakeDrops\DrupalEnvironment
  */
@@ -25,42 +24,42 @@ class Handler extends BaseHandler {
    */
   protected function configDefault(): array {
     return [
-        'chg-acl' => FALSE,
-        'webserver-username' => 'www-data',
-        'webserver-groupname' => 'www-data',
-        'filter_protocols' => [
-          'http',
-          'https',
-          'ftp',
-          'news',
-          'nntp',
-          'tel',
-          'telnet',
-          'mailto',
-          'irc',
-          'ssh',
-          'sftp',
-          'webcal',
-          'rtsp',
-        ],
-        'cors_config' => [
-          'enabled' => 'false',
-          'allowedOrigins' => '*',
-        ],
-        'db' => [
-          'driver' => 'mysql',
-          'namespace' => 'Drupal\Core\Database\Driver\mysql',
-          'database' => 'example',
-          'username' => 'username',
-          'password' => 'password',
-          'host' => '127.0.0.1',
-          'port' => '3306',
-          'prefix' => '',
-        ],
-        'domain' => str_replace(['.', '-'], ['\\.', '\\-'], 'www.example.com'),
-        'aliases' => [],
-        'live' => (getenv('LAKEDROPS_BUILD_NG') === 'yes') || !empty($this->env->receiveGlobal('DRUPAL_LIVE', 'Live mode', '0')),
-      ];
+      'chg-acl' => FALSE,
+      'webserver-username' => 'www-data',
+      'webserver-groupname' => 'www-data',
+      'filter_protocols' => [
+        'http',
+        'https',
+        'ftp',
+        'news',
+        'nntp',
+        'tel',
+        'telnet',
+        'mailto',
+        'irc',
+        'ssh',
+        'sftp',
+        'webcal',
+        'rtsp',
+      ],
+      'cors_config' => [
+        'enabled' => 'false',
+        'allowedOrigins' => '*',
+      ],
+      'db' => [
+        'driver' => 'mysql',
+        'namespace' => 'Drupal\Core\Database\Driver\mysql',
+        'database' => 'example',
+        'username' => 'username',
+        'password' => 'password',
+        'host' => '127.0.0.1',
+        'port' => '3306',
+        'prefix' => '',
+      ],
+      'domain' => str_replace(['.', '-'], ['\\.', '\\-'], 'www.example.com'),
+      'aliases' => [],
+      'live' => (getenv('LAKEDROPS_BUILD_NG') === 'yes') || !empty($this->env->receiveGlobal('DRUPAL_LIVE', 'Live mode', '0')),
+    ];
   }
 
   /**
@@ -70,8 +69,13 @@ class Handler extends BaseHandler {
     $hash = $this->config->readValue('hash_salt');
     if ($hash === NULL) {
       try {
-        $hash = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode(random_bytes(55)));
-      } catch (Exception $e) {
+        $hash = str_replace(['+', '/', '='], [
+          '-',
+          '_',
+          '',
+        ], base64_encode(random_bytes(55)));
+      }
+      catch (\Exception) {
         $hash = 'no-random-bytes-available';
       }
     }
@@ -81,13 +85,16 @@ class Handler extends BaseHandler {
   /**
    * Post project create event to setup Drupal environment.
    */
-  public function setupLakeDropsProject() {
+  public function setupLakeDropsProject(): void {
     $this->init();
 
     $fs = new Filesystem();
     $installationManager = $this->composer->getInstallationManager();
 
     $drupalCorePackage = $this->getDrupalCorePackage();
+    if ($drupalCorePackage === NULL) {
+      return;
+    }
     $corePath = $installationManager->getInstallPath($drupalCorePackage);
     $this->config->setValue('drupal8', version_compare($drupalCorePackage->getVersion(), '9.0.0', '<='), FALSE);
 
@@ -161,12 +168,12 @@ class Handler extends BaseHandler {
 
     // Ensure default environment directories for config_split.
     foreach ([
-               'develop',
-               'test',
-               'live',
-               'nirvana',
-               'snapshot',
-             ] as $subdir) {
+      'develop',
+      'test',
+      'live',
+      'nirvana',
+      'snapshot',
+    ] as $subdir) {
       $path = $projectRoot . '/config/default/environments/' . $subdir;
       if (!$fs->exists($path)) {
         $fs->mkdir($path);
diff --git a/src/Plugin.php b/src/Plugin.php
index e03b5c9..8b135d2 100644
--- a/src/Plugin.php
+++ b/src/Plugin.php
@@ -20,7 +20,7 @@ class Plugin extends BasePlugin {
    *
    * @var \Drupal\Composer\Plugin\Scaffold\Handler
    */
-  protected $scaffoldHandler;
+  protected DrupalScaffoldHandler $scaffoldHandler;
 
   /**
    * {@inheritdoc}
@@ -62,7 +62,7 @@ class Plugin extends BasePlugin {
    * @param \Composer\Script\Event $event
    *   The event that triggered the plugin.
    */
-  public function prepareProject(Event $event) {
+  public function prepareProject(Event $event): void {
     /** @var Handler $handler */
     $handler = $this->handler;
     $handler
-- 
GitLab