function SystemRequirements::systemAdvisoriesRequirements

Display requirements from security advisories.

Parameters

array[] $requirements: The requirements array as specified in hook_requirements().

1 call to SystemRequirements::systemAdvisoriesRequirements()
SystemRequirements::checkRequirements in core/modules/system/src/Install/Requirements/SystemRequirements.php
Check requirements for a given phase.

File

core/modules/system/src/Install/Requirements/SystemRequirements.php, line 1620

Class

SystemRequirements
Install time requirements for the system module.

Namespace

Drupal\system\Install\Requirements

Code

public static function systemAdvisoriesRequirements(array &$requirements) : void {
  if (!\Drupal::config('system.advisories')->get('enabled')) {
    return;
  }
  /** @var \Drupal\system\SecurityAdvisories\SecurityAdvisoriesFetcher $fetcher */
  $fetcher = \Drupal::service('system.sa_fetcher');
  try {
    $advisories = $fetcher->getSecurityAdvisories(TRUE, 5);
  } catch (ClientExceptionInterface $exception) {
    $requirements['system_advisories']['title'] = t('Critical security announcements');
    $requirements['system_advisories']['severity'] = RequirementSeverity::Warning;
    $requirements['system_advisories']['description'] = [
      '#theme' => 'system_security_advisories_fetch_error_message',
    ];
    Error::logException(\Drupal::logger('system'), $exception, 'Failed to retrieve security advisory data.');
    return;
  }
  if (!empty($advisories)) {
    $advisory_links = [];
    $severity = RequirementSeverity::Warning;
    foreach ($advisories as $advisory) {
      if (!$advisory->isPsa()) {
        $severity = RequirementSeverity::Error;
      }
      $advisory_links[] = new Link($advisory->getTitle(), Url::fromUri($advisory->getUrl()));
    }
    $requirements['system_advisories']['title'] = t('Critical security announcements');
    $requirements['system_advisories']['severity'] = $severity;
    $requirements['system_advisories']['description'] = [
      'list' => [
        '#theme' => 'item_list',
        '#items' => $advisory_links,
      ],
    ];
    if (\Drupal::moduleHandler()->moduleExists('help')) {
      $requirements['system_advisories']['description']['help_link'] = Link::createFromRoute('What are critical security announcements?', 'help.page', [
        'name' => 'system',
      ], [
        'fragment' => 'security-advisories',
      ])->toRenderable();
    }
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.