public function WebformSubmissionExportImportImporter::exportSubmission in Webform 6.x
Same name and namespace in other branches
- 8.5 modules/webform_submission_export_import/src/WebformSubmissionExportImportImporter.php \Drupal\webform_submission_export_import\WebformSubmissionExportImportImporter::exportSubmission()
Export webform submission as a CSV record.
Parameters
\Drupal\webform\WebformSubmissionInterface $webform_submission: A webform submission.
array $export_options: An associative array of export options.
Return value
array The webform submission converted to a CSV record.
Overrides WebformSubmissionExportImportImporterInterface::exportSubmission
File
- modules/
webform_submission_export_import/ src/ WebformSubmissionExportImportImporter.php, line 273
Class
- WebformSubmissionExportImportImporter
- Webform submission export importer.
Namespace
Drupal\webform_submission_export_importCode
public function exportSubmission(WebformSubmissionInterface $webform_submission, array $export_options = []) {
$submission_data = $webform_submission
->toArray(TRUE);
$record = [];
// Append fields.
$field_definitions = $this
->getFieldDefinitions();
foreach ($field_definitions as $field_name => $field_definition) {
switch ($field_name) {
case 'uid':
$value = $this
->getEntityExportId($webform_submission
->getOwner(), $export_options);
break;
case 'entity_id':
$value = $this
->getEntityExportId($webform_submission
->getSourceEntity(), $export_options);
break;
default:
$value = isset($submission_data[$field_name]) ? $submission_data[$field_name] : '';
break;
}
$record[] = $this
->exportValue($value);
}
// Append elements.
$elements = $this
->getElements();
foreach ($elements as $element) {
$element_plugin = $this->elementManager
->getElementInstance($element);
$has_multiple_values = $element_plugin
->hasMultipleValues($element);
if ($element_plugin instanceof WebformManagedFileBase) {
// Files: Get File URLS.
/** @var \Drupal\file\FileInterface $files */
$files = $element_plugin
->getTargetEntities($element, $webform_submission) ?: [];
$values = [];
foreach ($files as $file) {
$values[] = file_create_url($file
->getFileUri());
}
$value = implode(',', $values);
$record[] = $this
->exportValue($value);
}
elseif ($element_plugin instanceof WebformElementEntityReferenceInterface) {
// Entity references: Get entity UUIDs.
$entities = $element_plugin
->getTargetEntities($element, $webform_submission);
$values = [];
foreach ($entities as $entity) {
$values[] = $this
->getEntityExportId($entity, $export_options);
}
$value = implode(',', $values);
$record[] = $this
->exportValue($value);
}
elseif ($element_plugin instanceof WebformLikert) {
// Single Composite: Split questions into individual columns.
$value = $element_plugin
->getValue($element, $webform_submission);
$question_keys = array_keys($element['#questions']);
foreach ($question_keys as $question_key) {
$question_value = isset($value[$question_key]) ? $value[$question_key] : '';
$record[] = $this
->exportValue($question_value);
}
}
elseif ($element_plugin instanceof WebformCompositeBase && !$has_multiple_values) {
// Composite: Split single composite sub elements into individual columns.
$value = $element_plugin
->getValue($element, $webform_submission);
$composite_element_keys = array_keys($element_plugin
->getCompositeElements());
foreach ($composite_element_keys as $composite_element_key) {
$composite_value = isset($value[$composite_element_key]) ? $value[$composite_element_key] : '';
$record[] = $this
->exportValue($composite_value);
}
}
elseif ($element_plugin
->isComposite()) {
// Composite: Convert multiple composite values to a single line of YAML.
$value = $element_plugin
->getValue($element, $webform_submission);
$dumper = new Dumper(2);
$record[] = $dumper
->dump($value);
}
elseif ($has_multiple_values) {
// Multiple: Convert to comma separated values with commas URL encodes.
$values = $element_plugin
->getValue($element, $webform_submission);
$values = $values !== NULL ? (array) $values : [];
foreach ($values as $index => $value) {
$values[$index] = str_replace(',', '%2C', $value);
}
$value = implode(',', $values);
$record[] = $this
->exportValue($value);
}
else {
// Default: Convert NULL values to empty strings.
$value = $element_plugin
->getValue($element, $webform_submission);
$value = $value !== NULL ? $value : '';
$record[] = $this
->exportValue($value);
}
}
return $record;
}