Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion drush.services.yml
Original file line number Diff line number Diff line change
@@ -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 }
3 changes: 3 additions & 0 deletions os2forms_digital_post.services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
67 changes: 35 additions & 32 deletions src/Commands/CreatePdf.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
*
Expand All @@ -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;
}
Expand All @@ -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));
Expand Down
59 changes: 59 additions & 0 deletions src/Helper/WebformHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace Drupal\os2forms_digital_post\Helper;

use Drupal\os2forms_cpr_lookup\CPR\CprServiceResult;
use Drupal\webform\WebformSubmissionInterface;

/**
* Webform helper.
*/
final class WebformHelper {

/**
* Get template context.
*/
public function getTemplateContext(WebformSubmissionInterface $webformSubmission, CprServiceResult $cprServiceResult, array $configuration = []) {

$elements = [];
$blacklistedElements = $configuration['blacklist_elements_for_template'] ?? [];
$submissionData = $webformSubmission->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,
];
}

}
47 changes: 5 additions & 42 deletions src/Plugin/WebformHandler/DigitalPostWebformHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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');
Expand Down Expand Up @@ -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(
Expand All @@ -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);
Expand Down