From 1b8fe608973e15107ab4dfe6aa85ce945ddd921b Mon Sep 17 00:00:00 2001
From: Bram Driesen <4761-BramDriesen@users.noreply.drupalcode.org>
Date: Mon, 31 Mar 2025 17:16:09 +0000
Subject: [PATCH] Issue #3500374 by keiserjb, bramdriesen: Settings page in
 Drupal 11

---
 konamicode.info.yml                              |  2 +-
 konamicode.module                                |  6 +++---
 konamicode.services.yml                          |  4 ++++
 src/Form/KonamicodeActionAlertConfiguration.php  |  5 +++--
 .../KonamicodeActionAsteroidsConfiguration.php   |  5 +++--
 src/Form/KonamicodeActionBaseConfiguration.php   |  7 +++++--
 .../KonamicodeActionFlipTextConfiguration.php    |  5 +++--
 .../KonamicodeActionImageSpawnConfiguration.php  |  5 +++--
 .../KonamicodeActionRaptorizeConfiguration.php   |  5 +++--
 .../KonamicodeActionRedirectConfiguration.php    |  5 +++--
 ...onamicodeActionReplaceImagesConfiguration.php |  5 +++--
 .../KonamicodeActionSnowfallConfiguration.php    |  5 +++--
 src/Form/KonamicodeMainConfiguration.php         | 16 ++++++++--------
 tests/src/Unit/KonamicodeHexColorTest.php        | 10 +++++++++-
 tests/src/Unit/KonamicodeKeyCodeSequenceTest.php | 10 +++++++++-
 15 files changed, 63 insertions(+), 32 deletions(-)
 create mode 100644 konamicode.services.yml

diff --git a/konamicode.info.yml b/konamicode.info.yml
index 6f7e964..b2e9876 100644
--- a/konamicode.info.yml
+++ b/konamicode.info.yml
@@ -2,6 +2,6 @@ name: Konami Code
 type: module
 description: Performs special actions when the user enters the Konami Code.
 package: Other
-core_version_requirement: ^8.8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.2 || ^11
 
 configure: konamicode.configuration
diff --git a/konamicode.module b/konamicode.module
index de4fd11..462881a 100644
--- a/konamicode.module
+++ b/konamicode.module
@@ -20,9 +20,9 @@ function konamicode_help($route_name, RouteMatchInterface $route_match) {
         <h3>Instructions</h3>
         <p>Install the module like any other module in the <em>modules/contrib</em> folder and enable in <strong>/admin/modules</strong>.</p>
         <p>Then, visit <strong>/admin/config/user-interface/konamicode</strong> to configure the different <em>actions</em> and options for each of the actions.</p>
-        <p>Last, visit any page and enter the configured Konami code.</p>      
+        <p>Last, visit any page and enter the configured Konami code.</p>
         <h3>Documentation</h3>
-        <p>The complete documentation guide can be found at the dedicated <a href="https://www.drupal.org/docs/8/modules/konami-code">documentation</a> page.</p>  
+        <p>The complete documentation guide can be found at the dedicated <a href="https://www.drupal.org/docs/8/modules/konami-code">documentation</a> page.</p>
       ');
   }
 }
@@ -64,7 +64,7 @@ function konamicode_page_attachments(array &$page) {
   $raw_configuration = $config->getRawData();
 
   // Fetch the Konami Code settings.
-  $main_configuration_class = new KonamicodeMainConfiguration(\Drupal::configFactory());
+  $main_configuration_class = \Drupal::service('konamicode.main_configuration');
   $actions = $main_configuration_class->getAllActions();
 
   // Loop over all the actions.
diff --git a/konamicode.services.yml b/konamicode.services.yml
new file mode 100644
index 0000000..ff1b292
--- /dev/null
+++ b/konamicode.services.yml
@@ -0,0 +1,4 @@
+services:
+  konamicode.main_configuration:
+    class: Drupal\konamicode\Form\KonamicodeMainConfiguration
+    arguments: [ '@config.factory', '@config.typed' ]
diff --git a/src/Form/KonamicodeActionAlertConfiguration.php b/src/Form/KonamicodeActionAlertConfiguration.php
index a17a717..a59d8ae 100644
--- a/src/Form/KonamicodeActionAlertConfiguration.php
+++ b/src/Form/KonamicodeActionAlertConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -16,8 +17,8 @@ class KonamicodeActionAlertConfiguration extends KonamicodeActionBaseConfigurati
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionAsteroidsConfiguration.php b/src/Form/KonamicodeActionAsteroidsConfiguration.php
index 10bfe01..683f6be 100644
--- a/src/Form/KonamicodeActionAsteroidsConfiguration.php
+++ b/src/Form/KonamicodeActionAsteroidsConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -17,8 +18,8 @@ class KonamicodeActionAsteroidsConfiguration extends KonamicodeActionBaseConfigu
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName, self::$dependencies);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName, self::$dependencies);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionBaseConfiguration.php b/src/Form/KonamicodeActionBaseConfiguration.php
index 340079d..1b9d56d 100644
--- a/src/Form/KonamicodeActionBaseConfiguration.php
+++ b/src/Form/KonamicodeActionBaseConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -51,6 +52,8 @@ class KonamicodeActionBaseConfiguration extends KonamicodeMainConfiguration {
    *
    * @param Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The ConfigFactoryInterface.
+   * @param \Drupal\Core\Config\TypedConfigManagerInterface $typedConfigManager
+   *   The typed config manager.
    * @param string $name
    *   Action name.
    * @param string $machine_name
@@ -59,11 +62,11 @@ class KonamicodeActionBaseConfiguration extends KonamicodeMainConfiguration {
    *   Optional: An array of dependencies. The dependency name must match the
    *   name set in the konamicode.libraries.yml file.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, $name, $machine_name, array $dependencies = []) {
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager, $name, $machine_name, array $dependencies = []) {
     $this->setName($name);
     $this->setMachineName($machine_name);
     $this->setDependencies($dependencies);
-    parent::__construct($config_factory);
+    parent::__construct($config_factory, $typed_config_manager);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionFlipTextConfiguration.php b/src/Form/KonamicodeActionFlipTextConfiguration.php
index dca7b12..a30d9a1 100644
--- a/src/Form/KonamicodeActionFlipTextConfiguration.php
+++ b/src/Form/KonamicodeActionFlipTextConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -17,8 +18,8 @@ class KonamicodeActionFlipTextConfiguration extends KonamicodeActionBaseConfigur
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName, self::$dependencies);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName, self::$dependencies);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionImageSpawnConfiguration.php b/src/Form/KonamicodeActionImageSpawnConfiguration.php
index 5a58613..de87bef 100644
--- a/src/Form/KonamicodeActionImageSpawnConfiguration.php
+++ b/src/Form/KonamicodeActionImageSpawnConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -17,8 +18,8 @@ class KonamicodeActionImageSpawnConfiguration extends KonamicodeActionBaseConfig
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName, self::$dependencies);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName, self::$dependencies);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionRaptorizeConfiguration.php b/src/Form/KonamicodeActionRaptorizeConfiguration.php
index 87ac67a..5f572f4 100644
--- a/src/Form/KonamicodeActionRaptorizeConfiguration.php
+++ b/src/Form/KonamicodeActionRaptorizeConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -17,8 +18,8 @@ class KonamicodeActionRaptorizeConfiguration extends KonamicodeActionBaseConfigu
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName, self::$dependencies);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName, self::$dependencies);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionRedirectConfiguration.php b/src/Form/KonamicodeActionRedirectConfiguration.php
index c2667b9..60590ff 100644
--- a/src/Form/KonamicodeActionRedirectConfiguration.php
+++ b/src/Form/KonamicodeActionRedirectConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -16,8 +17,8 @@ class KonamicodeActionRedirectConfiguration extends KonamicodeActionBaseConfigur
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionReplaceImagesConfiguration.php b/src/Form/KonamicodeActionReplaceImagesConfiguration.php
index b29fb3e..8c972e2 100644
--- a/src/Form/KonamicodeActionReplaceImagesConfiguration.php
+++ b/src/Form/KonamicodeActionReplaceImagesConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -16,8 +17,8 @@ class KonamicodeActionReplaceImagesConfiguration extends KonamicodeActionBaseCon
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName);
   }
 
   /**
diff --git a/src/Form/KonamicodeActionSnowfallConfiguration.php b/src/Form/KonamicodeActionSnowfallConfiguration.php
index 69839dc..14c4385 100644
--- a/src/Form/KonamicodeActionSnowfallConfiguration.php
+++ b/src/Form/KonamicodeActionSnowfallConfiguration.php
@@ -3,6 +3,7 @@
 namespace Drupal\konamicode\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Link;
 use Drupal\Core\Url;
@@ -19,8 +20,8 @@ class KonamicodeActionSnowfallConfiguration extends KonamicodeActionBaseConfigur
   /**
    * {@inheritdoc}
    */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    parent::__construct($config_factory, self::$name, self::$machineName, self::$dependencies);
+  public function __construct(ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config_manager) {
+    parent::__construct($config_factory, $typed_config_manager, self::$name, self::$machineName, self::$dependencies);
   }
 
   /**
diff --git a/src/Form/KonamicodeMainConfiguration.php b/src/Form/KonamicodeMainConfiguration.php
index 1692bc6..291dadc 100644
--- a/src/Form/KonamicodeMainConfiguration.php
+++ b/src/Form/KonamicodeMainConfiguration.php
@@ -109,14 +109,14 @@ class KonamicodeMainConfiguration extends ConfigFormBase {
    */
   public function getAllActions() {
     return [
-      new KonamicodeActionRedirectConfiguration($this->configFactory),
-      new KonamicodeActionAlertConfiguration($this->configFactory),
-      new KonamicodeActionRaptorizeConfiguration($this->configFactory),
-      new KonamicodeActionFlipTextConfiguration($this->configFactory),
-      new KonamicodeActionImageSpawnConfiguration($this->configFactory),
-      new KonamicodeActionReplaceImagesConfiguration($this->configFactory),
-      new KonamicodeActionSnowfallConfiguration($this->configFactory),
-      new KonamicodeActionAsteroidsConfiguration($this->configFactory),
+      new KonamicodeActionRedirectConfiguration($this->configFactory, $this->typedConfigManager),
+      new KonamicodeActionAlertConfiguration($this->configFactory, $this->typedConfigManager),
+      new KonamicodeActionRaptorizeConfiguration($this->configFactory, $this->typedConfigManager),
+      new KonamicodeActionFlipTextConfiguration($this->configFactory, $this->typedConfigManager),
+      new KonamicodeActionImageSpawnConfiguration($this->configFactory, $this->typedConfigManager),
+      new KonamicodeActionReplaceImagesConfiguration($this->configFactory, $this->typedConfigManager),
+      new KonamicodeActionSnowfallConfiguration($this->configFactory, $this->typedConfigManager),
+      new KonamicodeActionAsteroidsConfiguration($this->configFactory, $this->typedConfigManager),
     ];
   }
 
diff --git a/tests/src/Unit/KonamicodeHexColorTest.php b/tests/src/Unit/KonamicodeHexColorTest.php
index 7984042..b4f400e 100644
--- a/tests/src/Unit/KonamicodeHexColorTest.php
+++ b/tests/src/Unit/KonamicodeHexColorTest.php
@@ -19,6 +19,13 @@ class KonamicodeHexColorTest extends UnitTestCase {
    */
   protected $configFactory;
 
+  /**
+   * The typed config manager.
+   *
+   * @var \Drupal\Core\Config\TypedConfigManager
+   */
+  protected $typedConfigManager;
+
   /**
    * The action class used to trigger the functions.
    *
@@ -32,9 +39,10 @@ class KonamicodeHexColorTest extends UnitTestCase {
   public function setUp(): void {
     parent::setUp();
     $this->configFactory = $this->createMock('Drupal\Core\Config\ConfigFactory');
+    $this->typedConfigManager = $this->createMock('Drupal\Core\Config\TypedConfigManager');
 
     // Mock that we are the snowfall class.
-    $this->actionClass = new KonamicodeActionSnowfallConfiguration($this->configFactory);
+    $this->actionClass = new KonamicodeActionSnowfallConfiguration($this->configFactory, $this->typedConfigManager);
   }
 
   /**
diff --git a/tests/src/Unit/KonamicodeKeyCodeSequenceTest.php b/tests/src/Unit/KonamicodeKeyCodeSequenceTest.php
index d4d948a..30b6ae2 100644
--- a/tests/src/Unit/KonamicodeKeyCodeSequenceTest.php
+++ b/tests/src/Unit/KonamicodeKeyCodeSequenceTest.php
@@ -18,6 +18,13 @@ class KonamicodeKeyCodeSequenceTest extends UnitTestCase {
    * @var \Drupal\Core\Config\ConfigFactory
    */
   protected $configFactory;
+    
+  /**
+   * The typed config manager.
+   *
+   * @var \Drupal\Core\Config\TypedConfigManager
+   */
+  protected $typedConfigManager;
 
   /**
    * The action class used to trigger the functions.
@@ -32,10 +39,11 @@ class KonamicodeKeyCodeSequenceTest extends UnitTestCase {
   public function setUp(): void {
     parent::setUp();
     $this->configFactory = $this->createMock('Drupal\Core\Config\ConfigFactory');
+    $this->typedConfigManager = $this->createMock('Drupal\Core\Config\TypedConfigManager');
 
     // Just mock that we are one of the action classes in order to be able to
     // call the validation function of the base class.
-    $this->actionClass = new KonamicodeActionAlertConfiguration($this->configFactory);
+    $this->actionClass = new KonamicodeActionAlertConfiguration($this->configFactory, $this->typedConfigManager);
   }
 
   /**
-- 
GitLab