You are here

function system_page_top in Drupal 9

Same name and namespace in other branches
  1. 10 core/modules/system/system.module \system_page_top()

Implements hook_page_top().

File

core/modules/system/system.module, line 1336
Configuration system that lets administrators modify the workings of the site.

Code

function system_page_top() {

  /** @var \Drupal\Core\Routing\AdminContext $admin_context */
  $admin_context = \Drupal::service('router.admin_context');
  if ($admin_context
    ->isAdminRoute() && \Drupal::currentUser()
    ->hasPermission('administer site configuration')) {
    $route_match = \Drupal::routeMatch();
    $route_name = $route_match
      ->getRouteName();
    if ($route_name !== 'system.status' && \Drupal::config('system.advisories')
      ->get('enabled')) {

      /** @var \Drupal\system\SecurityAdvisories\SecurityAdvisoriesFetcher $fetcher */
      $fetcher = \Drupal::service('system.sa_fetcher');
      $advisories = $fetcher
        ->getSecurityAdvisories(FALSE);
      if ($advisories) {
        $messenger = \Drupal::messenger();
        $display_as_errors = FALSE;
        $links = [];
        foreach ($advisories as $advisory) {

          // To ensure that all the advisory messages are grouped together on
          // the page, they must all be warnings or all be errors. If any
          // advisories are not public service announcements, then display all
          // the messages as errors because security advisories already tied to
          // a specific release are immediately actionable by upgrading to a
          // secure version of a project.
          $display_as_errors = $display_as_errors ? TRUE : !$advisory
            ->isPsa();
          $links[] = new Link($advisory
            ->getTitle(), Url::fromUri($advisory
            ->getUrl()));
        }
        foreach ($links as $link) {
          $display_as_errors ? $messenger
            ->addError($link) : $messenger
            ->addWarning($link);
        }
        if (\Drupal::moduleHandler()
          ->moduleExists('help')) {
          $help_link = t('(<a href=":system-help">What are critical security announcements?</a>)', [
            ':system-help' => Url::fromRoute('help.page', [
              'name' => 'system',
            ], [
              'fragment' => 'security-advisories',
            ])
              ->toString(),
          ]);
          $display_as_errors ? $messenger
            ->addError($help_link) : $messenger
            ->addWarning($help_link);
        }
      }
    }
  }
}