View source
<?php
namespace Drupal\webform\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\WebformSubmissionExporterInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class WebformResultsExportForm extends FormBase {
public function getFormId() {
return 'webform_results_export';
}
protected $submissionExporter;
public function __construct(WebformSubmissionExporterInterface $webform_submission_exporter) {
$this->submissionExporter = $webform_submission_exporter;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('webform_submission.exporter'));
}
public function buildForm(array $form, FormStateInterface $form_state) {
$settings_options = $this
->config('webform.settings')
->get('export');
$saved_options = $this->submissionExporter
->getWebformOptions();
$user_options = $this->submissionExporter
->getValuesFromInput($form_state
->getUserInput());
$export_options = $user_options + $saved_options + $settings_options;
$this->submissionExporter
->buildExportOptionsForm($form, $form_state, $export_options);
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Download'),
'#button_type' => 'primary',
];
$form['actions']['save'] = [
'#type' => 'submit',
'#value' => $this
->t('Save settings'),
'#submit' => [
'::save',
],
];
$form['actions']['delete'] = [
'#type' => 'submit',
'#value' => $this
->t('Reset settings'),
'#attributes' => [
'class' => [
'button',
'button--danger',
],
],
'#access' => $saved_options ? TRUE : FALSE,
'#submit' => [
'::delete',
],
];
$form['#attributes']['class'][] = 'webform-remove-single-submit';
$form['#attached']['library'][] = 'webform/webform.form';
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$default_options = $this->submissionExporter
->getDefaultExportOptions();
$export_options = $this->submissionExporter
->getValuesFromInput($form_state
->getValues());
foreach ($export_options as $key => $value) {
if (is_array($default_options[$key]) && is_array($value)) {
$export_options[$key] = implode(',', $value);
}
}
$webform = $this->submissionExporter
->getWebform();
if ($source_entity = $this->submissionExporter
->getSourceEntity()) {
$entity_type = $source_entity
->getEntityTypeId();
$entity_id = $source_entity
->id();
$route_parameters = [
$entity_type => $entity_id,
];
if ($webform) {
$route_parameters['webform'] = $webform
->id();
}
$route_options = [
'query' => $export_options,
];
$form_state
->setRedirect('entity.' . $entity_type . '.webform.results_export', $route_parameters, $route_options);
}
elseif ($webform) {
$route_parameters = [
'webform' => $webform
->id(),
];
$route_options = [
'query' => $export_options,
];
$form_state
->setRedirect('entity.webform.results_export', $route_parameters, $route_options);
}
}
public function save(array &$form, FormStateInterface $form_state) {
$export_options = $this->submissionExporter
->getValuesFromInput($form_state
->getValues());
$this->submissionExporter
->setWebformOptions($export_options);
$this
->messenger()
->addStatus($this
->t('The download settings have been saved.'));
}
public function delete(array &$form, FormStateInterface $form_state) {
$this->submissionExporter
->deleteWebformOptions();
$this
->messenger()
->addStatus($this
->t('The download settings have been reset.'));
}
}