Chris@0: 'status_report_page', Chris@0: '#pre_render' => [ Chris@0: [$class, 'preRenderCounters'], Chris@0: [$class, 'preRenderGeneralInfo'], Chris@0: [$class, 'preRenderRequirements'], Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * #pre_render callback to get general info out of requirements. Chris@0: */ Chris@0: public static function preRenderGeneralInfo($element) { Chris@0: $element['#general_info'] = [ Chris@0: '#theme' => 'status_report_general_info', Chris@0: ]; Chris@0: // Loop through requirements and pull out items. Chris@0: foreach ($element['#requirements'] as $key => $requirement) { Chris@0: switch ($key) { Chris@0: case 'cron': Chris@0: foreach ($requirement['description'] as &$description_elements) { Chris@0: foreach ($description_elements as &$description_element) { Chris@0: if (isset($description_element['#url']) && $description_element['#url']->getRouteName() == 'system.run_cron') { Chris@0: $description_element['#attributes']['class'][] = 'button'; Chris@0: $description_element['#attributes']['class'][] = 'button--small'; Chris@0: $description_element['#attributes']['class'][] = 'button--primary'; Chris@0: $description_element['#attributes']['class'][] = 'system-status-general-info__run-cron'; Chris@0: } Chris@0: } Chris@0: } Chris@0: // Intentional fall-through. Chris@0: Chris@0: case 'drupal': Chris@0: case 'webserver': Chris@0: case 'database_system': Chris@0: case 'database_system_version': Chris@0: case 'php': Chris@0: case 'php_memory_limit': Chris@0: $element['#general_info']['#' . $key] = $requirement; Chris@0: if (isset($requirement['severity']) && $requirement['severity'] < REQUIREMENT_WARNING) { Chris@0: unset($element['#requirements'][$key]); Chris@0: } Chris@0: break; Chris@0: } Chris@0: } Chris@0: Chris@0: return $element; Chris@0: } Chris@0: Chris@0: /** Chris@0: * #pre_render callback to create counter elements. Chris@0: */ Chris@0: public static function preRenderCounters($element) { Chris@0: // Count number of items with different severity for summary. Chris@0: $counters = [ Chris@0: 'error' => [ Chris@0: 'amount' => 0, Chris@0: 'text' => t('Error'), Chris@0: 'text_plural' => t('Errors'), Chris@0: ], Chris@0: 'warning' => [ Chris@0: 'amount' => 0, Chris@0: 'text' => t('Warning'), Chris@0: 'text_plural' => t('Warnings'), Chris@0: ], Chris@0: 'checked' => [ Chris@0: 'amount' => 0, Chris@18: 'text' => t('Checked', [], ['context' => 'Examined']), Chris@18: 'text_plural' => t('Checked', [], ['context' => 'Examined']), Chris@0: ], Chris@0: ]; Chris@0: Chris@0: $severities = StatusReport::getSeverities(); Chris@0: foreach ($element['#requirements'] as $key => &$requirement) { Chris@0: $severity = $severities[REQUIREMENT_INFO]; Chris@0: if (isset($requirement['severity'])) { Chris@0: $severity = $severities[(int) $requirement['severity']]; Chris@0: } Chris@0: elseif (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'install') { Chris@0: $severity = $severities[REQUIREMENT_OK]; Chris@0: } Chris@0: Chris@0: if (isset($counters[$severity['status']])) { Chris@0: $counters[$severity['status']]['amount']++; Chris@0: } Chris@0: } Chris@0: Chris@0: foreach ($counters as $key => $counter) { Chris@0: if ($counter['amount'] === 0) { Chris@0: continue; Chris@0: } Chris@0: Chris@0: $text = new PluralTranslatableMarkup($counter['amount'], $counter['text'], $counter['text_plural']); Chris@0: Chris@0: $element['#counters'][$key] = [ Chris@0: '#theme' => 'status_report_counter', Chris@0: '#amount' => $counter['amount'], Chris@0: '#text' => $text, Chris@0: '#severity' => $key, Chris@0: ]; Chris@0: } Chris@0: Chris@0: return $element; Chris@0: } Chris@0: Chris@0: /** Chris@0: * #pre_render callback to create status report requirements. Chris@0: */ Chris@0: public static function preRenderRequirements($element) { Chris@0: $element['#requirements'] = [ Chris@0: '#type' => 'status_report', Chris@0: '#requirements' => $element['#requirements'], Chris@0: ]; Chris@0: Chris@0: return $element; Chris@0: } Chris@0: Chris@0: }