You are here

function template_preprocess_update_report in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/update/update.report.inc \template_preprocess_update_report()
  2. 10 core/modules/update/update.report.inc \template_preprocess_update_report()

Prepares variables for project status report templates.

Default template: update-report.html.twig.

Parameters

array $variables: An associative array containing:

  • data: An array of data about each project's status.
1 call to template_preprocess_update_report()
UpdateReportTest::testTemplatePreprocessUpdateReport in core/modules/update/tests/src/Kernel/UpdateReportTest.php
@dataProvider providerTemplatePreprocessUpdateReport

File

core/modules/update/update.report.inc, line 23
Code required only when rendering the available updates report.

Code

function template_preprocess_update_report(&$variables) {
  $data = isset($variables['data']) && is_array($variables['data']) ? $variables['data'] : [];
  $last = \Drupal::state()
    ->get('update.last_check', 0);
  $variables['last_checked'] = [
    '#theme' => 'update_last_check',
    '#last' => $last,
    // Attach the library to a variable that gets printed always.
    '#attached' => [
      'library' => [
        'update/drupal.update.admin',
      ],
    ],
  ];

  // For no project update data, populate no data message.
  if (empty($data)) {
    $variables['no_updates_message'] = _update_no_data();
  }
  $rows = [];
  foreach ($data as $project) {
    $project_status = [
      '#theme' => 'update_project_status',
      '#project' => $project,
    ];

    // Build project rows.
    if (!isset($rows[$project['project_type']])) {
      $rows[$project['project_type']] = [
        '#type' => 'table',
        '#attributes' => [
          'class' => [
            'update',
          ],
        ],
      ];
    }
    $row_key = !empty($project['title']) ? mb_strtolower($project['title']) : mb_strtolower($project['name']);

    // Add the project status row and details.
    $rows[$project['project_type']][$row_key]['status'] = $project_status;

    // Add project status class attribute to the table row.
    switch ($project['status']) {
      case UpdateManagerInterface::CURRENT:
        $rows[$project['project_type']][$row_key]['#attributes'] = [
          'class' => [
            'color-success',
          ],
        ];
        break;
      case UpdateFetcherInterface::UNKNOWN:
      case UpdateFetcherInterface::FETCH_PENDING:
      case UpdateFetcherInterface::NOT_FETCHED:
      case UpdateManagerInterface::NOT_SECURE:
      case UpdateManagerInterface::REVOKED:
      case UpdateManagerInterface::NOT_SUPPORTED:
        $rows[$project['project_type']][$row_key]['#attributes'] = [
          'class' => [
            'color-error',
          ],
        ];
        break;
      case UpdateFetcherInterface::NOT_CHECKED:
      case UpdateManagerInterface::NOT_CURRENT:
      default:
        $rows[$project['project_type']][$row_key]['#attributes'] = [
          'class' => [
            'color-warning',
          ],
        ];
        break;
    }
  }
  $project_types = [
    'core' => t('Drupal core'),
    'module' => t('Modules'),
    'theme' => t('Themes'),
    'module-disabled' => t('Uninstalled modules'),
    'theme-disabled' => t('Uninstalled themes'),
  ];
  $variables['project_types'] = [];
  foreach ($project_types as $type_name => $type_label) {
    if (!empty($rows[$type_name])) {
      ksort($rows[$type_name]);
      $variables['project_types'][] = [
        'label' => $type_label,
        'table' => $rows[$type_name],
      ];
    }
  }
}