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')); + } + +}