Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / devel / src / Controller / LayoutInfoController.php
diff --git a/web/modules/contrib/devel/src/Controller/LayoutInfoController.php b/web/modules/contrib/devel/src/Controller/LayoutInfoController.php
new file mode 100644 (file)
index 0000000..4a2cff2
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+
+namespace Drupal\devel\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Layout\LayoutPluginManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Returns response for Layout Info route.
+ */
+class LayoutInfoController extends ControllerBase {
+
+  /**
+   * The Layout Plugin Manager.
+   *
+   * @var Drupal\Core\Layout\LayoutPluginManagerInterface
+   */
+  protected $layoutPluginManager;
+
+  /**
+   * LayoutInfoController constructor.
+   *
+   * @param \Drupal\Core\Layout\LayoutPluginManagerInterface $pluginManagerLayout
+   *   The layout manager.
+   */
+  public function __construct(LayoutPluginManagerInterface $pluginManagerLayout) {
+    $this->layoutPluginManager = $pluginManagerLayout;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.core.layout')
+    );
+  }
+
+  /**
+   * Builds the Layout Info page.
+   *
+   * @return array
+   *   Array of page elements to render.
+   */
+  public function layoutInfoPage() {
+    $definedLayouts = [];
+    $layouts = $this->layoutPluginManager->getDefinitions();
+    foreach ($layouts as $layout) {
+      // @todo Revisit once https://www.drupal.org/node/2660124 gets in, getting
+      // the image should be as simple as $layout->getIcon().
+      $image = NULL;
+      if ($layout->getIconPath() != NULL) {
+        $image = [
+          'data' => [
+            '#theme' => 'image',
+            '#uri' => $layout->getIconPath(),
+            '#alt' => $layout->getLabel(),
+            '#height' => '65',
+          ]
+        ];
+      }
+      $definedLayouts[] = [
+        $image,
+        $layout->getLabel(),
+        $layout->getDescription(),
+        $layout->getCategory(),
+        implode(', ', $layout->getRegionLabels()),
+        $layout->getProvider(),
+      ];
+    }
+
+    return [
+      '#theme' => 'table',
+      '#header' => [
+        $this->t('Icon'),
+        $this->t('Label'),
+        $this->t('Description'),
+        $this->t('Category'),
+        $this->t('Regions'),
+        $this->t('Provider'),
+      ],
+      '#rows' => $definedLayouts,
+      '#empty' => $this->t('No layouts available.'),
+      '#attributes' => [
+        'class' => ['devel-layout-list'],
+      ],
+    ];
+  }
+
+}