Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit cc1e313

Browse files
committed
Added webform helper.
1 parent ff9128a commit cc1e313

File tree

5 files changed

+103
-75
lines changed

5 files changed

+103
-75
lines changed

drush.services.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
os2forms_digital_post.commands:
33
class: \Drupal\os2forms_digital_post\Commands\CreatePdf
4-
arguments: ['@os2forms_digital_post.template_manager', '@entity_type.manager']
4+
arguments: ['@os2forms_digital_post.webform_helper', '@os2forms_digital_post.template_manager', '@entity_type.manager']
55
tags:
66
- { name: drush.command }

os2forms_digital_post.services.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ services:
66
os2forms_digital_post.print_service_consumer:
77
class: Drupal\os2forms_digital_post\Consumer\PrintServiceConsumer
88
arguments: ["@config.factory", "@http_client", "@lock", "@state", "@uuid"]
9+
10+
os2forms_digital_post.webform_helper:
11+
class: Drupal\os2forms_digital_post\WebformHelper

src/Commands/CreatePdf.php

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace Drupal\os2forms_digital_post\Commands;
44

55
use Drupal\Core\Entity\EntityTypeManagerInterface;
6+
use Drupal\os2forms_cpr_lookup\CPR\CprServiceResult;
67
use Drush\Commands\DrushCommands;
78
use Drupal\os2forms_digital_post\Manager\TemplateManager;
9+
use Drupal\os2forms_digital_post\WebformHelper;
810

911
/**
1012
* A drush command file for commands related to os2forms_digital_post.
@@ -13,6 +15,13 @@
1315
*/
1416
class CreatePdf extends DrushCommands {
1517

18+
/**
19+
* The os2forms_digital_post webform helper.
20+
*
21+
* @var \Drupal\os2forms_digital_post\WebformHelper
22+
*/
23+
protected WebformHelper $webformHelper;
24+
1625
/**
1726
* The os2forms_digital_post template manager.
1827
*
@@ -30,8 +39,9 @@ class CreatePdf extends DrushCommands {
3039
/**
3140
* Constructor.
3241
*/
33-
public function __construct(TemplateManager $templateManager, EntityTypeManagerInterface $entity_type_manager) {
42+
public function __construct(WebformHelper $webformHelper, TemplateManager $templateManager, EntityTypeManagerInterface $entity_type_manager) {
3443
parent::__construct();
44+
$this->webformHelper = $webformHelper;
3545
$this->templateManager = $templateManager;
3646
$this->entityTypeManager = $entity_type_manager;
3747
}
@@ -58,42 +68,35 @@ public function create($template, array $options = [
5868
'file_name' => 'test.pdf',
5969
]) {
6070
$elements[] = [];
61-
$webformLabel = '';
6271
$webform_submission = $this->entityTypeManager->getStorage('webform_submission')->load($options['submission_id']);
63-
if ($webform_submission) {
64-
$webform = $webform_submission->getWebform();
65-
$webformLabel = $webform->label();
66-
$submissionData = $webform_submission->getData();
67-
foreach ($submissionData as $key => $value) {
68-
$element = $webform->getElement($key, TRUE);
69-
$elements[] = [
70-
'name' => $element['#title'],
71-
'value' => $element['#return_value'] ?? $value,
72-
];
73-
}
74-
}
75-
else {
76-
$this->output()->writeln('Submission id: ' . $options['submission_id'] . ' not found. An empty ' . $template . ' template was created.');
72+
73+
if (!$webform_submission) {
74+
$this->output()->writeln(sprintf('Submission id %s not found.', $options['submission_id']));
75+
return;
7776
}
7877

79-
$recipient = [
80-
'name' => 'Test Testersen',
81-
'streetName' => 'Testervej',
82-
'streetNumber' => '1',
83-
'floor' => '2',
84-
'side' => 'tv',
85-
'postalCode' => '8000',
86-
'city' => 'Aarhus C.',
87-
];
78+
$cprServiceResult = new CprServiceResult(json_decode(json_encode([
79+
'persondata' => [
80+
'navn' => [
81+
'fornavn' => 'Test',
82+
'efternavn' => 'Testersen',
83+
],
84+
],
85+
'adresse' => [
86+
'aktuelAdresse' => [
87+
'vejnavn' => 'Testervej',
88+
'husnummer' => '1',
89+
'etage' => '2',
90+
'sidedoer' => 'tv',
91+
'postnummer' => '8000',
92+
'postdistrikt' => 'Aarhus C',
93+
],
94+
],
95+
])));
8896

89-
$context = [
90-
'label' => $webformLabel,
91-
'elements' => $elements,
92-
'recipient' => $recipient,
93-
];
97+
$context = $this->webformHelper->getTemplateContext($webform_submission, $cprServiceResult, []);
9498

95-
$pathToTemplate = $template;
96-
$pdf = $this->templateManager->renderPdf($pathToTemplate, $context);
99+
$pdf = $this->templateManager->renderPdf($template, $context);
97100
$filePath = dirname(DRUPAL_ROOT) . $options['file_location'] . '/' . $options['file_name'];
98101
file_put_contents($filePath, $pdf);
99102
$this->output()->writeln(sprintf('Pdf written to %s', $filePath));

src/Plugin/WebformHandler/DigitalPostWebformHandler.php

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ class DigitalPostWebformHandler extends WebformHandlerBase {
3232
protected $tokenManager;
3333

3434
/**
35-
* The webform element plugin manager.
35+
* The webform helper.
3636
*
37-
* @var \Drupal\webform\Plugin\WebformElementManagerInterface
37+
* @var \Drupal\os2forms_digital_post\WebformHelper
3838
*/
39-
protected $elementManager;
39+
protected $webformHelper;
4040

4141
/**
4242
* The template manager.
@@ -71,8 +71,7 @@ public static function create(ContainerInterface $container, array $configuratio
7171
$instance->entityTypeManager = $container->get('entity_type.manager');
7272
$instance->conditionsValidator = $container->get('webform_submission.conditions_validator');
7373
$instance->tokenManager = $container->get('webform.token_manager');
74-
75-
$instance->elementManager = $container->get('plugin.manager.webform.element');
74+
$instance->webformHelper = $container->get('os2forms_digital_post.webform_helper');
7675
$instance->templateManager = $container->get('os2forms_digital_post.template_manager');
7776
$instance->printServiceConsumer = $container->get('os2forms_digital_post.print_service_consumer');
7877
$instance->cprService = $container->get('os2forms_cpr_lookup.service');
@@ -305,23 +304,7 @@ public function preSave(WebformSubmissionInterface $webform_submission) {
305304
public function postSave(WebformSubmissionInterface $webform_submission, $update = TRUE) {
306305
$this->debug(__FUNCTION__, $update ? 'update' : 'insert');
307306

308-
$elements = [];
309-
$blacklistedElements = $this->configuration['blacklist_elements_for_template'];
310307
$submissionData = $webform_submission->getData();
311-
foreach ($submissionData as $key => $value) {
312-
313-
if (array_key_exists($key, $blacklistedElements)) {
314-
continue;
315-
}
316-
317-
$element = $this->webform->getElement($key);
318-
319-
$elements[] = [
320-
'label' => $this->webform->label(),
321-
'name' => $element['#title'],
322-
'value' => $element['#return_value'] ?? $value,
323-
];
324-
}
325308

326309
if (!array_key_exists($this->configuration['cpr_element'], $submissionData)) {
327310
$this->getLogger()->error(
@@ -334,27 +317,7 @@ public function postSave(WebformSubmissionInterface $webform_submission, $update
334317
/** @var \Drupal\os2forms_cpr_lookup\CPR\CprServiceResult $cprSearchResult */
335318
$cprSearchResult = $this->cprService->search($submissionData[$this->configuration['cpr_element']]);
336319

337-
// We cannot use “side” (from address lookup via cpr) as “suiteIdentifier”
338-
// when sending digital port. Therefore we append it to “floor” instead.
339-
$floor = $cprSearchResult->getFloor();
340-
if (!empty($cprSearchResult->getSide())) {
341-
$floor .= ' ' . $cprSearchResult->getSide();
342-
}
343-
344-
$recipient = [
345-
'name' => $cprSearchResult->getName(),
346-
'streetName' => $cprSearchResult->getStreetName(),
347-
'streetNumber' => $cprSearchResult->getHouseNumber(),
348-
'floor' => $floor,
349-
'side' => NULL,
350-
'postalCode' => $cprSearchResult->getPostalCode(),
351-
'city' => $cprSearchResult->getCity(),
352-
];
353-
354-
$context = [
355-
'elements' => $elements,
356-
'recipient' => $recipient,
357-
];
320+
$context = $this->webformHelper->getTemplateContext($webform_submission, $cprSearchResult, $this->configuration);
358321

359322
if (TRUE === $this->configuration['debug']) {
360323
$this->templateManager->renderPdf($this->configuration['template'], $context, TRUE);

src/WebformHelper.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace Drupal\os2forms_digital_post;
4+
5+
use Drupal\os2forms_cpr_lookup\CPR\CprServiceResult;
6+
use Drupal\webform\WebformSubmissionInterface;
7+
8+
/**
9+
* Webform helper.
10+
*/
11+
final class WebformHelper {
12+
13+
/**
14+
* Get template context.
15+
*/
16+
public function getTemplateContext(WebformSubmissionInterface $webformSubmission, CprServiceResult $cprServiceResult, array $configuration = []) {
17+
18+
$elements = [];
19+
$blacklistedElements = $configuration['blacklist_elements_for_template'] ?? [];
20+
$submissionData = $webformSubmission->getData();
21+
$webform = $webformSubmission->getWebform();
22+
foreach ($submissionData as $key => $value) {
23+
if (array_key_exists($key, $blacklistedElements)) {
24+
continue;
25+
}
26+
27+
$element = $webform->getElement($key);
28+
29+
$elements[] = [
30+
'name' => $element['#title'],
31+
'value' => $element['#return_value'] ?? $value,
32+
];
33+
}
34+
35+
// We cannot use “side” (from address lookup via cpr) as “suiteIdentifier”
36+
// when sending digital port. Therefore we append it to “floor” instead.
37+
$floor = $cprServiceResult->getFloor();
38+
if (!empty($cprServiceResult->getSide())) {
39+
$floor .= ' ' . $cprServiceResult->getSide();
40+
}
41+
42+
$recipient = [
43+
'name' => $cprServiceResult->getName(),
44+
'streetName' => $cprServiceResult->getStreetName(),
45+
'streetNumber' => $cprServiceResult->getHouseNumber(),
46+
'floor' => $floor,
47+
'side' => NULL,
48+
'postalCode' => $cprServiceResult->getPostalCode(),
49+
'city' => $cprServiceResult->getCity(),
50+
];
51+
52+
return [
53+
'label' => $webform->label(),
54+
'elements' => $elements,
55+
'recipient' => $recipient,
56+
];
57+
}
58+
59+
}

0 commit comments

Comments
 (0)