Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / Form / FormBuilderWrapper.php
diff --git a/web/modules/contrib/devel/webprofiler/src/Form/FormBuilderWrapper.php b/web/modules/contrib/devel/webprofiler/src/Form/FormBuilderWrapper.php
new file mode 100644 (file)
index 0000000..48064b8
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+namespace Drupal\webprofiler\Form;
+
+use Drupal\Core\Form\FormBuilder;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Class FormBuilderWrapper
+ */
+class FormBuilderWrapper extends FormBuilder {
+
+  /**
+   * @var array
+   */
+  private $buildForms;
+
+  /**
+   * @return array
+   */
+  public function getBuildForm() {
+    return $this->buildForms;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
+    parent::prepareForm($form_id, $form, $form_state);
+
+    if (!$this->buildForms) {
+      $this->buildForms = [];
+    }
+
+    $elements = [];
+    foreach ($form as $key => $value) {
+      if (strpos($key, '#') !== 0) {
+        $elements[$key]['#title'] = isset($value['#title']) ? $value['#title'] : NULL;
+        $elements[$key]['#access'] = isset($value['#access']) ? $value['#access'] : NULL;
+        $elements[$key]['#type'] = isset($value['#type']) ? $value['#type'] : NULL;
+      }
+    }
+
+    $buildInfo = $form_state->getBuildInfo();
+
+    $class = get_class($buildInfo['callback_object']);
+    $method = new \ReflectionMethod($class, 'buildForm');
+
+    $this->buildForms[$buildInfo['form_id']] = [
+      'class' => [
+        'class' => $class,
+        'method' => 'buildForm',
+        'file' => $method->getFilename(),
+        'line' => $method->getStartLine(),
+      ],
+      'form' => $elements,
+    ];
+
+    return $form;
+  }
+}