Added Entity and Entity Reference Revisions which got dropped somewhere along the...
[yaffs-website] / web / modules / contrib / entity_reference_revisions / src / Plugin / views / display / EntityReferenceRevisions.php
diff --git a/web/modules/contrib/entity_reference_revisions/src/Plugin/views/display/EntityReferenceRevisions.php b/web/modules/contrib/entity_reference_revisions/src/Plugin/views/display/EntityReferenceRevisions.php
new file mode 100644 (file)
index 0000000..3c73856
--- /dev/null
@@ -0,0 +1,176 @@
+<?php
+
+namespace Drupal\entity_reference_revisions\Plugin\views\display;
+
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+
+/**
+ * The plugin that handles an EntityReferenceRevisions display.
+ *
+ * "entity_reference_revisions_display" is a custom property, used with
+ * \Drupal\views\Views::getApplicableViews() to retrieve all views with a
+ * 'Entity Reference Revisions' display.
+ *
+ * @ingroup views_display_plugins
+ *
+ * @ViewsDisplay(
+ *   id = "entity_reference_revisions",
+ *   title = @Translation("Entity Reference Revisions"),
+ *   admin = @Translation("Entity Reference Revisions Source"),
+ *   help = @Translation("Selects referenceable entities for an entity reference revisions field."),
+ *   theme = "views_view",
+ *   register_theme = FALSE,
+ *   uses_menu_links = FALSE,
+ *   entity_reference_revisions_display = TRUE
+ * )
+ */
+class EntityReferenceRevisions extends DisplayPluginBase {
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$useAJAX.
+   */
+  protected $usesAJAX = FALSE;
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$usesPager.
+   */
+  protected $usesPager = FALSE;
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$usesAttachments.
+   */
+  protected $usesAttachments = FALSE;
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::defineOptions().
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+
+    // Force the style plugin to 'entity_reference_style' and the row plugin to
+    // 'fields'.
+    $options['style']['contains']['type'] = array('default' => 'entity_reference_revisions');
+    $options['defaults']['default']['style'] = FALSE;
+    $options['row']['contains']['type'] = array('default' => 'entity_reference_revisions');
+    $options['defaults']['default']['row'] = FALSE;
+
+    // Make sure the query is not cached.
+    $options['defaults']['default']['cache'] = FALSE;
+
+    // Set the display title to an empty string (not used in this display type).
+    $options['title']['default'] = '';
+    $options['defaults']['default']['title'] = FALSE;
+
+    return $options;
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::optionsSummary().
+   *
+   * Disable 'cache' and 'title' so it won't be changed.
+   */
+  public function optionsSummary(&$categories, &$options) {
+    parent::optionsSummary($categories, $options);
+    unset($options['query']);
+    unset($options['title']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getType() {
+    return 'entity_reference_revisions';
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::execute().
+   */
+  public function execute() {
+    return $this->view->render($this->display['id']);
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::render().
+   */
+  public function render() {
+    if (!empty($this->view->result) && $this->view->style_plugin->evenEmpty()) {
+      return $this->view->style_plugin->render($this->view->result);
+    }
+    return '';
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::usesExposed().
+   */
+  public function usesExposed() {
+    return FALSE;
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::query().
+   */
+  public function query() {
+    if (!empty($this->view->live_preview)) {
+      return;
+    }
+
+    // Make sure the id field is included in the results.
+    $id_field = $this->view->storage->get('base_field');
+    $this->id_field_alias = $this->view->query->addField($this->view->storage->get('base_table'), $id_field);
+
+    $options = $this->getOption('entity_reference_revisions_options');
+
+    // Restrict the autocomplete options based on what's been typed already.
+    if (isset($options['match'])) {
+      $style_options = $this->getOption('style');
+      $value = db_like($options['match']) . '%';
+      if ($options['match_operator'] != 'STARTS_WITH') {
+        $value = '%' . $value;
+      }
+
+      // Multiple search fields are OR'd together.
+      $conditions = db_or();
+
+      // Build the condition using the selected search fields.
+      foreach ($style_options['options']['search_fields'] as $field_alias) {
+        if (!empty($field_alias)) {
+          // Get the table and field names for the checked field.
+          $field = $this->view->query->fields[$this->view->field[$field_alias]->field_alias];
+          // Add an OR condition for the field.
+          $conditions->condition($field['table'] . '.' . $field['field'], $value, 'LIKE');
+        }
+      }
+
+      $this->view->query->addWhere(0, $conditions);
+    }
+
+    // Add an IN condition for validation.
+    if (!empty($options['ids'])) {
+      $this->view->query->addWhere(0, $id_field, $options['ids']);
+    }
+
+    $this->view->setItemsPerPage($options['limit']);
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::validate().
+   */
+  public function validate() {
+    $errors = parent::validate();
+    // Verify that search fields are set up.
+    $style = $this->getOption('style');
+    if (!isset($style['options']['search_fields'])) {
+      $errors[] = $this->t('Display "@display" needs a selected search fields to work properly. See the settings for the Entity Reference Revisions list format.', array('@display' => $this->display['display_title']));
+    }
+    else {
+      // Verify that the search fields used actually exist.
+      $fields = array_keys($this->handlers['field']);
+      foreach ($style['options']['search_fields'] as $field_alias => $enabled) {
+        if ($enabled && !in_array($field_alias, $fields)) {
+          $errors[] = $this->t('Display "@display" uses field %field as search field, but the field is no longer present. See the settings for the Entity Reference Revisions list format.', array('@display' => $this->display['display_title'], '%field' => $field_alias));
+        }
+      }
+    }
+    return $errors;
+  }
+}