diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 975c3a4e..0684d88d 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -65,4 +65,4 @@ jobs:
- name: Run PHPUnit tests
run: |
composer test-php public/modules/custom
- [ -d "tests/" ] && composer test-php tests/ || echo "No DTT tests found. Ignoring..."
+ if [ -d "tests/" ]; then composer test-php tests/; else echo "No DTT tests found. Ignoring..."; fi
diff --git a/composer.json b/composer.json
index a856d7b0..2b39bfe6 100644
--- a/composer.json
+++ b/composer.json
@@ -20,7 +20,7 @@
"drupal/helfi_platform_config": "^3.0",
"drupal/helfi_proxy": "^3.0",
"drupal/helfi_tpr": "^2.0",
- "drupal/helfi_tunnistamo": "^2.0",
+ "drupal/helfi_tunnistamo": "^3.0",
"drupal/migrate_plus": "^6.0",
"drupal/raven": "^4.0",
"drupal/redis": "^1.5",
diff --git a/composer.lock b/composer.lock
index d4c1c786..3978a2f7 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": "20b2dea98266fdb211309b3281b3099a",
+ "content-hash": "e31ccf56e88f3f0fc262b302b80ff616",
"packages": [
{
"name": "asm89/stack-cors",
@@ -2035,16 +2035,16 @@
},
{
"name": "drupal/core",
- "version": "9.5.10",
+ "version": "9.5.11",
"source": {
"type": "git",
"url": "https://github.com/drupal/core.git",
- "reference": "c84bab7403943fbc4ed90ffcdde4460a94642b06"
+ "reference": "8afcb233c2a71501b35fed2713167c37831d5c19"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/drupal/core/zipball/c84bab7403943fbc4ed90ffcdde4460a94642b06",
- "reference": "c84bab7403943fbc4ed90ffcdde4460a94642b06",
+ "url": "https://api.github.com/repos/drupal/core/zipball/8afcb233c2a71501b35fed2713167c37831d5c19",
+ "reference": "8afcb233c2a71501b35fed2713167c37831d5c19",
"shasum": ""
},
"require": {
@@ -2196,9 +2196,9 @@
],
"description": "Drupal is an open source content management platform powering millions of websites and applications.",
"support": {
- "source": "https://github.com/drupal/core/tree/9.5.10"
+ "source": "https://github.com/drupal/core/tree/9.5.11"
},
- "time": "2023-07-05T09:26:59+00:00"
+ "time": "2023-09-19T17:58:28+00:00"
},
{
"name": "drupal/core-composer-scaffold",
@@ -3812,16 +3812,16 @@
},
{
"name": "drupal/hdbt",
- "version": "5.6.1",
+ "version": "5.6.12",
"source": {
"type": "git",
"url": "https://github.com/City-of-Helsinki/drupal-hdbt.git",
- "reference": "d4eeff38bc61f431613c8fa9a4d92a8755f66b09"
+ "reference": "c24eecd637d0373f9da2bcc01336feee376fcaf1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/d4eeff38bc61f431613c8fa9a4d92a8755f66b09",
- "reference": "d4eeff38bc61f431613c8fa9a4d92a8755f66b09",
+ "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/c24eecd637d0373f9da2bcc01336feee376fcaf1",
+ "reference": "c24eecd637d0373f9da2bcc01336feee376fcaf1",
"shasum": ""
},
"require": {
@@ -3839,10 +3839,10 @@
"Drupal"
],
"support": {
- "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/5.6.1",
+ "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/5.6.12",
"issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues"
},
- "time": "2023-09-11T12:42:43+00:00"
+ "time": "2023-09-26T09:47:13+00:00"
},
{
"name": "drupal/hdbt_admin",
@@ -3931,16 +3931,16 @@
},
{
"name": "drupal/helfi_api_base",
- "version": "2.5.3",
+ "version": "2.5.5",
"source": {
"type": "git",
"url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git",
- "reference": "f5fab16526d75c612e420a68ebe933efb5c72a0e"
+ "reference": "7ffd5b029f1d85590dc8966007f3936f14cb3c35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/f5fab16526d75c612e420a68ebe933efb5c72a0e",
- "reference": "f5fab16526d75c612e420a68ebe933efb5c72a0e",
+ "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/7ffd5b029f1d85590dc8966007f3936f14cb3c35",
+ "reference": "7ffd5b029f1d85590dc8966007f3936f14cb3c35",
"shasum": ""
},
"require": {
@@ -3966,10 +3966,10 @@
],
"description": "Helfi - API Base",
"support": {
- "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.5.3",
+ "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.5.5",
"issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues"
},
- "time": "2023-09-13T05:29:57+00:00"
+ "time": "2023-09-18T06:55:18+00:00"
},
{
"name": "drupal/helfi_azure_fs",
@@ -4016,12 +4016,12 @@
"source": {
"type": "git",
"url": "https://github.com/City-of-Helsinki/drupal-tools.git",
- "reference": "0ebc9e72b92b37fa37bd3eb003c4f4d0db329bfa"
+ "reference": "8dfd9dda99f0934070119547e7f950d3f90a9ebc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/0ebc9e72b92b37fa37bd3eb003c4f4d0db329bfa",
- "reference": "0ebc9e72b92b37fa37bd3eb003c4f4d0db329bfa",
+ "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/8dfd9dda99f0934070119547e7f950d3f90a9ebc",
+ "reference": "8dfd9dda99f0934070119547e7f950d3f90a9ebc",
"shasum": ""
},
"default-branch": true,
@@ -4034,20 +4034,20 @@
"source": "https://github.com/City-of-Helsinki/drupal-tools/tree/main",
"issues": "https://github.com/City-of-Helsinki/drupal-tools/issues"
},
- "time": "2023-09-06T06:27:11+00:00"
+ "time": "2023-09-26T09:45:28+00:00"
},
{
"name": "drupal/helfi_navigation",
- "version": "2.0.13",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/City-of-Helsinki/drupal-module-helfi-navigation.git",
- "reference": "c2497e87c7b4242354c323aad5c21ec09e37d3a7"
+ "reference": "5c0f648a21220a6e8b6c14543f8e60b4b843a918"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-navigation/zipball/c2497e87c7b4242354c323aad5c21ec09e37d3a7",
- "reference": "c2497e87c7b4242354c323aad5c21ec09e37d3a7",
+ "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-navigation/zipball/5c0f648a21220a6e8b6c14543f8e60b4b843a918",
+ "reference": "5c0f648a21220a6e8b6c14543f8e60b4b843a918",
"shasum": ""
},
"require": {
@@ -4065,23 +4065,23 @@
],
"description": "Helfi - Navigation",
"support": {
- "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-navigation/tree/2.0.13",
+ "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-navigation/tree/2.1.1",
"issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-navigation/issues"
},
- "time": "2023-09-13T05:51:44+00:00"
+ "time": "2023-09-21T08:34:22+00:00"
},
{
"name": "drupal/helfi_platform_config",
- "version": "3.4.5",
+ "version": "3.4.17",
"source": {
"type": "git",
"url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git",
- "reference": "90394a0feab45409ed2c2101ef3d48c02906714e"
+ "reference": "46244701cdef62af87c7e376b4e43391ee6c870c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/90394a0feab45409ed2c2101ef3d48c02906714e",
- "reference": "90394a0feab45409ed2c2101ef3d48c02906714e",
+ "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/46244701cdef62af87c7e376b4e43391ee6c870c",
+ "reference": "46244701cdef62af87c7e376b4e43391ee6c870c",
"shasum": ""
},
"require": {
@@ -4184,10 +4184,10 @@
],
"description": "HELfi platform config",
"support": {
- "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/3.4.5",
+ "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/3.4.17",
"issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues"
},
- "time": "2023-09-13T06:57:57+00:00"
+ "time": "2023-09-27T08:15:04+00:00"
},
{
"name": "drupal/helfi_proxy",
@@ -4235,16 +4235,16 @@
},
{
"name": "drupal/helfi_tpr",
- "version": "2.2.6",
+ "version": "2.2.7",
"source": {
"type": "git",
"url": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr.git",
- "reference": "f73c27c4d30522303dfadf1228c7331e120f04ac"
+ "reference": "68a4e65acffc2038e5006f1d4b2763bc52017184"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tpr/zipball/f73c27c4d30522303dfadf1228c7331e120f04ac",
- "reference": "f73c27c4d30522303dfadf1228c7331e120f04ac",
+ "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tpr/zipball/68a4e65acffc2038e5006f1d4b2763bc52017184",
+ "reference": "68a4e65acffc2038e5006f1d4b2763bc52017184",
"shasum": ""
},
"require": {
@@ -4270,23 +4270,23 @@
],
"description": "TPR integration",
"support": {
- "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr/tree/2.2.6",
+ "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr/tree/2.2.7",
"issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr/issues"
},
- "time": "2023-09-01T12:09:30+00:00"
+ "time": "2023-09-14T11:48:29+00:00"
},
{
"name": "drupal/helfi_tunnistamo",
- "version": "2.2.4",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo.git",
- "reference": "17badf64ebfcc6a30458634b19a4387cb4ce3d34"
+ "reference": "29e98d8a1c9fd39a98da7ce2b44fdc28a614bd99"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tunnistamo/zipball/17badf64ebfcc6a30458634b19a4387cb4ce3d34",
- "reference": "17badf64ebfcc6a30458634b19a4387cb4ce3d34",
+ "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tunnistamo/zipball/29e98d8a1c9fd39a98da7ce2b44fdc28a614bd99",
+ "reference": "29e98d8a1c9fd39a98da7ce2b44fdc28a614bd99",
"shasum": ""
},
"require": {
@@ -4303,10 +4303,10 @@
],
"description": "Tunnistamo integration",
"support": {
- "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo/tree/2.2.4",
+ "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo/tree/3.0.0",
"issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-tunnistamo/issues"
},
- "time": "2023-05-17T11:53:24+00:00"
+ "time": "2023-08-28T07:28:23+00:00"
},
{
"name": "drupal/image_style_quality",
@@ -8129,30 +8129,30 @@
},
{
"name": "laminas/laminas-stdlib",
- "version": "3.17.0",
+ "version": "3.18.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-stdlib.git",
- "reference": "dd35c868075bad80b6718959740913e178eb4274"
+ "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/dd35c868075bad80b6718959740913e178eb4274",
- "reference": "dd35c868075bad80b6718959740913e178eb4274",
+ "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf",
+ "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0"
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0"
},
"conflict": {
"zendframework/zend-stdlib": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "^2.5",
- "phpbench/phpbench": "^1.2.9",
- "phpunit/phpunit": "^10.0.16",
+ "phpbench/phpbench": "^1.2.14",
+ "phpunit/phpunit": "^10.3.3",
"psalm/plugin-phpunit": "^0.18.4",
- "vimeo/psalm": "^5.8"
+ "vimeo/psalm": "^5.15.0"
},
"type": "library",
"autoload": {
@@ -8184,7 +8184,7 @@
"type": "community_bridge"
}
],
- "time": "2023-03-20T13:51:37+00:00"
+ "time": "2023-09-19T10:15:21+00:00"
},
{
"name": "league/container",
@@ -10082,16 +10082,16 @@
},
{
"name": "psr/http-client",
- "version": "1.0.2",
+ "version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
- "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31"
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31",
- "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
"shasum": ""
},
"require": {
@@ -10128,9 +10128,9 @@
"psr-18"
],
"support": {
- "source": "https://github.com/php-fig/http-client/tree/1.0.2"
+ "source": "https://github.com/php-fig/http-client"
},
- "time": "2023-04-10T20:12:12+00:00"
+ "time": "2023-09-23T14:17:50+00:00"
},
{
"name": "psr/http-factory",
@@ -15972,16 +15972,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.24.0",
+ "version": "1.24.2",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "3510b0a6274cc42f7219367cb3abfc123ffa09d6"
+ "reference": "bcad8d995980440892759db0c32acae7c8e79442"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/3510b0a6274cc42f7219367cb3abfc123ffa09d6",
- "reference": "3510b0a6274cc42f7219367cb3abfc123ffa09d6",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442",
+ "reference": "bcad8d995980440892759db0c32acae7c8e79442",
"shasum": ""
},
"require": {
@@ -16013,9 +16013,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2"
},
- "time": "2023-09-07T20:46:32+00:00"
+ "time": "2023-09-26T12:28:12+00:00"
},
{
"name": "phpstan/phpstan",
diff --git a/conf/cmi/core.base_field_override.node.announcement.title.yml b/conf/cmi/core.base_field_override.node.announcement.title.yml
new file mode 100644
index 00000000..0e175083
--- /dev/null
+++ b/conf/cmi/core.base_field_override.node.announcement.title.yml
@@ -0,0 +1,20 @@
+uuid: f73a43d3-1103-44c8-9cfd-42b87fbed589
+langcode: en
+status: true
+dependencies:
+ config:
+ - node.type.announcement
+_core:
+ default_config_hash: v0rg9ztfYRnKz2PXAcGD_Q52rTcPbwqaZLw3tXWd4rM
+id: node.announcement.title
+field_name: title
+entity_type: node
+bundle: announcement
+label: 'Administrative title'
+description: ''
+required: true
+translatable: true
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: string
diff --git a/conf/cmi/core.entity_form_display.node.announcement.default.yml b/conf/cmi/core.entity_form_display.node.announcement.default.yml
index f6ea6adc..b9dd98da 100644
--- a/conf/cmi/core.entity_form_display.node.announcement.default.yml
+++ b/conf/cmi/core.entity_form_display.node.announcement.default.yml
@@ -7,6 +7,7 @@ dependencies:
- field.field.node.announcement.field_announcement_all_pages
- field.field.node.announcement.field_announcement_content_pages
- field.field.node.announcement.field_announcement_link
+ - field.field.node.announcement.field_announcement_title
- field.field.node.announcement.field_announcement_type
- node.type.announcement
module:
@@ -18,7 +19,7 @@ dependencies:
- select2
- text
_core:
- default_config_hash: le2Wzlas0qZ9Bj-o6WlJbHDeisFrucs9F4B3VOK8t_w
+ default_config_hash: 0ewsu2ZhpNhAo4t7wkUgEa9ABQAkcsF7IXtR-kFeDUg
id: node.announcement.default
targetEntityType: node
bundle: announcement
@@ -26,7 +27,7 @@ mode: default
content:
body:
type: text_textarea_with_summary
- weight: 15
+ weight: 18
region: content
settings:
rows: 9
@@ -42,14 +43,14 @@ content:
third_party_settings: { }
field_announcement_all_pages:
type: boolean_checkbox
- weight: 11
+ weight: 13
region: content
settings:
display_label: true
third_party_settings: { }
field_announcement_content_pages:
type: select2_entity_reference
- weight: 12
+ weight: 14
region: content
settings:
width: 100%
@@ -59,7 +60,7 @@ content:
third_party_settings: { }
field_announcement_link:
type: link_default
- weight: 16
+ weight: 19
region: content
settings:
placeholder_url: ''
@@ -67,7 +68,7 @@ content:
third_party_settings: { }
field_announcement_service_pages:
type: select2_entity_reference
- weight: 14
+ weight: 16
region: content
settings:
width: 100%
@@ -75,16 +76,24 @@ content:
match_operator: CONTAINS
match_limit: 20
third_party_settings: { }
+ field_announcement_title:
+ type: string_textfield
+ weight: 17
+ region: content
+ settings:
+ size: 60
+ placeholder: ''
+ third_party_settings: { }
field_announcement_type:
type: select2
- weight: 10
+ weight: 11
region: content
settings:
width: 100%
third_party_settings: { }
field_announcement_unit_pages:
type: select2_entity_reference
- weight: 13
+ weight: 15
region: content
settings:
width: 100%
@@ -123,7 +132,7 @@ content:
settings: { }
third_party_settings: { }
simple_sitemap:
- weight: 10
+ weight: 12
region: content
settings: { }
third_party_settings: { }
diff --git a/conf/cmi/core.entity_view_display.node.announcement.default.yml b/conf/cmi/core.entity_view_display.node.announcement.default.yml
index 0f463e40..6c4463aa 100644
--- a/conf/cmi/core.entity_view_display.node.announcement.default.yml
+++ b/conf/cmi/core.entity_view_display.node.announcement.default.yml
@@ -7,6 +7,7 @@ dependencies:
- field.field.node.announcement.field_announcement_all_pages
- field.field.node.announcement.field_announcement_content_pages
- field.field.node.announcement.field_announcement_link
+ - field.field.node.announcement.field_announcement_title
- field.field.node.announcement.field_announcement_type
- node.type.announcement
module:
@@ -15,7 +16,7 @@ dependencies:
- text
- user
_core:
- default_config_hash: IHF-sP4Gq6tdTyWDxQDDEdLbHz3-QzklMNE1QA2mQU0
+ default_config_hash: LQ9K_wCbd758UCcNEORQvFUQ7gNJddkukiwwYHrZv4c
id: node.announcement.default
targetEntityType: node
bundle: announcement
@@ -40,6 +41,14 @@ content:
third_party_settings: { }
weight: 3
region: content
+ field_announcement_title:
+ type: string
+ label: hidden
+ settings:
+ link_to_entity: false
+ third_party_settings: { }
+ weight: 4
+ region: content
field_announcement_type:
type: list_default
label: hidden
diff --git a/conf/cmi/core.entity_view_display.node.announcement.teaser.yml b/conf/cmi/core.entity_view_display.node.announcement.teaser.yml
index 6aaf4d5e..1531031d 100644
--- a/conf/cmi/core.entity_view_display.node.announcement.teaser.yml
+++ b/conf/cmi/core.entity_view_display.node.announcement.teaser.yml
@@ -8,13 +8,14 @@ dependencies:
- field.field.node.announcement.field_announcement_all_pages
- field.field.node.announcement.field_announcement_content_pages
- field.field.node.announcement.field_announcement_link
+ - field.field.node.announcement.field_announcement_title
- field.field.node.announcement.field_announcement_type
- node.type.announcement
module:
- text
- user
_core:
- default_config_hash: FhIJpRvY90w782EYtR2V2Yfppyglwp191xkVdXEEbbM
+ default_config_hash: OwH532HYBVjDOUW0iJnoDWc2yFGZwwGJnAZEmZPjLCA
id: node.announcement.teaser
targetEntityType: node
bundle: announcement
@@ -38,6 +39,7 @@ hidden:
field_announcement_content_pages: true
field_announcement_link: true
field_announcement_service_pages: true
+ field_announcement_title: true
field_announcement_type: true
field_announcement_unit_pages: true
langcode: true
diff --git a/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml b/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml
index 5fbdb31c..84b02800 100644
--- a/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml
+++ b/conf/cmi/external_entities.external_entity_type.helfi_announcements.yml
@@ -3,13 +3,13 @@ langcode: en
status: true
dependencies: { }
_core:
- default_config_hash: XBOd0Lfy5FpXJkeuZi75vBaT7ffFCENINrui5kCVygo
+ default_config_hash: ZjzZvHTvsEfBX_dhlTXEZmLbS_ELM5uV7xbXTaR7D7g
id: helfi_announcements
label: 'Helfi: Announcements'
label_plural: 'Helfi: Announcements'
description: ''
-read_only: true
generate_aliases: null
+read_only: true
field_mapper_id: jsonpath
field_mapper_config:
field_mappings:
@@ -37,6 +37,8 @@ field_mapper_config:
value: '$.attributes["field_announcement_link"]["title"]'
announcement_link_url:
value: '$.attributes["field_announcement_link"]["uri"]'
+ announcement_assistive_technology_close_button_title:
+ value: '$.attributes["field_announcement_title"]'
storage_client_id: helfi_announcements
storage_client_config: { }
persistent_cache_max_age: 600
diff --git a/conf/cmi/field.field.node.announcement.field_announcement_title.yml b/conf/cmi/field.field.node.announcement.field_announcement_title.yml
new file mode 100644
index 00000000..cae80c7e
--- /dev/null
+++ b/conf/cmi/field.field.node.announcement.field_announcement_title.yml
@@ -0,0 +1,21 @@
+uuid: 70edd643-ebf7-474f-93e5-99c463aacce4
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.field_announcement_title
+ - node.type.announcement
+_core:
+ default_config_hash: f0piVjyoLRnZfc5fbRP6BdQ6_iMw7az35Req0V6Z4mg
+id: node.announcement.field_announcement_title
+field_name: field_announcement_title
+entity_type: node
+bundle: announcement
+label: 'Announcement title'
+description: 'This title is only available to users of assistive technology. '
+required: true
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: string
diff --git a/conf/cmi/field.storage.node.field_announcement_title.yml b/conf/cmi/field.storage.node.field_announcement_title.yml
new file mode 100644
index 00000000..8e2fa33a
--- /dev/null
+++ b/conf/cmi/field.storage.node.field_announcement_title.yml
@@ -0,0 +1,23 @@
+uuid: ee7fae45-f338-46d1-a471-1fda1930f9c9
+langcode: en
+status: true
+dependencies:
+ module:
+ - node
+_core:
+ default_config_hash: dDVMTZxf5aD5P9HjLJX_6ThWFSclPORpZMThR3dd_XY
+id: node.field_announcement_title
+field_name: field_announcement_title
+entity_type: node
+type: string
+settings:
+ max_length: 255
+ case_sensitive: false
+ is_ascii: false
+module: core
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/conf/cmi/helfi_api_base.delete_revisions.yml b/conf/cmi/helfi_api_base.delete_revisions.yml
new file mode 100644
index 00000000..6955f667
--- /dev/null
+++ b/conf/cmi/helfi_api_base.delete_revisions.yml
@@ -0,0 +1,6 @@
+entity_types:
+ - node
+ - paragraph
+ - tpr_unit
+ - tpr_service
+ - tpr_errand_service
diff --git a/conf/cmi/language/fi/field.field.node.announcement.field_announcement_title.yml b/conf/cmi/language/fi/field.field.node.announcement.field_announcement_title.yml
new file mode 100644
index 00000000..8d33f85f
--- /dev/null
+++ b/conf/cmi/language/fi/field.field.node.announcement.field_announcement_title.yml
@@ -0,0 +1,2 @@
+label: 'Poikkeusilmoituksen otsikko'
+description: 'Tämä otsikko on avustavan teknologian käyttäjiä varten.'
diff --git a/conf/cmi/search_api.index.job_listings.yml b/conf/cmi/search_api.index.job_listings.yml
index ed582647..61e82246 100644
--- a/conf/cmi/search_api.index.job_listings.yml
+++ b/conf/cmi/search_api.index.job_listings.yml
@@ -268,7 +268,6 @@ field_settings:
datasource_id: 'entity:node'
property_path: title
type: text
- boost: !!float 2
dependencies:
module:
- node
@@ -335,24 +334,12 @@ processor_settings:
- field_recruitment_id
- field_search_id
- langcode
- - title
language_with_fallback: { }
- number_field_boost:
- weights:
- preprocess_index: 0
- boosts: { }
project_execution_schedule: { }
project_image_absolute_url: { }
project_plan_schedule: { }
rendered_item: { }
reverse_entity_references: { }
- tokenizer:
- all_fields: false
- fields: { }
- spaces: ''
- ignored: ._-
- overlap_cjk: 1
- minimum_word_size: '3'
tracker_settings:
default:
indexing_order: fifo
diff --git a/docker-compose.yml b/docker-compose.yml
index e8b20509..c9be64c7 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -82,22 +82,6 @@ services:
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-varnish.tls=true"
- "traefik.http.services.${COMPOSE_PROJECT_NAME}-varnish.loadbalancer.server.port=6081"
- "traefik.docker.network=stonehenge-network"
- robo:
- image: ghcr.io/city-of-helsinki/drupal-robo:latest
- shm_size: '2gb'
- tty: true
- volumes:
- - .:/app:delegated
- networks:
- - internal
- - stonehenge-network
- depends_on:
- - app
- profiles:
- - testing
- extra_hosts:
- - "${DRUPAL_HOSTNAME}:host-gateway"
- - "varnish-${DRUPAL_HOSTNAME}:host-gateway"
networks:
internal:
external: false
diff --git a/docker/openshift/crons/base.sh b/docker/openshift/crons/base.sh
index e42f5b5b..6844e8ab 100644
--- a/docker/openshift/crons/base.sh
+++ b/docker/openshift/crons/base.sh
@@ -1,5 +1,23 @@
#!/bin/bash
+# Checking if a new deployment is in progress, as we should not run cron while deploying.
+if [ ! -n "$OPENSHIFT_BUILD_NAME" ]; then
+ echo "OPENSHIFT_BUILD_NAME is not defined. Exiting early."
+ exit 1
+fi
+
+while [ "$(drush state:get deploy_id)" != "$OPENSHIFT_BUILD_NAME" ]
+do
+ echo "Current deploy_id $OPENSHIFT_BUILD_NAME not found in state. Probably a deployment is in progress - waiting for completion..."
+ sleep 60
+done
+
+while [ "$(drush state:get system.maintenance_mode)" = "1" ]
+do
+ echo "Maintenance mode on. Probably a deployment is in progress - waiting for completion..."
+ sleep 60
+done
+
echo "Starting cron: $(date)"
# You can add any additional cron "daemons" here:
@@ -27,6 +45,7 @@ exec "/crons/content-scheduler.sh" &
# Job listing migration cron
exec "/crons/migrate-job-listings.sh" &
exec "/crons/migrate-changed-job-listings.sh" &
+exec "/crons/pubsub.sh" &
while true
do
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 603e6d95..0ae082a9 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -16,7 +16,7 @@
-
+
@@ -41,9 +41,13 @@
./tests/dtt/src/ExistingSite
+ ./public/modules/custom/*/tests/src/ExistingSite
+ ./public/modules/contrib/*/tests/src/ExistingSite
./tests/dtt/src/ExistingSiteJavascript
+ ./public/modules/custom/*/tests/src/ExistingSiteJavascript
+ ./public/modules/contrib/*/tests/src/ExistingSiteJavascript
diff --git a/public/modules/custom/helfi_rekry_content/helfi_rekry_content.services.yml b/public/modules/custom/helfi_rekry_content/helfi_rekry_content.services.yml
index 174cf26d..3c763898 100644
--- a/public/modules/custom/helfi_rekry_content/helfi_rekry_content.services.yml
+++ b/public/modules/custom/helfi_rekry_content/helfi_rekry_content.services.yml
@@ -15,7 +15,7 @@ services:
- { name: 'event_subscriber' }
helfi_rekry_content.job_listing_redirect_subscriber:
class: Drupal\helfi_rekry_content\EventSubscriber\JobListingRedirectSubscriber
- arguments: ['@config.factory', '@current_user']
+ arguments: ['@config.factory', '@current_user', '@entity_type.manager']
tags:
- { name: 'event_subscriber' }
logger.channel.helfi_rekry_content:
diff --git a/public/modules/custom/helfi_rekry_content/src/EventSubscriber/JobListingRedirectSubscriber.php b/public/modules/custom/helfi_rekry_content/src/EventSubscriber/JobListingRedirectSubscriber.php
index 5b917ae6..618668dc 100644
--- a/public/modules/custom/helfi_rekry_content/src/EventSubscriber/JobListingRedirectSubscriber.php
+++ b/public/modules/custom/helfi_rekry_content/src/EventSubscriber/JobListingRedirectSubscriber.php
@@ -5,15 +5,16 @@
namespace Drupal\helfi_rekry_content\EventSubscriber;
use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\EventSubscriber\HttpExceptionSubscriberBase;
+use Drupal\Core\Routing\TrustedRedirectResponse;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\node\NodeInterface;
-use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
/**
- * Redirect job listing 403s for anonymous users.
+ * Http exception event subscribers for job listings.
*/
class JobListingRedirectSubscriber extends HttpExceptionSubscriberBase {
@@ -24,10 +25,13 @@ class JobListingRedirectSubscriber extends HttpExceptionSubscriberBase {
* The configuration factory.
* @param \Drupal\Core\Session\AccountInterface $currentUser
* The current user.
+ * @param \Drupal\Core\Entity\EntityTypeManager $entityTypeManager
+ * The entity type manager.
*/
public function __construct(
protected ConfigFactoryInterface $configFactory,
- protected AccountInterface $currentUser
+ protected AccountInterface $currentUser,
+ protected EntityTypeManager $entityTypeManager,
) {}
/**
@@ -65,8 +69,54 @@ public function on403(ExceptionEvent $event): void {
$url = Url::fromRoute('entity.node.canonical', ['node' => $redirectNode])->toString();
- // Set temporary redirect.
- $response = new RedirectResponse($url, 307);
+ // Set status code to 410.
+ $response = new TrustedRedirectResponse($url);
+ $response->setStatusCode(410);
+ $event->setResponse($response);
+ }
+
+ /**
+ * The 404 exception listener.
+ *
+ * #UHF8946 External service's automation is only capable of creating links to
+ * finnish job listings. If finnish translation doesn't exist the user will be
+ * automatically redirected to existing translation with matching job ID.
+ *
+ * @param \Symfony\Component\HttpKernel\Event\ExceptionEvent $event
+ * The Event to process.
+ */
+ public function on404(ExceptionEvent $event) : void {
+ $uri = $event->getRequest()->getRequestUri();
+ $redirectPaths = [
+ 'fi' => 'avoimet-tyopaikat/avoimet-tyopaikat/',
+ 'sv' => 'lediga-jobb/lediga-jobb/',
+ 'en' => 'open-jobs/open-jobs/',
+ ];
+
+ $redirectFrom = NULL;
+ foreach ($redirectPaths as $path) {
+ if (str_contains($uri, $path)) {
+ $redirectFrom = $path;
+ break;
+ }
+ }
+
+ if (!$redirectFrom) {
+ return;
+ }
+
+ $recruitmentId = array_reverse(explode('/', $uri))[0];
+ $nodes = $this->entityTypeManager
+ ->getStorage('node')
+ ->loadByProperties(['field_recruitment_id' => $recruitmentId]);
+
+ if (!$nodes || !$node = reset($nodes)) {
+ return;
+ }
+
+ $url = $node->toUrl('canonical', ['language' => $node->language()])->toString();
+ $response = new TrustedRedirectResponse($url);
+ $response->addCacheableDependency($url);
$event->setResponse($response);
}
diff --git a/public/modules/custom/helfi_rekry_content/tests/dtt/src/ExistingSite/JoblistingRedirectTest.php b/public/modules/custom/helfi_rekry_content/tests/dtt/src/ExistingSite/JoblistingRedirectTest.php
new file mode 100644
index 00000000..64aaa966
--- /dev/null
+++ b/public/modules/custom/helfi_rekry_content/tests/dtt/src/ExistingSite/JoblistingRedirectTest.php
@@ -0,0 +1,35 @@
+createNode([
+ 'type' => 'job_listing',
+ 'langcode' => 'sv',
+ 'title' => 'en jobb',
+ 'field_recruitment_id' => 'TESTI-1234-56-7890',
+ ]);
+
+ $path = $node->toUrl()->toString();
+ $recruitmentId = array_reverse(explode('/', $path))[0];
+
+ $this->drupalGetWithLanguage("/fi/avoimet-tyopaikat/avoimet-tyopaikat/$recruitmentId", 'fi');
+ $url = $this->getSession()->getCurrentUrl();
+ $this->assertTrue(str_ends_with($url, '/sv/lediga-jobb/lediga-jobb/testi-1234-56-7890'));
+ }
+
+}