class ViewsMergeRowsDisplayExtenderPlugin in Views Merge Rows 8.2
Provides interface to manage merge options on a per-field basis.
Plugin annotation
@ViewsDisplayExtender(
id = "views_merge_rows",
title = @Translation("Merge rows"),
help = @Translation("Merges rows with the same values in the specified fields."),
no_ui = FALSE
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\views\Plugin\views\PluginBase implements DependentPluginInterface, ContainerFactoryPluginInterface, TrustedCallbackInterface, ViewsPluginInterface
- class \Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase
- class \Drupal\views_merge_rows\Plugin\views\display_extender\ViewsMergeRowsDisplayExtenderPlugin
- class \Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase
- class \Drupal\views\Plugin\views\PluginBase implements DependentPluginInterface, ContainerFactoryPluginInterface, TrustedCallbackInterface, ViewsPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of ViewsMergeRowsDisplayExtenderPlugin
File
- src/
Plugin/ views/ display_extender/ ViewsMergeRowsDisplayExtenderPlugin.php, line 22
Namespace
Drupal\views_merge_rows\Plugin\views\display_extenderView source
class ViewsMergeRowsDisplayExtenderPlugin extends DisplayExtenderPluginBase {
/**
* {@inheritdoc}
*/
protected function defineOptions() {
$options = parent::defineOptions();
$options['merge_rows'] = [
'default' => FALSE,
];
$options['field_config'] = [
'default' => [],
];
return $options;
}
/**
* {@inheritdoc}
*
* @phpstan-ignore-next-line
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state) : void {
if ($form_state
->get('section') != 'views_merge_rows') {
return;
}
$form['#tree'] = TRUE;
$form['#theme'] = 'merge_rows_theme';
$form['#title'] .= $this
->t('Merge rows with the same content.');
$form['warning_markup'] = [];
if ($this->displayHandler
->usesPager()) {
$form['warning_markup'] = [
'#theme' => 'status_messages',
'#message_list' => [
'warning' => [
$this
->t('It is highly recommended to disable pager if you merge rows.'),
],
],
];
}
$form['merge_rows'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Merge rows with the same content in the specified fields'),
'#default_value' => $this->options['merge_rows'],
];
// Create an array of allowed columns from the data we know:
$field_names = $this->displayHandler
->getFieldLabels();
foreach ($field_names as $field => $name) {
// Markup for the field name.
$form['field_config'][$field]['name'] = [
'#markup' => $name,
];
// Select for merge options.
$form['field_config'][$field]['merge_option'] = [
'#type' => 'select',
'#options' => [
'filter' => $this
->t('Use values of this field as a filter'),
'merge' => $this
->t('Merge values of this field'),
'merge_unique' => $this
->t('Merge unique values of this field'),
'first_value' => $this
->t('Use the first value of this field'),
'highest_value' => $this
->t('Use the highest value of this field'),
'lowest_value' => $this
->t('Use the lowest value of this field'),
'average' => $this
->t('Use the average value of this field'),
'std_deviation' => $this
->t('Use the sample standard deviation of this field'),
'sum' => $this
->t('Sum values of this field'),
'count' => $this
->t('Count merged values of this field'),
'count_unique' => $this
->t('Count merged unique values of this field'),
'count_minus_count_unique' => $this
->t('Calculate the number of merged values minus the number of merged unique values of this field'),
],
'#default_value' => $this->options['field_config'][$field]['merge_option'] ?? 'merge_unique',
];
$form['field_config'][$field]['exclude_first'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Exclude first option for @field_name', [
'@field_name' => $name,
]),
'#title_display' => 'invisible',
'#default_value' => $this->options['field_config'][$field]['exclude_first'] ?? FALSE,
];
$form['field_config'][$field]['prefix'] = [
'#type' => 'textfield',
'#title' => $this
->t('Prefix for @field_name', [
'@field_name' => $name,
]),
'#title_display' => 'invisible',
'#size' => 10,
'#default_value' => $this->options['field_config'][$field]['prefix'] ?? '',
];
$form['field_config'][$field]['separator'] = [
'#type' => 'textfield',
'#title' => $this
->t('Separator for @field_name', [
'@field_name' => $name,
]),
'#title_display' => 'invisible',
'#size' => 10,
'#default_value' => $this->options['field_config'][$field]['separator'] ?? ', ',
];
$form['field_config'][$field]['suffix'] = [
'#type' => 'textfield',
'#title' => $this
->t('Suffix for @field_name', [
'@field_name' => $name,
]),
'#title_display' => 'invisible',
'#size' => 10,
'#default_value' => $this->options['field_config'][$field]['suffix'] ?? '',
];
}
$form['merge_options_description_title'] = [
'#type' => 'html_tag',
'#tag' => 'h2',
'#value' => $this
->t('Merge options details'),
];
$form['merge_options_description'] = [
'#theme' => 'table',
'#header' => [
$this
->t('Option'),
$this
->t('Description'),
],
'#rows' => [
[
$this
->t('Use values of this field as a filter'),
$this
->t('Checks which rows should be merged. If several rows contain exactly the same values in all of these fields, they are merged together.'),
],
[
$this
->t('Merge values of this field'),
$this
->t('All the values appears in the resulting row.'),
],
[
$this
->t('Merge unique values of this field'),
$this
->t('The resulting row will contain unique values from the merged rows.'),
],
[
$this
->t('Use the first value of this field'),
$this
->t('Only the value from the first merged rows is used. The values in other rows are disregarded.'),
],
[
$this
->t('Use the highest value of this field'),
$this
->t('The resulting row will contain the highest numerical value from the merged rows.'),
],
[
$this
->t('Use the lowest value of this field'),
$this
->t('The resulting row will contain the highest numerical value from the merged rows.'),
],
[
$this
->t('Use the average value of this field'),
$this
->t('The resulting row will contain the average value from the merged rows.'),
],
[
$this
->t('Use the sample standard deviation of this field'),
$this
->t('The resulting row will contain the sample standard deviation value from the merged rows.'),
],
[
$this
->t('Sum values of this field'),
$this
->t('The resulting row will contain the sum of values from the merged rows.'),
],
[
$this
->t('Count merged values of this field'),
$this
->t('The resulting row will contain the counter of the merged rows.'),
],
[
$this
->t('Count merged unique values of this field'),
$this
->t('The resulting row will contain the counter of the merged unique values.'),
],
[
$this
->t('Calculate the number of merged values minus the number of merged unique values of this field'),
$this
->t('The resulting row will contain the difference between counter of the merged values and the counter of the merged unique values.'),
],
],
];
}
/**
* {@inheritdoc}
*
* @phpstan-ignore-next-line
*/
public function submitOptionsForm(&$form, FormStateInterface $form_state) : void {
if ($form_state
->get('section') != 'views_merge_rows') {
return;
}
foreach ($form_state
->getValue('options') as $option => $value) {
$this->options[$option] = $value;
}
}
/**
* {@inheritdoc}
*
* @phpstan-ignore-next-line
*/
public function optionsSummary(&$categories, &$options) : void {
if (!$this->displayHandler
->usesFields()) {
return;
}
$options['views_merge_rows'] = [
'category' => 'other',
'title' => $this
->t('Merge rows'),
'value' => $this->options['merge_rows'] ? $this
->t('Yes') : $this
->t('No'),
'desc' => $this
->t('Allow merging rows with the same content in the specified fields.'),
];
}
/**
* Returns configuration for row merging.
*
* Only returns the configuration for the fields present in the view. In case
* configuration still has some entries about removed fields.
*
* If a new field was added to the view, the default configuration for this
* field is returned.
*
* Impossible to provide default field values for fields in ::defineOptions()
* because displayHandler property is not available at this moment.
*
* @return array
* Configuration for row merging.
*/
public function getOptions() : array {
$options = [
'merge_rows' => FALSE,
'field_config' => [],
];
if ($this->displayHandler
->usesFields()) {
$options['merge_rows'] = $this->options['merge_rows'];
$field_default_options = [
'merge_option' => 'merge_unique',
'exclude_first' => FALSE,
'prefix' => '',
'separator' => ', ',
'suffix' => '',
];
$fields = $this->displayHandler
->getOption('fields');
foreach (array_keys($fields) as $field) {
$options['field_config'][$field] = $field_default_options;
if (isset($this->options['field_config'][$field])) {
$options['field_config'][$field] = $this->options['field_config'][$field] + $field_default_options;
}
}
}
return $options;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
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 | |
DisplayExtenderPluginBase:: |
public | function | Static member function to list which sections are defaultable and what items each section contains. | 1 |
DisplayExtenderPluginBase:: |
public | function | Provide a form to edit options for this plugin. | |
DisplayExtenderPluginBase:: |
public | function | Set up any variables on the view prior to execution. | 1 |
DisplayExtenderPluginBase:: |
public | function |
Inject anything into the query that the display_extender handler needs. Overrides PluginBase:: |
1 |
DisplayExtenderPluginBase:: |
public | function |
Validate the options form. Overrides PluginBase:: |
|
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:: |
public | property | Plugins's definition | |
PluginBase:: |
public | property | The display object this plugin is for. | |
PluginBase:: |
public | property | Options for this plugin will be held here. | |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
protected | property | Stores the render API renderer. | 3 |
PluginBase:: |
protected | property | Denotes whether the plugin has an additional options form. | 8 |
PluginBase:: |
public | property | The top object of a view. | 1 |
PluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
14 |
PluginBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
62 |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Clears a plugin. Overrides ViewsPluginInterface:: |
2 |
PluginBase:: |
protected | function | Do the work to filter out stored options depending on the defined options. | |
PluginBase:: |
public | function |
Filter out stored options depending on the defined options. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public | function |
Returns an array of available token replacements. Overrides ViewsPluginInterface:: |
|
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 |
Returns the plugin provider. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
protected | function | Returns the render API renderer. | 1 |
PluginBase:: |
public | function |
Adds elements for available core tokens to a form. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public | function |
Returns a string with any core tokens replaced. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
constant | Include entity row languages when listing languages. | ||
PluginBase:: |
constant | Include negotiated languages when listing languages. | ||
PluginBase:: |
public | function |
Initialize the plugin. Overrides ViewsPluginInterface:: |
8 |
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginBase:: |
protected | function | Makes an array of languages, optionally including special languages. | |
PluginBase:: |
public | function |
Return the human readable name of the display. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public static | function |
Moves form elements into fieldsets for presentation purposes. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public static | function |
Flattens the structure of form elements. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public static | function | Returns substitutions for Views queries for languages. | |
PluginBase:: |
protected | function | Fills up the options of the plugin with defaults. | |
PluginBase:: |
public | function |
Returns the summary of the settings in the display. Overrides ViewsPluginInterface:: |
6 |
PluginBase:: |
public | function |
Provide a full list of possible theme templates used by this style. Overrides ViewsPluginInterface:: |
1 |
PluginBase:: |
public static | function |
Lists the trusted callbacks provided by the implementing class. Overrides TrustedCallbackInterface:: |
6 |
PluginBase:: |
public | function |
Unpack options over our existing defaults, drilling down into arrays
so that defaults don't get totally blown away. Overrides ViewsPluginInterface:: |
|
PluginBase:: |
public | function |
Returns the usesOptions property. Overrides ViewsPluginInterface:: |
8 |
PluginBase:: |
public | function |
Validate that the plugin is correct and can be saved. Overrides ViewsPluginInterface:: |
6 |
PluginBase:: |
protected | function | Replaces Views' tokens in a given string. The resulting string will be sanitized with Xss::filterAdmin. | 1 |
PluginBase:: |
constant | Query string to indicate the site default language. | ||
PluginBase:: |
public | function |
Constructs a PluginBase object. Overrides PluginBase:: |
|
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. | |
TrustedCallbackInterface:: |
constant | Untrusted callbacks throw exceptions. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger silenced E_USER_DEPRECATION errors. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger E_USER_WARNING errors. | ||
ViewsMergeRowsDisplayExtenderPlugin:: |
public | function |
@phpstan-ignore-next-line Overrides DisplayExtenderPluginBase:: |
|
ViewsMergeRowsDisplayExtenderPlugin:: |
protected | function |
Information about options for all kinds of purposes will be held here. Overrides PluginBase:: |
|
ViewsMergeRowsDisplayExtenderPlugin:: |
public | function | Returns configuration for row merging. | |
ViewsMergeRowsDisplayExtenderPlugin:: |
public | function |
@phpstan-ignore-next-line Overrides DisplayExtenderPluginBase:: |
|
ViewsMergeRowsDisplayExtenderPlugin:: |
public | function |
@phpstan-ignore-next-line Overrides DisplayExtenderPluginBase:: |