Skip to content
Snippets Groups Projects
Commit d6cd7472 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 d9679796
Branches
Tags
23 merge requests!8394[warning] array_flip(): Can only flip STRING and INTEGER values, when saving a non-revisionable custom content entity,!7780issue 3443822: fix for 'No route found for the specified format html. Supported formats: json, xml.',!5013Issue #3071143: Table Render Array Example Is Incorrect,!4848Issue #1566662: Update module should send notifications on Thursdays,!4792Issue #2230689: Remove redundant "Italic" style,!4220Issue #3368223: Link field > Access to internal links is not checked on display.,!3884Issue #3356842,!3870Issue #3087868,!3812Draft: Issue #3339373 by alexpott, andypost, mondrake:...,!3686Issue #3219967 against 9.5.x,!3683Issue #2939397: Clearing AliasManager cache with root path raises warning,!3543Issue #3344259: Allow ajax dialog to have focus configurable,!3356Issue #3209129: Scrolling problems when adding a block via layout builder,!2921Issue #1383696: Allow a custom HTML element to be selected for a grouping field,!2280Issue #3280415: Metapackage Generator Breaks Under Composer --no-dev,!2205Quote all names in the regions section.,!2050Issue #3272969: Remove UnqiueField constraint.,!1956Issue #3268872: hook_views_invalidate_cache not called when a view is deleted,!1893Issue #3217260: Add a way to make media captions not editable in CKEditor,!1459Issue #3087632: menu_name max length is too long,!878Issue #3221534: throw an exception when IDs passed to loadMultiple() are badly formed,!866Issue #2845319: The highlighting of the 'Home' menu-link does not respect query strings and fragment identifiers,!204Issue #3040556: It is not possible to react to an entity being duplicated
......@@ -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".
*/
......@@ -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'])) {
......
......@@ -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;
}
<?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.
Please register or to comment