StatusReport.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace Drupal\Core\Render\Element;
  3. /**
  4. * Creates status report page element.
  5. *
  6. * @RenderElement("status_report")
  7. */
  8. class StatusReport extends RenderElement {
  9. /**
  10. * {@inheritdoc}
  11. */
  12. public function getInfo() {
  13. $class = get_class($this);
  14. return [
  15. '#theme' => 'status_report_grouped',
  16. '#priorities' => [
  17. 'error',
  18. 'warning',
  19. 'checked',
  20. 'ok',
  21. ],
  22. '#pre_render' => [
  23. [$class, 'preRenderGroupRequirements'],
  24. ],
  25. ];
  26. }
  27. /**
  28. * #pre_render callback to group requirements.
  29. */
  30. public static function preRenderGroupRequirements($element) {
  31. $severities = static::getSeverities();
  32. $grouped_requirements = [];
  33. foreach ($element['#requirements'] as $key => $requirement) {
  34. $severity = $severities[REQUIREMENT_INFO];
  35. if (isset($requirement['severity'])) {
  36. $requirement_severity = (int) $requirement['severity'] === REQUIREMENT_OK ? REQUIREMENT_INFO : (int) $requirement['severity'];
  37. $severity = $severities[$requirement_severity];
  38. }
  39. elseif (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'install') {
  40. $severity = $severities[REQUIREMENT_OK];
  41. }
  42. $grouped_requirements[$severity['status']]['title'] = $severity['title'];
  43. $grouped_requirements[$severity['status']]['type'] = $severity['status'];
  44. $grouped_requirements[$severity['status']]['items'][$key] = $requirement;
  45. }
  46. // Order the grouped requirements by a set order.
  47. $order = array_flip($element['#priorities']);
  48. uksort($grouped_requirements, function ($a, $b) use ($order) {
  49. return $order[$a] > $order[$b];
  50. });
  51. $element['#grouped_requirements'] = $grouped_requirements;
  52. return $element;
  53. }
  54. /**
  55. * Gets the severities.
  56. *
  57. * @return array
  58. */
  59. public static function getSeverities() {
  60. return [
  61. REQUIREMENT_INFO => [
  62. 'title' => t('Checked'),
  63. 'status' => 'checked',
  64. ],
  65. REQUIREMENT_OK => [
  66. 'title' => t('OK'),
  67. 'status' => 'ok',
  68. ],
  69. REQUIREMENT_WARNING => [
  70. 'title' => t('Warnings found'),
  71. 'status' => 'warning',
  72. ],
  73. REQUIREMENT_ERROR => [
  74. 'title' => t('Errors found'),
  75. 'status' => 'error',
  76. ],
  77. ];
  78. }
  79. }