Version 1
[yaffs-website] / web / modules / contrib / entity_browser / src / Plugin / views / field / SelectForm.php
diff --git a/web/modules/contrib/entity_browser/src/Plugin/views/field/SelectForm.php b/web/modules/contrib/entity_browser/src/Plugin/views/field/SelectForm.php
new file mode 100644 (file)
index 0000000..d498082
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+
+namespace Drupal\entity_browser\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\views\Plugin\views\style\Table;
+use Drupal\views\ResultRow;
+use Drupal\views\Render\ViewsRenderPipelineMarkup;
+
+/**
+ * Defines a bulk operation form element that works with entity browser.
+ *
+ * @ViewsField("entity_browser_select")
+ */
+class SelectForm extends FieldPluginBase {
+
+  /**
+   * Returns the ID for a result row.
+   *
+   * @param \Drupal\views\ResultRow $row
+   *   The result row.
+   *
+   * @return string
+   *   The row ID, in the form ENTITY_TYPE:ENTITY_ID.
+   */
+  public function getRowId(ResultRow $row) {
+    $entity = $this->getEntity($row);
+    return $entity->getEntityTypeId() . ':' . $entity->id();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render(ResultRow $values) {
+    return ViewsRenderPipelineMarkup::create('<!--form-item-' . $this->options['id'] . '--' . $this->getRowId($values) . '-->');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function preRender(&$values) {
+    parent::preRender($values);
+
+    // If the view is using a table style, provide a placeholder for a
+    // "select all" checkbox.
+    if (!empty($this->view->style_plugin) && $this->view->style_plugin instanceof Table) {
+      // Add the tableselect css classes.
+      $this->options['element_label_class'] .= 'select-all';
+      // Hide the actual label of the field on the table header.
+      $this->options['label'] = '';
+    }
+  }
+
+  /**
+   * Form constructor for the bulk form.
+   *
+   * @param array $render
+   *   An associative array containing the structure of the form.
+   */
+  public function viewsForm(&$render) {
+    // Only add the bulk form options and buttons if there are results.
+    if (!empty($this->view->result)) {
+      // Render checkboxes for all rows.
+      $render[$this->options['id']]['#tree'] = TRUE;
+      $render[$this->options['id']]['#printed'] = TRUE;
+      foreach ($this->view->result as $row) {
+        $value = $this->getRowId($row);
+
+        $render[$this->options['id']][$value] = [
+          '#type' => 'checkbox',
+          '#title' => $this->t('Select this item'),
+          '#title_display' => 'invisible',
+          '#return_value' => $value,
+          '#attributes' => ['name' => "entity_browser_select[$value]"],
+          '#default_value' => NULL,
+        ];
+      }
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function clickSortable() {
+    return FALSE;
+  }
+
+}