22
33namespace Drupal \os2forms_digital_post \Helper ;
44
5- use DigitalPost \MeMo \Message ;
5+ use DigitalPost \MeMo \Message as MeMoMessage ;
66use Drupal \Core \Database \Connection ;
7- use Drupal \Core \Datetime \DrupalDateTime ;
7+ use Drupal \os2forms_digital_post \Exception \InvalidMessage ;
8+ use Drupal \os2forms_digital_post \Model \Message ;
89use Psr \Log \LoggerAwareTrait ;
910use Psr \Log \LoggerInterface ;
1011
@@ -42,20 +43,60 @@ public function __construct(Connection $database, MeMoHelper $meMoHelper, Logger
4243 /**
4344 * Save MeMo message in database.
4445 */
45- public function saveMessage ( Message $ message ) {
46- $ messageId = $ message ->getMessageHeader ()->getMessageID ();
46+ public function createMessage ( int $ submissionId , MeMoMessage $ message, string $ receipt ) {
47+ $ messageUUID = $ message ->getMessageHeader ()->getMessageUUID ();
4748 $ message = $ this ->meMoHelper ->message2dom ($ message )->saveXML ();
4849
4950 return $ this ->database
5051 ->insert (self ::TABLE_NAME )
5152 ->fields ([
52- 'created ' => (new DrupalDateTime ())->getTimestamp (),
53- 'message_id ' => $ messageId ,
54- 'memo_message ' => $ message ,
53+ 'submission_id ' => $ submissionId ,
54+ 'message_uuid ' => $ messageUUID ,
55+ 'message ' => $ message ,
56+ 'receipt ' => $ receipt ,
5557 ])
5658 ->execute ();
5759 }
5860
61+ /**
62+ * Load message.
63+ *
64+ * @param string $messageUUID
65+ * The message UUID.
66+ *
67+ * @return \Drupal\os2forms_digital_post\Model\Message|null
68+ * The message.
69+ */
70+ public function loadMessage (string $ messageUUID ): ?Message {
71+ $ messages = $ this ->database
72+ ->select (self ::TABLE_NAME , 'm ' )
73+ ->fields ('m ' )
74+ ->condition ('message_uuid ' , $ messageUUID )
75+ ->execute ()
76+ ->fetchAll (\PDO ::FETCH_CLASS , Message::class);
77+
78+ return reset ($ messages ) ?: NULL ;
79+ }
80+
81+ /**
82+ * Add Beskedfordeler message to message.
83+ */
84+ public function addBeskedfordelerMessage (string $ messageUUID , string $ beskedfordelerMessage ) {
85+ $ message = $ this ->loadMessage ($ messageUUID );
86+
87+ if (NULL === $ message ) {
88+ throw new InvalidMessage (sprintf ('Invalid message UUID: %s ' , $ messageUUID ));
89+ }
90+
91+ return $ this ->database
92+ ->update (self ::TABLE_NAME )
93+ ->fields ([
94+ 'beskedfordeler_message ' => $ beskedfordelerMessage ,
95+ ])
96+ ->condition ('message_uuid ' , $ messageUUID )
97+ ->execute ();
98+ }
99+
59100 /**
60101 * Implements hook_schema().
61102 *
@@ -66,36 +107,37 @@ public function schema(): array {
66107 self ::TABLE_NAME => [
67108 'description ' => 'OSForms digital post beskedfordeler ' ,
68109 'fields ' => [
69- 'message_id ' => [
70- 'description ' => 'The message identifier. ' ,
71- 'type ' => 'varchar ' ,
72- 'length ' => 255 ,
110+ 'submission_id ' => [
111+ 'description ' => 'The submission id. ' ,
112+ 'type ' => 'int ' ,
73113 'not null ' => TRUE ,
74114 ],
75- 'created ' => [
76- 'description ' => 'The Unix timestamp when the message was created. ' ,
77- 'type ' => 'int ' ,
115+ 'message_uuid ' => [
116+ 'description ' => 'The message UUID (formatted with dashes). ' ,
117+ 'type ' => 'varchar ' ,
118+ 'length ' => 36 ,
78119 'not null ' => TRUE ,
79120 ],
80- 'memo_message ' => [
121+ 'message ' => [
81122 'description ' => 'The MeMo message (XML). ' ,
82123 'type ' => 'text ' ,
83124 'size ' => 'medium ' ,
84125 'not null ' => TRUE ,
85126 ],
127+ 'receipt ' => [
128+ 'description ' => 'The MeMo message receipt (XML). ' ,
129+ 'type ' => 'text ' ,
130+ 'size ' => 'medium ' ,
131+ 'not null ' => TRUE ,
132+ ],
86133 'beskedfordeler_message ' => [
87134 'description ' => 'The Beskedfordeler message (XML). ' ,
88135 'type ' => 'text ' ,
89136 'size ' => 'medium ' ,
90137 'not null ' => FALSE ,
91138 ],
92- 'beskedfordeler_message_received ' => [
93- 'description ' => 'The Unix timestamp when the Beskedfordeler message was received. ' ,
94- 'type ' => 'int ' ,
95- 'not null ' => FALSE ,
96- ],
97139 ],
98- 'primary key ' => ['message_id ' ],
140+ 'primary key ' => ['message_uuid ' ],
99141 ],
100142 ];
101143 }
0 commit comments