+++ /dev/null
-<?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;
- }
-}