From b64c13bfa5b3a25c67aeaa6ba95ad548739e27bd Mon Sep 17 00:00:00 2001 From: martinyde Date: Wed, 19 Jan 2022 14:45:46 +0100 Subject: [PATCH 1/3] DW-439: Added drush command --- drush.services.yml | 6 +++ src/Commands/CreatePdf.php | 95 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 drush.services.yml create mode 100644 src/Commands/CreatePdf.php diff --git a/drush.services.yml b/drush.services.yml new file mode 100644 index 0000000..b1f45ca --- /dev/null +++ b/drush.services.yml @@ -0,0 +1,6 @@ +services: + os2forms_digital_post.commands: + class: \Drupal\os2forms_digital_post\Commands\CreatePdf + arguments: ['@os2forms_digital_post.template_manager', '@entity_type.manager'] + tags: + - { name: drush.command } diff --git a/src/Commands/CreatePdf.php b/src/Commands/CreatePdf.php new file mode 100644 index 0000000..be1fc7b --- /dev/null +++ b/src/Commands/CreatePdf.php @@ -0,0 +1,95 @@ +templateManager = $templateManager; + $this->entityTypeManager = $entity_type_manager; + } + + /** + * Create PDF named test.pdf in current directory. + * + * @param string $template + * The template name to use. + * @param array $options + * An option that takes multiple values. + * + * @command os2forms_digital_post:create_pdf + * @aliases create-pdf + * @usage os2forms_digital_post:create_pdf default --submission_id=12345 + * Create PDF using default template with data from set submission. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + */ + public function create($template, $options = ['submission_id'=> 0]) { + $elements[] = []; + $webformLabel = ''; + if (0 < $options['submission_id']) { + $webform_submission = $this->entityTypeManager->getStorage('webform_submission')->load($options['submission_id']); + if ($webform_submission) { + $webform = $webform_submission->getWebform(); + $webformLabel = $webform->label(); + $submissionData = $webform_submission->getData(); + foreach ($submissionData as $key => $value) { + $element = $webform->getElement($key, TRUE); + $elements[] = [ + 'name' => $element['#title'], + 'value' => isset($element['#return_value']) ? $element['#return_value'] : $value, + ]; + } + } + else { + $this->output()->writeln('Submission id: ' . $options['submission_id'] . ' not found. An empty ' . $template . ' template was created.'); + } + } + + $recipient = [ + 'name' => 'Test testersen', + 'streetName' => 'Testervej', + 'streetNumber' => '1', + 'floor' => '2', + 'side' => 'tv', + 'postalCode' => '8000', + 'city' => 'Aarhus C.', + ]; + + $context = [ + 'label' => $webformLabel, + 'elements' => $elements, + 'recipient' => $recipient, + ]; + + $pathToTemplate = $template; + $pdf = $this->templateManager->renderPdf($pathToTemplate, $context); + file_put_contents('test.pdf', $pdf); + } +} From 94b4adad847aa459c3ca7a60a043ed191a78c2be Mon Sep 17 00:00:00 2001 From: martinyde Date: Wed, 19 Jan 2022 14:49:10 +0100 Subject: [PATCH 2/3] DW-439: Added webform label and optional retun value on elements --- src/Plugin/WebformHandler/DigitalPostWebformHandler.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Plugin/WebformHandler/DigitalPostWebformHandler.php b/src/Plugin/WebformHandler/DigitalPostWebformHandler.php index fa16f00..03a145d 100644 --- a/src/Plugin/WebformHandler/DigitalPostWebformHandler.php +++ b/src/Plugin/WebformHandler/DigitalPostWebformHandler.php @@ -314,8 +314,9 @@ public function postSave(WebformSubmissionInterface $webform_submission, $update $element = $this->webform->getElement($key); $elements[] = [ + 'label' => $this->webform->label(), 'name' => $element['#title'], - 'value' => $value, + 'value' => isset($element['#return_value']) ? $element['#return_value'] : $value, ]; } From 41818e31dfac4ad66adb10aced93fba3fbe8ecbe Mon Sep 17 00:00:00 2001 From: martinyde Date: Thu, 20 Jan 2022 09:32:16 +0100 Subject: [PATCH 3/3] DW-439: Changed stuff after code review --- README.md | 9 ++++ src/Commands/CreatePdf.php | 43 +++++++++---------- .../DigitalPostWebformHandler.php | 2 +- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 6c4642f..758bbfd 100644 --- a/README.md +++ b/README.md @@ -90,3 +90,12 @@ Apply coding standards: ```shell composer coding-standards-apply ``` + +## Drush command + +A drush command is available for testing purposes. It creates a PDF from a template and a given submission. + +Read more: +```shell +drush os2forms_digital_post:create_pdf --help +``` \ No newline at end of file diff --git a/src/Commands/CreatePdf.php b/src/Commands/CreatePdf.php index be1fc7b..b212234 100644 --- a/src/Commands/CreatePdf.php +++ b/src/Commands/CreatePdf.php @@ -5,10 +5,9 @@ use Drupal\Core\Entity\EntityTypeManagerInterface; use Drush\Commands\DrushCommands; use Drupal\os2forms_digital_post\Manager\TemplateManager; -use Drupal\Core\Config\ConfigFactoryInterface; /** - * A drush command file. + * A drush command file for commands related to os2forms_digital_post. * * @package Drupal\event_database_pull\Commands */ @@ -35,7 +34,7 @@ public function __construct(TemplateManager $templateManager, EntityTypeManagerI } /** - * Create PDF named test.pdf in current directory. + * Create PDF in directory relative to Drupal root directory. * * @param string $template * The template name to use. @@ -50,30 +49,28 @@ public function __construct(TemplateManager $templateManager, EntityTypeManagerI * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ - public function create($template, $options = ['submission_id'=> 0]) { + public function create($template, $options = ['submission_id' => 0, 'file_location' => '', 'file_name' => 'test.pdf']) { $elements[] = []; $webformLabel = ''; - if (0 < $options['submission_id']) { - $webform_submission = $this->entityTypeManager->getStorage('webform_submission')->load($options['submission_id']); - if ($webform_submission) { - $webform = $webform_submission->getWebform(); - $webformLabel = $webform->label(); - $submissionData = $webform_submission->getData(); - foreach ($submissionData as $key => $value) { - $element = $webform->getElement($key, TRUE); - $elements[] = [ - 'name' => $element['#title'], - 'value' => isset($element['#return_value']) ? $element['#return_value'] : $value, - ]; - } - } - else { - $this->output()->writeln('Submission id: ' . $options['submission_id'] . ' not found. An empty ' . $template . ' template was created.'); + $webform_submission = $this->entityTypeManager->getStorage('webform_submission')->load($options['submission_id']); + if ($webform_submission) { + $webform = $webform_submission->getWebform(); + $webformLabel = $webform->label(); + $submissionData = $webform_submission->getData(); + foreach ($submissionData as $key => $value) { + $element = $webform->getElement($key, TRUE); + $elements[] = [ + 'name' => $element['#title'], + 'value' => $element['#return_value'] ?? $value, + ]; } } + else { + $this->output()->writeln('Submission id: ' . $options['submission_id'] . ' not found. An empty ' . $template . ' template was created.'); + } $recipient = [ - 'name' => 'Test testersen', + 'name' => 'Test Testersen', 'streetName' => 'Testervej', 'streetNumber' => '1', 'floor' => '2', @@ -90,6 +87,8 @@ public function create($template, $options = ['submission_id'=> 0]) { $pathToTemplate = $template; $pdf = $this->templateManager->renderPdf($pathToTemplate, $context); - file_put_contents('test.pdf', $pdf); + $filePath = dirname(DRUPAL_ROOT) . $options['file_location'] . '/' . $options['file_name']; + file_put_contents($filePath, $pdf); + $this->output()->writeln(sprintf('Pdf written to %s', $filePath)); } } diff --git a/src/Plugin/WebformHandler/DigitalPostWebformHandler.php b/src/Plugin/WebformHandler/DigitalPostWebformHandler.php index 03a145d..67acc25 100644 --- a/src/Plugin/WebformHandler/DigitalPostWebformHandler.php +++ b/src/Plugin/WebformHandler/DigitalPostWebformHandler.php @@ -316,7 +316,7 @@ public function postSave(WebformSubmissionInterface $webform_submission, $update $elements[] = [ 'label' => $this->webform->label(), 'name' => $element['#title'], - 'value' => isset($element['#return_value']) ? $element['#return_value'] : $value, + 'value' => $element['#return_value'] ?? $value, ]; }