Commit 41dce09c authored by catch's avatar catch
Browse files

Issue #309040 by claudiu.cristea, David_Rothstein, Chi, BryanGullan, larowlan,...

Issue #309040 by claudiu.cristea, David_Rothstein, Chi, BryanGullan, larowlan, dww, joachim: Add hook_requirements_alter()

(cherry picked from commit 5e67517d)
parent 0ca81745
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -1022,6 +1022,29 @@ function hook_requirements($phase) {
  return $requirements;
}

/**
 * Alters requirements data.
 *
 * Implementations are able to alter the title, value, description or the
 * severity of certain requirements defined by hook_requirements()
 * implementations or even remove such entries.
 *
 * @param array $requirements
 *   The requirements data to be altered.
 *
 * @see hook_requirements()
 */
function hook_requirements_alter(array &$requirements): void {
  // Change the title from 'PHP' to 'PHP version'.
  $requirements['php']['title'] = t('PHP version');

  // Decrease the 'update status' requirement severity from warning to warning.
  $requirements['update status']['severity'] = REQUIREMENT_INFO;

  // Remove a requirements entry.
  unset($requirements['foo']);
}

/**
 * @} End of "addtogroup hooks".
 */
+1 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ public function listRequirements() {

    // Check run-time requirements and status information.
    $requirements = $this->moduleHandler->invokeAll('requirements', ['runtime']);
    $this->moduleHandler->alter('requirements', $requirements);
    uasort($requirements, function ($a, $b) {
      if (!isset($a['weight'])) {
        if (!isset($b['weight'])) {
+12 −0
Original line number Diff line number Diff line
@@ -20,5 +20,17 @@ function requirements1_test_requirements($phase) {
    ];
  }

  $requirements['requirements1_test_alterable'] = [
    'title' => t('Requirements 1 Test Alterable'),
    'severity' => REQUIREMENT_ERROR,
    'description' => t('A requirement that will be altered.'),
  ];

  $requirements['requirements1_test_deletable'] = [
    'title' => t('Requirements 1 Test Deletable'),
    'severity' => REQUIREMENT_INFO,
    'description' => t('A requirement that will be deleted.'),
  ];

  return $requirements;
}
+18 −0
Original line number Diff line number Diff line
<?php

/**
 * @file
 * Hook implementations for requirements1_test module.
 */

/**
 * Implements hook_requirements_alter().
 */
function requirements1_test_requirements_alter(array &$requirements): void {
  // Change the title.
  $requirements['requirements1_test_alterable']['title'] = t('Requirements 1 Test - Changed');
  // Decrease the severity.
  $requirements['requirements1_test_alterable']['severity'] = REQUIREMENT_WARNING;
  // Delete 'requirements1_test_deletable',
  unset($requirements['requirements1_test_deletable']);
}
+33 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\system\Kernel\Module;

use Drupal\KernelTests\KernelTestBase;

/**
 * @covers \hook_requirements
 * @covers \hook_requirements_alter
 * @group Module
 */
class RequirementsTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'requirements1_test',
    'system',
  ];

  /**
   * Tests requirements data altering.
   */
  public function testRequirementsAlter(): void {
    $requirements = $this->container->get('system.manager')->listRequirements();
    // @see requirements1_test_requirements_alter()
    $this->assertEquals('Requirements 1 Test - Changed', $requirements['requirements1_test_alterable']['title']);
    $this->assertEquals(REQUIREMENT_WARNING, $requirements['requirements1_test_alterable']['severity']);
    $this->assertArrayNotHasKey('requirements1_test_deletable', $requirements);
  }

}