template_preprocess_update_project_status

template_preprocess_update_project_status(&$variables)

Prepares variables for update project status templates.

Default template: update-project-status.html.twig.

Parameters

array $variables: An associative array containing:

  • project: An array of information about the project.

File

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

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
function template_preprocess_update_project_status(&$variables) {
  // Storing by reference because we are sorting the project values.
  $project = &$variables['project'];
 
  // Set the project title and URL.
  $variables['title'] = (isset($project['title'])) ? $project['title'] : $project['name'];
  $variables['url'] = (isset($project['link'])) ? Url::fromUri($project['link'])->toString() : NULL;
 
  $variables['install_type'] = $project['install_type'];
  if ($project['install_type'] == 'dev' && !empty($project['datestamp'])) {
    $variables['datestamp'] = format_date($project['datestamp'], 'custom', 'Y-M-d');
  }
 
  $variables['existing_version'] = $project['existing_version'];
 
  $versions_inner = array();
  $security_class = array();
  $version_class = array();
  if (isset($project['recommended'])) {
    if ($project['status'] != UPDATE_CURRENT || $project['existing_version'] !== $project['recommended']) {
 
      // First, figure out what to recommend.
      // If there's only 1 security update and it has the same version we're
      // recommending, give it the same CSS class as if it was recommended,
      // but don't print out a separate "Recommended" line for this project.
      if (!empty($project['security updates'])
       && count($project['security updates']) == 1
         && $project['security updates'][0]['version'] === $project['recommended']
        ) {
        $security_class[] = 'project-update__version--recommended';
        $security_class[] = 'project-update__version---strong';
      }
      else {
        $version_class[] = 'project-update__version--recommended';
        // Apply an extra class if we're displaying both a recommended
        // version and anything else for an extra visual hint.
        if ($project['recommended'] !== $project['latest_version']
         || !empty($project['also'])
           || ($project['install_type'] == 'dev'
            && isset($project['dev_version'])
            && $project['latest_version'] !== $project['dev_version']
            && $project['recommended'] !== $project['dev_version'])
             || (isset($project['security updates'][0])
            && $project['recommended'] !== $project['security updates'][0])
            ) {
          $version_class[] = 'project-update__version--recommended-strong';
        }
        $versions_inner[] = array(
          '#theme' => 'update_version',
          '#version' => $project['releases'][$project['recommended']],
          '#title' => t('Recommended version:'),
          '#attributes' => array('class' => $version_class),
        );
      }
 
      // Now, print any security updates.
      if (!empty($project['security updates'])) {
        $security_class[] = 'version-security';
        foreach ($project['security updates'] as $security_update) {
          $versions_inner[] = array(
            '#theme' => 'update_version',
            '#version' => $security_update,
            '#title' => t('Security update:'),
            '#attributes' => array('class' => $security_class),
          );
        }
      }
    }
 
    if ($project['recommended'] !== $project['latest_version']) {
      $versions_inner[] = array(
        '#theme' => 'update_version',
        '#version' => $project['releases'][$project['latest_version']],
        '#title' => t('Latest version:'),
        '#attributes' => array('class' => array('version-latest')),
      );
    }
    if ($project['install_type'] == 'dev'
     && $project['status'] != UPDATE_CURRENT
       && isset($project['dev_version'])
       && $project['recommended'] !== $project['dev_version']) {
      $versions_inner[] = array(
        '#theme' => 'update_version',
        '#version' => $project['releases'][$project['dev_version']],
        '#title' => t('Development version:'),
        '#attributes' => array('class' => array('version-latest')),
      );
    }
  }
 
  if (isset($project['also'])) {
    foreach ($project['also'] as $also) {
      $versions_inner[] = array(
        '#theme' => 'update_version',
        '#version' => $project['releases'][$also],
        '#title' => t('Also available:'),
        '#attributes' => array('class' => array('version-also-available')),
      );
    }
  }
 
  if (!empty($versions_inner)) {
    $variables['versions'] = $versions_inner;
  }
 
  if (!empty($project['disabled'])) {
    sort($project['disabled']);
    $variables['disabled'] = $project['disabled'];
  }
 
  sort($project['includes']);
  $variables['includes'] = $project['includes'];
 
  $variables['extras'] = array();
  if (!empty($project['extra'])) {
    foreach ($project['extra'] as $value) {
      $extra_item = array();
      $extra_item['attributes'] = new Attribute();
      $extra_item['label'] = $value['label'];
      $extra_item['data'] = [
        '#prefix' => '<em>',
        '#markup' => $value['data'],
        '#suffix' => '</em>'
      ];
      $variables['extras'][] = $extra_item;
    }
  }
 
  // Set the project status details.
  $status_label = NULL;
  switch ($project['status']) {
    case UPDATE_NOT_SECURE:
      $status_label = t('Security update required!');
      break;
    case UPDATE_REVOKED:
      $status_label = t('Revoked!');
      break;
    case UPDATE_NOT_SUPPORTED:
      $status_label = t('Not supported!');
      break;
    case UPDATE_NOT_CURRENT:
      $status_label = t('Update available');
      break;
    case UPDATE_CURRENT:
      $status_label = t('Up to date');
      break;
  }
  $variables['status']['label'] = $status_label;
  $variables['status']['attributes'] = new Attribute();
  $variables['status']['reason'] = (isset($project['reason'])) ? $project['reason'] : NULL;
 
  switch ($project['status']) {
    case UPDATE_CURRENT:
      $uri = 'core/misc/icons/73b355/check.svg';
      $text = t('Ok');
      break;
    case UPDATE_UNKNOWN:
    case UPDATE_FETCH_PENDING:
    case UPDATE_NOT_FETCHED:
      $uri = 'core/misc/icons/e29700/warning.svg';
      $text = t('Warning');
      break;
    case UPDATE_NOT_SECURE:
    case UPDATE_REVOKED:
    case UPDATE_NOT_SUPPORTED:
      $uri = 'core/misc/icons/e32700/error.svg';
      $text = t('Error');
      break;
    case UPDATE_NOT_CHECKED:
    case UPDATE_NOT_CURRENT:
    default:
      $uri = 'core/misc/icons/e29700/warning.svg';
      $text = t('Warning');
      break;
  }
 
  $variables['status']['icon'] = array(
    '#theme' => 'image',
    '#width' => 18,
    '#height' => 18,
    '#uri' => $uri,
    '#alt' => $text,
    '#title' => $text,
  );
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.