Skip to content
Snippets Groups Projects
Commit 5e67517d 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()
parent 8d8d4e5e
No related branches found
No related tags found
36 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
......@@ -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.
Finish editing this message first!
Please register or to comment