From d61bb0edfccda46012f8e309e467a99b7f5e8c08 Mon Sep 17 00:00:00 2001 From: martinyde Date: Wed, 4 Feb 2026 08:55:52 +0100 Subject: [PATCH 01/32] Updated accessibility and added back button --- composer.json | 2 +- composer.lock | 4 +-- .../web_accessibility_statement.settings.yml | 1 + .../src/Helper/DialogueHelper.php | 9 +++++ .../assets/css/module/_dialogue.scss | 33 +++++++++++++++++++ .../node--dialogue-proposal--full.html.twig | 4 +++ ...-dialogue-proposal--list-display.html.twig | 24 +++++++------- ...dialogue-proposal-category--full.html.twig | 9 +++-- ...field-dialogue-proposal-category.html.twig | 13 +++++--- 9 files changed, 77 insertions(+), 22 deletions(-) create mode 100644 config/sync/web_accessibility_statement.settings.yml diff --git a/composer.json b/composer.json index 238dc1e20..324db8118 100755 --- a/composer.json +++ b/composer.json @@ -84,7 +84,7 @@ "itk-dev/itk_siteimprove": "^1.2", "itk-dev/itk_video": "^1.0", "itk-dev/serviceplatformen": "^1.5", - "itk-dev/web_accessibility_statement": "^1.0", + "itk-dev/web_accessibility_statement": "^1.3", "onelogin/php-saml": "^4.0", "oomphinc/composer-installers-extender": "^2.0", "vlucas/phpdotenv": "^2.4", diff --git a/composer.lock b/composer.lock index 51e28baaa..413b0bcad 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "584b16c246cd2bf5c0dc6c30cece6cd8", + "content-hash": "253aae1327fb4c42938c4f0bd4f486a9", "packages": [ { "name": "asm89/stack-cors", @@ -21571,5 +21571,5 @@ "php": "^8.4.0" }, "platform-dev": {}, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } diff --git a/config/sync/web_accessibility_statement.settings.yml b/config/sync/web_accessibility_statement.settings.yml new file mode 100644 index 000000000..6da7a9d93 --- /dev/null +++ b/config/sync/web_accessibility_statement.settings.yml @@ -0,0 +1 @@ +url: 'https://was.digst.dk/deltag-aarhus-dk' diff --git a/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php b/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php index 24a40f9ee..9be62b6b8 100644 --- a/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php +++ b/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php @@ -11,6 +11,7 @@ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\Core\Url; use Drupal\node\Entity\Node; use Drupal\node\NodeForm; use Drupal\node\NodeInterface; @@ -246,6 +247,14 @@ public function dialogueProposalFormAlter(array &$form, FormStateInterface $form $parentLocationSelection = $parent->get('field_dialogue_proposal_location')->getValue(); $parentMapConfig = json_decode($parentLocationSelection[0]['map_config'] ?? ''); $form['field_location']['widget'][0]['map_config']['#default_value'] = json_encode($parentMapConfig); + + $form['actions']['back'] = [ + '#url' => Url::fromRoute('entity.node.canonical', ['node' => $parent->id()]), + '#type' => 'link', + '#title' => $this->t('Back'), + '#attributes' => ['class' => ['btn', 'btn-secondary', 'mb-2', 'border-0']], + '#weight' => 10, + ]; } if ($parent) { diff --git a/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss b/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss index 4a7a83efb..be54247d0 100644 --- a/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss +++ b/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss @@ -62,6 +62,7 @@ flex-basis: 50%; } + .button.upload, .file--image { display: none; } @@ -105,6 +106,16 @@ order: 1; } } + + .form-actions { + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px solid var(--primitive-gray-500); + + .btn { + margin-right: 1rem; + } + } } .dialogue-proposals { @@ -147,6 +158,28 @@ border-left: 2px dashed var(--primitive-gray-600); padding-left: 2em; } + + .comment-form { + .form-submit { + @extend .btn; + @extend .btn-primary; + + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; + position: inherit; + + &:after { + display: none; + } + } + } + + .action-container { + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px solid var(--primitive-gray-500); + } } /* Target the full page (the body element) rather than `.dialogue-proposal` to also affect elements in modals. */ 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 5dfccb54e..cf24ab6e4 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 @@ -82,6 +82,10 @@ {{ content.field_comments }} + +
+ {{ 'Back'|t }} +
diff --git a/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--list-display.html.twig b/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--list-display.html.twig index 8558f95fa..bee43b05e 100755 --- a/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--list-display.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/node--dialogue-proposal--list-display.html.twig @@ -69,24 +69,26 @@ #}
-
-

{{ label }}

-
-
- {{ content.field_dialogue_proposal_descr }} + -
+ +
-
+
{{ node.field_comments.comment_count }}{{ 'Comments'|t }}
-
- +
+ {{ content.flag_support_proposal }}
-
+
{{ content.field_dialogue_proposal_category }}
diff --git a/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category--full.html.twig b/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category--full.html.twig index 16f585a9e..dc0485c9c 100644 --- a/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category--full.html.twig +++ b/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category--full.html.twig @@ -37,8 +37,11 @@ */ #} -
+ +
    {% for item in items %} - {{ item.content }} +
  • {{ item.content }}
  • {% endfor %} -
+ diff --git a/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category.html.twig b/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category.html.twig index 35954b156..372193106 100644 --- a/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category.html.twig +++ b/web/themes/custom/hoeringsportal/templates/field/field--field-dialogue-proposal-category.html.twig @@ -37,14 +37,17 @@ */ #} -
+ +
    {% if (items[0]) %} - {{ items[0].content }} +
  • {{ items[0].content }}
  • {% endif %} {% if (items[1]) %} - {{ items[1].content }} +
  • {{ items[1].content }}
  • {% endif %} {% if (items|length > 2) %} - +{{ items|length - 2 }} +
  • +{{ items|length - 2 }}
  • {% endif %} -
+ From 3cb1f759623041a54228c68a11cfc55ae94c7aac Mon Sep 17 00:00:00 2001 From: martinyde Date: Wed, 4 Feb 2026 09:07:38 +0100 Subject: [PATCH 02/32] Updated translations # Conflicts: # web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po --- .../translations/hoeringsportal_dialogue.da.po | 7 +++++-- .../hoeringsportal/translations/hoeringsportal.da.po | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po b/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po index 1f2d95512..c4c8fb83d 100644 --- a/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po +++ b/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2026-01-07 12:56+0100\n" -"PO-Revision-Date: 2026-01-07 12:56+0100\n" +"POT-Creation-Date: 2026-02-04 09:04+0100\n" +"PO-Revision-Date: 2026-02-04 09:04+0100\n" "Last-Translator: NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" @@ -43,6 +43,9 @@ msgstr "@size begrænsning." msgid "Add new comment" msgstr "Tilføj ny kommentar" +msgid "Back" +msgstr "Tilbage" + msgid "Comment @commentId and it's children have been unpublished." msgstr "" "Kommentaren @commentId og dens underkommentarer er blevet " diff --git a/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po b/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po index d14811ef1..48313f6fb 100644 --- a/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po +++ b/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po @@ -72,6 +72,9 @@ msgstr "" msgid "Attachments" msgstr "Vedhæftninger" +msgid "Back" +msgstr "Tilbage" + msgid "" "Before you can contribute you must validate your user account with " "NemID." @@ -423,6 +426,9 @@ msgstr "Initiativ tilbagekaldt" msgid "Project start" msgstr "Initiativ start" +msgid "Proposal categories" +msgstr "Forslagskategorier" + msgid "Project timeline" msgstr "Projektets tidslinje" @@ -708,4 +714,3 @@ msgstr "Tilmeldingsfrist overskredet" msgctxt "signup" msgid "Deadline:" msgstr "Tilmeldingsfrist:" - From 0193260bced736bc420e18e59cdd7ac56ee41cdc Mon Sep 17 00:00:00 2001 From: martinyde Date: Wed, 4 Feb 2026 09:09:56 +0100 Subject: [PATCH 03/32] Updated changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 470a0df57..98209d941 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,10 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -## [4.15.2] - 2026-02-26 - +* [PR-630](https://github.com/itk-dev/deltag.aarhus.dk/pull/630) + Updated accessibility +## [4.15.2] - 2026-02-26 ## [4.15.1] - 2026-02-25 From 5be373360de4831d19344d62e57d3a3128ff0a87 Mon Sep 17 00:00:00 2001 From: martinyde Date: Thu, 5 Feb 2026 08:50:20 +0100 Subject: [PATCH 04/32] Updated back translation --- CHANGELOG.md | 3 ++- .../hoeringsportal_dialogue/src/Helper/DialogueHelper.php | 2 +- .../translations/hoeringsportal_dialogue.da.po | 8 ++++---- .../hoeringsportal/translations/hoeringsportal.da.po | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98209d941..05f300bc8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] * [PR-630](https://github.com/itk-dev/deltag.aarhus.dk/pull/630) - Updated accessibility + * Updated accessibility + * Added back to dialogue buttons. ## [4.15.2] - 2026-02-26 diff --git a/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php b/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php index 9be62b6b8..3be5e29e1 100644 --- a/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php +++ b/web/modules/custom/hoeringsportal_dialogue/src/Helper/DialogueHelper.php @@ -251,7 +251,7 @@ public function dialogueProposalFormAlter(array &$form, FormStateInterface $form $form['actions']['back'] = [ '#url' => Url::fromRoute('entity.node.canonical', ['node' => $parent->id()]), '#type' => 'link', - '#title' => $this->t('Back'), + '#title' => $this->t('Back to dialogue'), '#attributes' => ['class' => ['btn', 'btn-secondary', 'mb-2', 'border-0']], '#weight' => 10, ]; diff --git a/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po b/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po index c4c8fb83d..74b7fdee6 100644 --- a/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po +++ b/web/modules/custom/hoeringsportal_dialogue/translations/hoeringsportal_dialogue.da.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2026-02-04 09:04+0100\n" -"PO-Revision-Date: 2026-02-04 09:04+0100\n" +"POT-Creation-Date: 2026-02-05 08:47+0100\n" +"PO-Revision-Date: 2026-02-05 08:47+0100\n" "Last-Translator: NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" @@ -43,8 +43,8 @@ msgstr "@size begrænsning." msgid "Add new comment" msgstr "Tilføj ny kommentar" -msgid "Back" -msgstr "Tilbage" +msgid "Back to dialogue" +msgstr "Tilbage til dialog" msgid "Comment @commentId and it's children have been unpublished." msgstr "" diff --git a/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po b/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po index 48313f6fb..edff2febb 100644 --- a/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po +++ b/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po @@ -72,8 +72,8 @@ msgstr "" msgid "Attachments" msgstr "Vedhæftninger" -msgid "Back" -msgstr "Tilbage" +msgid "Back to dialogue" +msgstr "Tilbage til dialog" msgid "" "Before you can contribute you must validate your user account with " From 897c571b991ec2f85f0faf66e7e7e2320ed8a7f1 Mon Sep 17 00:00:00 2001 From: martinyde Date: Thu, 5 Feb 2026 08:51:19 +0100 Subject: [PATCH 05/32] Updated template --- .../templates/content/node--dialogue-proposal--full.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cf24ab6e4..7afff38b2 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 @@ -84,7 +84,7 @@
From ddfa768ba43c89c9da41402d29663f0215e7323c Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 3 Mar 2026 13:01:34 +0100 Subject: [PATCH 06/32] Added handling of orphaned paragraphs --- .../src/Helper/ProjectHelper.php | 114 ++++++++++++++---- 1 file changed, 89 insertions(+), 25 deletions(-) diff --git a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php index eecea112e..818be14c9 100644 --- a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php +++ b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php @@ -114,43 +114,107 @@ public function projectFormAlter(array &$form, FormStateInterface $form_state): public function entityPresave(EntityInterface $entity): void { if ($entity instanceof NodeInterface) { try { - if (!$entity->hasField('field_project_reference')) { - return; + if ($entity->hasField('field_project_reference')) { + $newTargetId = (int) ($entity->get('field_project_reference')->target_id ?? 0); + + $originalEntity = $entity->original ?? NULL; + $oldTargetId = 0; + if ($originalEntity?->hasField('field_project_reference')) { + $oldTargetId = (int) ($originalEntity->get('field_project_reference')->target_id ?? 0); + } + + // Only act if the reference actually changed. + if ($oldTargetId === $newTargetId) { + return; + } + + $idsToReset = []; + if ($oldTargetId > 0) { + $idsToReset[] = $oldTargetId; + } + if ($newTargetId > 0) { + $idsToReset[] = $newTargetId; + } + + if ($idsToReset === []) { + return; + } + + $idsToReset = array_values(array_unique($idsToReset)); + $this->entityTypeManagerInterface->getStorage('node') + ->resetCache($idsToReset); } + } + catch (\Exception $e) { + $this->logger->error('Error in node presave hook: @message', ['@message' => $e->getMessage()]); + } + } - $newTargetId = (int) ($entity->get('field_project_reference')->target_id ?? 0); + // Delete orphaned paragraphs when references are removed. + if ($entity->hasField('field_timeline')) { + $this->deleteOrphanedParagraphs($entity); + } + } - $originalEntity = $entity->original ?? NULL; - $oldTargetId = 0; - if ($originalEntity?->hasField('field_project_reference')) { - $oldTargetId = (int) ($originalEntity->get('field_project_reference')->target_id ?? 0); - } + /** + * Delete orphaned paragraphs when they are removed from entity references. + * + * @param \Drupal\Core\Entity\EntityInterface $entity + * The entity being saved. + */ + private function deleteOrphanedParagraphs(EntityInterface $entity): void { + if (!$entity instanceof NodeInterface) { + return; + } - // Only act if the reference actually changed. - if ($oldTargetId === $newTargetId) { - return; - } + $originalEntity = $entity->original ?? NULL; + if (!$originalEntity) { + return; + } - $idsToReset = []; - if ($oldTargetId > 0) { - $idsToReset[] = $oldTargetId; - } - if ($newTargetId > 0) { - $idsToReset[] = $newTargetId; + try { + // Get current paragraph IDs. + $currentParagraphIds = []; + if (!$entity->get('field_timeline')->isEmpty()) { + foreach ($entity->get('field_timeline') as $item) { + if ($item->target_id) { + $currentParagraphIds[] = $item->target_id; + } } + } - if ($idsToReset === []) { - return; + // Get original paragraph IDs. + $originalParagraphIds = []; + if (!$originalEntity->get('field_timeline')->isEmpty()) { + foreach ($originalEntity->get('field_timeline') as $item) { + if ($item->target_id) { + $originalParagraphIds[] = $item->target_id; + } } + } + + // Find removed paragraph IDs. + $removedParagraphIds = array_diff($originalParagraphIds, $currentParagraphIds); - $idsToReset = array_values(array_unique($idsToReset)); - $this->entityTypeManagerInterface->getStorage('node') - ->resetCache($idsToReset); + if (empty($removedParagraphIds)) { + return; } - catch (\Exception $e) { - $this->logger->error('Error in node presave hook: @message', ['@message' => $e->getMessage()]); + + // Delete the orphaned paragraphs. + $paragraphStorage = $this->entityTypeManagerInterface->getStorage('paragraph'); + $paragraphs = $paragraphStorage->loadMultiple($removedParagraphIds); + + foreach ($paragraphs as $paragraph) { + $paragraph->delete(); + $this->logger->info('Deleted orphaned paragraph @id of type @type', [ + '@id' => $paragraph->id(), + '@type' => $paragraph->bundle(), + ]); } } + catch (\Exception $e) { + $this->logger->error('Error deleting orphaned paragraphs: @message', ['@message' => $e->getMessage()]); + } } /** From c7f69dc5786b48fffecaae75648bb52e3b50f5f1 Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 3 Mar 2026 13:04:30 +0100 Subject: [PATCH 07/32] Add update hook --- .../hoeringsportal_project.install | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 web/modules/custom/hoeringsportal_project/hoeringsportal_project.install diff --git a/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install b/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install new file mode 100644 index 000000000..c7d8e803a --- /dev/null +++ b/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install @@ -0,0 +1,61 @@ +getStorage('paragraph'); + $nodeStorage = \Drupal::entityTypeManager()->getStorage('node'); + + // Get all timeline_note paragraphs. + $query = $paragraphStorage->getQuery(); + $query->accessCheck(FALSE); + $query->condition('type', 'timeline_note'); + $paragraphIds = $query->execute(); + + if (empty($paragraphIds)) { + return t('No timeline_note paragraphs found.'); + } + + // Get all nodes with field_timeline. + $nodeQuery = $nodeStorage->getQuery(); + $nodeQuery->accessCheck(FALSE); + $nodeQuery->exists('field_timeline'); + $nodeIds = $nodeQuery->execute(); + + // Collect all referenced paragraph IDs. + $referencedParagraphIds = []; + if (!empty($nodeIds)) { + $nodes = $nodeStorage->loadMultiple($nodeIds); + foreach ($nodes as $node) { + if ($node->hasField('field_timeline') && !$node->get('field_timeline')->isEmpty()) { + foreach ($node->get('field_timeline') as $item) { + if ($item->target_id) { + $referencedParagraphIds[] = $item->target_id; + } + } + } + } + } + + // Find orphaned paragraphs. + $orphanedParagraphIds = array_diff($paragraphIds, $referencedParagraphIds); + + if (empty($orphanedParagraphIds)) { + return t('No orphaned timeline_note paragraphs found.'); + } + + // Delete orphaned paragraphs. + $paragraphs = $paragraphStorage->loadMultiple($orphanedParagraphIds); + foreach ($paragraphs as $paragraph) { + $paragraph->delete(); + } + + $count = count($orphanedParagraphIds); + return t('Deleted @count orphaned timeline_note paragraph(s).', ['@count' => $count]); +} From 7e0a8f414833af4117b4c13e5dd951e4cd0c5208 Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 3 Mar 2026 13:13:19 +0100 Subject: [PATCH 08/32] Updated changelog and applied coding standards --- CHANGELOG.md | 2 ++ .../hoeringsportal_project/hoeringsportal_project.install | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05f300bc8..0d72ab358 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +* [633](https://github.com/itk-dev/deltag.aarhus.dk/pull/633) + Added handling of orphaned timeline note paragraphs. * [PR-630](https://github.com/itk-dev/deltag.aarhus.dk/pull/630) * Updated accessibility * Added back to dialogue buttons. diff --git a/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install b/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install index c7d8e803a..5eec30ed1 100644 --- a/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install +++ b/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install @@ -2,7 +2,7 @@ /** * @file - * Install, update and uninstall functions for the hoeringsportal_project module. + * Install, update and uninstall hooks for the hoeringsportal_project module. */ /** From 1a6450231fa5e7912b51a0e482abe9804dc070f6 Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 3 Mar 2026 13:17:03 +0100 Subject: [PATCH 09/32] Updated config --- config/sync/block.block.claro_breadcrumbs.yml | 2 +- config/sync/block.block.claro_content.yml | 2 +- ...ity_form_display.node.dialogue.default.yml | 2 +- .../core.entity_view_mode.comment.full.yml | 2 +- ...ld.node.course.field_project_reference.yml | 2 +- config/sync/locale.settings.yml | 2 +- config/sync/publishcontent.settings.yml | 4 +- .../system.action.comment_save_action.yml | 2 +- .../system.action.webform_delete_action.yml | 2 +- config/sync/views.view.comment.yml | 26 ++++---- config/sync/views.view.comments_recent.yml | 14 ++--- .../sync/views.view.webform_submissions.yml | 60 +++++++++---------- config/sync/webform.settings.yml | 26 ++++---- config/sync/webform.webform_options.days.yml | 4 +- .../webform.webform_options.education.yml | 2 +- .../sync/webform.webform_options.gender.yml | 2 +- .../webform.webform_options.languages.yml | 2 +- .../sync/webform.webform_options.months.yml | 2 +- .../webform.webform_options.relationship.yml | 2 +- config/sync/webform.webform_options.sex.yml | 6 +- .../webform.webform_options.time_zones.yml | 2 +- .../sync/webform.webform_options.titles.yml | 2 +- .../webform.webform_options.translations.yml | 2 +- .../sync/webform.webform_options.yes_no.yml | 2 +- 24 files changed, 86 insertions(+), 88 deletions(-) diff --git a/config/sync/block.block.claro_breadcrumbs.yml b/config/sync/block.block.claro_breadcrumbs.yml index 1b16931a3..fc09dc0a6 100644 --- a/config/sync/block.block.claro_breadcrumbs.yml +++ b/config/sync/block.block.claro_breadcrumbs.yml @@ -16,7 +16,7 @@ provider: null plugin: system_breadcrumb_block settings: id: system_breadcrumb_block - label: Breadcrumbs + label: Brødkrummer label_display: '0' provider: system visibility: { } diff --git a/config/sync/block.block.claro_content.yml b/config/sync/block.block.claro_content.yml index 5a239f909..11c2f3c7a 100644 --- a/config/sync/block.block.claro_content.yml +++ b/config/sync/block.block.claro_content.yml @@ -16,7 +16,7 @@ provider: null plugin: system_main_block settings: id: system_main_block - label: 'Main page content' + label: 'Primært sideindhold' label_display: '0' provider: system visibility: { } diff --git a/config/sync/core.entity_form_display.node.dialogue.default.yml b/config/sync/core.entity_form_display.node.dialogue.default.yml index 5c6b84ddc..79cccf842 100644 --- a/config/sync/core.entity_form_display.node.dialogue.default.yml +++ b/config/sync/core.entity_form_display.node.dialogue.default.yml @@ -66,7 +66,7 @@ third_party_settings: children: - field_project_reference - field_hide_in_timeline - label: 'Projektreference' + label: Projektreference region: hidden parent_name: group_information weight: 32 diff --git a/config/sync/core.entity_view_mode.comment.full.yml b/config/sync/core.entity_view_mode.comment.full.yml index 8e5eb1426..941e736b9 100644 --- a/config/sync/core.entity_view_mode.comment.full.yml +++ b/config/sync/core.entity_view_mode.comment.full.yml @@ -7,7 +7,7 @@ dependencies: _core: default_config_hash: N4mUjXpPckUkVRY1PbKw4GGoL1i2ECU7PL3EreiKStk id: comment.full -label: 'Full comment' +label: 'Fuld kommentar' description: '' targetEntityType: comment cache: true diff --git a/config/sync/field.field.node.course.field_project_reference.yml b/config/sync/field.field.node.course.field_project_reference.yml index ddbcbb1e5..29c977f20 100644 --- a/config/sync/field.field.node.course.field_project_reference.yml +++ b/config/sync/field.field.node.course.field_project_reference.yml @@ -10,7 +10,7 @@ id: node.course.field_project_reference field_name: field_project_reference entity_type: node bundle: course -label: 'Projektreference' +label: Projektreference description: '' required: false translatable: false diff --git a/config/sync/locale.settings.yml b/config/sync/locale.settings.yml index 053b4e5ff..ed2eac386 100644 --- a/config/sync/locale.settings.yml +++ b/config/sync/locale.settings.yml @@ -1,6 +1,6 @@ langcode: da translation: - use_source: local + use_source: remote_and_local overwrite_customized: false overwrite_not_customized: true update_interval_days: 0 diff --git a/config/sync/publishcontent.settings.yml b/config/sync/publishcontent.settings.yml index 59cc5fedf..6317442d4 100644 --- a/config/sync/publishcontent.settings.yml +++ b/config/sync/publishcontent.settings.yml @@ -5,5 +5,5 @@ ui_localtask: false ui_checkbox: true create_revision: false create_log_entry: false -publish_text_value: Publish -unpublish_text_value: Unpublish +publish_text_value: Udgiv +unpublish_text_value: 'Træk tilbage' diff --git a/config/sync/system.action.comment_save_action.yml b/config/sync/system.action.comment_save_action.yml index f9f556493..af173431f 100644 --- a/config/sync/system.action.comment_save_action.yml +++ b/config/sync/system.action.comment_save_action.yml @@ -7,7 +7,7 @@ dependencies: _core: default_config_hash: lfyE_snmvfg_EQ3VDyhUtGAXgmqtEiqa46I3bTMg8DU id: comment_save_action -label: 'Save comment' +label: 'Gem kommentar' type: comment plugin: 'entity:save_action:comment' configuration: { } diff --git a/config/sync/system.action.webform_delete_action.yml b/config/sync/system.action.webform_delete_action.yml index d1716a1fc..d9378db3c 100644 --- a/config/sync/system.action.webform_delete_action.yml +++ b/config/sync/system.action.webform_delete_action.yml @@ -7,7 +7,7 @@ dependencies: _core: default_config_hash: e1bCTp0ryXZZtnS9nlVAbtoWz3-8fmbNlqKY3GHzbsM id: webform_delete_action -label: 'Delete webform' +label: 'Slet webform' type: webform plugin: webform_delete_action configuration: { } diff --git a/config/sync/views.view.comment.yml b/config/sync/views.view.comment.yml index 7551acf22..d23118891 100644 --- a/config/sync/views.view.comment.yml +++ b/config/sync/views.view.comment.yml @@ -10,7 +10,7 @@ _core: id: comment label: Kommentarer module: comment -description: 'Find and manage comments.' +description: 'Find og administrér kommentarer.' tag: default base_table: comment_field_data base_field: cid @@ -282,7 +282,7 @@ display: entity_type: comment entity_field: entity_id plugin_id: commented_entity - label: 'Posted in' + label: 'Indsendt til' exclude: false alter: alter_text: false @@ -578,7 +578,7 @@ display: admin_label: '' plugin_id: text_custom empty: true - content: 'No comments available.' + content: 'Der er ingen kommentarer at vise.' tokenize: false sorts: changed: @@ -695,7 +695,7 @@ display: exposed: true expose: operator_id: combine_op - label: 'Author name' + label: Forfatternavn description: '' use_operator: false operator: combine_op @@ -877,11 +877,11 @@ display: cacheable: false page_published: id: page_published - display_title: 'Published comments' + display_title: 'Udgivne kommentarer' display_plugin: page position: 1 display_options: - display_description: 'The approved comments listing.' + display_description: 'Liste over godkendte kommentarer.' display_comment: '' exposed_block: false display_extenders: { } @@ -889,7 +889,7 @@ display: menu: type: tab title: Kommentarer - description: 'Comments published' + description: 'Publicerede kommentarer' weight: 0 menu_name: admin parent: '' @@ -906,7 +906,7 @@ display: cacheable: false page_unapproved: id: page_unapproved - display_title: 'Unapproved comments' + display_title: 'Ikke-godkendte kommentarer' display_plugin: page position: 2 display_options: @@ -1170,7 +1170,7 @@ display: entity_type: comment entity_field: entity_id plugin_id: commented_entity - label: 'Posted in' + label: 'Indsendt til' exclude: false alter: alter_text: false @@ -1514,7 +1514,7 @@ display: exposed: true expose: operator_id: combine_op - label: 'Author Name' + label: Forfatternavn description: '' use_operator: false operator: combine_op @@ -1594,13 +1594,13 @@ display: fields: false filters: false filter_groups: false - display_description: 'The unapproved comments listing.' + display_description: 'Listen af ikke-godkendte kommentarer.' display_extenders: { } path: admin/content/comment/approval menu: type: tab - title: 'Unapproved comments' - description: 'Comments unapproved' + title: 'Ikke-godkendte kommentarer' + description: 'Ikke-godkendte kommentarer' weight: 1 menu_name: admin parent: '' diff --git a/config/sync/views.view.comments_recent.yml b/config/sync/views.view.comments_recent.yml index a9cc4f270..34f43aeeb 100644 --- a/config/sync/views.view.comments_recent.yml +++ b/config/sync/views.view.comments_recent.yml @@ -9,9 +9,9 @@ dependencies: _core: default_config_hash: cFOucxH8PAXDQ2kViCcAHgK-JMCcxVkpIMzD56EfpZo id: comments_recent -label: 'Recent comments' +label: 'Seneste kommentarer' module: views -description: 'Recent comments.' +description: 'Seneste kommentarer.' tag: default base_table: comment_field_data base_field: cid @@ -22,7 +22,7 @@ display: display_plugin: default position: 0 display_options: - title: 'Recent comments' + title: 'Seneste kommentarer' fields: subject: id: subject @@ -131,8 +131,8 @@ display: hide_alter_empty: true type: timestamp_ago settings: - future_format: '@interval hence' - past_format: '@interval ago' + future_format: 'om @interval' + past_format: '@interval siden' granularity: 2 pager: type: some @@ -257,8 +257,8 @@ display: position: 1 display_options: display_extenders: { } - block_description: 'Recent comments' - block_category: 'Lists (Views)' + block_description: 'Seneste kommentarer' + block_category: 'Lister (Views)' allow: items_per_page: true cache_metadata: diff --git a/config/sync/views.view.webform_submissions.yml b/config/sync/views.view.webform_submissions.yml index e5f40cca3..0d58c39b9 100644 --- a/config/sync/views.view.webform_submissions.yml +++ b/config/sync/views.view.webform_submissions.yml @@ -11,7 +11,7 @@ dependencies: _core: default_config_hash: YPgxGC8TmLtfCOLGCCHJcdH2llA7QksUkdi1abhB7Ro id: webform_submissions -label: 'Webform submissions' +label: 'Indsendte webforms' module: views description: 'Default webform submissions views.' tag: '' @@ -24,7 +24,7 @@ display: display_plugin: default position: 0 display_options: - title: 'Webform submissions' + title: 'Indsendte webforms' fields: sid: id: sid @@ -102,7 +102,7 @@ display: entity_type: webform_submission entity_field: in_draft plugin_id: field - label: Draft + label: Kladde exclude: false alter: alter_text: false @@ -245,7 +245,7 @@ display: entity_type: webform_submission entity_field: remote_addr plugin_id: field - label: 'IP address' + label: IP-adresse exclude: false alter: alter_text: false @@ -350,7 +350,7 @@ display: hide_empty: false empty_zero: false hide_alter_empty: true - text: view + text: vis output_url_as_text: false absolute: false pager: @@ -592,7 +592,7 @@ display: admin_label: '' plugin_id: result empty: false - content: 'Displaying @start - @end of @total' + content: 'Viser @start - @end af @total' footer: { } display_extenders: { } cache_metadata: @@ -740,7 +740,7 @@ display: entity_type: webform_submission entity_field: in_draft plugin_id: field - label: Draft + label: Kladde exclude: false alter: alter_text: false @@ -807,7 +807,7 @@ display: entity_type: webform_submission entity_field: sticky plugin_id: field - label: Sticky + label: Klæbrig exclude: false alter: alter_text: false @@ -874,7 +874,7 @@ display: entity_type: webform_submission entity_field: locked plugin_id: field - label: Locked + label: Låst exclude: false alter: alter_text: false @@ -1017,7 +1017,7 @@ display: entity_type: webform_submission entity_field: completed plugin_id: field - label: Completed + label: Gennemført exclude: false alter: alter_text: false @@ -1093,7 +1093,7 @@ display: entity_type: webform_submission entity_field: remote_addr plugin_id: field - label: 'IP address' + label: IP-adresse exclude: false alter: alter_text: false @@ -1263,7 +1263,7 @@ display: exposed: true expose: operator_id: '' - label: Sticky + label: Klæbrig description: '' use_operator: false operator: sticky_op @@ -1305,7 +1305,7 @@ display: exposed: true expose: operator_id: '' - label: Locked + label: Låst description: '' use_operator: false operator: locked_op @@ -1680,7 +1680,7 @@ display: entity_type: webform_submission entity_field: in_draft plugin_id: field - label: Draft + label: Kladde exclude: false alter: alter_text: false @@ -1747,7 +1747,7 @@ display: entity_type: webform_submission entity_field: sticky plugin_id: field - label: Sticky + label: Klæbrig exclude: false alter: alter_text: false @@ -1814,7 +1814,7 @@ display: entity_type: webform_submission entity_field: locked plugin_id: field - label: Locked + label: Låst exclude: false alter: alter_text: false @@ -1957,7 +1957,7 @@ display: entity_type: webform_submission entity_field: completed plugin_id: field - label: Completed + label: Gennemført exclude: false alter: alter_text: false @@ -2033,7 +2033,7 @@ display: entity_type: webform_submission entity_field: remote_addr plugin_id: field - label: 'IP address' + label: IP-adresse exclude: false alter: alter_text: false @@ -2138,7 +2138,7 @@ display: hide_empty: false empty_zero: false hide_alter_empty: true - text: view + text: vis output_url_as_text: false absolute: false edit_webform_submission: @@ -2191,7 +2191,7 @@ display: hide_empty: false empty_zero: false hide_alter_empty: true - text: edit + text: redigér output_url_as_text: false absolute: false access: @@ -2257,7 +2257,7 @@ display: exposed: true expose: operator_id: '' - label: Sticky + label: Klæbrig description: '' use_operator: false operator: sticky_op @@ -2299,7 +2299,7 @@ display: exposed: true expose: operator_id: '' - label: Locked + label: Låst description: '' use_operator: false operator: locked_op @@ -2532,7 +2532,7 @@ display: entity_type: webform_submission entity_field: in_draft plugin_id: field - label: Draft + label: Kladde exclude: false alter: alter_text: false @@ -2599,7 +2599,7 @@ display: entity_type: webform_submission entity_field: sticky plugin_id: field - label: Sticky + label: Klæbrig exclude: false alter: alter_text: false @@ -2666,7 +2666,7 @@ display: entity_type: webform_submission entity_field: locked plugin_id: field - label: Locked + label: Låst exclude: false alter: alter_text: false @@ -2809,7 +2809,7 @@ display: entity_type: webform_submission entity_field: completed plugin_id: field - label: Completed + label: Gennemført exclude: false alter: alter_text: false @@ -2885,7 +2885,7 @@ display: entity_type: webform_submission entity_field: remote_addr plugin_id: field - label: 'IP address' + label: IP-adresse exclude: false alter: alter_text: false @@ -2990,7 +2990,7 @@ display: hide_empty: false empty_zero: false hide_alter_empty: true - text: view + text: vis output_url_as_text: false absolute: false access: @@ -3056,7 +3056,7 @@ display: exposed: true expose: operator_id: '' - label: Sticky + label: Klæbrig description: '' use_operator: false operator: sticky_op @@ -3098,7 +3098,7 @@ display: exposed: true expose: operator_id: '' - label: Locked + label: Låst description: '' use_operator: false operator: locked_op diff --git a/config/sync/webform.settings.yml b/config/sync/webform.settings.yml index d3281e7c0..0e037e1b7 100644 --- a/config/sync/webform.settings.yml +++ b/config/sync/webform.settings.yml @@ -10,7 +10,7 @@ settings: default_ajax_progress_type: throbber default_ajax_effect: fade default_ajax_speed: 500 - default_submit_button_label: Submit + default_submit_button_label: Indsend default_reset_button_label: Reset default_delete_button_label: Slet default_form_submit_once: false @@ -30,19 +30,19 @@ settings: default_form_details_toggle: true default_form_file_limit: '' default_form_file_limit_message: "This form's file upload quota of %quota has been exceeded. Please remove some files." - default_wizard_prev_button_label: '< Previous' - default_wizard_next_button_label: 'Next >' + default_wizard_prev_button_label: '< Tidligere' + default_wizard_next_button_label: 'Næste >' default_wizard_start_label: Start - default_wizard_confirmation_label: Complete - default_wizard_toggle_show_label: 'Show all' - default_wizard_toggle_hide_label: 'Hide all' + default_wizard_confirmation_label: Komplet + default_wizard_toggle_show_label: 'Vis alle' + default_wizard_toggle_hide_label: 'Skjul alle' default_preview_next_button_label: Gennemse - default_preview_prev_button_label: '< Previous' + default_preview_prev_button_label: '< Tidligere' default_preview_label: Gennemse default_preview_title: '[webform:title]: Preview' default_preview_message: 'Please review your submission. Your submission is not complete until you press the "Submit" button!' - default_draft_button_label: 'Save Draft' - default_draft_saved_message: 'Submission saved. You may return to this form later and it will restore the current values.' + default_draft_button_label: 'Gem kladde' + default_draft_saved_message: 'Formular gemt. Du kan vende tilbage senere og gendanne standardværdierne.' default_draft_loaded_message: 'A partially-completed form was found. Please complete the remaining portions.' default_draft_pending_single_message: 'You have a pending draft for this webform. Load your pending draft.' default_draft_pending_multiple_message: 'You have pending drafts for this webform. View your pending drafts.' @@ -70,8 +70,8 @@ settings: default_submission_access_denied_message: 'Please login to access this submission.' default_submission_exception_message: 'Unable to process this submission. Please contact the site administrator.' default_submission_locked_message: 'This submission has been locked.' - default_previous_submission_message: 'You have already submitted this webform. View your previous submission.' - default_previous_submissions_message: 'You have already submitted this webform. View your previous submissions.' + default_previous_submission_message: 'Du har allerede indsendt denne formular. Se din forrige indsendelse.' + default_previous_submissions_message: 'Du har allerede indsendt denne formular. Se dine forrige indsendelser.' default_autofill_message: 'This submission has been autofilled with your previous submission.' form_classes: | container-inline clearfix @@ -110,13 +110,13 @@ settings: dialog: false dialog_options: narrow: - title: Narrow + title: Smal width: 600 normal: title: Normal width: 800 wide: - title: Wide + title: Bred width: 1000 assets: css: '' diff --git a/config/sync/webform.webform_options.days.yml b/config/sync/webform.webform_options.days.yml index aff01af0a..2ae2c2d2a 100644 --- a/config/sync/webform.webform_options.days.yml +++ b/config/sync/webform.webform_options.days.yml @@ -8,8 +8,8 @@ dependencies: _core: default_config_hash: YNrKbYrWWjeubUUM8AsQ19KnX7cU1elACR14CZJHmdg id: days -label: Days -category: 'Date and time' +label: Dage +category: 'Dato og tid' likert: false options: | Sunday: Sunday diff --git a/config/sync/webform.webform_options.education.yml b/config/sync/webform.webform_options.education.yml index 138ed1a0f..53694f5b6 100644 --- a/config/sync/webform.webform_options.education.yml +++ b/config/sync/webform.webform_options.education.yml @@ -9,7 +9,7 @@ _core: default_config_hash: mII4acOv33s-j8PINywrCag4OITbeJGxdPO373dnHHw id: education label: Education -category: Demographic +category: Demografi likert: false options: | High School: High School diff --git a/config/sync/webform.webform_options.gender.yml b/config/sync/webform.webform_options.gender.yml index eddeaeada..8a4980512 100644 --- a/config/sync/webform.webform_options.gender.yml +++ b/config/sync/webform.webform_options.gender.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: yxhG0JmQs2HT-Ro6ZeDQboDc9ZWR4GglflTtyoqxK4A id: gender -label: Gender +label: Køn category: Demographic likert: false options: | diff --git a/config/sync/webform.webform_options.languages.yml b/config/sync/webform.webform_options.languages.yml index 67786ac6e..6de0a2210 100644 --- a/config/sync/webform.webform_options.languages.yml +++ b/config/sync/webform.webform_options.languages.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: mYH14Vi65Ixj10c_GFa7CipxU3D0Bt9wgo8zE8zjOfE id: languages -label: Languages +label: Sprog category: Language likert: false options: '' diff --git a/config/sync/webform.webform_options.months.yml b/config/sync/webform.webform_options.months.yml index 54e1a01ba..0fec4dcbe 100644 --- a/config/sync/webform.webform_options.months.yml +++ b/config/sync/webform.webform_options.months.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: pZJnuQkh9afNML5IcMuKTUC__vmHMFn66Qr5IWtedZ4 id: months -label: Months +label: Måneder category: 'Date and time' likert: false options: | diff --git a/config/sync/webform.webform_options.relationship.yml b/config/sync/webform.webform_options.relationship.yml index 9462a8a32..2474ca46c 100644 --- a/config/sync/webform.webform_options.relationship.yml +++ b/config/sync/webform.webform_options.relationship.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: 4J2RPG4JmsD4Fm1NlIQY0JHkrJ08UUl0qTF0_EjUxvw id: relationship -label: Relationship +label: Forbindelse category: Demographic likert: false options: | diff --git a/config/sync/webform.webform_options.sex.yml b/config/sync/webform.webform_options.sex.yml index a59ebe845..214640c72 100644 --- a/config/sync/webform.webform_options.sex.yml +++ b/config/sync/webform.webform_options.sex.yml @@ -8,9 +8,7 @@ dependencies: _core: default_config_hash: WRpxpwYpfcO_i0so7BV4QXxXlbPiSVppYmAV6DAz4c0 id: sex -label: Sex +label: Køn category: Demographic likert: false -options: | - Male: Male - Female: Female +options: "Mand: Mand\r\nKvinde: Kvinde\n" diff --git a/config/sync/webform.webform_options.time_zones.yml b/config/sync/webform.webform_options.time_zones.yml index ed8929a42..f1a0ac615 100644 --- a/config/sync/webform.webform_options.time_zones.yml +++ b/config/sync/webform.webform_options.time_zones.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: 8rVcRXLnTAEoWs7zl8du-7RIUnayqUcGYnvb3JT21-o id: time_zones -label: 'Time zones' +label: Tidszoner category: 'Date and time' likert: false options: '' diff --git a/config/sync/webform.webform_options.titles.yml b/config/sync/webform.webform_options.titles.yml index c51bc8bb6..d789bba4b 100644 --- a/config/sync/webform.webform_options.titles.yml +++ b/config/sync/webform.webform_options.titles.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: PEUoedWrfYEX7oZ8CcOukfBTVxar1cPSROX8534esuU id: titles -label: Titles +label: Titler category: Demographic likert: false options: | diff --git a/config/sync/webform.webform_options.translations.yml b/config/sync/webform.webform_options.translations.yml index 9cc071494..b45500bfd 100644 --- a/config/sync/webform.webform_options.translations.yml +++ b/config/sync/webform.webform_options.translations.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: Mb_L3vE-0IBZH5s2rjpk2LNn0QHClQP9AARQdCmVLt4 id: translations -label: Translations +label: Oversættelser category: Language likert: false options: '' diff --git a/config/sync/webform.webform_options.yes_no.yml b/config/sync/webform.webform_options.yes_no.yml index 5bbb5fb6b..810cb0ad0 100644 --- a/config/sync/webform.webform_options.yes_no.yml +++ b/config/sync/webform.webform_options.yes_no.yml @@ -8,7 +8,7 @@ dependencies: _core: default_config_hash: W88NYg31DbaVNQx1Uir_dwwXHVtF09QOq4VBGsH1Snk id: yes_no -label: Yes/No +label: Ja/nej category: General likert: false options: | From b7b2657fbf34cc0632841714fc6e8d1b930acde5 Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 3 Mar 2026 13:21:29 +0100 Subject: [PATCH 10/32] Updated translation --- .../translations/hoeringsportal_project.da.po | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po b/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po index ca885df38..a94406284 100644 --- a/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po +++ b/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2026-01-28 10:13+0100\n" -"PO-Revision-Date: 2026-01-28 10:13+0100\n" +"POT-Creation-Date: 2026-03-03 13:18+0100\n" +"PO-Revision-Date: 2026-03-03 13:18+0100\n" "Last-Translator: NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" @@ -13,12 +13,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: da\n" +msgid "Deleted @count orphaned timeline_note paragraph(s)." +msgstr "Slet @count løse tidslinjenoter paragraf(fer)" + msgid "Finished" msgstr "Afsluttet" msgid "In progress" msgstr "I gang" +msgid "No orphaned timeline_note paragraphs found." +msgstr "Ingen løse tidslinjenoter fundet" + +msgid "No timeline_note paragraphs found." +msgstr "Ingen tidslinjenote fundet" + msgid "Note" msgstr "Note" From c81227611038f28f95e9ac7f33ef6fd3f051e4d1 Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 3 Mar 2026 13:26:29 +0100 Subject: [PATCH 11/32] Added type check --- .../hoeringsportal_project/src/Helper/ProjectHelper.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php index 818be14c9..e4457ede9 100644 --- a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php +++ b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php @@ -148,10 +148,11 @@ public function entityPresave(EntityInterface $entity): void { catch (\Exception $e) { $this->logger->error('Error in node presave hook: @message', ['@message' => $e->getMessage()]); } - } - // Delete orphaned paragraphs when references are removed. - if ($entity->hasField('field_timeline')) { + $this->entityTypeManagerInterface->getStorage('node') + ->resetCache([$entity->id()]); + + // Delete orphaned paragraphs when references are removed. $this->deleteOrphanedParagraphs($entity); } } From a1109fe750ca9af70db61bba8f4c83ccb554afce Mon Sep 17 00:00:00 2001 From: martinyde Date: Fri, 6 Mar 2026 10:10:12 +0100 Subject: [PATCH 12/32] Updated helper after code review --- .../src/Helper/ProjectHelper.php | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php index e4457ede9..5ef4d8559 100644 --- a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php +++ b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php @@ -2,6 +2,7 @@ namespace Drupal\hoeringsportal_project\Helper; +use Drupal\Core\Cache\Cache; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; @@ -113,24 +114,26 @@ public function projectFormAlter(array &$form, FormStateInterface $form_state): #[Hook('entity_presave')] public function entityPresave(EntityInterface $entity): void { if ($entity instanceof NodeInterface) { + // When changing references, we must clear cache for nodes that was + // previously referenced as well as new referenced nodes. try { if ($entity->hasField('field_project_reference')) { $newTargetId = (int) ($entity->get('field_project_reference')->target_id ?? 0); $originalEntity = $entity->original ?? NULL; - $oldTargetId = 0; + $originalTargetId = 0; if ($originalEntity?->hasField('field_project_reference')) { - $oldTargetId = (int) ($originalEntity->get('field_project_reference')->target_id ?? 0); + $originalTargetId = (int) ($originalEntity->get('field_project_reference')->target_id ?? 0); } // Only act if the reference actually changed. - if ($oldTargetId === $newTargetId) { + if ($originalTargetId === $newTargetId) { return; } $idsToReset = []; - if ($oldTargetId > 0) { - $idsToReset[] = $oldTargetId; + if ($originalTargetId > 0) { + $idsToReset[] = $originalTargetId; } if ($newTargetId > 0) { $idsToReset[] = $newTargetId; @@ -140,18 +143,19 @@ public function entityPresave(EntityInterface $entity): void { return; } + // Clear cache for project nodes when we change an entity pointing to + // it. $idsToReset = array_values(array_unique($idsToReset)); - $this->entityTypeManagerInterface->getStorage('node') - ->resetCache($idsToReset); + $nodes = $this->entityTypeManagerInterface->getStorage('node')->load($idsToReset); + foreach ($nodes as $node) { + Cache::invalidateTags($node->getCacheTags()); + } } } catch (\Exception $e) { $this->logger->error('Error in node presave hook: @message', ['@message' => $e->getMessage()]); } - $this->entityTypeManagerInterface->getStorage('node') - ->resetCache([$entity->id()]); - // Delete orphaned paragraphs when references are removed. $this->deleteOrphanedParagraphs($entity); } From 278377a53a3747ddfe2ca09c42eb593e022dc17b Mon Sep 17 00:00:00 2001 From: Martin Yde Granath Date: Thu, 5 Mar 2026 14:39:38 +0100 Subject: [PATCH 13/32] Update web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po Co-authored-by: Mikkel Ricky --- .../translations/hoeringsportal_project.da.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po b/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po index a94406284..20defacd3 100644 --- a/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po +++ b/web/modules/custom/hoeringsportal_project/translations/hoeringsportal_project.da.po @@ -14,7 +14,7 @@ msgstr "" "Language: da\n" msgid "Deleted @count orphaned timeline_note paragraph(s)." -msgstr "Slet @count løse tidslinjenoter paragraf(fer)" +msgstr "Slettede @count løse tidslinjenoteparagraf(fer)" msgid "Finished" msgstr "Afsluttet" From 6e4d6aa058c733ec0a953d384678f37f7671ca1c Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Wed, 4 Mar 2026 11:51:40 +0100 Subject: [PATCH 14/32] =?UTF-8?q?Added=20=E2=80=9CHide=20hearing=20replies?= =?UTF-8?q?=E2=80=9D=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + ...tity_form_display.node.hearing.default.yml | 47 ++++++++----- ...tity_view_display.node.hearing.default.yml | 4 ++ ...isplay.node.hearing.hearing_ticket_add.yml | 4 ++ ...splay.node.hearing.hearing_ticket_view.yml | 4 ++ ...view_display.node.hearing.list_display.yml | 4 ++ ...iew_display.node.hearing.search_result.yml | 4 ++ ...ntity_view_display.node.hearing.teaser.yml | 4 ++ ...ode.hearing.field_hide_hearing_replies.yml | 21 ++++++ ...hearing.field_hide_hearing_replies_msg.yml | 19 ++++++ ...torage.node.field_hide_hearing_replies.yml | 18 +++++ ...ge.node.field_hide_hearing_replies_msg.yml | 19 ++++++ .../hoeringsportal-hearing-tickets.html.twig | 66 +++++++++++-------- .../src/Helper/FormHelper.php | 9 +++ ...node-hearing-hearing-ticket-view.html.twig | 33 ++++++++-- 15 files changed, 208 insertions(+), 50 deletions(-) create mode 100644 config/sync/field.field.node.hearing.field_hide_hearing_replies.yml create mode 100644 config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml create mode 100644 config/sync/field.storage.node.field_hide_hearing_replies.yml create mode 100644 config/sync/field.storage.node.field_hide_hearing_replies_msg.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d72ab358..6eb93f4c1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +* [PR-634](https://github.com/itk-dev/deltag.aarhus.dk/pull/634) + Added “Hide hearing replies” option * [633](https://github.com/itk-dev/deltag.aarhus.dk/pull/633) Added handling of orphaned timeline note paragraphs. * [PR-630](https://github.com/itk-dev/deltag.aarhus.dk/pull/630) diff --git a/config/sync/core.entity_form_display.node.hearing.default.yml b/config/sync/core.entity_form_display.node.hearing.default.yml index 31cd794ae..f3adca0dc 100644 --- a/config/sync/core.entity_form_display.node.hearing.default.yml +++ b/config/sync/core.entity_form_display.node.hearing.default.yml @@ -16,6 +16,8 @@ dependencies: - field.field.node.hearing.field_getorganized_case_id - field.field.node.hearing.field_hearing_ticket_add - field.field.node.hearing.field_hearing_ticket_list + - field.field.node.hearing.field_hide_hearing_replies + - field.field.node.hearing.field_hide_hearing_replies_msg - field.field.node.hearing.field_hide_in_timeline - field.field.node.hearing.field_lokalplaner - field.field.node.hearing.field_map @@ -55,7 +57,7 @@ third_party_settings: label: Informationer region: content parent_name: '' - weight: 6 + weight: 8 format_type: details format_settings: classes: '' @@ -68,7 +70,7 @@ third_party_settings: label: Systemindstillinger region: content parent_name: '' - weight: 8 + weight: 10 format_type: details format_settings: classes: '' @@ -82,7 +84,7 @@ third_party_settings: label: Deskpro region: content parent_name: '' - weight: 7 + weight: 9 format_type: details format_settings: classes: '' @@ -95,7 +97,7 @@ third_party_settings: label: eDoc region: content parent_name: '' - weight: 10 + weight: 12 format_type: details format_settings: classes: '' @@ -108,7 +110,7 @@ third_party_settings: label: Kontakt region: content parent_name: '' - weight: 12 + weight: 13 format_type: details format_settings: classes: '' @@ -122,7 +124,7 @@ third_party_settings: label: 'Vil du vide mere?' region: content parent_name: '' - weight: 14 + weight: 15 format_type: details format_settings: classes: '' @@ -136,7 +138,7 @@ third_party_settings: label: GetOrganized region: content parent_name: '' - weight: 13 + weight: 14 format_type: details format_settings: classes: '' @@ -152,7 +154,7 @@ third_party_settings: label: Høringssvarsystem region: content parent_name: '' - weight: 16 + weight: 17 format_type: details format_settings: classes: '' @@ -211,7 +213,7 @@ content: third_party_settings: { } field_description: type: text_textarea - weight: 2 + weight: 4 region: content settings: rows: 5 @@ -269,6 +271,21 @@ content: placeholder_url: 'Url til visning af høringssvar i eksternt høringssvarsystem' placeholder_title: '' third_party_settings: { } + field_hide_hearing_replies: + type: boolean_checkbox + weight: 1 + region: content + settings: + display_label: true + third_party_settings: { } + field_hide_hearing_replies_msg: + type: string_textarea + weight: 2 + region: content + settings: + rows: 5 + placeholder: '' + third_party_settings: { } field_hide_in_timeline: type: boolean_checkbox weight: 19 @@ -284,7 +301,7 @@ content: third_party_settings: { } field_map: type: hoeringsportal_data_map_default - weight: 5 + weight: 7 region: content settings: available_types: @@ -294,7 +311,7 @@ content: third_party_settings: { } field_media_document: type: entity_browser_entity_reference - weight: 3 + weight: 5 region: content settings: entity_browser: itk_document_browser @@ -309,7 +326,7 @@ content: third_party_settings: { } field_media_image: type: entity_browser_entity_reference - weight: 4 + weight: 6 region: content settings: entity_browser: itk_image_browser @@ -361,7 +378,7 @@ content: third_party_settings: { } field_teaser: type: string_textarea - weight: 1 + weight: 3 region: content settings: rows: 5 @@ -375,7 +392,7 @@ content: third_party_settings: { } published_at: type: publication_date_timestamp - weight: 9 + weight: 11 region: content settings: { } third_party_settings: { } @@ -399,7 +416,7 @@ content: maxlength_js_label: 'Content limited to @limit characters, remaining: @remaining' maxlength_js_enforce: false url_redirects: - weight: 15 + weight: 16 region: content settings: { } third_party_settings: { } diff --git a/config/sync/core.entity_view_display.node.hearing.default.yml b/config/sync/core.entity_view_display.node.hearing.default.yml index 857b89a8c..692a7b4ea 100644 --- a/config/sync/core.entity_view_display.node.hearing.default.yml +++ b/config/sync/core.entity_view_display.node.hearing.default.yml @@ -15,6 +15,8 @@ dependencies: - field.field.node.hearing.field_getorganized_case_id - field.field.node.hearing.field_hearing_ticket_add - field.field.node.hearing.field_hearing_ticket_list + - field.field.node.hearing.field_hide_hearing_replies + - field.field.node.hearing.field_hide_hearing_replies_msg - field.field.node.hearing.field_hide_in_timeline - field.field.node.hearing.field_lokalplaner - field.field.node.hearing.field_map @@ -249,6 +251,8 @@ hidden: field_getorganized_case_id: true field_hearing_ticket_add: true field_hearing_ticket_list: true + field_hide_hearing_replies: true + field_hide_hearing_replies_msg: true field_map_display: true field_project_reference: true field_tags: true diff --git a/config/sync/core.entity_view_display.node.hearing.hearing_ticket_add.yml b/config/sync/core.entity_view_display.node.hearing.hearing_ticket_add.yml index f0c774bcd..feeb7671f 100644 --- a/config/sync/core.entity_view_display.node.hearing.hearing_ticket_add.yml +++ b/config/sync/core.entity_view_display.node.hearing.hearing_ticket_add.yml @@ -16,6 +16,8 @@ dependencies: - field.field.node.hearing.field_getorganized_case_id - field.field.node.hearing.field_hearing_ticket_add - field.field.node.hearing.field_hearing_ticket_list + - field.field.node.hearing.field_hide_hearing_replies + - field.field.node.hearing.field_hide_hearing_replies_msg - field.field.node.hearing.field_hide_in_timeline - field.field.node.hearing.field_lokalplaner - field.field.node.hearing.field_map @@ -174,6 +176,8 @@ hidden: field_getorganized_case_id: true field_hearing_ticket_add: true field_hearing_ticket_list: true + field_hide_hearing_replies: true + field_hide_hearing_replies_msg: true field_hide_in_timeline: true field_lokalplaner: true field_map: true diff --git a/config/sync/core.entity_view_display.node.hearing.hearing_ticket_view.yml b/config/sync/core.entity_view_display.node.hearing.hearing_ticket_view.yml index cd476f97c..787a101e9 100644 --- a/config/sync/core.entity_view_display.node.hearing.hearing_ticket_view.yml +++ b/config/sync/core.entity_view_display.node.hearing.hearing_ticket_view.yml @@ -16,6 +16,8 @@ dependencies: - field.field.node.hearing.field_getorganized_case_id - field.field.node.hearing.field_hearing_ticket_add - field.field.node.hearing.field_hearing_ticket_list + - field.field.node.hearing.field_hide_hearing_replies + - field.field.node.hearing.field_hide_hearing_replies_msg - field.field.node.hearing.field_hide_in_timeline - field.field.node.hearing.field_lokalplaner - field.field.node.hearing.field_map @@ -186,6 +188,8 @@ hidden: field_getorganized_case_id: true field_hearing_ticket_add: true field_hearing_ticket_list: true + field_hide_hearing_replies: true + field_hide_hearing_replies_msg: true field_hide_in_timeline: true field_lokalplaner: true field_map: true diff --git a/config/sync/core.entity_view_display.node.hearing.list_display.yml b/config/sync/core.entity_view_display.node.hearing.list_display.yml index db9076d66..481560244 100644 --- a/config/sync/core.entity_view_display.node.hearing.list_display.yml +++ b/config/sync/core.entity_view_display.node.hearing.list_display.yml @@ -16,6 +16,8 @@ dependencies: - field.field.node.hearing.field_getorganized_case_id - field.field.node.hearing.field_hearing_ticket_add - field.field.node.hearing.field_hearing_ticket_list + - field.field.node.hearing.field_hide_hearing_replies + - field.field.node.hearing.field_hide_hearing_replies_msg - field.field.node.hearing.field_hide_in_timeline - field.field.node.hearing.field_lokalplaner - field.field.node.hearing.field_map @@ -90,6 +92,8 @@ hidden: field_getorganized_case_id: true field_hearing_ticket_add: true field_hearing_ticket_list: true + field_hide_hearing_replies: true + field_hide_hearing_replies_msg: true field_hide_in_timeline: true field_lokalplaner: true field_map: true diff --git a/config/sync/core.entity_view_display.node.hearing.search_result.yml b/config/sync/core.entity_view_display.node.hearing.search_result.yml index a331ceec8..4e7c5f76f 100644 --- a/config/sync/core.entity_view_display.node.hearing.search_result.yml +++ b/config/sync/core.entity_view_display.node.hearing.search_result.yml @@ -16,6 +16,8 @@ dependencies: - field.field.node.hearing.field_getorganized_case_id - field.field.node.hearing.field_hearing_ticket_add - field.field.node.hearing.field_hearing_ticket_list + - field.field.node.hearing.field_hide_hearing_replies + - field.field.node.hearing.field_hide_hearing_replies_msg - field.field.node.hearing.field_hide_in_timeline - field.field.node.hearing.field_lokalplaner - field.field.node.hearing.field_map @@ -79,6 +81,8 @@ hidden: field_getorganized_case_id: true field_hearing_ticket_add: true field_hearing_ticket_list: true + field_hide_hearing_replies: true + field_hide_hearing_replies_msg: true field_hide_in_timeline: true field_lokalplaner: true field_map: true diff --git a/config/sync/core.entity_view_display.node.hearing.teaser.yml b/config/sync/core.entity_view_display.node.hearing.teaser.yml index 65e141e21..cca295f97 100644 --- a/config/sync/core.entity_view_display.node.hearing.teaser.yml +++ b/config/sync/core.entity_view_display.node.hearing.teaser.yml @@ -16,6 +16,8 @@ dependencies: - field.field.node.hearing.field_getorganized_case_id - field.field.node.hearing.field_hearing_ticket_add - field.field.node.hearing.field_hearing_ticket_list + - field.field.node.hearing.field_hide_hearing_replies + - field.field.node.hearing.field_hide_hearing_replies_msg - field.field.node.hearing.field_hide_in_timeline - field.field.node.hearing.field_lokalplaner - field.field.node.hearing.field_map @@ -110,6 +112,8 @@ hidden: field_getorganized_case_id: true field_hearing_ticket_add: true field_hearing_ticket_list: true + field_hide_hearing_replies: true + field_hide_hearing_replies_msg: true field_hide_in_timeline: true field_lokalplaner: true field_map: true diff --git a/config/sync/field.field.node.hearing.field_hide_hearing_replies.yml b/config/sync/field.field.node.hearing.field_hide_hearing_replies.yml new file mode 100644 index 000000000..920031dfd --- /dev/null +++ b/config/sync/field.field.node.hearing.field_hide_hearing_replies.yml @@ -0,0 +1,21 @@ +uuid: daf54be1-4de5-44ca-a63f-93f1ee8d2aee +langcode: da +status: true +dependencies: + config: + - field.storage.node.field_hide_hearing_replies + - node.type.hearing +id: node.hearing.field_hide_hearing_replies +field_name: field_hide_hearing_replies +entity_type: node +bundle: hearing +label: 'Skjul høringssvar' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + on_label: 'On' + off_label: 'Off' +field_type: boolean diff --git a/config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml b/config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml new file mode 100644 index 000000000..e645b0bb5 --- /dev/null +++ b/config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml @@ -0,0 +1,19 @@ +uuid: 52267b40-09be-4c72-9a15-78e8ea07ff3f +langcode: da +status: true +dependencies: + config: + - field.storage.node.field_hide_hearing_replies_msg + - node.type.hearing +id: node.hearing.field_hide_hearing_replies_msg +field_name: field_hide_hearing_replies_msg +entity_type: node +bundle: hearing +label: '”Skjul høringssvar”-besked' +description: 'Besked der vises i stedet for høringssvar hvis høringssvar er skjult.' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: string_long diff --git a/config/sync/field.storage.node.field_hide_hearing_replies.yml b/config/sync/field.storage.node.field_hide_hearing_replies.yml new file mode 100644 index 000000000..95916dc09 --- /dev/null +++ b/config/sync/field.storage.node.field_hide_hearing_replies.yml @@ -0,0 +1,18 @@ +uuid: 3ebe04ce-fc1c-4ee9-8208-06bfc88bd893 +langcode: da +status: true +dependencies: + module: + - node +id: node.field_hide_hearing_replies +field_name: field_hide_hearing_replies +entity_type: node +type: boolean +settings: { } +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.node.field_hide_hearing_replies_msg.yml b/config/sync/field.storage.node.field_hide_hearing_replies_msg.yml new file mode 100644 index 000000000..fa688ebec --- /dev/null +++ b/config/sync/field.storage.node.field_hide_hearing_replies_msg.yml @@ -0,0 +1,19 @@ +uuid: 8bb577fb-e18f-42a7-88e8-f4cd9b874e46 +langcode: da +status: true +dependencies: + module: + - node +id: node.field_hide_hearing_replies_msg +field_name: field_hide_hearing_replies_msg +entity_type: node +type: string_long +settings: + case_sensitive: false +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig b/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig index e3bc0ee2b..8cfce3cbe 100644 --- a/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig +++ b/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig @@ -16,6 +16,8 @@ {% set hearing_ticket_add_title = (has_external_hearing_tickets ? node.field_hearing_ticket_add.title)|default('Add hearing ticket'|trans) %} {% set hearing_ticket_list_url = has_external_hearing_tickets ? node.field_hearing_ticket_list.uri|default(null) %} {% set hearing_ticket_list_title = has_external_hearing_tickets ? node.field_hearing_ticket_list.title|default('Show hearing tickets'|trans) %} + {% set hide_hearing_replies = 1 == node.field_hide_hearing_replies.value %} + {% set hide_hearing_replies_msg = hide_hearing_replies ? node.field_hide_hearing_replies_msg.value %} {% if has_external_hearing_tickets %} {# Show Add hearing ticket before optional Show hearing tickets when using external hearing ticket system #} @@ -72,35 +74,43 @@
{% if not has_external_hearing_tickets and tickets %} - {% for ticket in tickets %} - -

- {{ ticket.subject }} -

-
- {% set message = ticket.fields.message|default('') %} - {{ message|length > 180 ? message|slice(0, 180)|raw ~ '…' : message|raw }} -
-
+ + {% endfor %} + {% endif %} {% endif %} {% endif %} diff --git a/web/modules/custom/hoeringsportal_hearing/src/Helper/FormHelper.php b/web/modules/custom/hoeringsportal_hearing/src/Helper/FormHelper.php index 75ea6cb6b..828051284 100644 --- a/web/modules/custom/hoeringsportal_hearing/src/Helper/FormHelper.php +++ b/web/modules/custom/hoeringsportal_hearing/src/Helper/FormHelper.php @@ -44,6 +44,15 @@ public function formAlter(array &$form, FormStateInterface $form_state, string $ $form['field_edoc_casefile_id']['#access'] = NULL !== $node && !empty($node->field_edoc_casefile_id->value); + $form['field_hide_hearing_replies_msg']['#states'] = [ + 'visible' => [ + ':input[name="field_hide_hearing_replies[value]"]' => ['checked' => TRUE], + ], + ]; + // The 'required' state must be set on the widget + // (cf. https://www.drupal.org/docs/drupal-apis/form-api/conditional-form-fields#staterequired) + $form['field_hide_hearing_replies_msg']['widget'][0]['value']['#states']['required'] = $form['field_hide_hearing_replies_msg']['#states']['visible']; + // Add our custom validation. $form['#validate'][] = [$this, 'validateForm']; } diff --git a/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig b/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig index defc477f9..ccd706684 100644 --- a/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig +++ b/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig @@ -21,6 +21,9 @@ */ #} +{% set hide_hearing_replies = 1 == node.field_hide_hearing_replies.value %} +{% set hide_hearing_replies_msg = hide_hearing_replies ? node.field_hide_hearing_replies_msg.value %} + <{{ outer_wrapper }}{{ attributes.addClass('ds-2col-stacked', 'clearfix') }}> {{ title_suffix.contextual_links }} @@ -28,16 +31,32 @@ <{{ header_wrapper }}{{ header_attributes.addClass('group-header bg-primary text-white') }}> {{ include(directory ~ '/templates/components/header.html.twig', {header: header}) }} -
-
- <{{ left_wrapper }}{{ left_attributes.addClass('content group-left col-md-8') }}> +
+ {% if hide_hearing_replies %} +
+ <{{ left_wrapper }}{{ left_attributes.addClass('content group-left col-md-8') }}> +
+ +
+ + + <{{ right_wrapper }}{{ right_attributes.addClass('group-right col-md-4 py-3') }}> + {{ right|without('dynamic_block_field:node-hearing_ticket_author') }} + +
+ {% else %} +
+ <{{ left_wrapper }}{{ left_attributes.addClass('content group-left col-md-8') }}> {{ left }} - + - <{{ right_wrapper }}{{ right_attributes.addClass('group-right col-md-4 py-3') }}> + <{{ right_wrapper }}{{ right_attributes.addClass('group-right col-md-4 py-3') }}> {{ right }} - -
+ +
+ {% endif %}
<{{ footer_wrapper }}{{ footer_attributes.addClass('group-footer container-flex') }}> {{ footer }} From f985801e00850964286ed0fc7c71b8d7188938f0 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Wed, 4 Mar 2026 13:47:55 +0100 Subject: [PATCH 15/32] Update web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig Co-authored-by: Jesper Pedersen --- .../templates/block/hoeringsportal-hearing-tickets.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig b/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig index 8cfce3cbe..2b8b7a8e6 100644 --- a/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig +++ b/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig @@ -76,7 +76,7 @@ {% if not has_external_hearing_tickets and tickets %} {% if hide_hearing_replies %}
- From 58602efeaffc6d5a354bdeb05b551eb4fc51dddf Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Wed, 4 Mar 2026 13:48:05 +0100 Subject: [PATCH 16/32] Update web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig Co-authored-by: Jesper Pedersen --- .../ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig b/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig index ccd706684..de785530f 100644 --- a/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig +++ b/web/themes/custom/hoeringsportal/templates/ds/ds-2col-stacked--node-hearing-hearing-ticket-view.html.twig @@ -36,7 +36,7 @@
<{{ left_wrapper }}{{ left_attributes.addClass('content group-left col-md-8') }}>
- From 67d8236e68a296abf41ff309a3d0431739f113c2 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Wed, 4 Mar 2026 13:53:00 +0100 Subject: [PATCH 17/32] Cleaned up --- .../block/hoeringsportal-hearing-tickets.html.twig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig b/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig index 2b8b7a8e6..5dfd07a27 100644 --- a/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig +++ b/web/modules/custom/hoeringsportal_deskpro/templates/block/hoeringsportal-hearing-tickets.html.twig @@ -75,11 +75,11 @@ {% if not has_external_hearing_tickets and tickets %} {% if hide_hearing_replies %} -
- {% else %} {% for ticket in tickets %} From 98453c4653407b7985eb6614a138a81fde624e19 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Thu, 5 Mar 2026 09:51:20 +0100 Subject: [PATCH 18/32] =?UTF-8?q?Moved=20=E2=80=9CSkjul=20h=C3=B8ringssvar?= =?UTF-8?q?=E2=80=9D=20into=20sidebar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tity_form_display.node.hearing.default.yml | 17 ++++++++++ ...hearing.field_hide_hearing_replies_msg.yml | 2 +- ...dit-form--hoeringsportal-hearing.html.twig | 33 +++++++++++++------ 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/config/sync/core.entity_form_display.node.hearing.default.yml b/config/sync/core.entity_form_display.node.hearing.default.yml index f3adca0dc..9418187f9 100644 --- a/config/sync/core.entity_form_display.node.hearing.default.yml +++ b/config/sync/core.entity_form_display.node.hearing.default.yml @@ -180,6 +180,23 @@ third_party_settings: open: true description: '' required_fields: false + group_hide_hearing_replies: + children: + - field_hide_hearing_replies + - field_hide_hearing_replies_msg + label: 'Skjul høringssvar' + region: content + parent_name: '' + weight: 20 + format_type: details + format_settings: + classes: '' + show_empty_fields: false + id: '' + label_as_html: false + open: false + description: '' + required_fields: true id: node.hearing.default targetEntityType: node bundle: hearing diff --git a/config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml b/config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml index e645b0bb5..3600ce6bc 100644 --- a/config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml +++ b/config/sync/field.field.node.hearing.field_hide_hearing_replies_msg.yml @@ -9,7 +9,7 @@ id: node.hearing.field_hide_hearing_replies_msg field_name: field_hide_hearing_replies_msg entity_type: node bundle: hearing -label: '”Skjul høringssvar”-besked' +label: Besked description: 'Besked der vises i stedet for høringssvar hvis høringssvar er skjult.' required: false translatable: false diff --git a/web/modules/custom/hoeringsportal_forms/templates/node-edit-form--hoeringsportal-hearing.html.twig b/web/modules/custom/hoeringsportal_forms/templates/node-edit-form--hoeringsportal-hearing.html.twig index efd79b030..2a06541c9 100644 --- a/web/modules/custom/hoeringsportal_forms/templates/node-edit-form--hoeringsportal-hearing.html.twig +++ b/web/modules/custom/hoeringsportal_forms/templates/node-edit-form--hoeringsportal-hearing.html.twig @@ -1,20 +1,33 @@ {% extends '@claro/node-edit-form.html.twig' %} +{% set secondary_items = [ + 'advanced', + 'group_hide_hearing_replies', + 'group_information', + 'group_deskpro', + 'group_edoc', + 'group_getorganized', + 'group_contact', + 'group_more_info', + 'group_system_settings', +] %} + +{% set footer_items = [ + 'actions', +] %} + {% block main %} - {{ form|without('advanced', 'actions', 'group_information', 'group_system_settings', 'group_deskpro', 'group_edoc', 'group_getorganized', 'group_contact', 'group_more_info') }} + {{ form|without(secondary_items|merge(footer_items)) }} {% endblock %} {% block secondary %} - {{ form.advanced }} - {{ form.group_information }} - {{ form.group_deskpro }} - {{ form.group_edoc }} - {{ form.group_getorganized }} - {{ form.group_contact }} - {{ form.group_more_info }} - {{ form.group_system_settings }} + {% for item in secondary_items %} + {{ form[item] }} + {% endfor %} {% endblock %} {% block footer %} - {{ form.actions }} + {% for item in footer_items %} + {{ form[item] }} + {% endfor %} {% endblock %} From 125d4a12ad031bfbbd7003beea6327f89cbaa5df Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Fri, 6 Mar 2026 15:47:16 +0100 Subject: [PATCH 19/32] Updated itk_pretix module and migrated contact mail --- CHANGELOG.md | 2 + composer.json | 2 +- composer.lock | 16 +++--- docker-compose.pretix.yml | 5 ++ .../src/Fixture/PublicMeetingFixture.php | 3 ++ .../hoeringsportal_public_meeting.install | 53 +++++++++++++++++++ 6 files changed, 72 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eb93f4c1..d2e2a31bb 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +* [PR-635](https://github.com/itk-dev/deltag.aarhus.dk/pull/635) + Updated itk_pretix module and migrated contact mail * [PR-634](https://github.com/itk-dev/deltag.aarhus.dk/pull/634) Added “Hide hearing replies” option * [633](https://github.com/itk-dev/deltag.aarhus.dk/pull/633) diff --git a/composer.json b/composer.json index 324db8118..de32af58c 100755 --- a/composer.json +++ b/composer.json @@ -80,7 +80,7 @@ "itk-dev/azure-ad-delta-sync-drupal": "^2.0", "itk-dev/composer-virtualenv": "^1.0", "itk-dev/itk_azure_video": "^2.0", - "itk-dev/itk_pretix": "^1.3", + "itk-dev/itk_pretix": "^1.5", "itk-dev/itk_siteimprove": "^1.2", "itk-dev/itk_video": "^1.0", "itk-dev/serviceplatformen": "^1.5", diff --git a/composer.lock b/composer.lock index 413b0bcad..4b8868f8b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "253aae1327fb4c42938c4f0bd4f486a9", + "content-hash": "7104c0ac7a701982773f7df48b2cb697", "packages": [ { "name": "asm89/stack-cors", @@ -7269,16 +7269,16 @@ }, { "name": "itk-dev/itk_pretix", - "version": "1.3.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/itk-dev/itk_pretix.git", - "reference": "9e10ac6e55b01b44f0a0d1f3b6b283f11995a494" + "reference": "81acb13bd49508916091803894eed54936200bfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/itk-dev/itk_pretix/zipball/9e10ac6e55b01b44f0a0d1f3b6b283f11995a494", - "reference": "9e10ac6e55b01b44f0a0d1f3b6b283f11995a494", + "url": "https://api.github.com/repos/itk-dev/itk_pretix/zipball/81acb13bd49508916091803894eed54936200bfd", + "reference": "81acb13bd49508916091803894eed54936200bfd", "shasum": "" }, "require": { @@ -7307,9 +7307,9 @@ ], "support": { "issues": "https://github.com/itk-dev/itk_pretix/issues", - "source": "https://github.com/itk-dev/itk_pretix/tree/1.3.0" + "source": "https://github.com/itk-dev/itk_pretix/tree/1.5.0" }, - "time": "2025-07-04T12:26:59+00:00" + "time": "2026-03-09T08:54:50+00:00" }, { "name": "itk-dev/itk_siteimprove", @@ -21571,5 +21571,5 @@ "php": "^8.4.0" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/docker-compose.pretix.yml b/docker-compose.pretix.yml index 3e260570b..a76386850 100644 --- a/docker-compose.pretix.yml +++ b/docker-compose.pretix.yml @@ -44,6 +44,11 @@ services: - POSTGRES_USER=pretix - POSTGRES_PASSWORD=pretix - POSTGRES_DATABASE=pretix + healthcheck: + test: ["CMD-SHELL", "pg_isready", "--dbname", "pretix"] + interval: 10s + timeout: 3s + retries: 3 pretix_redis: image: redis:latest diff --git a/web/modules/custom/hoeringsportal_base_fixtures/src/Fixture/PublicMeetingFixture.php b/web/modules/custom/hoeringsportal_base_fixtures/src/Fixture/PublicMeetingFixture.php index 582572409..d65cd293e 100644 --- a/web/modules/custom/hoeringsportal_base_fixtures/src/Fixture/PublicMeetingFixture.php +++ b/web/modules/custom/hoeringsportal_base_fixtures/src/Fixture/PublicMeetingFixture.php @@ -61,6 +61,7 @@ public function load() { ], 'field_pretix_event_settings' => [ 'template_event' => 'template-series', + 'contact_mail' => 'info@example.com', 'synchronize_event' => TRUE, ], 'field_email' => 'parent@test.dk ', @@ -124,6 +125,7 @@ public function load() { $node->set('field_pretix_event_settings', [ // Cf. PretixConfigFixture. 'template_event' => 'template-series', + 'contact_mail' => 'info87@example.com', 'synchronize_event' => TRUE, ]); $this->addReference('public_meeting:fixture-2', $node); @@ -169,6 +171,7 @@ public function load() { $node->set('field_pretix_event_settings', [ // Cf. PretixConfigFixture. 'template_event' => 'template-series', + 'contact_mail' => 'info42@example.com', 'synchronize_event' => TRUE, ]); $this->addReference('public_meeting:fixture-3', $node); diff --git a/web/modules/custom/hoeringsportal_public_meeting/hoeringsportal_public_meeting.install b/web/modules/custom/hoeringsportal_public_meeting/hoeringsportal_public_meeting.install index f3197009e..003299c37 100644 --- a/web/modules/custom/hoeringsportal_public_meeting/hoeringsportal_public_meeting.install +++ b/web/modules/custom/hoeringsportal_public_meeting/hoeringsportal_public_meeting.install @@ -18,6 +18,9 @@ function hoeringsportal_public_meeting_update_dependencies() { 10002 => [ 'itk_pretix' => 10101, ], + 10003 => [ + 'itk_pretix' => 10102, + ], ], ]; } @@ -79,3 +82,53 @@ function hoeringsportal_public_meeting_update_10002() { } } } + +/** + * Copy contact mail to pretix event settings. + * + * Note: For performance reasons (mainly due to request to pretix), rather than + * saving nodes we update values directly in the database. + */ +function hoeringsportal_public_meeting_update_10003() { + /** @var \Drupal\hoeringsportal_public_meeting\Helper\PublicMeetingHelper $helper */ + $helper = \Drupal::service('hoeringsportal_public_meeting.public_meeting_helper'); + $publicMeetings = $helper->loadPublicMeetings(); + + $values = []; + foreach ($publicMeetings as $publicMeeting) { + if ($helper->hasPretixSignUp($publicMeeting)) { + $contactMail = $publicMeeting->field_email_address->getString() ?: NULL; + foreach ($publicMeeting->field_pretix_event_settings as $delta => $_) { + $values[] = [ + 'conditions' => [ + 'bundle' => $publicMeeting->bundle(), + 'entity_id' => $publicMeeting->id(), + 'delta' => $delta, + ], + 'fields' => [ + 'field_pretix_event_settings_contact_mail' => $contactMail, + ], + ]; + } + } + } + + if (!empty($values)) { + $tableNames = \Drupal::entityTypeManager() + ->getStorage('node') + ->getTableMapping() + ->getAllFieldTableNames('field_pretix_event_settings'); + $database = \Drupal::database(); + + foreach ($tableNames as $tableName) { + foreach ($values as $value) { + $query = $database->update($tableName) + ->fields($value['fields']); + foreach ($value['conditions'] as $field => $val) { + $query->condition($field, $val); + } + $query->execute(); + } + } + } +} From 8226486be6edaabab388deaab3f037c7ad9aea55 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 9 Mar 2026 10:52:08 +0100 Subject: [PATCH 20/32] Release 4.16.0 --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2e2a31bb..2445385db 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [4.16.0] - 2026-03-09 + * [PR-635](https://github.com/itk-dev/deltag.aarhus.dk/pull/635) Updated itk_pretix module and migrated contact mail * [PR-634](https://github.com/itk-dev/deltag.aarhus.dk/pull/634) @@ -690,7 +692,8 @@ Updated drupal core 8.6.16 Initial release -[Unreleased]: https://github.com/itk-dev/hoeringsportal/compare/4.15.2...HEAD +[Unreleased]: https://github.com/itk-dev/hoeringsportal/compare/4.16.0...HEAD +[4.16.0]: https://github.com/itk-dev/hoeringsportal/compare/4.15.2...4.16.0 [4.15.2]: https://github.com/itk-dev/hoeringsportal/compare/4.15.1...4.15.2 [4.15.1]: https://github.com/itk-dev/hoeringsportal/compare/4.15.0...4.15.1 [4.15.0]: https://github.com/itk-dev/hoeringsportal/compare/4.14.7...4.15.0 From 95eca24bf802064159c23ee65172a3329c8016a1 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 9 Mar 2026 10:56:07 +0100 Subject: [PATCH 21/32] Updated translations --- .../hoeringsportal/translations/hoeringsportal.da.po | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po b/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po index edff2febb..bcccf39ee 100644 --- a/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po +++ b/web/themes/custom/hoeringsportal/translations/hoeringsportal.da.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2026-02-25 12:15+0100\n" -"PO-Revision-Date: 2026-02-25 12:15+0100\n" +"POT-Creation-Date: 2026-03-09 10:55+0100\n" +"PO-Revision-Date: 2026-03-09 10:55+0100\n" "Last-Translator: NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" @@ -426,12 +426,12 @@ msgstr "Initiativ tilbagekaldt" msgid "Project start" msgstr "Initiativ start" -msgid "Proposal categories" -msgstr "Forslagskategorier" - msgid "Project timeline" msgstr "Projektets tidslinje" +msgid "Proposal categories" +msgstr "Forslagskategorier" + msgid "Proposals" msgstr "Forslag" @@ -714,3 +714,4 @@ msgstr "Tilmeldingsfrist overskredet" msgctxt "signup" msgid "Deadline:" msgstr "Tilmeldingsfrist:" + From 9b0769d84520500b347d671efd8ca9978f9aa4f4 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 9 Mar 2026 11:30:52 +0100 Subject: [PATCH 22/32] Set file permission in stg deployment --- .woodpecker/stg.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.woodpecker/stg.yml b/.woodpecker/stg.yml index ceb0b9f12..3d150a9b6 100644 --- a/.woodpecker/stg.yml +++ b/.woodpecker/stg.yml @@ -23,6 +23,8 @@ steps: user: from_secret: user actions: + # Make sure that we can update the general settings. + - chmod +w web/sites/default web/sites/default/settings.php - git fetch origin ${CI_COMMIT_BRANCH} - git checkout --force ${CI_COMMIT_BRANCH} - git reset --hard origin/${CI_COMMIT_BRANCH} From 41ad56f199be726f385186dfe63aa16e7636e5c9 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 9 Mar 2026 12:39:24 +0100 Subject: [PATCH 23/32] Fixed loading of nodes --- .../custom/hoeringsportal_project/src/Helper/ProjectHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php index 5ef4d8559..60f285db3 100644 --- a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php +++ b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php @@ -146,7 +146,7 @@ public function entityPresave(EntityInterface $entity): void { // Clear cache for project nodes when we change an entity pointing to // it. $idsToReset = array_values(array_unique($idsToReset)); - $nodes = $this->entityTypeManagerInterface->getStorage('node')->load($idsToReset); + $nodes = $this->entityTypeManagerInterface->getStorage('node')->loadMultiple($idsToReset); foreach ($nodes as $node) { Cache::invalidateTags($node->getCacheTags()); } From 3bd75e6691e8f951a4ad5e43331042e833de598b Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 9 Mar 2026 12:45:30 +0100 Subject: [PATCH 24/32] Updated handling of timeline notes --- .../src/Helper/ProjectHelper.php | 89 +++---------------- 1 file changed, 10 insertions(+), 79 deletions(-) diff --git a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php index 60f285db3..58c0b5c24 100644 --- a/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php +++ b/web/modules/custom/hoeringsportal_project/src/Helper/ProjectHelper.php @@ -7,6 +7,8 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Hook\Attribute\Hook; +use Drupal\Core\Logger\LoggerChannelFactoryInterface; use Drupal\Core\Logger\LoggerChannelInterface; use Drupal\Core\Routing\UrlGeneratorInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; @@ -15,8 +17,6 @@ use Drupal\image\Entity\ImageStyle; use Drupal\node\NodeInterface; use Drupal\paragraphs\ParagraphInterface; -use Drupal\Core\Logger\LoggerChannelFactoryInterface; -use Drupal\Core\Hook\Attribute\Hook; /** * Helper class for project-related operations. @@ -155,70 +155,6 @@ public function entityPresave(EntityInterface $entity): void { catch (\Exception $e) { $this->logger->error('Error in node presave hook: @message', ['@message' => $e->getMessage()]); } - - // Delete orphaned paragraphs when references are removed. - $this->deleteOrphanedParagraphs($entity); - } - } - - /** - * Delete orphaned paragraphs when they are removed from entity references. - * - * @param \Drupal\Core\Entity\EntityInterface $entity - * The entity being saved. - */ - private function deleteOrphanedParagraphs(EntityInterface $entity): void { - if (!$entity instanceof NodeInterface) { - return; - } - - $originalEntity = $entity->original ?? NULL; - if (!$originalEntity) { - return; - } - - try { - // Get current paragraph IDs. - $currentParagraphIds = []; - if (!$entity->get('field_timeline')->isEmpty()) { - foreach ($entity->get('field_timeline') as $item) { - if ($item->target_id) { - $currentParagraphIds[] = $item->target_id; - } - } - } - - // Get original paragraph IDs. - $originalParagraphIds = []; - if (!$originalEntity->get('field_timeline')->isEmpty()) { - foreach ($originalEntity->get('field_timeline') as $item) { - if ($item->target_id) { - $originalParagraphIds[] = $item->target_id; - } - } - } - - // Find removed paragraph IDs. - $removedParagraphIds = array_diff($originalParagraphIds, $currentParagraphIds); - - if (empty($removedParagraphIds)) { - return; - } - - // Delete the orphaned paragraphs. - $paragraphStorage = $this->entityTypeManagerInterface->getStorage('paragraph'); - $paragraphs = $paragraphStorage->loadMultiple($removedParagraphIds); - - foreach ($paragraphs as $paragraph) { - $paragraph->delete(); - $this->logger->info('Deleted orphaned paragraph @id of type @type', [ - '@id' => $paragraph->id(), - '@type' => $paragraph->bundle(), - ]); - } - } - catch (\Exception $e) { - $this->logger->error('Error deleting orphaned paragraphs: @message', ['@message' => $e->getMessage()]); } } @@ -267,20 +203,15 @@ private function getTimelineNodes(array $variables) : ?array { * Array of paragraph entities or NULL. */ private function getTimelineNotes(array $variables) : ?array { - try { - $paragraphStorage = $this->entityTypeManagerInterface->getStorage('paragraph'); - $noteQuery = $paragraphStorage->getQuery(); - $noteQuery->accessCheck(); - $noteQuery->condition('parent_id', $variables['node']->id()); - $noteQuery->condition('type', 'timeline_note'); - $noteIds = $noteQuery->execute(); - - return $paragraphStorage->loadMultiple($noteIds); - } - catch (\Exception $e) { - $this->logger->error('Error getting timeline notes: @message', ['@message' => $e->getMessage()]); - return []; + $node = $variables['node'] ?? NULL; + if ($node instanceof NodeInterface && $node->hasField('field_timeline')) { + /** @var \Drupal\Core\Field\EntityReferenceFieldItemListInterface $list */ + $list = $node->get('field_timeline'); + + return $list->referencedEntities(); } + + return NULL; } /** From f1b91d69aa41654bf04b285f46125e9671a40f7a Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 9 Mar 2026 13:01:16 +0100 Subject: [PATCH 25/32] Removed superfluous update hook --- .../hoeringsportal_project.install | 61 ------------------- 1 file changed, 61 deletions(-) delete mode 100644 web/modules/custom/hoeringsportal_project/hoeringsportal_project.install diff --git a/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install b/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install deleted file mode 100644 index 5eec30ed1..000000000 --- a/web/modules/custom/hoeringsportal_project/hoeringsportal_project.install +++ /dev/null @@ -1,61 +0,0 @@ -getStorage('paragraph'); - $nodeStorage = \Drupal::entityTypeManager()->getStorage('node'); - - // Get all timeline_note paragraphs. - $query = $paragraphStorage->getQuery(); - $query->accessCheck(FALSE); - $query->condition('type', 'timeline_note'); - $paragraphIds = $query->execute(); - - if (empty($paragraphIds)) { - return t('No timeline_note paragraphs found.'); - } - - // Get all nodes with field_timeline. - $nodeQuery = $nodeStorage->getQuery(); - $nodeQuery->accessCheck(FALSE); - $nodeQuery->exists('field_timeline'); - $nodeIds = $nodeQuery->execute(); - - // Collect all referenced paragraph IDs. - $referencedParagraphIds = []; - if (!empty($nodeIds)) { - $nodes = $nodeStorage->loadMultiple($nodeIds); - foreach ($nodes as $node) { - if ($node->hasField('field_timeline') && !$node->get('field_timeline')->isEmpty()) { - foreach ($node->get('field_timeline') as $item) { - if ($item->target_id) { - $referencedParagraphIds[] = $item->target_id; - } - } - } - } - } - - // Find orphaned paragraphs. - $orphanedParagraphIds = array_diff($paragraphIds, $referencedParagraphIds); - - if (empty($orphanedParagraphIds)) { - return t('No orphaned timeline_note paragraphs found.'); - } - - // Delete orphaned paragraphs. - $paragraphs = $paragraphStorage->loadMultiple($orphanedParagraphIds); - foreach ($paragraphs as $paragraph) { - $paragraph->delete(); - } - - $count = count($orphanedParagraphIds); - return t('Deleted @count orphaned timeline_note paragraph(s).', ['@count' => $count]); -} From c4ba89284ccfe54846d5aafb809a9a8ef6d4e07c Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 10 Mar 2026 11:16:23 +0100 Subject: [PATCH 26/32] CHanged flag a tags to buttons --- .../hoeringsportal/assets/css/module/_animated-svg.scss | 3 +++ .../hoeringsportal/assets/css/module/_dialogue.scss | 8 +++++++- .../templates/content/flag--support-comment.html.twig | 4 +--- .../templates/content/flag--support-proposal.html.twig | 4 +--- .../content/node--dialogue-proposal--full.html.twig | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss b/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss index cba3a1080..49087f646 100644 --- a/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss +++ b/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss @@ -1,3 +1,4 @@ +button:has(svg), a:has(svg) { /* prettier-ignore */ --ease-spring-lazy: linear(0, 0.008 1.1%, 0.034 2.3%, 0.134 4.9%, 0.264 7.3%, 0.683 14.3%, 0.797 16.5%, 0.89 18.6%, 0.967 20.7%, 1.027 22.8%, 1.073 25%, 1.104 27.3%, 1.123 30.6%, 1.119 34.3%, 1.018 49.5%, 0.988 58.6%, 0.985 65.2%, 1 84.5%, 1); @@ -81,6 +82,7 @@ a:has(svg) { } /* Click on with thumbs-up svg */ +.liked button:has(svg), .liked a:has(svg) { g.thumbs-up { path:first-of-type { @@ -93,6 +95,7 @@ a:has(svg) { } /* Thumbs-up already set*/ +.action-unflag button:has(svg), .action-unflag a:has(svg) { g.thumbs-up { path:last-child { diff --git a/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss b/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss index be54247d0..818961dcc 100644 --- a/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss +++ b/web/themes/custom/hoeringsportal/assets/css/module/_dialogue.scss @@ -12,9 +12,15 @@ } .flag-wrapper { - .flag a { + .flag a, + .flag button { + background: none; + border: 0; color: inherit; + letter-spacing: 0.05em; text-decoration: none; + text-transform: lowercase; + padding: 0; } .ajax-progress-throbber { diff --git a/web/themes/custom/hoeringsportal/templates/content/flag--support-comment.html.twig b/web/themes/custom/hoeringsportal/templates/content/flag--support-comment.html.twig index a0e6e6258..ee3fc3293 100644 --- a/web/themes/custom/hoeringsportal/templates/content/flag--support-comment.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/flag--support-comment.html.twig @@ -34,8 +34,6 @@ ] %} -{# Set nofollow to prevent search bots from crawling anonymous flag links #} -{% set attributes = attributes.setAttribute('rel', 'nofollow') %}
- {{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-thumbs-up.svg.html.twig') }}{{ flagcount(flag, flaggable) }} {{ 'like this'|t }} + {{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-thumbs-up.svg.html.twig') }} {{ flagcount(flag, flaggable) }} {{ 'Like this'|t }}
diff --git a/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig b/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig index 38c103b87..ee3fc3293 100644 --- a/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig @@ -34,8 +34,6 @@ ] %} -{# Set nofollow to prevent search bots from crawling anonymous flag links #} -{% set attributes = attributes.setAttribute('rel', 'nofollow') %}
- {{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-thumbs-up.svg.html.twig') }}{{ flagcount(flag, flaggable) }} {{ 'like this'|t }} + {{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-thumbs-up.svg.html.twig') }} {{ flagcount(flag, flaggable) }} {{ 'Like this'|t }}
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 7afff38b2..c269179cb 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 @@ -21,7 +21,7 @@
- + {{ content.flag_support_proposal }}
{{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-comment.svg.html.twig') }}{% trans %}1 comment{% plural node.field_comments.comment_count %}{{ count }} comments{% endtrans %} From 52f0cb3ab7a95ee598415036550526951ebf24ad Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 10 Mar 2026 11:19:52 +0100 Subject: [PATCH 27/32] Modified changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2445385db..a858fb0e9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +* [PR-638](https://github.com/itk-dev/deltag.aarhus.dk/pull/638) + Changed flags templates to use html button instead of anchor tag. + ## [4.16.0] - 2026-03-09 * [PR-635](https://github.com/itk-dev/deltag.aarhus.dk/pull/635) From 4e5b67c86178beab879ffeed145d32ac3559adae Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 10 Mar 2026 11:37:00 +0100 Subject: [PATCH 28/32] Updated nginx template --- .docker/templates/default.conf.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/templates/default.conf.template b/.docker/templates/default.conf.template index 02fa1147c..b07bc6427 100644 --- a/.docker/templates/default.conf.template +++ b/.docker/templates/default.conf.template @@ -89,7 +89,7 @@ server { # Define which paths to protect location ~ ^/(flag/flag|admin|user/login) { # Block bots on these paths only - if ($http_user_agent ~* (bot|crawler|spider|scraper)) { + if ($http_user_agent ~* (bot|crawl|crawler|spider|scraper)) { return 403; } From e69af8d44f80d4f4906d37e9833047b3a75d63d5 Mon Sep 17 00:00:00 2001 From: martinyde Date: Tue, 10 Mar 2026 12:04:35 +0100 Subject: [PATCH 29/32] Updated html and css --- .../assets/css/module/_animated-svg.scss | 11 ++++------- .../hoeringsportal/assets/css/module/_dialogue.scss | 1 - .../templates/content/flag--support-comment.html.twig | 2 +- .../content/flag--support-proposal.html.twig | 2 +- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss b/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss index 49087f646..a1a26a45e 100644 --- a/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss +++ b/web/themes/custom/hoeringsportal/assets/css/module/_animated-svg.scss @@ -1,5 +1,4 @@ -button:has(svg), -a:has(svg) { +button:has(svg) { /* prettier-ignore */ --ease-spring-lazy: linear(0, 0.008 1.1%, 0.034 2.3%, 0.134 4.9%, 0.264 7.3%, 0.683 14.3%, 0.797 16.5%, 0.89 18.6%, 0.967 20.7%, 1.027 22.8%, 1.073 25%, 1.104 27.3%, 1.123 30.6%, 1.119 34.3%, 1.018 49.5%, 0.988 58.6%, 0.985 65.2%, 1 84.5%, 1); /* prettier-ignore */ @@ -81,9 +80,8 @@ a:has(svg) { } } -/* Click on with thumbs-up svg */ -.liked button:has(svg), -.liked a:has(svg) { +/* Click on + {{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-thumbs-up.svg.html.twig') }} {{ flagcount(flag, flaggable) }} {{ 'Like this'|t }}
diff --git a/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig b/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig index ee3fc3293..4a70502b6 100644 --- a/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/flag--support-proposal.html.twig @@ -35,5 +35,5 @@ %}
- {{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-thumbs-up.svg.html.twig') }} {{ flagcount(flag, flaggable) }} {{ 'Like this'|t }} + {{ include('themes/custom/hoeringsportal/templates/animated-svg/icon-deltag-thumbs-up.svg.html.twig') }} {{ flagcount(flag, flaggable) }} {{ 'Like this'|t }}
From d5edbe5d4bc518b92389b988d96ee3bcad40f73e Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Fri, 20 Mar 2026 13:20:34 +0100 Subject: [PATCH 30/32] =?UTF-8?q?7034:=20Hid=20=E2=80=9CHide=20in=20timeli?= =?UTF-8?q?ne=E2=80=9D=20from=20display?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +++ ...core.entity_view_display.node.hearing.default.yml | 12 +----------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2445385db..f4b3e0a5f 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +* [PR-639](https://github.com/itk-dev/deltag.aarhus.dk/pull/639) + Hid “Hide in timeline” from display + ## [4.16.0] - 2026-03-09 * [PR-635](https://github.com/itk-dev/deltag.aarhus.dk/pull/635) diff --git a/config/sync/core.entity_view_display.node.hearing.default.yml b/config/sync/core.entity_view_display.node.hearing.default.yml index 692a7b4ea..e885be6b0 100644 --- a/config/sync/core.entity_view_display.node.hearing.default.yml +++ b/config/sync/core.entity_view_display.node.hearing.default.yml @@ -61,7 +61,6 @@ third_party_settings: header: - 'dynamic_block_field:node-hearing_warning' - node_title - - field_hide_in_timeline left: - field_teaser - field_description @@ -150,16 +149,6 @@ content: third_party_settings: { } weight: 3 region: left - field_hide_in_timeline: - type: boolean - label: above - settings: - format: default - format_custom_false: '' - format_custom_true: '' - third_party_settings: { } - weight: 21 - region: header field_lokalplaner: type: hoeringsportal_data_localplan_default label: above @@ -253,6 +242,7 @@ hidden: field_hearing_ticket_list: true field_hide_hearing_replies: true field_hide_hearing_replies_msg: true + field_hide_in_timeline: true field_map_display: true field_project_reference: true field_tags: true From 8a88a91cc332030acd05f40e8b755fc991a00330 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 23 Mar 2026 09:54:18 +0100 Subject: [PATCH 31/32] Used string value when truncating --- CHANGELOG.md | 2 ++ .../templates/content/node--decision--teaser.html.twig | 2 +- .../templates/content/node--dialogue--teaser.html.twig | 2 +- .../templates/content/node--hearing--teaser.html.twig | 2 +- .../templates/content/node--project-main-page--teaser.html.twig | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4b3e0a5f..5625e4faf 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +* [PR-640](https://github.com/itk-dev/deltag.aarhus.dk/pull/640) + Use string value when truncating * [PR-639](https://github.com/itk-dev/deltag.aarhus.dk/pull/639) Hid “Hide in timeline” from display diff --git a/web/themes/custom/hoeringsportal/templates/content/node--decision--teaser.html.twig b/web/themes/custom/hoeringsportal/templates/content/node--decision--teaser.html.twig index 955d405e2..36af1fd58 100755 --- a/web/themes/custom/hoeringsportal/templates/content/node--decision--teaser.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/node--decision--teaser.html.twig @@ -3,7 +3,7 @@ {% extends 'themes/custom/hoeringsportal/templates/components/base-card.html.twig' %} {% block card_content %} - {{ node.field_teaser.value|truncate(95, true, true) }} + {{ node.field_teaser.string|truncate(95, true, true) }} {{ content.field_project_category }} {{ content.field_area }}{{ content.field_type }} {% endblock %} diff --git a/web/themes/custom/hoeringsportal/templates/content/node--dialogue--teaser.html.twig b/web/themes/custom/hoeringsportal/templates/content/node--dialogue--teaser.html.twig index 955d405e2..36af1fd58 100755 --- a/web/themes/custom/hoeringsportal/templates/content/node--dialogue--teaser.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/node--dialogue--teaser.html.twig @@ -3,7 +3,7 @@ {% extends 'themes/custom/hoeringsportal/templates/components/base-card.html.twig' %} {% block card_content %} - {{ node.field_teaser.value|truncate(95, true, true) }} + {{ node.field_teaser.string|truncate(95, true, true) }} {{ content.field_project_category }} {{ content.field_area }}{{ content.field_type }} {% endblock %} diff --git a/web/themes/custom/hoeringsportal/templates/content/node--hearing--teaser.html.twig b/web/themes/custom/hoeringsportal/templates/content/node--hearing--teaser.html.twig index 6df4c4964..89a7ecdf1 100755 --- a/web/themes/custom/hoeringsportal/templates/content/node--hearing--teaser.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/node--hearing--teaser.html.twig @@ -35,7 +35,7 @@ {# Show teaser description #} {% block card_content %} - {{ content.field_teaser[0]['#context'].value|truncate(95, true, true) }} + {{ node.field_teaser.string|truncate(95, true, true) }} {% endblock %} {# Collect data for information lines on card #} diff --git a/web/themes/custom/hoeringsportal/templates/content/node--project-main-page--teaser.html.twig b/web/themes/custom/hoeringsportal/templates/content/node--project-main-page--teaser.html.twig index 7d70d0271..6e604cd0d 100755 --- a/web/themes/custom/hoeringsportal/templates/content/node--project-main-page--teaser.html.twig +++ b/web/themes/custom/hoeringsportal/templates/content/node--project-main-page--teaser.html.twig @@ -3,7 +3,7 @@ {% extends 'themes/custom/hoeringsportal/templates/components/base-card.html.twig' %} {% block card_content %} - {{ node.field_short_description.value|truncate(95, true, true) }} + {{ node.field_short_description.string|truncate(95, true, true) }} {{ content.field_project_category }} {{ content.field_area }}{{ content.field_type }} {% endblock %} From 4eb81e9bbe99c04cd7cd817baa362a4064f6fdc6 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 23 Mar 2026 10:23:10 +0100 Subject: [PATCH 32/32] Release 4.16.1 --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5625e4faf..b816aec57 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [4.16.1] - 2026-03-23 + * [PR-640](https://github.com/itk-dev/deltag.aarhus.dk/pull/640) Use string value when truncating * [PR-639](https://github.com/itk-dev/deltag.aarhus.dk/pull/639) @@ -697,7 +699,8 @@ Updated drupal core 8.6.16 Initial release -[Unreleased]: https://github.com/itk-dev/hoeringsportal/compare/4.16.0...HEAD +[Unreleased]: https://github.com/itk-dev/hoeringsportal/compare/4.16.1...HEAD +[4.16.1]: https://github.com/itk-dev/hoeringsportal/compare/4.16.0...4.16.1 [4.16.0]: https://github.com/itk-dev/hoeringsportal/compare/4.15.2...4.16.0 [4.15.2]: https://github.com/itk-dev/hoeringsportal/compare/4.15.1...4.15.2 [4.15.1]: https://github.com/itk-dev/hoeringsportal/compare/4.15.0...4.15.1