View source
<?php
namespace Drupal\yamlform\Form;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\yamlform\YamlFormSubmissionExporterInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class YamlFormResultsExportForm extends FormBase {
public function getFormId() {
return 'yamlform_results_export';
}
protected $submissionExporter;
public function __construct(YamlFormSubmissionExporterInterface $yamlform_submission_exporter) {
$this->submissionExporter = $yamlform_submission_exporter;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('yamlform_submission.exporter'));
}
public function buildForm(array $form, FormStateInterface $form_state) {
$settings_options = $this
->config('yamlform.settings')
->get('export');
$saved_options = $this->submissionExporter
->getYamlFormOptions();
$user_options = $this->submissionExporter
->getValuesFromInput($form_state
->getUserInput());
$export_options = NestedArray::mergeDeep($settings_options, $saved_options, $user_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',
],
];
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$export_options = $this->submissionExporter
->getValuesFromInput($form_state
->getValues());
$export_options['excluded_columns'] = implode(',', $export_options['excluded_columns']);
if ($source_entity = $this->submissionExporter
->getSourceEntity()) {
$entity_type = $source_entity
->getEntityTypeId();
$entity_id = $source_entity
->id();
$route_parameters = [
$entity_type => $entity_id,
];
$route_options = [
'query' => $export_options,
];
$form_state
->setRedirect('entity.' . $entity_type . '.yamlform.results_export', $route_parameters, $route_options);
}
elseif ($yamlform = $this->submissionExporter
->getYamlForm()) {
$route_parameters = [
'yamlform' => $yamlform
->id(),
];
$route_options = [
'query' => $export_options,
];
$form_state
->setRedirect('entity.yamlform.results_export', $route_parameters, $route_options);
}
}
public function save(array &$form, FormStateInterface $form_state) {
$export_options = $this->submissionExporter
->getValuesFromInput($form_state
->getValues());
$this->submissionExporter
->setYamlFormOptions($export_options);
drupal_set_message($this
->t('The download settings have been saved.'));
}
public function delete(array &$form, FormStateInterface $form_state) {
$this->submissionExporter
->deleteYamlFormOptions();
drupal_set_message($this
->t('The download settings have been reset.'));
}
}