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
|
<?php
namespace Drupal\system\Element;
use Drupal\Core\Extension\Requirement\RequirementSeverity;
use Drupal\Core\Render\Attribute\RenderElement;
use Drupal\Core\Render\Element\RenderElementBase;
use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
/**
* Creates status report page element.
*/
#[RenderElement('status_report_page')]
class StatusReportPage extends RenderElementBase {
/**
* {@inheritdoc}
*/
public function getInfo() {
return [
'#theme' => 'status_report_page',
'#pre_render' => [
[static::class, 'preRenderCounters'],
[static::class, 'preRenderGeneralInfo'],
[static::class, 'preRenderRequirements'],
],
];
}
/**
* Render API callback: Gets general info out of requirements.
*
* This function is assigned as a #pre_render callback.
*/
public static function preRenderGeneralInfo($element) {
$element['#general_info'] = [
'#theme' => 'status_report_general_info',
];
// Loop through requirements and pull out items.
RequirementSeverity::convertLegacyIntSeveritiesToEnums($element['#requirements'], __METHOD__);
foreach ($element['#requirements'] as $key => $requirement) {
switch ($key) {
case 'cron':
foreach ($requirement['description'] as &$description_elements) {
foreach ($description_elements as &$description_element) {
if (isset($description_element['#url']) && $description_element['#url']->getRouteName() == 'system.run_cron') {
$description_element['#attributes']['class'][] = 'button';
$description_element['#attributes']['class'][] = 'button--small';
$description_element['#attributes']['class'][] = 'button--primary';
$description_element['#attributes']['class'][] = 'system-status-general-info__run-cron';
}
}
}
// Intentional fall-through.
case 'drupal':
case 'webserver':
case 'database_system':
case 'database_system_version':
case 'php':
case 'php_memory_limit':
$element['#general_info']['#' . $key] = $requirement;
if (isset($requirement['severity']) &&
in_array($requirement['severity'], [RequirementSeverity::Info, RequirementSeverity::OK], TRUE)
) {
unset($element['#requirements'][$key]);
}
break;
}
}
return $element;
}
/**
* The #pre_render callback to create counter elements.
*/
public static function preRenderCounters($element) {
// Count number of items with different severity for summary.
$counters = [
'error' => [
'amount' => 0,
'text' => t('Error'),
'text_plural' => t('Errors'),
],
'warning' => [
'amount' => 0,
'text' => t('Warning'),
'text_plural' => t('Warnings'),
],
'checked' => [
'amount' => 0,
'text' => t('Checked', [], ['context' => 'Examined']),
'text_plural' => t('Checked', [], ['context' => 'Examined']),
],
];
RequirementSeverity::convertLegacyIntSeveritiesToEnums($element['#requirements'], __METHOD__);
foreach ($element['#requirements'] as $key => &$requirement) {
$severity = RequirementSeverity::Info;
if (isset($requirement['severity'])) {
$severity = $requirement['severity'];
}
elseif (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'install') {
$severity = RequirementSeverity::OK;
}
if (isset($counters[$severity->status()])) {
$counters[$severity->status()]['amount']++;
}
}
foreach ($counters as $key => $counter) {
if ($counter['amount'] === 0) {
continue;
}
$text = new PluralTranslatableMarkup($counter['amount'], $counter['text'], $counter['text_plural']);
$element['#counters'][$key] = [
'#theme' => 'status_report_counter',
'#amount' => $counter['amount'],
'#text' => $text,
'#severity' => $key,
];
}
return $element;
}
/**
* Render API callback: Create status report requirements.
*
* This function is assigned as a #pre_render callback.
*/
public static function preRenderRequirements($element) {
$element['#requirements'] = [
'#type' => 'status_report',
'#requirements' => $element['#requirements'],
'#attached' => [
'library' => [
'system/status.report',
],
],
];
return $element;
}
}
|