Mercurial > hg > isophonics-drupal-site
diff core/modules/system/src/Element/StatusReportPage.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/system/src/Element/StatusReportPage.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,139 @@ +<?php + +namespace Drupal\system\Element; + +use Drupal\Core\Render\Element\RenderElement; +use Drupal\Core\Render\Element\StatusReport; +use Drupal\Core\StringTranslation\PluralTranslatableMarkup; + +/** + * Creates status report page element. + * + * @RenderElement("status_report_page") + */ +class StatusReportPage extends RenderElement { + + /** + * {@inheritdoc} + */ + public function getInfo() { + $class = get_class($this); + return [ + '#theme' => 'status_report_page', + '#pre_render' => [ + [$class, 'preRenderCounters'], + [$class, 'preRenderGeneralInfo'], + [$class, 'preRenderRequirements'], + ], + ]; + } + + /** + * #pre_render callback to get general info out of requirements. + */ + public static function preRenderGeneralInfo($element) { + $element['#general_info'] = [ + '#theme' => 'status_report_general_info', + ]; + // Loop through requirements and pull out items. + 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']) && $requirement['severity'] < REQUIREMENT_WARNING) { + unset($element['#requirements'][$key]); + } + break; + } + } + + return $element; + } + + /** + * #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'), + 'text_plural' => t('Checked'), + ], + ]; + + $severities = StatusReport::getSeverities(); + foreach ($element['#requirements'] as $key => &$requirement) { + $severity = $severities[REQUIREMENT_INFO]; + if (isset($requirement['severity'])) { + $severity = $severities[(int) $requirement['severity']]; + } + elseif (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'install') { + $severity = $severities[REQUIREMENT_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; + } + + /** + * #pre_render callback to create status report requirements. + */ + public static function preRenderRequirements($element) { + $element['#requirements'] = [ + '#type' => 'status_report', + '#requirements' => $element['#requirements'], + ]; + + return $element; + } + +}