diff --git a/.woodpecker/prod.yml b/.woodpecker/prod.yml index 233b2fcb6..307c55ce2 100644 --- a/.woodpecker/prod.yml +++ b/.woodpecker/prod.yml @@ -50,6 +50,13 @@ steps: month: "*" weekday: "*" job: 'itkdev-docker-compose-server exec phpfpm vendor/bin/drush --uri="https://deltag.aarhus.dk" hoeringsportal:public_meeting:state-update' + course: + minute: "*/1" + hour: "*" + day: "*" + month: "*" + weekday: "*" + job: 'itkdev-docker-compose-server exec phpfpm vendor/bin/drush --uri="https://deltag.aarhus.dk" hoeringsportal:course:state-update' deskpro: minute: "*/5" hour: "*" diff --git a/CHANGELOG.md b/CHANGELOG.md index 1df2f8ad3..5ab0684e3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [4.17.0] - 2026-06-15 + +* [PR-667](https://github.com/itk-dev/deltag.aarhus.dk/pull/667) + 7805: Added display of owner name om proposal + +* [PR-666](https://github.com/itk-dev/deltag.aarhus.dk/pull/666) + 7740: Used blob ID as attachment index in Deskpro API call + * [PR-663](https://github.com/itk-dev/deltag.aarhus.dk/pull/663) 7577: Updated handling of start and end times on timeline @@ -768,7 +776,8 @@ Updated drupal core 8.6.16 Initial release -[Unreleased]: https://github.com/itk-dev/hoeringsportal/compare/4.16.8...HEAD +[Unreleased]: https://github.com/itk-dev/hoeringsportal/compare/4.17.0...HEAD +[4.17.0]: https://github.com/itk-dev/hoeringsportal/compare/4.16.8...4.17.0 [4.16.8]: https://github.com/itk-dev/hoeringsportal/compare/4.16.4...4.16.8 [4.16.4]: https://github.com/itk-dev/hoeringsportal/compare/4.16.3...4.16.4 [4.16.3]: https://github.com/itk-dev/hoeringsportal/compare/4.16.2...4.16.3 diff --git a/web/modules/custom/hoeringsportal_deskpro/src/Service/DeskproService.php b/web/modules/custom/hoeringsportal_deskpro/src/Service/DeskproService.php index 37582e35d..3b52e77f0 100644 --- a/web/modules/custom/hoeringsportal_deskpro/src/Service/DeskproService.php +++ b/web/modules/custom/hoeringsportal_deskpro/src/Service/DeskproService.php @@ -393,7 +393,7 @@ public function getAttachments(array $blobs, $inline = FALSE) { $attachments = []; foreach ($blobs as $blob) { - $attachments[] = [ + $attachments[$blob['blob_id']] = [ 'blob_auth' => $blob['blob_auth'], 'is_inline' => $inline, ]; diff --git a/web/modules/custom/hoeringsportal_deskpro/src/Service/HearingHelper.php b/web/modules/custom/hoeringsportal_deskpro/src/Service/HearingHelper.php index 0435c0076..d74d525af 100644 --- a/web/modules/custom/hoeringsportal_deskpro/src/Service/HearingHelper.php +++ b/web/modules/custom/hoeringsportal_deskpro/src/Service/HearingHelper.php @@ -123,6 +123,15 @@ public function getHearingRepliesDeletedOn(NodeInterface $node): ?DrupalDateTime return new DrupalDateTime() > $date ? $date : NULL; } + /** + * Decide if replies have been deleted on a hearing. + */ + public function haveHearingRepliesBeenDeleted(NodeInterface $node): bool { + $deleteDate = $this->getHearingRepliesDeletedOn($node); + + return NULL !== $deleteDate && $deleteDate < new DrupalDateTime(); + } + /** * Check if node is a hearing. */ @@ -339,6 +348,9 @@ public function synchronizeHearingTickets(Node $hearing) { if (!$this->isHearing($hearing)) { throw new \Exception('Invalid hearing: ' . $hearing->id()); } + if ($this->haveHearingRepliesBeenDeleted($hearing)) { + throw new \Exception('Hearing replies have been deleted on hearing ' . $hearing->id()); + } $deskproHearingId = $this->getHearingId($hearing); @@ -445,9 +457,12 @@ public function runSynchronizeTicket(array $payload) { try { $lockName = __METHOD__; if ($this->lock->acquire($lockName)) { - /** @var \Drupal\node\Entity\NodeInterface $hearing */ [$hearing, $ticketId] = $this->validateTicketPayload($payload); + if ($this->haveHearingRepliesBeenDeleted($hearing)) { + throw new \Exception('Hearing replies have been deleted on hearing ' . $hearing->id()); + } + $ticket = $this->deskpro->getTicket($ticketId, [ 'expand' => ['fields', 'person', 'messages', 'attachments'], 'no_cache' => 1, @@ -533,8 +548,11 @@ public function runSynchronizeTicket(array $payload) { * @param mixed $payload * The payload. * - * @return array - * The hearing node and ticket id ([NodeInterface, string]). + * @return array{ + * 0: NodeInterface, + * 1: string + * } + * The hearing node and ticket id. * * @throws \RuntimeException */ diff --git a/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--full.html.twig b/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--full.html.twig index c269179cb..76aaac6de 100755 --- a/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--full.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--full.html.twig @@ -51,6 +51,11 @@