Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
17 merge requests!8506Draft: Issue #3456536 by ibrahim tameme,!5646Issue #3350972 by nod_: [random test failure]...,!5600Issue #3350972 by nod_: [random test failure]...,!5343Issue #3305066 by quietone, Rename RedirectLeadingSlashesSubscriber,!3603#ISSUE 3346218 Add a different message on edit comment,!3555Issue #2473873: Views entity operations lack cacheability support, resulting in incorrect dropbuttons,!3494Issue #3327018 by Spokje, longwave, xjm, mondrake: Update PHPStan to 1.9.3 and...,!3410Issue #3340128: UserLoginForm::submitForm has some dead code,!3389Issue #3325184 by Spokje, andypost, xjm, smustgrave: $this->configFactory is...,!3381Issue #3332363: Refactor Claro's menus-and-lists stylesheet,!3307Issue #3326193: CKEditor 5 can grow past the viewport when there is a lot of content,!3236Issue #3332419: Refactor Claro's messages stylesheet,!3231Draft: Issue #3049525 by longwave, fougere, larowlan, kim.pepper, AaronBauman, Wim...,!3212Issue #3294003: Refactor Claro's entity-meta stylesheet,!3194Issue #3330981: Fix PHPStan L1 error "Relying on entity queries to check access by default is deprecated...",!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!2972Issue #1845004: Replace custom password hashing library with PHP 5.5 password_hash()
...@@ -1022,6 +1022,29 @@ function hook_requirements($phase) { ...@@ -1022,6 +1022,29 @@ function hook_requirements($phase) {
return $requirements; 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". * @} End of "addtogroup hooks".
*/ */
...@@ -107,6 +107,7 @@ public function listRequirements() { ...@@ -107,6 +107,7 @@ public function listRequirements() {
// Check run-time requirements and status information. // Check run-time requirements and status information.
$requirements = $this->moduleHandler->invokeAll('requirements', ['runtime']); $requirements = $this->moduleHandler->invokeAll('requirements', ['runtime']);
$this->moduleHandler->alter('requirements', $requirements);
uasort($requirements, function ($a, $b) { uasort($requirements, function ($a, $b) {
if (!isset($a['weight'])) { if (!isset($a['weight'])) {
if (!isset($b['weight'])) { if (!isset($b['weight'])) {
......
...@@ -20,5 +20,17 @@ function requirements1_test_requirements($phase) { ...@@ -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; return $requirements;
} }
<?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']);
}
<?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);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment