function system_page_top

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

Implements hook_page_top().

File

core/modules/system/system.module, line 1281

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);
        }
      }
    }
  }
}

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