abstract class WebformExporterBase in Webform 6.x
Same name and namespace in other branches
- 8.5 src/Plugin/WebformExporterBase.php \Drupal\webform\Plugin\WebformExporterBase
Provides a base class for a results exporter.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\webform\Plugin\WebformExporterBase implements WebformExporterInterface uses WebformEntityStorageTrait
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of WebformExporterBase
See also
\Drupal\webform\Plugin\WebformExporterInterface
\Drupal\webform\Plugin\WebformExporterManager
\Drupal\webform\Plugin\WebformExporterManagerInterface
3 files declare their use of WebformExporterBase
- DocumentBaseWebformExporter.php in src/
Plugin/ WebformExporter/ DocumentBaseWebformExporter.php - TabularBaseWebformExporter.php in src/
Plugin/ WebformExporter/ TabularBaseWebformExporter.php - WebformSubmissionExportImportWebformExporter.php in modules/
webform_submission_export_import/ src/ Plugin/ WebformExporter/ WebformSubmissionExportImportWebformExporter.php
File
- src/
Plugin/ WebformExporterBase.php, line 19
Namespace
Drupal\webform\PluginView source
abstract class WebformExporterBase extends PluginBase implements WebformExporterInterface {
use WebformEntityStorageTrait;
/**
* A logger instance.
*
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* The configuration factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* The webform element manager.
*
* @var \Drupal\webform\Plugin\WebformElementManagerInterface
*/
protected $elementManager;
/**
* The webform token manager.
*
* @var \Drupal\webform\WebformTokenManagerInterface
*/
protected $tokenManager;
/**
* Cached archive object.
*
* @var \Archive_Tar|\ZipArchive
*/
protected $archive;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
$instance = new static($configuration, $plugin_id, $plugin_definition);
$instance->logger = $container
->get('logger.factory')
->get('webform');
$instance->configFactory = $container
->get('config.factory');
$instance->entityTypeManager = $container
->get('entity_type.manager');
$instance->elementManager = $container
->get('plugin.manager.webform.element');
$instance->tokenManager = $container
->get('webform.token_manager');
$instance
->setConfiguration($configuration);
return $instance;
}
/**
* {@inheritdoc}
*/
public function label() {
return $this->pluginDefinition['label'];
}
/**
* {@inheritdoc}
*/
public function description() {
return $this->pluginDefinition['description'];
}
/**
* {@inheritdoc}
*/
public function getStatus() {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function isExcluded() {
return $this->configFactory
->get('webform.settings')
->get('export.excluded_exporters.' . $this->pluginDefinition['id']) ? TRUE : FALSE;
}
/**
* {@inheritdoc}
*/
public function isArchive() {
return $this->pluginDefinition['archive'];
}
/**
* {@inheritdoc}
*/
public function hasFiles() {
return $this->pluginDefinition['files'];
}
/**
* {@inheritdoc}
*/
public function hasOptions() {
return $this->pluginDefinition['options'];
}
/**
* {@inheritdoc}
*/
public function getConfiguration() {
return $this->configuration;
}
/**
* {@inheritdoc}
*/
public function setConfiguration(array $configuration) {
$this->configuration = $configuration + $this
->defaultConfiguration();
return $this;
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'webform' => NULL,
'source_entity' => NULL,
];
}
/**
* Get the webform whose submissions are being exported.
*
* @return \Drupal\webform\WebformInterface
* A webform.
*/
protected function getWebform() {
return $this->configuration['webform'];
}
/**
* Get the webform source entity whose submissions are being exported.
*
* @return \Drupal\Core\Entity\EntityInterface
* A webform's source entity.
*/
protected function getSourceEntity() {
return $this->configuration['source_entity'];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
return $form;
}
/**
* {@inheritdoc}
*/
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
}
/**
* {@inheritdoc}
*/
public function createExport() {
}
/**
* {@inheritdoc}
*/
public function openExport() {
}
/**
* {@inheritdoc}
*/
public function closeExport() {
}
/**
* {@inheritdoc}
*/
public function writeHeader() {
}
/**
* {@inheritdoc}
*/
public function writeSubmission(WebformSubmissionInterface $webform_submission) {
}
/**
* {@inheritdoc}
*/
public function writeFooter() {
}
/**
* {@inheritdoc}
*/
public function getFileTempDirectory() {
return $this->configFactory
->get('webform.settings')
->get('export.temp_directory') ?: \Drupal::service('file_system')
->getTempDirectory();
}
/**
* {@inheritdoc}
*/
public function getSubmissionBaseName(WebformSubmissionInterface $webform_submission) {
$export_options = $this
->getConfiguration();
$file_name = $export_options['file_name'];
$file_name = $this->tokenManager
->replace($file_name, $webform_submission);
// Sanitize file name.
// @see http://stackoverflow.com/questions/2021624/string-sanitizer-for-filename
$file_name = preg_replace('([^\\w\\s\\d\\-_~,;:\\[\\]\\(\\].]|[\\.]{2,})', '', $file_name);
$file_name = preg_replace('/\\s+/', '-', $file_name);
return $file_name;
}
/**
* {@inheritdoc}
*/
public function getFileExtension() {
return 'txt';
}
/**
* {@inheritdoc}
*/
public function getBaseFileName() {
$webform = $this
->getWebform();
$source_entity = $this
->getSourceEntity();
if ($source_entity) {
return $webform
->id() . '.' . $source_entity
->getEntityTypeId() . '.' . $source_entity
->id();
}
else {
return $webform
->id();
}
}
/**
* {@inheritdoc}
*/
public function getExportFileName() {
return $this
->getBaseFileName() . '.' . $this
->getFileExtension();
}
/**
* {@inheritdoc}
*/
public function getExportFilePath() {
return $this
->getFileTempDirectory() . '/' . $this
->getExportFileName();
}
/**
* {@inheritdoc}
*/
public function getArchiveFilePath() {
return $this
->getFileTempDirectory() . '/' . $this
->getArchiveFileName();
}
/**
* {@inheritdoc}
*/
public function getArchiveFileName() {
return $this
->getBaseFileName() . '.' . $this
->getArchiveFileExtension();
}
/**
* {@inheritdoc}
*/
public function getArchiveType() {
return $this->configuration['archive_type'] === WebformExporterInterface::ARCHIVE_ZIP && class_exists('\\ZipArchive') ? WebformExporterInterface::ARCHIVE_ZIP : WebformExporterInterface::ARCHIVE_TAR;
}
/**
* {@inheritdoc}
*/
public function getArchiveFileExtension() {
return $this
->getArchiveType() === WebformExporterInterface::ARCHIVE_ZIP ? 'zip' : 'tar.gz';
}
/**
* {@inheritdoc}
*/
public function addToArchive($path, $name, array $options = []) {
$options += [
'remove_path' => '',
'close' => FALSE,
];
if ($this
->getArchiveType() === WebformExporterInterface::ARCHIVE_ZIP) {
$this
->addToZipFile($path, $name, $options);
}
else {
$this
->addToTarArchive($path, $name, $options);
}
}
/**
* {@inheritdoc}
*/
public function getBatchLimit() {
return $this->configFactory
->get('webform.settings')
->get('batch.default_batch_export_size') ?: 500;
}
/****************************************************************************/
// Archive helper methods.
/****************************************************************************/
/**
* Add file, directory, or content to Tar archive.
*
* @param string $path
* System path or file content.
* @param string $name
* Archive path or file name (applies to file content).
* @param array $options
* Zip file options.
*/
protected function addToTarArchive($path, $name, array $options = []) {
if (!isset($this->archive)) {
$this->archive = new \Archive_Tar($this
->getArchiveFilePath(), 'gz');
}
if (@file_exists($path)) {
if (is_dir($path)) {
// Add directory to Tar archive.
$this->archive
->addModify((array) $path, $name, $options['remove_path']);
}
else {
// Add file to Tar archive.
$this->archive
->addModify((array) $path, $name, $options['remove_path']);
}
}
else {
// Add text to Tar archive.
$this->archive
->addString($name, $path);
}
// Reset the Tar archive.
// @see \Drupal\webform\WebformSubmissionExporter::writeExportToArchive
if (!empty($options['close'])) {
$this->archive = NULL;
}
}
/**
* Add file, directory, or content to ZIP file.
*
* @param string $path
* System path or file content.
* @param string $name
* Archive path or file name (applies to file content).
* @param array $options
* Zip file options.
*/
protected function addToZipFile($path, $name, array $options = []) {
if (!isset($this->archive)) {
$this->archive = new \ZipArchive();
$flags = !file_exists($this
->getArchiveFilePath()) ? \ZipArchive::CREATE : NULL;
$this->archive
->open($this
->getArchiveFilePath(), $flags);
}
if (@file_exists($path)) {
if (is_dir($path)) {
// Add directory to ZIP file.
$options += [
'add_path' => $name . '/',
];
$this->archive
->addPattern('/\\.[a-z0-9]+$/', $path, $options);
}
else {
// Add file to ZIP file.
// Get file name from the path and remove path option.
$file_name = $path;
if ($options['remove_path']) {
$file_name = preg_replace('#^' . $options['remove_path'] . '#', '', $file_name);
}
$file_name = ltrim($file_name, '/');
$this->archive
->addFile($path, $name . '/' . $file_name);
}
}
else {
// Add text to ZIP file.
$this->archive
->addFromString($name, $path);
}
// Close and reset the ZIP file.
// @see \Drupal\webform\WebformSubmissionExporter::writeExportToArchive
if (!empty($options['close'])) {
$this->archive
->close();
$this->archive = NULL;
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 27 |
MessengerTrait:: |
public | function | Gets the messenger. | 27 |
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:: |
2 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginBase:: |
public | function | Constructs a \Drupal\Component\Plugin\PluginBase object. | 98 |
StringTranslationTrait:: |
protected | property | The string translation service. | 4 |
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. | |
WebformEntityStorageTrait:: |
protected | property | An associate array of entity type storage aliases. | |
WebformEntityStorageTrait:: |
protected | property | The entity type manager. | 5 |
WebformEntityStorageTrait:: |
protected | function | Retrieves the entity storage. | |
WebformEntityStorageTrait:: |
protected | function | Retrieves the webform submission storage. | |
WebformEntityStorageTrait:: |
protected | function | Retrieves the webform storage. | |
WebformEntityStorageTrait:: |
public | function | Implements the magic __get() method. | |
WebformExporterBase:: |
protected | property | Cached archive object. | |
WebformExporterBase:: |
protected | property | The configuration factory. | |
WebformExporterBase:: |
protected | property | The webform element manager. | |
WebformExporterBase:: |
protected | property | A logger instance. | |
WebformExporterBase:: |
protected | property | The webform token manager. | |
WebformExporterBase:: |
public | function |
Add file, directory, or content to exporter archive. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
protected | function | Add file, directory, or content to Tar archive. | |
WebformExporterBase:: |
protected | function | Add file, directory, or content to ZIP file. | |
WebformExporterBase:: |
public | function |
Form constructor. Overrides PluginFormInterface:: |
4 |
WebformExporterBase:: |
public | function |
Close export. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
3 |
WebformExporterBase:: |
public | function |
Create export. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
4 |
WebformExporterBase:: |
public | function |
Returns the results exporter description. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get archive file extension for a webform. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get archive file name for a webform. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get archive file name and path for a webform. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get archive file type. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get export base file name without an extension. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get the number of submissions to be exported with each batch. Overrides WebformExporterInterface:: |
1 |
WebformExporterBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
WebformExporterBase:: |
public | function |
Get export file name. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get export file path. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get export file extension. Overrides WebformExporterInterface:: |
3 |
WebformExporterBase:: |
public | function |
Get export file temp directory. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
protected | function | Get the webform source entity whose submissions are being exported. | |
WebformExporterBase:: |
public | function |
Returns the results exporter status. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Get webform submission base file name. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
protected | function | Get the webform whose submissions are being exported. | |
WebformExporterBase:: |
public | function |
Determine if exporter can include uploaded files (in a zipped archive). Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Determine if exporter has options. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Determine if exporter generates an archive. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Checks if the exporter is excluded via webform.settings. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Returns the results exporter label. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Open export. Overrides WebformExporterInterface:: |
|
WebformExporterBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
1 |
WebformExporterBase:: |
public | function |
Form submission handler. Overrides PluginFormInterface:: |
|
WebformExporterBase:: |
public | function |
Form validation handler. Overrides PluginFormInterface:: |
|
WebformExporterBase:: |
public | function |
Write footer to export. Overrides WebformExporterInterface:: |
1 |
WebformExporterBase:: |
public | function |
Write header to export. Overrides WebformExporterInterface:: |
3 |
WebformExporterBase:: |
public | function |
Write submission to export. Overrides WebformExporterInterface:: |
6 |
WebformExporterInterface:: |
constant | Tar archive. | ||
WebformExporterInterface:: |
constant | ZIP file. |