class ViewWidget in Entity Reference View Widget 8
Plugin implementation of the 'entity_reference_view_widget' widget.
Plugin annotation
@FieldWidget(
id = "entity_reference_view_widget",
label = @Translation("View"),
description = @Translation("An advanced, view-based widget."),
field_types = {
"entity_reference"
},
multiple_values = TRUE
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\entity_reference_view_widget\Plugin\Field\FieldWidget\ViewWidget
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of ViewWidget
1 file declares its use of ViewWidget
- ModalForm.php in src/
Form/ ModalForm.php - Contains \Drupal\entity_reference_view_widget\Form\ModalForm.
File
- src/
Plugin/ Field/ FieldWidget/ ViewWidget.php, line 35 - Contains \Drupal\entity_reference_view_widget\Plugin\Field\FieldWidget\ViewWidget.
Namespace
Drupal\entity_reference_view_widget\Plugin\Field\FieldWidgetView source
class ViewWidget extends WidgetBase {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return array(
'view' => '',
'pass_argument' => TRUE,
'close_modal' => FALSE,
'allow_duplicates' => FALSE,
) + parent::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$displays = Views::getApplicableViews('entity_reference_view_widget_display');
$options = array();
foreach ($displays as $data) {
list($view, $display_id) = $data;
$options[$view->storage
->id() . '|' . $display_id] = String::checkPlain($view->storage
->label() . ' | ' . $view->storage
->getDisplay($display_id)['display_title']);
}
$element['view'] = array(
'#type' => 'select',
'#title' => t('View'),
'#default_value' => $this
->getSetting('view'),
'#options' => $options,
'#description' => t('Specify the View to use for selecting items. Only views that have an "Entityreference View Widget" display are shown.'),
'#required' => TRUE,
);
$element['pass_argument'] = array(
'#type' => 'checkbox',
'#title' => t('Pass selected entity ids to View'),
'#default_value' => $this
->getSetting('pass_argument'),
'#description' => t('If enabled, the View will get all selected entity ids as the first argument. Useful for excluding already selected items.'),
);
$element['close_modal'] = array(
'#type' => 'checkbox',
'#title' => t('Close modal window after submitting the items'),
'#default_value' => $this
->getSetting('close_modal'),
'#description' => t('If enabled, the modal window will close after you had selected the entities from the view and submitted your selection.'),
);
$element['allow_duplicates'] = array(
'#type' => 'checkbox',
'#title' => t('Allow the same entity to be referenced multiple times'),
'#default_value' => $this
->getSetting('allow_duplicates'),
'#description' => t('If enabled, this will allow you to reference the same entity multiple times.'),
);
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = array();
$settings = $this
->getSettings();
if (!empty($settings['view'])) {
$summary[] = t('View: @view', array(
'@view' => $settings['view'],
));
}
else {
$summary[] = t('No view configured');
}
$summary[] = t('Pass selected entity ids to View: @pass_argument', array(
'@pass_argument' => $settings['pass_argument'] ? t('Yes') : t('No'),
));
$summary[] = t('Close modal window after submitting the items: @close_modal', array(
'@close_modal' => $settings['close_modal'] ? t('Yes') : t('No'),
));
$summary[] = t('Allow the same entity to be referenced multiple times: @allow_duplicates', array(
'@allow_duplicates' => $settings['allow_duplicates'] ? t('Yes') : t('No'),
));
return $summary;
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$field_name = $this->fieldDefinition
->getName();
$cardinality = $this->fieldDefinition
->getFieldStorageDefinition()
->getCardinality();
$parents = $form['#parents'];
// Determine the number of widgets to display.
switch ($cardinality) {
case FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED:
$field_state = static::getWidgetState($parents, $field_name, $form_state);
$max = $field_state['items_count'];
$is_multiple = TRUE;
break;
default:
$max = $cardinality - 1;
$is_multiple = $cardinality > 1;
break;
}
/*$element += array(
'#title' => $title,
'#description' => $description,
'#markup' => t('No items had been added yet. Click "Add items" to launch the widget.'),
);
$element['add_more'] = array(
'#type' => 'button',
'#value' => t('Add items'),
'#ajax' => array(
'callback' => array($this, 'ajaxCallback'),
),
'#limit_validation_errors' => array(),
);*/
$id_prefix = implode('-', array_merge($parents, array(
$field_name,
)));
$wrapper_id = Html::getUniqueId($id_prefix . '-ervw-wrapper');
$element += array(
'#theme' => 'field_multiple_value_form',
'#field_name' => $field_name,
'#cardinality' => $cardinality,
'#cardinality_multiple' => TRUE,
'#required' => $this->fieldDefinition
->isRequired(),
'#max_delta' => $max,
);
if (!$items
->isEmpty()) {
}
else {
$element[0]['#markup'] = t('No items had been added yet. Click "Add items" to launch the widget.');
}
$element['add_more'] = array(
'#name' => strtr($id_prefix, '-', '_') . '_add_more',
'#type' => 'button',
'#value' => t('Add items'),
'#ajax' => array(
'callback' => array(
$this,
'ajaxCallback',
),
),
'#limit_validation_errors' => array(),
'#ervw_settings' => array(
'wrapper' => str_replace('_', '-', $field_name . '-values'),
'cardinality' => $cardinality,
'target_type' => $this
->getFieldSetting('target_type'),
),
'#element_validate' => array(
array(
$this,
'elementValidate',
),
),
);
$form['#attached']['library'][] = 'views/views.ajax';
return $element;
}
/**
* {@inheritdoc}
*/
public function elementValidate($element, FormStateInterface $form_state, $form) {
$form_state
->setRebuild();
}
/**
* Overrides \Drupal\file\Plugin\Field\FieldWidget\FileWidget::formMultipleElements().
*
* Modify the add_more button.
*/
protected function formMultipleElements(FieldItemListInterface $items, array &$form, FormStateInterface $form_state) {
$elements = parent::formMultipleElements($items, $form, $form_state);
$form['#attached']['library'][] = 'views/views.ajax';
$elements['add_more'] = array(
'#type' => 'button',
'#value' => t('Add items'),
'#ajax' => array(
'callback' => array(
$this,
'ajaxCallback',
),
),
'#limit_validation_errors' => array(),
);
return $elements;
}
/**
* Returns a renderable array of the rows.
*
* @param $entity_ids
*/
public static function getRows($entity_ids, $settings) {
$entity_ids = array_values($entity_ids);
$rows = array();
if (!empty($entity_ids)) {
$entities = entity_load_multiple($settings['target_type'], $entity_ids);
$max = count($entities);
$delta = 0;
foreach ($entities as $entity_id => $entity_item) {
$rows[] = array(
'target_id' => array(
'#type' => 'checkbox',
'#delta' => $delta,
'#field_suffix' => String::checkPlain($entity_item
->label()),
'#return_value' => $entity_id,
'#value' => $entity_id,
),
'_weight' => array(
'#type' => 'weight',
'#title' => t('Weight for row @number', array(
'@number' => $delta + 1,
)),
'#title_display' => 'invisible',
// Note: this 'delta' is the FAPI #type 'weight' element's property.
'#delta' => $max,
'#default_value' => $delta,
'#weight' => 100,
),
);
$delta++;
}
}
return $rows;
}
/**
* Ajax callback for the the add items button.
*/
public function ajaxCallback(array $form, FormStateInterface &$form_state) {
$triggering_element = $form_state
->getTriggeringElement();
if (isset($triggering_element['#ervw_settings'])) {
$response = new AjaxResponse();
$view = $this
->getSetting('view');
if (!empty($view)) {
list($view_id, $display_id) = explode('|', $view);
if ($view = Views::getView($view_id)) {
$view
->setAjaxEnabled(TRUE);
$preview = $view
->preview($display_id);
$response
->addCommand(new SettingsCommand($view->element['#attached']['js'][0]['data'], TRUE));
$form_settings = array(
'view' => $view,
'preview' => $preview,
'settings' => $triggering_element['#ervw_settings'] + $this
->getSettings(),
);
$modal_form = \Drupal::formBuilder()
->getForm('Drupal\\entity_reference_view_widget\\Form\\ModalForm', $form_settings);
$response
->addCommand(new SettingsCommand($modal_form['actions']['add_items']['#attached']['js'][0]['data'], TRUE));
$modal_content = '';
// Display the exposed widgets on top of the modal.
if (!empty($view->exposed_widgets)) {
$modal_content .= drupal_render($view->exposed_widgets);
}
$modal_content .= drupal_render($modal_form);
$response
->addCommand(new OpenModalDialogCommand($view->storage
->label(), $modal_content, array(
'width' => 700,
)));
}
}
return $response;
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AllowedTagsXssTrait:: |
public | function | Returns a list of tags allowed by AllowedTagsXssTrait::fieldFilterXss(). | |
AllowedTagsXssTrait:: |
public | function | Returns a human-readable list of allowed tags for display in help texts. | |
AllowedTagsXssTrait:: |
public | function | Filters an HTML string to prevent XSS vulnerabilities. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
ViewWidget:: |
public | function | Ajax callback for the the add items button. | |
ViewWidget:: |
public static | function |
Defines the default settings for this plugin. Overrides PluginSettingsBase:: |
|
ViewWidget:: |
public | function | ||
ViewWidget:: |
public | function |
Returns the form for a single field widget. Overrides WidgetInterface:: |
|
ViewWidget:: |
protected | function |
Overrides \Drupal\file\Plugin\Field\FieldWidget\FileWidget::formMultipleElements(). Overrides WidgetBase:: |
|
ViewWidget:: |
public static | function | Returns a renderable array of the rows. | |
ViewWidget:: |
public | function |
Returns a form to configure settings for the widget. Overrides WidgetBase:: |
|
ViewWidget:: |
public | function |
Returns a short summary for the current widget settings. Overrides WidgetBase:: |
|
WidgetBase:: |
protected | property | The field definition. | |
WidgetBase:: |
protected | property |
The widget settings. Overrides PluginSettingsBase:: |
|
WidgetBase:: |
public static | function | Ajax callback for the "Add another item" button. | |
WidgetBase:: |
public static | function | Submission handler for the "Add another item" button. | |
WidgetBase:: |
public static | function | After-build handler for field elements in a form. | |
WidgetBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
5 |
WidgetBase:: |
public | function |
Assigns a field-level validation error to the right widget sub-element. Overrides WidgetInterface:: |
8 |
WidgetBase:: |
public | function |
Extracts field values from submitted form values. Overrides WidgetBaseInterface:: |
2 |
WidgetBase:: |
public | function |
Reports field-level validation errors against actual form elements. Overrides WidgetBaseInterface:: |
2 |
WidgetBase:: |
public | function |
Creates a form element for a field. Overrides WidgetBaseInterface:: |
3 |
WidgetBase:: |
protected | function | Generates the form element for a single copy of the widget. | |
WidgetBase:: |
protected | function | Returns the value of a field setting. | |
WidgetBase:: |
protected | function | Returns the array of field settings. | |
WidgetBase:: |
protected | function | Returns the filtered field description. | |
WidgetBase:: |
public static | function |
Retrieves processing information about the widget from $form_state. Overrides WidgetBaseInterface:: |
|
WidgetBase:: |
protected static | function | Returns the location of processing information within $form_state. | |
WidgetBase:: |
protected | function | Returns whether the widget handles multiple values. | |
WidgetBase:: |
public static | function |
Returns if the widget can be used for the provided field. Overrides WidgetInterface:: |
4 |
WidgetBase:: |
protected | function | Returns whether the widget used for default value form. | |
WidgetBase:: |
public | function |
Massages the form values into the format expected for field values. Overrides WidgetInterface:: |
7 |
WidgetBase:: |
public static | function |
Stores processing information about the widget in $form_state. Overrides WidgetBaseInterface:: |
|
WidgetBase:: |
public | function |
Constructs a WidgetBase object. Overrides PluginBase:: |
5 |