annotate core/modules/system/src/Element/StatusReportPage.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\system\Element;
Chris@0 4
Chris@0 5 use Drupal\Core\Render\Element\RenderElement;
Chris@0 6 use Drupal\Core\Render\Element\StatusReport;
Chris@0 7 use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Creates status report page element.
Chris@0 11 *
Chris@0 12 * @RenderElement("status_report_page")
Chris@0 13 */
Chris@0 14 class StatusReportPage extends RenderElement {
Chris@0 15
Chris@0 16 /**
Chris@0 17 * {@inheritdoc}
Chris@0 18 */
Chris@0 19 public function getInfo() {
Chris@0 20 $class = get_class($this);
Chris@0 21 return [
Chris@0 22 '#theme' => 'status_report_page',
Chris@0 23 '#pre_render' => [
Chris@0 24 [$class, 'preRenderCounters'],
Chris@0 25 [$class, 'preRenderGeneralInfo'],
Chris@0 26 [$class, 'preRenderRequirements'],
Chris@0 27 ],
Chris@0 28 ];
Chris@0 29 }
Chris@0 30
Chris@0 31 /**
Chris@0 32 * #pre_render callback to get general info out of requirements.
Chris@0 33 */
Chris@0 34 public static function preRenderGeneralInfo($element) {
Chris@0 35 $element['#general_info'] = [
Chris@0 36 '#theme' => 'status_report_general_info',
Chris@0 37 ];
Chris@0 38 // Loop through requirements and pull out items.
Chris@0 39 foreach ($element['#requirements'] as $key => $requirement) {
Chris@0 40 switch ($key) {
Chris@0 41 case 'cron':
Chris@0 42 foreach ($requirement['description'] as &$description_elements) {
Chris@0 43 foreach ($description_elements as &$description_element) {
Chris@0 44 if (isset($description_element['#url']) && $description_element['#url']->getRouteName() == 'system.run_cron') {
Chris@0 45 $description_element['#attributes']['class'][] = 'button';
Chris@0 46 $description_element['#attributes']['class'][] = 'button--small';
Chris@0 47 $description_element['#attributes']['class'][] = 'button--primary';
Chris@0 48 $description_element['#attributes']['class'][] = 'system-status-general-info__run-cron';
Chris@0 49 }
Chris@0 50 }
Chris@0 51 }
Chris@0 52 // Intentional fall-through.
Chris@0 53
Chris@0 54 case 'drupal':
Chris@0 55 case 'webserver':
Chris@0 56 case 'database_system':
Chris@0 57 case 'database_system_version':
Chris@0 58 case 'php':
Chris@0 59 case 'php_memory_limit':
Chris@0 60 $element['#general_info']['#' . $key] = $requirement;
Chris@0 61 if (isset($requirement['severity']) && $requirement['severity'] < REQUIREMENT_WARNING) {
Chris@0 62 unset($element['#requirements'][$key]);
Chris@0 63 }
Chris@0 64 break;
Chris@0 65 }
Chris@0 66 }
Chris@0 67
Chris@0 68 return $element;
Chris@0 69 }
Chris@0 70
Chris@0 71 /**
Chris@0 72 * #pre_render callback to create counter elements.
Chris@0 73 */
Chris@0 74 public static function preRenderCounters($element) {
Chris@0 75 // Count number of items with different severity for summary.
Chris@0 76 $counters = [
Chris@0 77 'error' => [
Chris@0 78 'amount' => 0,
Chris@0 79 'text' => t('Error'),
Chris@0 80 'text_plural' => t('Errors'),
Chris@0 81 ],
Chris@0 82 'warning' => [
Chris@0 83 'amount' => 0,
Chris@0 84 'text' => t('Warning'),
Chris@0 85 'text_plural' => t('Warnings'),
Chris@0 86 ],
Chris@0 87 'checked' => [
Chris@0 88 'amount' => 0,
Chris@18 89 'text' => t('Checked', [], ['context' => 'Examined']),
Chris@18 90 'text_plural' => t('Checked', [], ['context' => 'Examined']),
Chris@0 91 ],
Chris@0 92 ];
Chris@0 93
Chris@0 94 $severities = StatusReport::getSeverities();
Chris@0 95 foreach ($element['#requirements'] as $key => &$requirement) {
Chris@0 96 $severity = $severities[REQUIREMENT_INFO];
Chris@0 97 if (isset($requirement['severity'])) {
Chris@0 98 $severity = $severities[(int) $requirement['severity']];
Chris@0 99 }
Chris@0 100 elseif (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'install') {
Chris@0 101 $severity = $severities[REQUIREMENT_OK];
Chris@0 102 }
Chris@0 103
Chris@0 104 if (isset($counters[$severity['status']])) {
Chris@0 105 $counters[$severity['status']]['amount']++;
Chris@0 106 }
Chris@0 107 }
Chris@0 108
Chris@0 109 foreach ($counters as $key => $counter) {
Chris@0 110 if ($counter['amount'] === 0) {
Chris@0 111 continue;
Chris@0 112 }
Chris@0 113
Chris@0 114 $text = new PluralTranslatableMarkup($counter['amount'], $counter['text'], $counter['text_plural']);
Chris@0 115
Chris@0 116 $element['#counters'][$key] = [
Chris@0 117 '#theme' => 'status_report_counter',
Chris@0 118 '#amount' => $counter['amount'],
Chris@0 119 '#text' => $text,
Chris@0 120 '#severity' => $key,
Chris@0 121 ];
Chris@0 122 }
Chris@0 123
Chris@0 124 return $element;
Chris@0 125 }
Chris@0 126
Chris@0 127 /**
Chris@0 128 * #pre_render callback to create status report requirements.
Chris@0 129 */
Chris@0 130 public static function preRenderRequirements($element) {
Chris@0 131 $element['#requirements'] = [
Chris@0 132 '#type' => 'status_report',
Chris@0 133 '#requirements' => $element['#requirements'],
Chris@0 134 ];
Chris@0 135
Chris@0 136 return $element;
Chris@0 137 }
Chris@0 138
Chris@0 139 }