public function GdprTasksSarWorker::compile in General Data Protection Regulation 8
Same name and namespace in other branches
- 8.2 modules/gdpr_tasks/src/Plugin/QueueWorker/GdprTasksSarWorker.php \Drupal\gdpr_tasks\Plugin\QueueWorker\GdprTasksSarWorker::compile()
- 3.0.x modules/gdpr_tasks/src/Plugin/QueueWorker/GdprTasksSarWorker.php \Drupal\gdpr_tasks\Plugin\QueueWorker\GdprTasksSarWorker::compile()
Compile the SAR into a downloadable zip.
Parameters
\Drupal\gdpr_tasks\Entity\TaskInterface $task: The task.
1 call to GdprTasksSarWorker::compile()
- GdprTasksSarWorker::processItem in modules/
gdpr_tasks/ src/ Plugin/ QueueWorker/ GdprTasksSarWorker.php - Works on a single queue item.
File
- modules/
gdpr_tasks/ src/ Plugin/ QueueWorker/ GdprTasksSarWorker.php, line 340
Class
- GdprTasksSarWorker
- Processes SARs tasks when data processing is required.
Namespace
Drupal\gdpr_tasks\Plugin\QueueWorkerCode
public function compile(TaskInterface $task) {
// Compile all files into a single zip.
/* @var \Drupal\file\Entity\File $file */
$file = $task->sar_export->entity;
if (NULL === $file) {
$this->messenger
->addError(t('SARs Export File not found for task @task_id.', [
'@task_id' => $task
->id(),
]));
return;
}
$file_path = $this->fileSystem
->realpath($file->uri->value);
$zip = new \ZipArchive();
if (!$zip
->open($file_path, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
// @todo: Improve error handling.
$this->messenger
->addError(t('Error opening file.'));
return;
}
// Gather all the files we need to include in this package.
$part_files = [];
foreach ($task->sar_export_parts as $item) {
/* @var \Drupal\file\Entity\File $part_file */
$part_file = $item->entity;
$part_files[] = $part_file;
// Add the file to the zip.
// @todo: Add error handling.
$zip
->addFile($this->fileSystem
->realpath($part_file->uri->value), $part_file->filename->value);
}
// Add in any attached files that need including.
foreach ($task->sar_export_assets as $item) {
$asset_file = $item->entity;
// Add the file to the zip.
$filename = "assets/{$asset_file->fid->value}." . pathinfo($asset_file->uri->value, PATHINFO_EXTENSION);
// @todo: Add error handling.
$zip
->addFile($this->fileSystem
->realpath($asset_file->uri->value), $filename);
}
// Clear our parts and assets file lists.
$task->sar_export_parts = NULL;
$task->sar_export_assets = NULL;
// Close the zip to write it to disk.
// @todo: Add error handling.
$zip
->close();
// Save the file to update the file size.
$file
->save();
// Remove the partial files.
foreach ($part_files as $part_file) {
$part_file
->delete();
}
// @todo Clean up the parts directory.
// Update the status as completed.
$task->status = 'closed';
$task
->save();
}