class DataExport in Views data export 8
Same name in this branch
- 8 src/Plugin/views/display/DataExport.php \Drupal\views_data_export\Plugin\views\display\DataExport
- 8 src/Plugin/views/style/DataExport.php \Drupal\views_data_export\Plugin\views\style\DataExport
A style plugin for data export views.
Plugin annotation
@ViewsStyle(
id = "data_export",
title = @Translation("Data export"),
help = @Translation("Configurable row output for data exports."),
display_types = {"data"}
)
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\style\StylePluginBase
- class \Drupal\rest\Plugin\views\style\Serializer implements CacheableDependencyInterface
- class \Drupal\views_data_export\Plugin\views\style\DataExport uses RedirectDestinationTrait
- class \Drupal\rest\Plugin\views\style\Serializer implements CacheableDependencyInterface
- class \Drupal\views\Plugin\views\style\StylePluginBase
- class \Drupal\views\Plugin\views\PluginBase implements DependentPluginInterface, ContainerFactoryPluginInterface, TrustedCallbackInterface, ViewsPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of DataExport
File
- src/
Plugin/ views/ style/ DataExport.php, line 23
Namespace
Drupal\views_data_export\Plugin\views\styleView source
class DataExport extends Serializer {
use RedirectDestinationTrait;
/**
* Field labels should be enabled by default for this Style.
*
* @var bool
*/
protected $defaultFieldLabels = TRUE;
/**
* {@inheritdoc}
*/
public function defineOptions() {
$options = parent::defineOptions();
// CSV options.
// @todo Can these somehow be moved to a plugin?
$options['csv_settings']['contains'] = [
'delimiter' => [
'default' => ',',
],
'enclosure' => [
'default' => '"',
],
'escape_char' => [
'default' => '\\',
],
'strip_tags' => [
'default' => TRUE,
],
'trim' => [
'default' => TRUE,
],
'encoding' => [
'default' => 'utf8',
],
'utf8_bom' => [
'default' => FALSE,
],
'use_serializer_encode_only' => [
'default' => FALSE,
],
];
return $options;
}
/**
* {@inheritdoc}
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
parent::buildOptionsForm($form, $form_state);
switch ($form_state
->get('section')) {
case 'style_options':
// Change format to radios instead, since multiple formats here do not
// make sense as they do for REST exports.
$form['formats']['#type'] = 'radios';
$form['formats']['#default_value'] = reset($this->options['formats']);
$format_options = $this
->getFormatOptions();
if (in_array('csv', $format_options)) {
// CSV options.
// @todo Can these be moved to a plugin?
$csv_options = $this->options['csv_settings'];
$form['csv_settings'] = [
'#type' => 'details',
'#open' => FALSE,
'#title' => $this
->t('CSV settings'),
'#tree' => TRUE,
'#states' => [
'visible' => [
':input[name="style_options[formats]"]' => [
'value' => 'csv',
],
],
],
'delimiter' => [
'#type' => 'textfield',
'#title' => $this
->t('Delimiter'),
'#description' => $this
->t('Indicates the character used to delimit fields. Defaults to a comma (<code>,</code>). For tab-separation use <code>\\t</code> characters.'),
'#default_value' => $csv_options['delimiter'],
],
'enclosure' => [
'#type' => 'textfield',
'#title' => $this
->t('Enclosure'),
'#description' => $this
->t('Indicates the character used for field enclosure. Defaults to a double quote (<code>"</code>).'),
'#default_value' => $csv_options['enclosure'],
],
'escape_char' => [
'#type' => 'textfield',
'#title' => $this
->t('Escape character'),
'#description' => $this
->t('Indicates the character used for escaping. Defaults to a backslash (<code>\\</code>).'),
'#default_value' => $csv_options['escape_char'],
],
'strip_tags' => [
'#type' => 'checkbox',
'#title' => $this
->t('Strip HTML'),
'#description' => $this
->t('Strips HTML tags from CSV cell values.'),
'#default_value' => $csv_options['strip_tags'],
],
'trim' => [
'#type' => 'checkbox',
'#title' => $this
->t('Trim whitespace'),
'#description' => $this
->t('Trims whitespace from beginning and end of CSV cell values.'),
'#default_value' => $csv_options['trim'],
],
'encoding' => [
'#type' => 'radios',
'#title' => $this
->t('Encoding'),
'#description' => $this
->t('Determines the encoding used for CSV cell values.'),
'#options' => [
'utf8' => $this
->t('UTF-8'),
],
'#default_value' => $csv_options['encoding'],
],
'utf8_bom' => [
'#type' => 'checkbox',
'#title' => $this
->t('Include unicode signature (<a href="@bom" target="_blank">BOM</a>).', [
'@bom' => 'https://www.w3.org/International/questions/qa-byte-order-mark',
]),
'#default_value' => $csv_options['utf8_bom'],
],
'use_serializer_encode_only' => [
'#type' => 'checkbox',
'#title' => $this
->t('Only use Symfony serializer->encode method'),
'#description' => $this
->t('Skips the symfony data normalize method when rendering data export to increase performance on large datasets. <strong>(Only use when not exporting nested data)</strong>'),
'#default_value' => $csv_options['use_serializer_encode_only'],
],
];
}
break;
}
}
/**
* {@inheritdoc}
*/
public function submitOptionsForm(&$form, FormStateInterface $form_state) {
// Transform the formats back into an array.
$format = $form_state
->getValue([
'style_options',
'formats',
]);
$form_state
->setValue([
'style_options',
'formats',
], [
$format => $format,
]);
parent::submitOptionsForm($form, $form_state);
}
/**
* {@inheritdoc}
*
* @todo This should implement AttachableStyleInterface once
* https://www.drupal.org/node/2779205 lands.
*/
public function attachTo(array &$build, $display_id, Url $url, $title) {
// @todo This mostly hard-codes CSV handling. Figure out how to abstract.
$url_options = [];
$input = $this->view
->getExposedInput();
if ($input) {
$url_options['query'] = $input;
}
if ($pager = $this->view
->getPager()) {
$url_options['query']['page'] = $pager
->getCurrentPage();
}
$url_options['absolute'] = TRUE;
if (!empty($this->options['formats'])) {
$url_options['query']['_format'] = reset($this->options['formats']);
}
$url = $url
->setOptions($url_options)
->toString();
// Add the icon to the view.
$format = $this->displayHandler
->getContentType();
$this->view->feedIcons[] = [
'#theme' => 'export_icon',
'#url' => $url,
'#format' => mb_strtoupper($format),
'#theme_wrappers' => [
'container' => [
'#attributes' => [
'class' => [
Html::cleanCssIdentifier($format) . '-feed',
'views-data-export-feed',
],
],
],
],
'#attached' => [
'library' => [
'views_data_export/views_data_export',
],
],
];
// Attach a link to the CSV feed, which is an alternate representation.
$build['#attached']['html_head_link'][][] = [
'rel' => 'alternate',
'type' => $this->displayHandler
->getMimeType(),
'title' => $title,
'href' => $url,
];
}
/**
* {@inheritdoc}
*/
public function buildSortPost() {
$query = $this->view
->getRequest()->query;
$sort_field = $query
->get('order');
if (empty($sort_field) || empty($this->view->field[$sort_field])) {
return;
}
// Ensure sort order is valid.
$sort_order = strtolower($query
->get('sort'));
if (empty($sort_order) || $sort_order != 'asc' && $sort_order != 'desc') {
$sort_order = 'asc';
}
// Tell the field to click sort.
$this->view->field[$sort_field]
->clickSort($sort_order);
}
/**
* {@inheritdoc}
*/
public function render() {
// This is pretty close to the parent implementation.
// Difference (noted below) stems from not being able to get anything other
// than json rendered even when the display was set to export csv or xml.
$rows = [];
foreach ($this->view->result as $row_index => $row) {
$this->view->row_index = $row_index;
$rows[] = $this->view->rowPlugin
->render($row);
}
unset($this->view->row_index);
// Get the format configured in the display or fallback to json.
// We intentionally implement this different from the parent method because
// $this->displayHandler->getContentType() will always return json due to
// the request's header (i.e. "accept:application/json") and
// we want to be able to render csv or xml data as well in accordance with
// the data export format configured in the display.
$format = !empty($this->options['formats']) ? reset($this->options['formats']) : 'json';
// If data is being exported as a CSV we give the option to not use the
// Symfony normalize method which increases performance on large data sets.
// This option can be configured in the CSV Settings section of the data
// export.
if ($format === 'csv' && $this->options['csv_settings']['use_serializer_encode_only'] == 1) {
return $this->serializer
->encode($rows, $format, [
'views_style_plugin' => $this,
]);
}
else {
return $this->serializer
->serialize($rows, $format, [
'views_style_plugin' => $this,
]);
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DataExport:: |
protected | property |
Field labels should be enabled by default for this Style. Overrides StylePluginBase:: |
|
DataExport:: |
public | function | @todo This should implement AttachableStyleInterface once https://www.drupal.org/node/2779205 lands. | |
DataExport:: |
public | function |
Provide a form to edit options for this plugin. Overrides Serializer:: |
|
DataExport:: |
public | function |
Called by the view builder to let the style build a second set of
sorts that will come after any other sorts in the view. Overrides StylePluginBase:: |
|
DataExport:: |
public | function |
Information about options for all kinds of purposes will be held here. Overrides Serializer:: |
|
DataExport:: |
public | function |
Render the display in this style. Overrides Serializer:: |
|
DataExport:: |
public | function |
Handle any special handling on the validate form. Overrides Serializer:: |
|
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:: |
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:: |
public | property | The top object of a view. | 1 |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
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 | 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 | 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:: |
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. | ||
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
Serializer:: |
protected | property | The serialization format providers, keyed by format. | |
Serializer:: |
protected | property | The available serialization formats. | |
Serializer:: |
protected | property | The serializer which serializes the views result. | |
Serializer:: |
protected | property |
Does the style plugin support grouping of rows. Overrides StylePluginBase:: |
|
Serializer:: |
protected | property |
Whether or not this style uses a row plugin. Overrides StylePluginBase:: |
|
Serializer:: |
public | function |
Calculates dependencies for the configured plugin. Overrides PluginBase:: |
|
Serializer:: |
public static | function |
Creates an instance of the plugin. Overrides PluginBase:: |
|
Serializer:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
|
Serializer:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
|
Serializer:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
|
Serializer:: |
protected | function | Returns an array of format options | |
Serializer:: |
public | function | Gets a list of all available formats that can be requested. | |
Serializer:: |
public | function |
Constructs a Plugin 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. | |
StylePluginBase:: |
protected | property | The theme function used to render the grouping set. | |
StylePluginBase:: |
protected | property | Stores the rendered field values, keyed by the row index and field name. | |
StylePluginBase:: |
protected | property | Store all available tokens row rows. | |
StylePluginBase:: |
protected | property | Does the style plugin for itself support to add fields to its output. | 3 |
StylePluginBase:: |
protected | property |
Denotes whether the plugin has an additional options form. Overrides PluginBase:: |
|
StylePluginBase:: |
protected | property | Does the style plugin support custom css class for the rows. | 3 |
StylePluginBase:: |
public | function | Called by the view builder to see if this style handler wants to interfere with the sorts. If so it should build; if it returns any non-TRUE value, normal sorting will NOT be added to the query. | 1 |
StylePluginBase:: |
public | function | Return TRUE if this style enables field labels by default. | 1 |
StylePluginBase:: |
public | function |
Clears a plugin. Overrides PluginBase:: |
|
StylePluginBase:: |
public | function | #pre_render callback for view row field rendering. | |
StylePluginBase:: |
public | function | Should the output of the style plugin be rendered even if it's a empty view. | 2 |
StylePluginBase:: |
public | function | Gets a rendered field. | |
StylePluginBase:: |
public | function | Get the raw field value. | |
StylePluginBase:: |
public | function | Return the token replaced row class for the specified row. | |
StylePluginBase:: |
public | function |
Overrides \Drupal\views\Plugin\views\PluginBase::init(). Overrides PluginBase:: |
|
StylePluginBase:: |
public | function | Allow the style to do stuff before each row is rendered. | |
StylePluginBase:: |
public | function |
Add anything to the query that we might need to. Overrides PluginBase:: |
1 |
StylePluginBase:: |
protected | function | Renders all of the fields for a given style and store them on the object. | |
StylePluginBase:: |
public | function | Group records as needed for rendering. | |
StylePluginBase:: |
public | function | Render the grouping sets. | |
StylePluginBase:: |
protected | function | Renders a group of rows of the grouped view. | |
StylePluginBase:: |
public | function | Take a value and apply token replacement logic to it. | |
StylePluginBase:: |
public static | function |
Lists the trusted callbacks provided by the implementing class. Overrides PluginBase:: |
|
StylePluginBase:: |
public | function | Return TRUE if this style also uses fields. | 3 |
StylePluginBase:: |
public | function | Returns the usesGrouping property. | 3 |
StylePluginBase:: |
public | function | Returns the usesRowClass property. | 3 |
StylePluginBase:: |
public | function | Returns the usesRowPlugin property. | 10 |
StylePluginBase:: |
public | function | Return TRUE if this style uses tokens. | |
StylePluginBase:: |
public | function |
Validate that the plugin is correct and can be saved. Overrides PluginBase:: |
|
StylePluginBase:: |
public | function |
Validate the options form. Overrides PluginBase:: |
|
StylePluginBase:: |
public | function | Provide a form in the views wizard if this style is selected. | |
StylePluginBase:: |
public | function | Alter the options of a display before they are added to the view. | 1 |
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. |