diff -u b/core/modules/system/src/Controller/SystemInfoController.php b/core/modules/system/src/Controller/SystemInfoController.php --- b/core/modules/system/src/Controller/SystemInfoController.php +++ b/core/modules/system/src/Controller/SystemInfoController.php @@ -47,7 +47,7 @@ */ public function status() { $requirements = $this->systemManager->listRequirements(); - return ['#type' => 'status_report_page', '#requirements' => $requirements]; + return ['#type' => 'status_report', '#requirements' => $requirements]; } /** diff -u b/core/modules/system/src/Element/StatusReport.php b/core/modules/system/src/Element/StatusReport.php --- b/core/modules/system/src/Element/StatusReport.php +++ b/core/modules/system/src/Element/StatusReport.php @@ -3,9 +3,10 @@ namespace Drupal\system\Element; use Drupal\Core\Render\Element\RenderElement; +use Drupal\Core\StringTranslation\PluralTranslatableMarkup; /** - * Creates status report page element. + * Creates status report element. * * @RenderElement("status_report") */ @@ -18,20 +19,114 @@ $class = get_class($this); return [ '#theme' => 'status_report', - '#priorities' => [ - 'error', - 'warning', - 'checked', - 'ok', - ], '#pre_render' => [ + [$class, 'preRenderCounters'], [$class, 'preRenderGroupRequirements'], + [$class, 'preRenderGeneralInfo'], ], ]; } /** - * #pre_render callback to group requirements. + * #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['#grouped_requirements'] as $key => $group) { + foreach ($group['items'] as $requirement_key => $requirement) { + switch ($requirement_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'; + } + } + } + $element['#general_info']['#' . $requirement_key] = $requirement; + unset($element['#grouped_requirements'][$key][$requirement_key]); + break; + + case 'drupal': + case 'webserver': + case 'database_system': + case 'database_system_version': + case 'php': + case 'php_memory_limit': + $element['#general_info']['#' . $requirement_key] = $requirement; + unset($element['#grouped_requirements'][$key][$requirement_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 = static::getServerities(); + 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 grou group requirement array. */ public static function preRenderGroupRequirements($element) { $severities = static::getServerities(); @@ -51,10 +146,13 @@ $grouped_requirements[$severity['status']]['items'][$key] = $requirement; } - // Order the grouped requirements by a set order. - $order = array_flip($element['#priorities']); - uksort($grouped_requirements, function ($a, $b) use ($order) { - return $order[$a] > $order[$b]; + // Order the grouped requirements by the counter keys. Add 'ok' to place + // that status group as last. + $counters = array_keys($element['#counters']); + $counters[] = 'ok'; + $counter_keys = array_flip($counters); + uksort($grouped_requirements, function ($a, $b) use ($counter_keys) { + return $counter_keys[$a] > $counter_keys[$b]; }); $element['#grouped_requirements'] = $grouped_requirements; reverted: --- b/core/modules/system/src/Element/StatusReportPage.php +++ /dev/null @@ -1,138 +0,0 @@ - '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'; - } - } - } - $element['#general_info']['#' . $key] = $requirement; - unset($element['#requirements'][$key]); - break; - - case 'drupal': - case 'webserver': - case 'database_system': - case 'database_system_version': - case 'php': - case 'php_memory_limit': - $element['#general_info']['#' . $key] = $requirement; - 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 = static::getServerities(); - 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; - } - -} diff -u b/core/modules/system/system.module b/core/modules/system/system.module --- b/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -197,15 +197,10 @@ 'render element' => 'form', 'file' => 'system.admin.inc', ), - 'status_report_page' => array( + 'status_report' => array( 'variables' => array( 'counters' => array(), 'general_info' => array(), - 'requirements' => NULL, - ), - ), - 'status_report' => array( - 'variables' => array( 'grouped_requirements' => NULL, ), ), diff -u b/core/modules/system/templates/status-report-counter.html.twig b/core/modules/system/templates/status-report-counter.html.twig --- b/core/modules/system/templates/status-report-counter.html.twig +++ b/core/modules/system/templates/status-report-counter.html.twig @@ -14,5 +14,5 @@ - {{ amount }} {{ text }} -
- {{ text }} Details + {{ amount }} {{ text }} +
+ {{ text }} Details reverted: --- b/core/modules/system/templates/status-report-page.html.twig +++ /dev/null @@ -1,18 +0,0 @@ -{# -/** - * @file - * Default theme implementation for the status report page. - * - * Available variables: - * - counters: The list of counter elements. - * - general_info: A render array to create general info element. - * - requirements: A render array to create requirements table. - * - * @ingroup themeable - */ -#} -{% for counter in counters %} - {{ counter }} -{% endfor %} -{{ general_info }} -{{ requirements }} diff -u b/core/modules/system/templates/status-report.html.twig b/core/modules/system/templates/status-report.html.twig --- b/core/modules/system/templates/status-report.html.twig +++ b/core/modules/system/templates/status-report.html.twig @@ -15,10 +15,18 @@ * - description: (optional) The requirement's description. * - severity_title: The title of the severity. * - severity_status: Indicates the severity status. + * - counters: The list of counter elements. + * - general_info: A render array to create general info element. * * @ingroup themeable */ #} +{% for counter in counters %} + {{ counter }} +{% endfor %} + +{{ general_info }} + {% for group in grouped_requirements %}

{{ group.title }}

{% for requirement in group.items %} reverted: --- b/core/themes/classy/templates/admin/status-report-page.html.twig +++ /dev/null @@ -1,28 +0,0 @@ -{# -/** - * @file - * Theme override for the status report page. - * - * Available variables: - * - counters: The list of counter elements. - * - general_info: A render array to create general info element. - * - requirements: A render array to create requirements table. - * - * @see template_preprocess_status_report() - */ -#} -{% if counters|length == 3 %} - {% set element_width_class = ' system-status-report-counters__item--third-width' %} -{% elseif counters|length == 2 %} - {% set element_width_class = ' system-status-report-counters__item--half-width' %} -{% endif %} -
- {% for counter in counters %} -
- {{ counter }} -
- {% endfor %} -
- -{{ general_info }} -{{ requirements }} reverted: --- b/core/themes/seven/templates/status-report.html.twig +++ /dev/null @@ -1,48 +0,0 @@ -{# -/** - * @file - * Theme override to display status report. - * - * - grouped_requirements: Contains grouped requirements. - * Each group contains: - * - title: The title of the group. - * - type: The severity of the group. - * - items: The requirement instances. - * Each requirement item contains: - * - title: The title of the requirement. - * - value: (optional) The requirement's status. - * - description: (optional) The requirement's description. - * - severity_title: The title of the severity. - * - severity_status: Indicates the severity status. - */ -#} -{{ attach_library('core/drupal.collapse') }} -{{ attach_library('seven/drupal.responsive-detail') }} - -
- {% for group in grouped_requirements %} -
-

{{ group.title }}

- {% for requirement in group.items %} -
- {% if group.type in ['warning', 'error'] %} - {% set summary_classes = ' system-status-report__status-icon system-status-report__status-icon--' ~ group.type %} - {% endif %} - - {% if requirement.severity_title %} - {{ requirement.severity_title }} - {% endif %} - {{ requirement.title }} - - -
- {{ requirement.value }} - {% if requirement.description %} -
{{ requirement.description }}
- {% endif %} -
-
- {% endfor %} -
- {% endfor %} -
diff -u b/core/themes/stable/stable.theme b/core/themes/stable/stable.theme --- b/core/themes/stable/stable.theme +++ b/core/themes/stable/stable.theme @@ -74,12 +74,6 @@ ], ]; - if (empty($variables['requirements'])) { - foreach ($variables['grouped_requirements'] as $group) { - $variables['requirements'][] += $group['items']; - } - } - foreach ($variables['requirements'] as $i => $requirement) { // Always use the explicit requirement severity, if defined. Otherwise, // default to REQUIREMENT_OK in the installer to visually confirm that reverted: --- b/core/themes/stable/templates/admin/status-report-page.html.twig +++ /dev/null @@ -1,18 +0,0 @@ -{# -/** - * @file - * Default theme implementation for the status report page. - * - * Available variables: - * - counters: The list of counter elements. - * - general_info: A render array to create general info element. - * - requirements: A render array to create requirements table. - * - * @ingroup themeable - */ -#} -{% for counter in counters %} - {{ counter }} -{% endfor %} -{{ general_info }} -{{ requirements }} diff -u b/core/themes/stable/templates/admin/status-report.html.twig b/core/themes/stable/templates/admin/status-report.html.twig --- b/core/themes/stable/templates/admin/status-report.html.twig +++ b/core/themes/stable/templates/admin/status-report.html.twig @@ -16,6 +16,8 @@ * - severity_title: The title of the severity. * - severity_status: Indicates the severity status. * - requirements: Contains list of requirements without grouping. + * - counters: The list of counter elements. + * - general_info: A render array to create general info element. * * @see stable_preprocess_status_report() */ only in patch2: unchanged: --- /dev/null +++ b/core/themes/seven/templates/status-report/status-report.html.twig @@ -0,0 +1,68 @@ +{# +/** + * @file + * Theme override for the status report. + * + * Available variables: + * - grouped_requirements: Contains grouped requirements. + * Each group contains: + * - title: The title of the group. + * - type: The severity of the group. + * - items: The requirement instances. + * Each requirement item contains: + * - title: The title of the requirement. + * - value: (optional) The requirement's status. + * - description: (optional) The requirement's description. + * - severity_title: The title of the severity. + * - severity_status: Indicates the severity status. + * - counters: The list of counter elements. + * - general_info: A render array to create general info element. + * + * @see template_preprocess_status_report() + */ +#} +{% if counters|length == 3 %} + {% set element_width_class = ' system-status-report-counters__item--third-width' %} +{% elseif counters|length == 2 %} + {% set element_width_class = ' system-status-report-counters__item--half-width' %} +{% endif %} +
+ {% for counter in counters %} +
+ {{ counter }} +
+ {% endfor %} +
+ +{{ general_info }} + +{{ attach_library('core/drupal.collapse') }} +{{ attach_library('seven/drupal.responsive-detail') }} + +
+ {% for group in grouped_requirements %} +
+

{{ group.title }}

+ {% for requirement in group.items %} +
+ {% if group.type in ['warning', 'error'] %} + {% set summary_classes = ' system-status-report__status-icon system-status-report__status-icon--' ~ group.type %} + {% endif %} + + {% if requirement.severity_title %} + {{ requirement.severity_title }} + {% endif %} + {{ requirement.title }} + + +
+ {{ requirement.value }} + {% if requirement.description %} +
{{ requirement.description }}
+ {% endif %} +
+
+ {% endfor %} +
+ {% endfor %} +