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

Commit d6b5b86

Browse files
committed
Added beskedfordeler
1 parent aff8ec3 commit d6b5b86

File tree

6 files changed

+170
-8
lines changed

6 files changed

+170
-8
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"dompdf/dompdf": "~0.8.0",
3939
"drupal/webform": "^6.0",
4040
"http-interop/http-factory-guzzle": "^1.0.0",
41+
"itk-dev/beskedfordeler-drupal": "^1.0",
4142
"itk-dev/os2forms_cpr_lookup": "^1.6",
4243
"itk-dev/serviceplatformen": "^1.2",
4344
"os2forms/os2forms": "^3.0",

os2forms_digital_post.install

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
/**
4+
* @file
5+
* Install hooks for os2forms_digital_post.
6+
*/
7+
8+
use Drupal\os2forms_digital_post\Helper\BeskedfordelerHelper;
9+
10+
/**
11+
* Implements hook_schema().
12+
*
13+
* @see BeskedfordelerHelper::schema()
14+
*
15+
* @phpstan-return array<string, mixed>
16+
*/
17+
function os2forms_digital_post_schema() {
18+
return Drupal::service(BeskedfordelerHelper::class)->schema();
19+
}

os2forms_digital_post.services.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
services:
2+
logger.channel.os2forms_digital_post:
3+
parent: logger.channel_base
4+
arguments: [ 'os2forms_digital_post' ]
5+
26
os2forms_digital_post.template_manager:
37
class: Drupal\os2forms_digital_post\Manager\TemplateManager
48
arguments: ["@config.factory", "@twig", "@twig.loader.filesystem"]
@@ -37,6 +41,19 @@ services:
3741
- "@entity_type.manager"
3842
- "@os2forms_cpr_lookup.service"
3943
- "@Drupal\\os2forms_digital_post\\Helper\\MeMoHelper"
44+
- "@Drupal\\os2forms_digital_post\\Helper\\BeskedfordelerHelper"
4045
- "@logger.factory"
4146

4247
Drupal\os2forms_digital_post\Helper\SF1461Helper:
48+
49+
Drupal\os2forms_digital_post\EventSubscriber\BeskedfordelerEventSubscriber:
50+
arguments:
51+
- '@logger.channel.os2forms_digital_post'
52+
tags:
53+
- { name: 'event_subscriber' }
54+
55+
Drupal\os2forms_digital_post\Helper\BeskedfordelerHelper:
56+
arguments:
57+
- '@database'
58+
- '@Drupal\os2forms_digital_post\Helper\MeMoHelper'
59+
- '@logger.channel.os2forms_digital_post'
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Drupal\os2forms_digital_post\EventSubscriber;
4+
5+
use Drupal\beskedfordeler\Event\PostStatusBeskedModtagEvent;
6+
use Drupal\beskedfordeler\EventSubscriber\AbstractBeskedfordelerEventSubscriber;
7+
8+
/**
9+
* Event subscriber for PostStatusBeskedModtagEvent.
10+
*/
11+
final class BeskedfordelerEventSubscriber extends AbstractBeskedfordelerEventSubscriber {
12+
13+
/**
14+
* {@inheritdoc}
15+
*/
16+
protected function processPostStatusBeskedModtag(PostStatusBeskedModtagEvent $event): void {
17+
$this->logger->debug(__METHOD__);
18+
}
19+
20+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<?php
2+
3+
namespace Drupal\os2forms_digital_post\Helper;
4+
5+
use DigitalPost\MeMo\Message;
6+
use Drupal\Core\Database\Connection;
7+
use Drupal\Core\Datetime\DrupalDateTime;
8+
use Psr\Log\LoggerAwareTrait;
9+
use Psr\Log\LoggerInterface;
10+
11+
/**
12+
* Beskedfordeler helper.
13+
*/
14+
class BeskedfordelerHelper {
15+
use LoggerAwareTrait;
16+
17+
private const TABLE_NAME = 'os2forms_digital_post_beskedfordeler';
18+
19+
/**
20+
* The database.
21+
*
22+
* @var \Drupal\Core\Database\Connection
23+
*/
24+
private Connection $database;
25+
26+
/**
27+
* The MeMo helper.
28+
*
29+
* @var MeMoHelper
30+
*/
31+
private MeMoHelper $meMoHelper;
32+
33+
/**
34+
* Constructor.
35+
*/
36+
public function __construct(Connection $database, MeMoHelper $meMoHelper, LoggerInterface $logger) {
37+
$this->database = $database;
38+
$this->meMoHelper = $meMoHelper;
39+
$this->setLogger($logger);
40+
}
41+
42+
/**
43+
* Save MeMo message in database.
44+
*/
45+
public function saveMessage(Message $message) {
46+
$messageId = $message->getMessageHeader()->getMessageID();
47+
$message = $this->meMoHelper->message2dom($message)->saveXML();
48+
49+
return $this->database
50+
->insert(self::TABLE_NAME)
51+
->fields([
52+
'created' => (new DrupalDateTime())->getTimestamp(),
53+
'message_id' => $messageId,
54+
'memo_message' => $message,
55+
])
56+
->execute();
57+
}
58+
59+
/**
60+
* Implements hook_schema().
61+
*
62+
* @phpstan-return array<string, mixed>
63+
*/
64+
public function schema(): array {
65+
return [
66+
self::TABLE_NAME => [
67+
'description' => 'OSForms digital post beskedfordeler',
68+
'fields' => [
69+
'message_id' => [
70+
'description' => 'The message identifier.',
71+
'type' => 'varchar',
72+
'length' => 255,
73+
'not null' => TRUE,
74+
],
75+
'created' => [
76+
'description' => 'The Unix timestamp when the message was created.',
77+
'type' => 'int',
78+
'not null' => TRUE,
79+
],
80+
'memo_message' => [
81+
'description' => 'The MeMo message (XML).',
82+
'type' => 'text',
83+
'size' => 'medium',
84+
'not null' => TRUE,
85+
],
86+
'beskedfordeler_message' => [
87+
'description' => 'The Beskedfordeler message (XML).',
88+
'type' => 'text',
89+
'size' => 'medium',
90+
'not null' => FALSE,
91+
],
92+
'beskedfordeler_message_received' => [
93+
'description' => 'The Unix timestamp when the Beskedfordeler message was received.',
94+
'type' => 'int',
95+
'not null' => FALSE,
96+
],
97+
],
98+
'primary key' => ['message_id'],
99+
],
100+
];
101+
}
102+
103+
}

src/Helper/WebformHelperSF1601.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ final class WebformHelperSF1601 implements LoggerInterface {
7575
*/
7676
protected MeMoHelper $meMoHelper;
7777

78+
/**
79+
* The Beskedfordeler helper.
80+
*
81+
* @var BeskedfordelerHelper
82+
*/
83+
private BeskedfordelerHelper $beskedfordelerHelper;
84+
7885
/**
7986
* The logger.
8087
*
@@ -98,6 +105,7 @@ public function __construct(
98105
EntityTypeManagerInterface $entityTypeManager,
99106
CprServiceInterface $cprService,
100107
MeMoHelper $meMoHelper,
108+
BeskedfordelerHelper $beskedfordelerHelper,
101109
LoggerChannelFactoryInterface $loggerChannelFactory
102110
) {
103111
$this->settings = $settings;
@@ -106,6 +114,7 @@ public function __construct(
106114
$this->queueStorage = $entityTypeManager->getStorage('advancedqueue_queue');
107115
$this->cprService = $cprService;
108116
$this->meMoHelper = $meMoHelper;
117+
$this->beskedfordelerHelper = $beskedfordelerHelper;
109118
$this->logger = $loggerChannelFactory->get('os2forms_digital_post');
110119
$this->submissionLogger = $loggerChannelFactory->get('webform_submission');
111120
}
@@ -124,10 +133,6 @@ public function __construct(
124133
* [The response, The MeMo message].
125134
*/
126135
public function sendDigitalPost(WebformSubmissionInterface $submission, array $handlerSettings, array $submissionData = []): array {
127-
$logContext = [
128-
'webform_submission' => $submission,
129-
];
130-
131136
$submissionData = $submissionData + $submission->getData();
132137

133138
$handlerMessageSettings = $handlerSettings[WebformHandlerSF1601::MEMO_MESSAGE];
@@ -188,10 +193,7 @@ public function sendDigitalPost(WebformSubmissionInterface $submission, array $h
188193
$type = $handlerMessageSettings[WebformHandlerSF1601::TYPE] ?? SF1601::TYPE_DIGITAL_POST;
189194
$response = $service->kombiPostAfsend($transactionId, $type, $message);
190195

191-
$this->notice('Digital post sent', $logContext + [
192-
'handler_id' => 'os2forms_digital_post',
193-
'operation' => 'digital post sent',
194-
]);
196+
$this->beskedfordelerHelper->saveMessage($message);
195197

196198
return [$response, $service->getLastKombiMeMoMessage()];
197199
}

0 commit comments

Comments
 (0)