diff --git a/drush.services.yml b/drush.services.yml index b1f45ca..b5124c8 100644 --- a/drush.services.yml +++ b/drush.services.yml @@ -1,6 +1,6 @@ services: os2forms_digital_post.commands: class: \Drupal\os2forms_digital_post\Commands\CreatePdf - arguments: ['@os2forms_digital_post.template_manager', '@entity_type.manager'] + arguments: ['@os2forms_digital_post.webform_helper', '@os2forms_digital_post.template_manager', '@entity_type.manager'] tags: - { name: drush.command } diff --git a/os2forms_digital_post.services.yml b/os2forms_digital_post.services.yml index 017d265..31ddee0 100644 --- a/os2forms_digital_post.services.yml +++ b/os2forms_digital_post.services.yml @@ -6,3 +6,6 @@ services: os2forms_digital_post.print_service_consumer: class: Drupal\os2forms_digital_post\Consumer\PrintServiceConsumer arguments: ["@config.factory", "@http_client", "@lock", "@state", "@uuid"] + + os2forms_digital_post.webform_helper: + class: Drupal\os2forms_digital_post\Helper\WebformHelper diff --git a/src/Commands/CreatePdf.php b/src/Commands/CreatePdf.php index b14f4a7..4b35aa8 100644 --- a/src/Commands/CreatePdf.php +++ b/src/Commands/CreatePdf.php @@ -3,8 +3,10 @@ namespace Drupal\os2forms_digital_post\Commands; use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\os2forms_cpr_lookup\CPR\CprServiceResult; use Drush\Commands\DrushCommands; use Drupal\os2forms_digital_post\Manager\TemplateManager; +use Drupal\os2forms_digital_post\Helper\WebformHelper; /** * A drush command file for commands related to os2forms_digital_post. @@ -13,6 +15,13 @@ */ class CreatePdf extends DrushCommands { + /** + * The os2forms_digital_post webform helper. + * + * @var \Drupal\os2forms_digital_post\WebformHelper + */ + protected WebformHelper $webformHelper; + /** * The os2forms_digital_post template manager. * @@ -30,8 +39,9 @@ class CreatePdf extends DrushCommands { /** * Constructor. */ - public function __construct(TemplateManager $templateManager, EntityTypeManagerInterface $entity_type_manager) { + public function __construct(WebformHelper $webformHelper, TemplateManager $templateManager, EntityTypeManagerInterface $entity_type_manager) { parent::__construct(); + $this->webformHelper = $webformHelper; $this->templateManager = $templateManager; $this->entityTypeManager = $entity_type_manager; } @@ -58,42 +68,35 @@ public function create($template, array $options = [ 'file_name' => 'test.pdf', ]) { $elements[] = []; - $webformLabel = ''; $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.'); + + if (!$webform_submission) { + $this->output()->writeln(sprintf('Submission id %s not found.', $options['submission_id'])); + return; } - $recipient = [ - 'name' => 'Test Testersen', - 'streetName' => 'Testervej', - 'streetNumber' => '1', - 'floor' => '2', - 'side' => 'tv', - 'postalCode' => '8000', - 'city' => 'Aarhus C.', - ]; + $cprServiceResult = new CprServiceResult(json_decode(json_encode([ + 'persondata' => [ + 'navn' => [ + 'fornavn' => 'Test', + 'efternavn' => 'Testersen', + ], + ], + 'adresse' => [ + 'aktuelAdresse' => [ + 'vejnavn' => 'Testervej', + 'husnummer' => '1', + 'etage' => '2', + 'sidedoer' => 'tv', + 'postnummer' => '8000', + 'postdistrikt' => 'Aarhus C', + ], + ], + ]))); - $context = [ - 'label' => $webformLabel, - 'elements' => $elements, - 'recipient' => $recipient, - ]; + $context = $this->webformHelper->getTemplateContext($webform_submission, $cprServiceResult, []); - $pathToTemplate = $template; - $pdf = $this->templateManager->renderPdf($pathToTemplate, $context); + $pdf = $this->templateManager->renderPdf($template, $context); $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/Helper/WebformHelper.php b/src/Helper/WebformHelper.php new file mode 100644 index 0000000..0f13a89 --- /dev/null +++ b/src/Helper/WebformHelper.php @@ -0,0 +1,59 @@ +getData(); + $webform = $webformSubmission->getWebform(); + foreach ($submissionData as $key => $value) { + if (array_key_exists($key, $blacklistedElements)) { + continue; + } + + $element = $webform->getElement($key); + + $elements[] = [ + 'name' => $element['#title'], + 'value' => $element['#return_value'] ?? $value, + ]; + } + + // We cannot use “side” (from address lookup via cpr) as “suiteIdentifier” + // when sending digital port. Therefore we append it to “floor” instead. + $floor = $cprServiceResult->getFloor(); + if (!empty($cprServiceResult->getSide())) { + $floor .= ' ' . $cprServiceResult->getSide(); + } + + $recipient = [ + 'name' => $cprServiceResult->getName(), + 'streetName' => $cprServiceResult->getStreetName(), + 'streetNumber' => $cprServiceResult->getHouseNumber(), + 'floor' => $floor, + 'side' => NULL, + 'postalCode' => $cprServiceResult->getPostalCode(), + 'city' => $cprServiceResult->getCity(), + ]; + + return [ + 'label' => $webform->label(), + 'elements' => $elements, + 'recipient' => $recipient, + ]; + } + +} diff --git a/src/Plugin/WebformHandler/DigitalPostWebformHandler.php b/src/Plugin/WebformHandler/DigitalPostWebformHandler.php index 768b438..b76f02f 100644 --- a/src/Plugin/WebformHandler/DigitalPostWebformHandler.php +++ b/src/Plugin/WebformHandler/DigitalPostWebformHandler.php @@ -32,11 +32,11 @@ class DigitalPostWebformHandler extends WebformHandlerBase { protected $tokenManager; /** - * The webform element plugin manager. + * The webform helper. * - * @var \Drupal\webform\Plugin\WebformElementManagerInterface + * @var \Drupal\os2forms_digital_post\WebformHelper */ - protected $elementManager; + protected $webformHelper; /** * The template manager. @@ -71,8 +71,7 @@ public static function create(ContainerInterface $container, array $configuratio $instance->entityTypeManager = $container->get('entity_type.manager'); $instance->conditionsValidator = $container->get('webform_submission.conditions_validator'); $instance->tokenManager = $container->get('webform.token_manager'); - - $instance->elementManager = $container->get('plugin.manager.webform.element'); + $instance->webformHelper = $container->get('os2forms_digital_post.webform_helper'); $instance->templateManager = $container->get('os2forms_digital_post.template_manager'); $instance->printServiceConsumer = $container->get('os2forms_digital_post.print_service_consumer'); $instance->cprService = $container->get('os2forms_cpr_lookup.service'); @@ -305,23 +304,7 @@ public function preSave(WebformSubmissionInterface $webform_submission) { public function postSave(WebformSubmissionInterface $webform_submission, $update = TRUE) { $this->debug(__FUNCTION__, $update ? 'update' : 'insert'); - $elements = []; - $blacklistedElements = $this->configuration['blacklist_elements_for_template']; $submissionData = $webform_submission->getData(); - foreach ($submissionData as $key => $value) { - - if (array_key_exists($key, $blacklistedElements)) { - continue; - } - - $element = $this->webform->getElement($key); - - $elements[] = [ - 'label' => $this->webform->label(), - 'name' => $element['#title'], - 'value' => $element['#return_value'] ?? $value, - ]; - } if (!array_key_exists($this->configuration['cpr_element'], $submissionData)) { $this->getLogger()->error( @@ -334,27 +317,7 @@ public function postSave(WebformSubmissionInterface $webform_submission, $update /** @var \Drupal\os2forms_cpr_lookup\CPR\CprServiceResult $cprSearchResult */ $cprSearchResult = $this->cprService->search($submissionData[$this->configuration['cpr_element']]); - // We cannot use “side” (from address lookup via cpr) as “suiteIdentifier” - // when sending digital port. Therefore we append it to “floor” instead. - $floor = $cprSearchResult->getFloor(); - if (!empty($cprSearchResult->getSide())) { - $floor .= ' ' . $cprSearchResult->getSide(); - } - - $recipient = [ - 'name' => $cprSearchResult->getName(), - 'streetName' => $cprSearchResult->getStreetName(), - 'streetNumber' => $cprSearchResult->getHouseNumber(), - 'floor' => $floor, - 'side' => NULL, - 'postalCode' => $cprSearchResult->getPostalCode(), - 'city' => $cprSearchResult->getCity(), - ]; - - $context = [ - 'elements' => $elements, - 'recipient' => $recipient, - ]; + $context = $this->webformHelper->getTemplateContext($webform_submission, $cprSearchResult, $this->configuration); if (TRUE === $this->configuration['debug']) { $this->templateManager->renderPdf($this->configuration['template'], $context, TRUE);