'
+ filter_html_help: true
+ filter_html_nofollow: false
filter_html_escape:
id: filter_html_escape
provider: filter
@@ -74,11 +54,11 @@ filters:
status: false
weight: -40
settings: { }
- helfi_link_converter:
- id: helfi_link_converter
- provider: helfi_api_base
+ filter_htmlcorrector:
+ id: filter_htmlcorrector
+ provider: filter
status: true
- weight: -10
+ weight: -45
settings: { }
filter_image_lazy_load:
id: filter_image_lazy_load
@@ -86,3 +66,23 @@ filters:
status: true
weight: -42
settings: { }
+ filter_url:
+ id: filter_url
+ provider: filter
+ status: true
+ weight: -49
+ settings:
+ filter_url_length: 120
+ helfi_link_converter:
+ id: helfi_link_converter
+ provider: helfi_api_base
+ status: true
+ weight: -10
+ settings: { }
+ linkit:
+ id: linkit
+ provider: linkit
+ status: true
+ weight: -48
+ settings:
+ title: true
diff --git a/modules/helfi_ckeditor/config/install/filter.format.minimal.yml b/modules/helfi_ckeditor/config/install/filter.format.minimal.yml
index 0b52bfd53..38b66c672 100644
--- a/modules/helfi_ckeditor/config/install/filter.format.minimal.yml
+++ b/modules/helfi_ckeditor/config/install/filter.format.minimal.yml
@@ -42,12 +42,6 @@ filters:
allowed_html: '
- '
filter_html_help: true
filter_html_nofollow: false
- filter_htmlcorrector:
- id: filter_htmlcorrector
- provider: filter
- status: true
- weight: -40
- settings: { }
filter_html_escape:
id: filter_html_escape
provider: filter
@@ -60,6 +54,18 @@ filters:
status: false
weight: -42
settings: { }
+ filter_htmlcorrector:
+ id: filter_htmlcorrector
+ provider: filter
+ status: true
+ weight: -40
+ settings: { }
+ filter_image_lazy_load:
+ id: filter_image_lazy_load
+ provider: filter
+ status: true
+ weight: -47
+ settings: { }
filter_url:
id: filter_url
provider: filter
@@ -67,22 +73,16 @@ filters:
weight: -46
settings:
filter_url_length: 120
- linkit:
- id: linkit
- provider: linkit
- status: true
- weight: -44
- settings:
- title: true
helfi_link_converter:
id: helfi_link_converter
provider: helfi_api_base
status: true
weight: -10
settings: { }
- filter_image_lazy_load:
- id: filter_image_lazy_load
- provider: filter
+ linkit:
+ id: linkit
+ provider: linkit
status: true
- weight: -47
- settings: { }
+ weight: -44
+ settings:
+ title: true
diff --git a/modules/helfi_ckeditor/config/rewrite/filter.format.plain_text.yml b/modules/helfi_ckeditor/config/rewrite/filter.format.plain_text.yml
index 044cc3b3a..ff0d9b5cc 100644
--- a/modules/helfi_ckeditor/config/rewrite/filter.format.plain_text.yml
+++ b/modules/helfi_ckeditor/config/rewrite/filter.format.plain_text.yml
@@ -7,6 +7,12 @@ name: 'Plain text'
format: plain_text
weight: 10
filters:
+ filter_autop:
+ id: filter_autop
+ provider: filter
+ status: true
+ weight: 0
+ settings: { }
filter_html_escape:
id: filter_html_escape
provider: filter
@@ -20,12 +26,6 @@ filters:
weight: 0
settings:
filter_url_length: 120
- filter_autop:
- id: filter_autop
- provider: filter
- status: true
- weight: 0
- settings: { }
helfi_link_converter:
id: helfi_link_converter
provider: helfi_api_base
diff --git a/modules/helfi_eu_cookie_compliance/src/Controller/CookieConsentController.php b/modules/helfi_eu_cookie_compliance/src/Controller/CookieConsentController.php
index 71671a5a4..5214621b7 100644
--- a/modules/helfi_eu_cookie_compliance/src/Controller/CookieConsentController.php
+++ b/modules/helfi_eu_cookie_compliance/src/Controller/CookieConsentController.php
@@ -9,7 +9,7 @@
/**
* Defines CookieConsentController class.
*/
-class CookieConsentController extends ControllerBase {
+final class CookieConsentController extends ControllerBase {
/**
* Constructs a new instance.
diff --git a/modules/helfi_media/config/install/core.entity_view_mode.media.image.yml b/modules/helfi_media/config/install/core.entity_view_mode.media.image.yml
index a4540ca0b..6872fc182 100644
--- a/modules/helfi_media/config/install/core.entity_view_mode.media.image.yml
+++ b/modules/helfi_media/config/install/core.entity_view_mode.media.image.yml
@@ -5,5 +5,6 @@ dependencies:
- media
id: media.image
label: Image
+description: ''
targetEntityType: media
cache: true
diff --git a/modules/helfi_media/config/rewrite/views.view.media_library.yml b/modules/helfi_media/config/rewrite/views.view.media_library.yml
index 8234965cf..9c2dbf339 100644
--- a/modules/helfi_media/config/rewrite/views.view.media_library.yml
+++ b/modules/helfi_media/config/rewrite/views.view.media_library.yml
@@ -473,13 +473,13 @@ display:
cache_metadata:
max-age: 0
contexts:
- - 'languages:language_content'
- 'languages:language_interface'
- url
- url.query_args
- 'url.query_args:sort_by'
- user
- user.permissions
+ - 'languages:language_content'
tags: { }
page:
id: page
@@ -1116,7 +1116,6 @@ display:
default_argument_type: fixed
default_argument_options:
argument: ''
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
@@ -1334,7 +1333,7 @@ display:
image_link: ''
image_style: media_library
image_loading:
- attribute: lazy
+ attribute: eager
name:
id: name
table: media_field_data
@@ -1374,7 +1373,7 @@ display:
custom_date_format: ''
timezone: ''
tooltip:
- date_format: ''
+ date_format: long
custom_date_format: ''
time_diff:
enabled: false
@@ -1407,7 +1406,6 @@ display:
default_argument_type: fixed
default_argument_options:
argument: ''
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
diff --git a/modules/helfi_node_news_item/config/install/core.entity_view_mode.media.image_content_area.yml b/modules/helfi_node_news_item/config/install/core.entity_view_mode.media.image_content_area.yml
index a4eaed9ee..1f723b80b 100644
--- a/modules/helfi_node_news_item/config/install/core.entity_view_mode.media.image_content_area.yml
+++ b/modules/helfi_node_news_item/config/install/core.entity_view_mode.media.image_content_area.yml
@@ -5,5 +5,6 @@ dependencies:
- media
id: media.image_content_area
label: 'Image (content area)'
+description: ''
targetEntityType: media
cache: true
diff --git a/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.card_teaser.yml b/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.card_teaser.yml
index f28da5d50..78cfc6239 100644
--- a/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.card_teaser.yml
+++ b/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.card_teaser.yml
@@ -5,5 +5,6 @@ dependencies:
- node
id: node.card_teaser
label: 'Card Teaser'
+description: ''
targetEntityType: node
cache: true
diff --git a/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.medium_teaser.yml b/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.medium_teaser.yml
index 7792d4544..58750e697 100644
--- a/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.medium_teaser.yml
+++ b/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.medium_teaser.yml
@@ -5,5 +5,6 @@ dependencies:
- node
id: node.medium_teaser
label: 'Medium Teaser'
+description: ''
targetEntityType: node
cache: true
diff --git a/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.tiny_teaser.yml b/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.tiny_teaser.yml
index 2ca7f4af6..8ca797c67 100644
--- a/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.tiny_teaser.yml
+++ b/modules/helfi_node_news_item/config/install/core.entity_view_mode.node.tiny_teaser.yml
@@ -5,5 +5,6 @@ dependencies:
- node
id: node.tiny_teaser
label: 'Tiny Teaser'
+description: ''
targetEntityType: node
cache: true
diff --git a/modules/helfi_node_news_item/config/optional/language/fi/views.view.news.yml b/modules/helfi_node_news_item/config/optional/language/fi/views.view.news.yml
index fb82087f3..58b14e8f6 100644
--- a/modules/helfi_node_news_item/config/optional/language/fi/views.view.news.yml
+++ b/modules/helfi_node_news_item/config/optional/language/fi/views.view.news.yml
@@ -10,8 +10,6 @@ display:
sort_asc_label: Nousevasti
sort_desc_label: Laskevasti
fields:
- published_at: { }
- field_main_image: { }
view_node:
text: näkymä
title: 'Uusimmat uutiset'
diff --git a/modules/helfi_node_news_item/config/optional/language/sv/views.view.news.yml b/modules/helfi_node_news_item/config/optional/language/sv/views.view.news.yml
index 84f4ee27f..6689af631 100644
--- a/modules/helfi_node_news_item/config/optional/language/sv/views.view.news.yml
+++ b/modules/helfi_node_news_item/config/optional/language/sv/views.view.news.yml
@@ -9,8 +9,6 @@ display:
sort_asc_label: Stigande
sort_desc_label: Fallande
fields:
- published_at: { }
- field_main_image: { }
view_node:
text: visa
title: 'Senaste nyheterna'
diff --git a/modules/helfi_node_news_item/config/optional/views.view.news.yml b/modules/helfi_node_news_item/config/optional/views.view.news.yml
index a6d58c5e6..43cff22e5 100644
--- a/modules/helfi_node_news_item/config/optional/views.view.news.yml
+++ b/modules/helfi_node_news_item/config/optional/views.view.news.yml
@@ -276,7 +276,6 @@ display:
title: ''
default_argument_type: node
default_argument_options: { }
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
diff --git a/modules/helfi_paragraphs_content_cards/config/install/core.entity_view_mode.media.content_card.yml b/modules/helfi_paragraphs_content_cards/config/install/core.entity_view_mode.media.content_card.yml
index bdb08f599..bcff28999 100644
--- a/modules/helfi_paragraphs_content_cards/config/install/core.entity_view_mode.media.content_card.yml
+++ b/modules/helfi_paragraphs_content_cards/config/install/core.entity_view_mode.media.content_card.yml
@@ -5,5 +5,6 @@ dependencies:
- media
id: media.content_card
label: 'Content card'
+description: ''
targetEntityType: media
cache: true
diff --git a/modules/helfi_paragraphs_hero/config/install/core.entity_view_mode.media.hero.yml b/modules/helfi_paragraphs_hero/config/install/core.entity_view_mode.media.hero.yml
index 1f2870816..5a0d44ab6 100644
--- a/modules/helfi_paragraphs_hero/config/install/core.entity_view_mode.media.hero.yml
+++ b/modules/helfi_paragraphs_hero/config/install/core.entity_view_mode.media.hero.yml
@@ -5,5 +5,6 @@ dependencies:
- media
id: media.hero
label: Hero
+description: ''
targetEntityType: media
cache: true
diff --git a/modules/helfi_paragraphs_list_of_links/config/install/core.entity_view_mode.media.list_of_links.yml b/modules/helfi_paragraphs_list_of_links/config/install/core.entity_view_mode.media.list_of_links.yml
index 8ce1a1166..a3cb1cc21 100644
--- a/modules/helfi_paragraphs_list_of_links/config/install/core.entity_view_mode.media.list_of_links.yml
+++ b/modules/helfi_paragraphs_list_of_links/config/install/core.entity_view_mode.media.list_of_links.yml
@@ -5,5 +5,6 @@ dependencies:
- media
id: media.list_of_links
label: 'List of Links'
+description: ''
targetEntityType: media
cache: true
diff --git a/modules/helfi_paragraphs_news_list/config/optional/core.entity_view_mode.helfi_news.medium_teaser.yml b/modules/helfi_paragraphs_news_list/config/optional/core.entity_view_mode.helfi_news.medium_teaser.yml
index fd65a1952..39c5edf8c 100644
--- a/modules/helfi_paragraphs_news_list/config/optional/core.entity_view_mode.helfi_news.medium_teaser.yml
+++ b/modules/helfi_paragraphs_news_list/config/optional/core.entity_view_mode.helfi_news.medium_teaser.yml
@@ -5,5 +5,6 @@ dependencies:
- external_entities
id: helfi_news.medium_teaser
label: 'Medium Teaser'
+description: ''
targetEntityType: helfi_news
cache: true
diff --git a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser.yml b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser.yml
index 00ce771ff..e984ab14e 100644
--- a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser.yml
+++ b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser.yml
@@ -5,5 +5,6 @@ dependencies:
- helfi_tpr
id: tpr_service.teaser
label: Teaser
+description: ''
targetEntityType: tpr_service
cache: true
diff --git a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser_search_result.yml b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser_search_result.yml
index 2cda57583..3205bc2c2 100644
--- a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser_search_result.yml
+++ b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_service.teaser_search_result.yml
@@ -5,5 +5,6 @@ dependencies:
- helfi_tpr
id: tpr_service.teaser_search_result
label: 'Teaser search result'
+description: ''
targetEntityType: tpr_service
cache: true
diff --git a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.minimal.yml b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.minimal.yml
index eedaea636..34325b9d6 100644
--- a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.minimal.yml
+++ b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.minimal.yml
@@ -5,5 +5,6 @@ dependencies:
- helfi_tpr
id: tpr_unit.minimal
label: Minimal
+description: ''
targetEntityType: tpr_unit
cache: true
diff --git a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser.yml b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser.yml
index 23b1bb607..2281ef39f 100644
--- a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser.yml
+++ b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser.yml
@@ -5,5 +5,6 @@ dependencies:
- helfi_tpr
id: tpr_unit.teaser
label: Teaser
+description: ''
targetEntityType: tpr_unit
cache: true
diff --git a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser_with_image.yml b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser_with_image.yml
index f812e3c5f..9dce5e432 100644
--- a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser_with_image.yml
+++ b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.teaser_with_image.yml
@@ -5,5 +5,6 @@ dependencies:
- helfi_tpr
id: tpr_unit.teaser_with_image
label: 'Teaser with image'
+description: ''
targetEntityType: tpr_unit
cache: true
diff --git a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.token.yml b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.token.yml
index a4a8bd979..1efd3135e 100644
--- a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.token.yml
+++ b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.token.yml
@@ -5,5 +5,6 @@ dependencies:
- helfi_tpr
id: tpr_unit.token
label: Token
+description: ''
targetEntityType: tpr_unit
cache: true
diff --git a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.wide_teaser.yml b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.wide_teaser.yml
index 55d1a37dc..5b8e6bade 100644
--- a/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.wide_teaser.yml
+++ b/modules/helfi_tpr_config/config/install/core.entity_view_mode.tpr_unit.wide_teaser.yml
@@ -5,5 +5,6 @@ dependencies:
- helfi_tpr
id: tpr_unit.wide_teaser
label: 'Wide Teaser'
+description: ''
targetEntityType: tpr_unit
cache: true
diff --git a/modules/helfi_tpr_config/config/install/views.view.er_tpr_unit.yml b/modules/helfi_tpr_config/config/install/views.view.er_tpr_unit.yml
index 3400be586..b6d7051ee 100644
--- a/modules/helfi_tpr_config/config/install/views.view.er_tpr_unit.yml
+++ b/modules/helfi_tpr_config/config/install/views.view.er_tpr_unit.yml
@@ -169,7 +169,6 @@ display:
title: ''
default_argument_type: node
default_argument_options: { }
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
diff --git a/modules/helfi_tpr_config/config/install/views.view.service_list.yml b/modules/helfi_tpr_config/config/install/views.view.service_list.yml
index bcbb6bdc1..bfa4a8e14 100644
--- a/modules/helfi_tpr_config/config/install/views.view.service_list.yml
+++ b/modules/helfi_tpr_config/config/install/views.view.service_list.yml
@@ -206,7 +206,6 @@ display:
default_argument_type: fixed
default_argument_options:
argument: ''
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
@@ -721,7 +720,6 @@ display:
default_argument_type: fixed
default_argument_options:
argument: ''
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
diff --git a/modules/helfi_tpr_config/config/install/views.view.service_units.yml b/modules/helfi_tpr_config/config/install/views.view.service_units.yml
index a8976a52f..4398418b8 100644
--- a/modules/helfi_tpr_config/config/install/views.view.service_units.yml
+++ b/modules/helfi_tpr_config/config/install/views.view.service_units.yml
@@ -178,7 +178,6 @@ display:
default_argument_options:
index: 1
use_alias: false
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
diff --git a/modules/helfi_tpr_config/config/install/views.view.unit_search.yml b/modules/helfi_tpr_config/config/install/views.view.unit_search.yml
index 4128d6f73..3cbf23390 100644
--- a/modules/helfi_tpr_config/config/install/views.view.unit_search.yml
+++ b/modules/helfi_tpr_config/config/install/views.view.unit_search.yml
@@ -382,7 +382,6 @@ display:
title: ''
default_argument_type: node
default_argument_options: { }
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
diff --git a/modules/helfi_tpr_config/config/install/views.view.unit_services.yml b/modules/helfi_tpr_config/config/install/views.view.unit_services.yml
index 88c55daa1..0eb6f21ce 100644
--- a/modules/helfi_tpr_config/config/install/views.view.unit_services.yml
+++ b/modules/helfi_tpr_config/config/install/views.view.unit_services.yml
@@ -148,7 +148,6 @@ display:
default_argument_options:
index: 1
use_alias: false
- default_argument_skip_url: false
summary_options:
base_path: ''
count: true
diff --git a/modules/helfi_tpr_config/config/optional/language/fi/views.view.er_tpr_unit.yml b/modules/helfi_tpr_config/config/optional/language/fi/views.view.er_tpr_unit.yml
index 2d291e0a5..97d4738f3 100644
--- a/modules/helfi_tpr_config/config/optional/language/fi/views.view.er_tpr_unit.yml
+++ b/modules/helfi_tpr_config/config/optional/language/fi/views.view.er_tpr_unit.yml
@@ -2,8 +2,6 @@ display:
default:
display_title: Oletus
display_options:
- fields:
- name: { }
pager:
options:
tags:
@@ -30,8 +28,3 @@ display:
title: Kaikki
entity_reference:
display_title: Entiteettiviittaus
- display_options:
- fields:
- name_override: { }
- id: { }
- name: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_list.yml b/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_list.yml
index 0f5493551..f2b2fd0db 100644
--- a/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_list.yml
+++ b/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_list.yml
@@ -3,8 +3,6 @@ display:
default:
display_title: Oletus
display_options:
- fields:
- name: { }
pager:
options:
tags:
@@ -31,14 +29,8 @@ display:
id:
exception:
title: Kaikki
- block: { }
block_search:
display_options:
- fields:
- name: { }
- name_synonyms: { }
- description__summary: { }
- name_override: { }
pager:
options:
tags:
@@ -68,8 +60,3 @@ display:
title: Palveluluettelohaku
entity_reference_1:
display_title: Entiteettiviittaus
- display_options:
- fields:
- name_override: { }
- id: { }
- name: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_units.yml b/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_units.yml
index 562863ea4..80ef379d9 100644
--- a/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_units.yml
+++ b/modules/helfi_tpr_config/config/optional/language/fi/views.view.service_units.yml
@@ -2,8 +2,6 @@ display:
default:
display_title: Oletus
display_options:
- fields:
- name: { }
pager:
options:
tags:
@@ -25,4 +23,3 @@ display:
id:
exception:
title: Kaikki
- service_units: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_search.yml b/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_search.yml
index 3db501b9c..b07cb786b 100644
--- a/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_search.yml
+++ b/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_search.yml
@@ -5,15 +5,9 @@ display:
combine:
group_info:
label: 'Kentät yhdistävä suodatin'
- description: ''
expose:
label: Etsi
placeholder: 'Syötä toimipisteen nimi tai osoite'
- fields:
- name: { }
- address__postal_code: { }
- address__address_line1: { }
- address__address_line2: { }
pager:
options:
tags:
@@ -45,9 +39,4 @@ display:
display_title: Lohko
entity_reference:
display_title: Entiteettiviittaus
- display_options:
- fields:
- name_override: { }
- id: { }
- name: { }
label: Toimipistehaku
diff --git a/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_services.yml b/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_services.yml
index 1ab316ad1..aa3183d7a 100644
--- a/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_services.yml
+++ b/modules/helfi_tpr_config/config/optional/language/fi/views.view.unit_services.yml
@@ -13,4 +13,3 @@ display:
exception:
title: Kaikki
display_title: Oletus
- unit_services: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/sv/views.view.er_tpr_unit.yml b/modules/helfi_tpr_config/config/optional/language/sv/views.view.er_tpr_unit.yml
index 7f3103c84..ef9dad283 100644
--- a/modules/helfi_tpr_config/config/optional/language/sv/views.view.er_tpr_unit.yml
+++ b/modules/helfi_tpr_config/config/optional/language/sv/views.view.er_tpr_unit.yml
@@ -2,11 +2,8 @@ display:
default:
display_title: Förvald
display_options:
- fields:
- name: { }
pager:
options:
- tags: { }
expose:
items_per_page_label: 'Inlägg per sida'
items_per_page_options_all_label: '- Alla -'
@@ -29,8 +26,3 @@ display:
title: Alla
entity_reference:
display_title: Objektsreferens
- display_options:
- fields:
- name_override: { }
- id: { }
- name: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_list.yml b/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_list.yml
index 71e198a12..154c39941 100644
--- a/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_list.yml
+++ b/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_list.yml
@@ -2,8 +2,6 @@ display:
default:
display_title: Förvald
display_options:
- fields:
- name: { }
pager:
options:
tags:
@@ -31,14 +29,8 @@ display:
id:
exception:
title: Alla
- block: { }
block_search:
display_options:
- fields:
- name: { }
- name_synonyms: { }
- description__summary: { }
- name_override: { }
pager:
options:
tags:
@@ -68,8 +60,3 @@ display:
placeholder: 't.ex. Socialrådgivning, hälsa eller digitalt Sök'
entity_reference_1:
display_title: Objektsreferens
- display_options:
- fields:
- name_override: { }
- id: { }
- name: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_units.yml b/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_units.yml
index 7d61ff98b..8fd07e5bd 100644
--- a/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_units.yml
+++ b/modules/helfi_tpr_config/config/optional/language/sv/views.view.service_units.yml
@@ -2,8 +2,6 @@ display:
default:
display_title: Förvald
display_options:
- fields:
- name: { }
pager:
options:
tags:
@@ -26,4 +24,3 @@ display:
id:
exception:
title: Alla
- service_units: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_search.yml b/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_search.yml
index b73bab98d..7c64fcf1b 100644
--- a/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_search.yml
+++ b/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_search.yml
@@ -2,11 +2,6 @@ display:
default:
display_title: Förvald
display_options:
- fields:
- name: { }
- address__postal_code: { }
- address__address_line1: { }
- address__address_line2: { }
pager:
options:
tags:
@@ -40,12 +35,5 @@ display:
label: Sök
group_info:
label: 'Kombinera filterfält'
- description: ''
- block: { }
entity_reference:
display_title: Objektsreferens
- display_options:
- fields:
- name_override: { }
- id: { }
- name: { }
diff --git a/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_services.yml b/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_services.yml
index 4028df7a3..d7b5d4dd9 100644
--- a/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_services.yml
+++ b/modules/helfi_tpr_config/config/optional/language/sv/views.view.unit_services.yml
@@ -13,4 +13,3 @@ display:
exception:
title: Alla
display_title: Förvald
- unit_services: { }
diff --git a/patches/drupal-2313309-render-admin-toolbar-with-admin-language.patch b/patches/drupal-2313309-render-admin-toolbar-with-admin-language.patch
deleted file mode 100644
index 5265e7f21..000000000
--- a/patches/drupal-2313309-render-admin-toolbar-with-admin-language.patch
+++ /dev/null
@@ -1,806 +0,0 @@
-diff --git a/core/core.services.yml b/core/core.services.yml
-index e3c1e094a2..fddf15bc5a 100644
---- a/core/core.services.yml
-+++ b/core/core.services.yml
-@@ -155,6 +155,11 @@ services:
- arguments: ['@current_user']
- tags:
- - { name: cache.context}
-+ cache_context.user.admin_language:
-+ class: Drupal\Core\Cache\Context\AccountAdminLanguageCacheContext
-+ arguments: [ '@current_user' ]
-+ tags:
-+ - { name: cache.context }
- cache_context.user.permissions:
- class: Drupal\Core\Cache\Context\AccountPermissionsCacheContext
- arguments: ['@current_user', '@user_permissions_hash_generator']
-diff --git a/core/lib/Drupal/Core/Cache/Context/AccountAdminLanguageCacheContext.php b/core/lib/Drupal/Core/Cache/Context/AccountAdminLanguageCacheContext.php
-new file mode 100644
-index 0000000000..c827e14738
---- /dev/null
-+++ b/core/lib/Drupal/Core/Cache/Context/AccountAdminLanguageCacheContext.php
-@@ -0,0 +1,53 @@
-+currentUser = $current_user;
-+ }
-+
-+ /**
-+ * {@inheritdoc}
-+ */
-+ public static function getLabel() {
-+ return t("Account's administration language");
-+ }
-+
-+ /**
-+ * {@inheritdoc}
-+ */
-+ public function getContext() {
-+ return $this->currentUser->getPreferredAdminLangcode();
-+ }
-+
-+ /**
-+ * {@inheritdoc}
-+ */
-+ public function getCacheableMetadata() {
-+ return new CacheableMetadata();
-+ }
-+
-+}
-diff --git a/core/misc/cspell/dictionary.txt b/core/misc/cspell/dictionary.txt
-index 85c72239cf..83a98f5807 100644
---- a/core/misc/cspell/dictionary.txt
-+++ b/core/misc/cspell/dictionary.txt
-@@ -415,6 +415,8 @@ enim
- enoki
- enregistrer
- entit
-+entitynodedelete
-+entitynodeedit
- entitytype
- entityviewedit
- eridani
-diff --git a/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php b/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
-index 985d4c44c3..8a394c45b0 100644
---- a/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
-+++ b/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
-@@ -387,9 +387,9 @@ public function testBlockContextualLinks() {
- $cached_block = $this->drupalPlaceBlock('views_block:test_view_block-block_1');
- $this->drupalGet('test-page');
-
-- $id = 'block:block=' . $block->id() . ':langcode=en|entity.view.edit_form:view=test_view_block:location=block&name=test_view_block&display_id=block_1&langcode=en';
-+ $id = 'block:block=' . $block->id() . ':langcode=en&admin_langcode=en|entity.view.edit_form:view=test_view_block:location=block&name=test_view_block&display_id=block_1&langcode=en&admin_langcode=en';
- $id_token = Crypt::hmacBase64($id, Settings::getHashSalt() . $this->container->get('private_key')->get());
-- $cached_id = 'block:block=' . $cached_block->id() . ':langcode=en|entity.view.edit_form:view=test_view_block:location=block&name=test_view_block&display_id=block_1&langcode=en';
-+ $cached_id = 'block:block=' . $cached_block->id() . ':langcode=en&admin_langcode=en|entity.view.edit_form:view=test_view_block:location=block&name=test_view_block&display_id=block_1&langcode=en&admin_langcode=en';
- $cached_id_token = Crypt::hmacBase64($cached_id, Settings::getHashSalt() . $this->container->get('private_key')->get());
- // @see \Drupal\contextual\Tests\ContextualDynamicContextTest:assertContextualLinkPlaceHolder()
- // Check existence of the contextual link placeholders.
-diff --git a/core/modules/block_content/tests/src/Functional/BlockContentContextualLinksTest.php b/core/modules/block_content/tests/src/Functional/BlockContentContextualLinksTest.php
-index 16e147d99c..c2ce954c19 100644
---- a/core/modules/block_content/tests/src/Functional/BlockContentContextualLinksTest.php
-+++ b/core/modules/block_content/tests/src/Functional/BlockContentContextualLinksTest.php
-@@ -36,7 +36,7 @@ public function testBlockContentContextualLinks() {
- $this->drupalLogin($user);
-
- $this->drupalGet('');
-- $this->assertSession()->elementAttributeContains('css', 'div[data-contextual-id]', 'data-contextual-id', 'block:block=' . $block->id() . ':langcode=en|block_content:block_content=' . $block_content->id() . ':');
-+ $this->assertSession()->elementAttributeContains('css', 'div[data-contextual-id]', 'data-contextual-id', 'block:block=' . $block->id() . ':langcode=en&admin_langcode=en|block_content:block_content=' . $block_content->id() . ':');
- }
-
- }
-diff --git a/core/modules/contextual/contextual.module b/core/modules/contextual/contextual.module
-index 5e0b67826c..abf90ffb5e 100644
---- a/core/modules/contextual/contextual.module
-+++ b/core/modules/contextual/contextual.module
-@@ -174,13 +174,15 @@ function contextual_contextual_links_view_alter(&$element, $items) {
- function _contextual_links_to_id($contextual_links) {
- $ids = [];
- $langcode = \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_URL)->getId();
-+ $admin_langcode = \Drupal::currentUser()->getPreferredAdminLangcode();
- foreach ($contextual_links as $group => $args) {
- $route_parameters = UrlHelper::buildQuery($args['route_parameters']);
- $args += ['metadata' => []];
- // Add the current URL language to metadata so a different ID will be
- // computed when URLs vary by language. This allows to store different
-- // language-aware contextual links on the client side.
-- $args['metadata'] += ['langcode' => $langcode];
-+ // language-aware contextual links on the client side. Add the admin
-+ // language as the link text can vary by that.
-+ $args['metadata'] += ['langcode' => $langcode, 'admin_langcode' => $admin_langcode];
- $metadata = UrlHelper::buildQuery($args['metadata']);
- $ids[] = "{$group}:{$route_parameters}:{$metadata}";
- }
-diff --git a/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php b/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
-index f1fb389b0d..62843072e6 100644
---- a/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
-+++ b/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
-@@ -101,10 +101,10 @@ public function testDifferentPermissions() {
- // Now, on the front page, all article nodes should have contextual links
- // placeholders, as should the view that contains them.
- $ids = [
-- 'node:node=' . $node1->id() . ':changed=' . $node1->getChangedTime() . '&langcode=en',
-- 'node:node=' . $node2->id() . ':changed=' . $node2->getChangedTime() . '&langcode=en',
-- 'node:node=' . $node3->id() . ':changed=' . $node3->getChangedTime() . '&langcode=en',
-- 'entity.view.edit_form:view=frontpage:location=page&name=frontpage&display_id=page_1&langcode=en',
-+ 'node:node=' . $node1->id() . ':changed=' . $node1->getChangedTime() . '&langcode=en&admin_langcode=en',
-+ 'node:node=' . $node2->id() . ':changed=' . $node2->getChangedTime() . '&langcode=en&admin_langcode=en',
-+ 'node:node=' . $node3->id() . ':changed=' . $node3->getChangedTime() . '&langcode=en&admin_langcode=en',
-+ 'entity.view.edit_form:view=frontpage:location=page&name=frontpage&display_id=page_1&langcode=en&admin_langcode=en',
- ];
-
- // Editor user: can access contextual links and can edit articles.
-@@ -125,7 +125,7 @@ public function testDifferentPermissions() {
-
- // Verify that link language is properly handled.
- $node3->addTranslation('it')->set('title', $this->randomString())->save();
-- $id = 'node:node=' . $node3->id() . ':changed=' . $node3->getChangedTime() . '&langcode=it';
-+ $id = 'node:node=' . $node3->id() . ':changed=' . $node3->getChangedTime() . '&langcode=it&admin_langcode=en';
- $this->drupalGet('node', ['language' => ConfigurableLanguage::createFromLangcode('it')]);
- $this->assertContextualLinkPlaceHolder($id);
-
-@@ -174,7 +174,7 @@ public function testTokenProtection() {
-
- // Now, on the front page, all article nodes should have contextual links
- // placeholders, as should the view that contains them.
-- $id = 'node:node=' . $node1->id() . ':changed=' . $node1->getChangedTime() . '&langcode=en';
-+ $id = 'node:node=' . $node1->id() . ':changed=' . $node1->getChangedTime() . '&langcode=en&admin_langcode=en';
-
- // Editor user: can access contextual links and can edit articles.
- $this->drupalGet('node');
-diff --git a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualTranslationTest.php b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualTranslationTest.php
-new file mode 100644
-index 0000000000..5ad1a1f096
---- /dev/null
-+++ b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualTranslationTest.php
-@@ -0,0 +1,117 @@
-+languageManager = $this->container->get('language_manager');
-+ $this->localeStorage = $this->container->get('locale.storage');
-+
-+ $this->drupalPlaceBlock('local_actions_block');
-+ $this->drupalPlaceBlock('local_tasks_block');
-+
-+ $this->adminUser = $this->createUser([], NULL, TRUE);
-+ $this->drupalLogin($this->adminUser);
-+
-+ $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
-+
-+ ConfigurableLanguage::createFromLangcode('nl')->save();
-+ $this->rebuildContainer();
-+
-+ // Enable the 'Account administration pages' language detection.
-+ $this->drupalGet('admin/config/regional/language/detection');
-+ $this->submitForm(['language_interface[enabled][language-user-admin]' => TRUE], 'Save settings');
-+ }
-+
-+ /**
-+ * Tests that contextual links are shown in the preferred admin language.
-+ */
-+ public function testContextualLinksPreferredAdminLanguage() {
-+ // Create a node and visit the translated page so new translation labels
-+ // are added.
-+ $nl_language = $this->languageManager->getLanguage('nl');
-+ $node1 = $this->drupalCreateNode(['type' => 'page']);
-+ $this->drupalGet($node1->toUrl('canonical', ['language' => $nl_language]));
-+
-+ // Add a translation for the 'Edit' string.
-+ $edit_translation = $this->randomMachineName();
-+ $this->drupalGet('admin/config/regional/translate');
-+ $this->submitForm(['string' => 'Edit', 'langcode' => 'nl'], 'Filter');
-+ $textarea = current($this->xpath('//textarea'));
-+ $lid = (string) $textarea->getAttribute('name');
-+ $this->submitForm([$lid => $edit_translation], 'Save translations');
-+
-+ // Configure a preferred admin language.
-+ $this->adminUser->set('preferred_admin_langcode', 'nl');
-+ $this->adminUser->save();
-+
-+ // The edit link text should be using the translated string.
-+ $this->drupalGet($node1->toUrl('canonical'));
-+ $this->clickContextualLink('article.node', $edit_translation);
-+ $this->assertSession()->addressEquals($node1->toUrl('edit-form'));
-+
-+ // Change the preferred admin language.
-+ $this->adminUser->set('preferred_admin_langcode', 'en');
-+ $this->adminUser->save();
-+
-+ // The edit link text should be using the english string.
-+ $this->drupalGet($node1->toUrl('canonical'));
-+ $this->clickContextualLink('article.node', 'Edit');
-+ $this->assertSession()->addressEquals($node1->toUrl('edit-form'));
-+ }
-+
-+}
-diff --git a/core/modules/contextual/tests/src/Kernel/ContextualUnitTest.php b/core/modules/contextual/tests/src/Kernel/ContextualUnitTest.php
-index dc46bef32a..6050622ff4 100644
---- a/core/modules/contextual/tests/src/Kernel/ContextualUnitTest.php
-+++ b/core/modules/contextual/tests/src/Kernel/ContextualUnitTest.php
-@@ -33,10 +33,10 @@ public function contextualLinksDataProvider(): array {
- 'route_parameters' => [
- 'node' => '14031991',
- ],
-- 'metadata' => ['langcode' => 'en'],
-+ 'metadata' => ['langcode' => 'en', 'admin_langcode' => 'en'],
- ],
- ],
-- 'node:node=14031991:langcode=en',
-+ 'node:node=14031991:langcode=en&admin_langcode=en',
- ];
-
- $tests['one group, multiple dynamic path arguments, no metadata'] = [
-@@ -47,10 +47,10 @@ public function contextualLinksDataProvider(): array {
- 'key' => 'baz',
- 1 => 'qux',
- ],
-- 'metadata' => ['langcode' => 'en'],
-+ 'metadata' => ['langcode' => 'en', 'admin_langcode' => 'en'],
- ],
- ],
-- 'foo:0=bar&key=baz&1=qux:langcode=en',
-+ 'foo:0=bar&key=baz&1=qux:langcode=en&admin_langcode=en',
- ];
-
- $tests['one group, one dynamic path argument, metadata'] = [
-@@ -63,10 +63,11 @@ public function contextualLinksDataProvider(): array {
- 'location' => 'page',
- 'display' => 'page_1',
- 'langcode' => 'en',
-+ 'admin_langcode' => 'en',
- ],
- ],
- ],
-- 'views_ui_edit:view=frontpage:location=page&display=page_1&langcode=en',
-+ 'views_ui_edit:view=frontpage:location=page&display=page_1&langcode=en&admin_langcode=en',
- ];
-
- $tests['multiple groups, multiple dynamic path arguments'] = [
-@@ -75,7 +76,7 @@ public function contextualLinksDataProvider(): array {
- 'route_parameters' => [
- 'node' => '14031991',
- ],
-- 'metadata' => ['langcode' => 'en'],
-+ 'metadata' => ['langcode' => 'en', 'admin_langcode' => 'en'],
- ],
- 'foo' => [
- 'route_parameters' => [
-@@ -83,14 +84,14 @@ public function contextualLinksDataProvider(): array {
- 'key' => 'baz',
- 1 => 'qux',
- ],
-- 'metadata' => ['langcode' => 'en'],
-+ 'metadata' => ['langcode' => 'en', 'admin_langcode' => 'en'],
- ],
- 'edge' => [
- 'route_parameters' => ['20011988'],
-- 'metadata' => ['langcode' => 'en'],
-+ 'metadata' => ['langcode' => 'en', 'admin_langcode' => 'en'],
- ],
- ],
-- 'node:node=14031991:langcode=en|foo:0=bar&key=baz&1=qux:langcode=en|edge:0=20011988:langcode=en',
-+ 'node:node=14031991:langcode=en|foo:0=bar&key=baz&1=qux:langcode=en|edge:0=20011988:langcode=en&admin_langcode=en',
- ];
-
- return $tests;
-diff --git a/core/modules/language/language.module b/core/modules/language/language.module
-index 91641dec56..ff39b7bba7 100644
---- a/core/modules/language/language.module
-+++ b/core/modules/language/language.module
-@@ -16,6 +16,7 @@
- use Drupal\Core\Language\LanguageInterface;
- use Drupal\Core\Routing\RouteMatchInterface;
- use Drupal\Core\Session\AccountInterface;
-+use Drupal\language\AdminLanguageRender;
- use Drupal\language\Entity\ContentLanguageSettings;
- use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI;
- use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl;
-@@ -138,6 +139,14 @@ function language_element_info_alter(&$type) {
- $type['language_select']['#languages'] = LanguageInterface::STATE_CONFIGURABLE;
- $type['language_select']['#multiple'] = FALSE;
- }
-+
-+ // Support rendering the links in the user's preferred admin language.
-+ if (isset($type['toolbar'])) {
-+ $type['toolbar'] = AdminLanguageRender::applyTo($type['toolbar']);
-+ }
-+ if (isset($type['contextual_links'])) {
-+ $type['contextual_links'] = AdminLanguageRender::applyTo($type['contextual_links']);
-+ }
- }
-
- /**
-diff --git a/core/modules/language/language.services.yml b/core/modules/language/language.services.yml
-index 4fda6484c1..23e3da20cc 100644
---- a/core/modules/language/language.services.yml
-+++ b/core/modules/language/language.services.yml
-@@ -24,3 +24,6 @@ services:
- tags:
- - { name: paramconverter }
- lazy: true
-+ language.admin_language_render:
-+ class: Drupal\language\AdminLanguageRender
-+ arguments: ['@language_manager', '@string_translation', '@current_user']
-diff --git a/core/modules/language/src/AdminLanguageRender.php b/core/modules/language/src/AdminLanguageRender.php
-new file mode 100644
-index 0000000000..16d1587479
---- /dev/null
-+++ b/core/modules/language/src/AdminLanguageRender.php
-@@ -0,0 +1,131 @@
-+languageManager = $languageManager;
-+ $this->translationManager = $translationManager;
-+ $this->currentUser = $currentUser;
-+ }
-+
-+ /**
-+ * Adds the render callbacks to a render element.
-+ *
-+ * @param array $type
-+ * A render element that will be altered to switch to the admin language
-+ * while rendering.
-+ *
-+ * @return array
-+ * A renderable array.
-+ */
-+ public static function applyTo(array $type): array {
-+ if (!isset($type['#pre_render'])) {
-+ $type['#pre_render'] = [];
-+ }
-+ if (!isset($type['#post_render'])) {
-+ $type['#post_render'] = [];
-+ }
-+ // Switch to the admin language as early as possible and then switch back as
-+ // late as possible.
-+ array_unshift($type['#pre_render'], 'language.admin_language_render:switchToUserAdminLanguage');
-+ $type['#post_render'][] = 'language.admin_language_render:restoreLanguage';
-+ return $type;
-+ }
-+
-+ /**
-+ * Sets admin language.
-+ *
-+ * @param array $element
-+ * A renderable array.
-+ *
-+ * @return array
-+ * A renderable array.
-+ */
-+ public function switchToUserAdminLanguage(array $element) {
-+ $userAdminLangcode = $this->currentUser->getPreferredAdminLangcode(FALSE);
-+
-+ if ($userAdminLangcode && ($this->currentUser->hasPermission('access administration pages') || $this->currentUser->hasPermission('view the administration theme'))) {
-+ $element['#original_langcode'] = $this->languageManager->getCurrentLanguage()->getId();
-+ $this->languageManager->setCurrentLanguage($this->languageManager->getLanguage($userAdminLangcode));
-+ $this->translationManager->setDefaultLangcode($userAdminLangcode);
-+ $this->languageManager->setConfigOverrideLanguage($this->languageManager->getLanguage($userAdminLangcode));
-+ }
-+
-+ // Add the correct cache contexts in.
-+ $metadata = CacheableMetadata::createFromRenderArray($element);
-+ $metadata->addCacheContexts(['user.admin_language', 'user.permissions']);
-+ $metadata->applyTo($element);
-+
-+ return $element;
-+ }
-+
-+ /**
-+ * Restore original language.
-+ *
-+ * @param \Drupal\Core\Render\Markup $content
-+ * Rendered markup.
-+ * @param array $element
-+ * A renderable array.
-+ *
-+ * @return \Drupal\Core\Render\Markup
-+ * Rendered markup.
-+ */
-+ public function restoreLanguage($content, $element) {
-+ if (isset($element['#original_langcode'])) {
-+ $langcode = $element['#original_langcode'];
-+ $language = $this->languageManager->getLanguage($langcode);
-+ $this->languageManager->setCurrentLanguage($language);
-+ $this->translationManager->setDefaultLangcode($langcode);
-+ $this->languageManager->setConfigOverrideLanguage($language);
-+ }
-+
-+ return $content;
-+ }
-+
-+ /**
-+ * {@inheritdoc}
-+ */
-+ public static function trustedCallbacks() {
-+ return ['switchToUserAdminLanguage', 'restoreLanguage'];
-+ }
-+
-+}
-diff --git a/core/modules/language/src/ConfigurableLanguageManager.php b/core/modules/language/src/ConfigurableLanguageManager.php
-index 9dd65ff495..61f6b9bede 100644
---- a/core/modules/language/src/ConfigurableLanguageManager.php
-+++ b/core/modules/language/src/ConfigurableLanguageManager.php
-@@ -235,6 +235,18 @@ public function getCurrentLanguage($type = LanguageInterface::TYPE_INTERFACE) {
- return $this->negotiatedLanguages[$type];
- }
-
-+ /**
-+ * Sets current language.
-+ *
-+ * @param \Drupal\Core\Language\LanguageInterface $language
-+ * Language interface.
-+ * @param string $type
-+ * Type interface.
-+ */
-+ public function setCurrentLanguage(LanguageInterface $language, $type = LanguageInterface::TYPE_INTERFACE) {
-+ $this->negotiatedLanguages[$type] = $language;
-+ }
-+
- /**
- * {@inheritdoc}
- */
-diff --git a/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php b/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php
-index 3079352f8e..7d09fcaf57 100644
---- a/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php
-+++ b/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php
-@@ -58,9 +58,8 @@ public function testToolbarClasses() {
- $langcode = 'es';
-
- // Add Spanish.
-- $edit['predefined_langcode'] = $langcode;
- $this->drupalGet('admin/config/regional/language/add');
-- $this->submitForm($edit, 'Add language');
-+ $this->submitForm(['predefined_langcode' => $langcode], 'Add language');
-
- // The menu item 'Structure' in the toolbar will be translated.
- $menu_item = 'Structure';
-@@ -68,49 +67,108 @@ public function testToolbarClasses() {
- // Visit a page that has the string on it so it can be translated.
- $this->drupalGet($langcode . '/admin/structure');
-
-- // Search for the menu item.
-+ // Check that the class is on the item before we translate it.
-+ $this->assertSession()->elementsCount('xpath', '//a[contains(@class, "icon-system-admin-structure")]', 1);
-+
-+ // Translate the menu item.
-+ $menu_item_translated = $this->randomMachineName();
-+ $this->addLocalizedString($langcode, $menu_item, $menu_item_translated);
-+
-+ // Go to another page in the custom language and make sure the menu item
-+ // was translated.
-+ $this->drupalGet($langcode . '/admin/structure');
-+ $this->assertSession()->pageTextContains($menu_item_translated);
-+
-+ // Toolbar icons are included based on the presence of a specific class on
-+ // the menu item. Ensure that class also exists for a translated menu item.
-+ $xpath = $this->xpath('//a[contains(@class, "icon-system-admin-structure")]');
-+ $this->assertCount(1, $xpath, 'The menu item class is the same.');
-+ }
-+
-+ /**
-+ * Tests that the toolbar is shown in the preferred admin language.
-+ */
-+ public function testToolbarRenderedInPreferredAdminLanguage() {
-+ // Enable the 'Account administration pages' language detection.
-+ $this->drupalGet('admin/config/regional/language/detection');
-+ $this->submitForm(['language_interface[enabled][language-user-admin]' => TRUE], 'Save settings');
-+
-+ $langcode = 'es';
-+
-+ // Add Spanish.
-+ $this->drupalGet('admin/config/regional/language/add');
-+ $this->submitForm(['predefined_langcode' => $langcode], 'Add language');
-+
-+ // The menu item 'Structure' and 'View profile' in the toolbar will be
-+ // translated.
-+ $menu_item_structure = 'Structure';
-+ $menu_item_view_profile = 'View profile';
-+
-+ // Visit a page that has the string on it so it can be translated.
-+ $this->drupalGet($langcode . '/admin/structure');
-+ $menu_item_structure_translated = $this->randomMachineName();
-+ $this->addLocalizedString($langcode, $menu_item_structure, $menu_item_structure_translated);
-+
-+ // Add a translation for a menu item added using user_toolbar().
-+ $menu_item_view_profile_translated = $this->randomMachineName();
-+ $this->addLocalizedString($langcode, $menu_item_view_profile, $menu_item_view_profile_translated);
-+
-+ // Go to another page in the custom language and make sure the menu item
-+ // was translated.
-+ $this->drupalGet($langcode . '/user');
-+ $this->assertSession()->elementContains('css', '#toolbar-link-system-admin_structure', $menu_item_structure_translated);
-+ $this->assertSession()->elementContains('css', '#toolbar-item-user-tray a[title="User account"]', $menu_item_view_profile_translated);
-+
-+ // Configure a preferred admin language.
-+ $this->adminUser->set('preferred_admin_langcode', 'en');
-+ $this->adminUser->save();
-+
-+ drupal_flush_all_caches();
-+
-+ // Go to another page in the custom language and make sure the menu item
-+ // is shown in the preferred admin language.
-+ $this->drupalGet($langcode . '/user');
-+ $this->assertSession()->elementContains('css', '#toolbar-link-system-admin_structure', $menu_item_structure);
-+ $this->assertSession()->elementContains('css', '#toolbar-item-user-tray a[title="User account"]', $menu_item_view_profile);
-+ }
-+
-+ /**
-+ * Add a localized string.
-+ *
-+ * @param string $langcode
-+ * The langcode.
-+ * @param string $string
-+ * The string to translate.
-+ * @param string $translation
-+ * The string translation.
-+ */
-+ protected function addLocalizedString(string $langcode, string $string, string $translation): void {
-+ // Search for the label.
- $search = [
-- 'string' => $menu_item,
-+ 'string' => $string,
- 'langcode' => $langcode,
- 'translation' => 'untranslated',
- ];
- $this->drupalGet('admin/config/regional/translate');
- $this->submitForm($search, 'Filter');
-- // Make sure will be able to translate the menu item.
-+ // Make sure will be able to translate the label.
- $this->assertSession()->pageTextNotContains('No strings available.');
-
-- // Check that the class is on the item before we translate it.
-- $this->assertSession()->elementsCount('xpath', '//a[contains(@class, "icon-system-admin-structure")]', 1);
-+ $textarea = current($this->xpath('//textarea'));
-
-- // Translate the menu item.
-- $menu_item_translated = $this->randomMachineName();
-- $textarea = $this->assertSession()->elementExists('xpath', '//textarea');
- $lid = (string) $textarea->getAttribute('name');
-- $edit = [
-- $lid => $menu_item_translated,
-- ];
-- $this->drupalGet('admin/config/regional/translate');
-- $this->submitForm($edit, 'Save translations');
-+ $this->submitForm([$lid => $translation], 'Save translations');
-
- // Search for the translated menu item.
- $search = [
-- 'string' => $menu_item,
-+ 'string' => $string,
- 'langcode' => $langcode,
- 'translation' => 'translated',
- ];
- $this->drupalGet('admin/config/regional/translate');
- $this->submitForm($search, 'Filter');
- // Make sure the menu item string was translated.
-- $this->assertSession()->pageTextContains($menu_item_translated);
--
-- // Go to another page in the custom language and make sure the menu item
-- // was translated.
-- $this->drupalGet($langcode . '/admin/structure');
-- $this->assertSession()->pageTextContains($menu_item_translated);
--
-- // Toolbar icons are included based on the presence of a specific class on
-- // the menu item. Ensure that class also exists for a translated menu item.
-- $this->assertSession()->elementsCount('xpath', '//a[contains(@class, "icon-system-admin-structure")]', 1);
-+ $this->assertSession()->pageTextContains($translation);
- }
-
- }
-diff --git a/core/modules/toolbar/toolbar.routing.yml b/core/modules/toolbar/toolbar.routing.yml
-index 10e6cc3295..80d6d19ff2 100644
---- a/core/modules/toolbar/toolbar.routing.yml
-+++ b/core/modules/toolbar/toolbar.routing.yml
-@@ -4,3 +4,5 @@ toolbar.subtrees:
- _controller: '\Drupal\toolbar\Controller\ToolbarController::subtreesAjax'
- requirements:
- _custom_access: '\Drupal\toolbar\Controller\ToolbarController::checkSubTreeAccess'
-+ options:
-+ _admin_route: TRUE
-diff --git a/core/modules/user/src/ToolbarLinkBuilder.php b/core/modules/user/src/ToolbarLinkBuilder.php
-index b278db6dba..0c48bec2fe 100644
---- a/core/modules/user/src/ToolbarLinkBuilder.php
-+++ b/core/modules/user/src/ToolbarLinkBuilder.php
-@@ -2,10 +2,12 @@
-
- namespace Drupal\user;
-
-+use Drupal\Core\Extension\ModuleHandlerInterface;
- use Drupal\Core\Security\TrustedCallbackInterface;
- use Drupal\Core\Session\AccountProxyInterface;
- use Drupal\Core\StringTranslation\StringTranslationTrait;
- use Drupal\Core\Url;
-+use Drupal\language\AdminLanguageRender;
-
- /**
- * ToolbarLinkBuilder fills out the placeholders generated in user_toolbar().
-@@ -21,14 +23,24 @@ class ToolbarLinkBuilder implements TrustedCallbackInterface {
- */
- protected $account;
-
-+ /**
-+ * The module handler.
-+ *
-+ * @var \Drupal\Core\Extension\ModuleHandlerInterface
-+ */
-+ protected $moduleHandler;
-+
- /**
- * ToolbarHandler constructor.
- *
- * @param \Drupal\Core\Session\AccountProxyInterface $account
- * The current user.
-+ * @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler
-+ * The module handler.
- */
-- public function __construct(AccountProxyInterface $account) {
-+ public function __construct(AccountProxyInterface $account, ModuleHandlerInterface $moduleHandler) {
- $this->account = $account;
-+ $this->moduleHandler = $moduleHandler;
- }
-
- /**
-@@ -69,6 +81,11 @@ public function renderToolbarLinks() {
- ],
- ];
-
-+ // Support rendering the links in the user's preferred admin language.
-+ if ($this->moduleHandler->moduleExists('language')) {
-+ $build = AdminLanguageRender::applyTo($build);
-+ }
-+
- return $build;
- }
-
-diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml
-index f8f7d15f4e..76f15a5e5a 100644
---- a/core/modules/user/user.services.yml
-+++ b/core/modules/user/user.services.yml
-@@ -59,7 +59,7 @@ services:
- - { name: 'context_provider' }
- user.toolbar_link_builder:
- class: Drupal\user\ToolbarLinkBuilder
-- arguments: ['@current_user']
-+ arguments: ['@current_user', '@module_handler']
- user.flood_control:
- class: Drupal\user\UserFloodControl
- arguments: ['@flood', '@event_dispatcher', '@request_stack']
-diff --git a/core/modules/views_ui/tests/src/FunctionalJavascript/DisplayTest.php b/core/modules/views_ui/tests/src/FunctionalJavascript/DisplayTest.php
-index 559acbb481..b3a67aa96b 100644
---- a/core/modules/views_ui/tests/src/FunctionalJavascript/DisplayTest.php
-+++ b/core/modules/views_ui/tests/src/FunctionalJavascript/DisplayTest.php
-@@ -128,7 +128,7 @@ public function testPageContextualLinks() {
- $element = $this->getSession()->getPage()->find('css', $selector);
- $element->find('css', '.contextual button')->press();
-
-- $contextual_container_id = 'entity.view.edit_form:view=test_display:location=page&name=test_display&display_id=page_1&langcode=en';
-+ $contextual_container_id = 'entity.view.edit_form:view=test_display:location=page&name=test_display&display_id=page_1&langcode=en&admin_langcode=en';
- $contextual_container = $page->find('css', '[data-contextual-id="' . $contextual_container_id . '"]');
- $this->assertNotEmpty($contextual_container);
-
diff --git a/src/Menu/FilterDisabledTranslations.php b/src/Menu/FilterDisabledTranslations.php
index e707108f2..fa72b24c4 100644
--- a/src/Menu/FilterDisabledTranslations.php
+++ b/src/Menu/FilterDisabledTranslations.php
@@ -6,6 +6,7 @@
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Routing\AdminContext;
use Drupal\menu_block_current_language\Event\Events;
use Drupal\menu_block_current_language\Event\HasTranslationEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -22,10 +23,13 @@ final class FilterDisabledTranslations implements EventSubscriberInterface {
* The entity type manager.
* @param \Drupal\Core\Language\LanguageManagerInterface $languageManager
* The language manager.
+ * @param \Drupal\Core\Routing\AdminContext $adminContext
+ * The admin context.
*/
public function __construct(
readonly private EntityTypeManagerInterface $entityTypeManager,
- readonly private LanguageManagerInterface $languageManager
+ readonly private LanguageManagerInterface $languageManager,
+ readonly private AdminContext $adminContext,
) {
}
@@ -47,7 +51,9 @@ public static function getSubscribedEvents(): array {
* The event subscribed to.
*/
public function filter(HasTranslationEvent $event): void {
- if (!$event->hasTranslation()) {
+ // Disable for admin routes, otherwise the menu UI hides unpublished
+ // links.
+ if (!$event->hasTranslation() || $this->adminContext->isAdminRoute()) {
return;
}
diff --git a/tests/src/Functional/MenuLanguageTest.php b/tests/src/Functional/MenuLanguageTest.php
index 6caa2a6bd..92b3109e2 100644
--- a/tests/src/Functional/MenuLanguageTest.php
+++ b/tests/src/Functional/MenuLanguageTest.php
@@ -7,6 +7,7 @@
use Drupal\Core\Language\LanguageInterface;
use Drupal\menu_link_content\Entity\MenuLinkContent;
use Drupal\Tests\content_translation\Functional\ContentTranslationTestBase;
+use Drupal\Tests\helfi_api_base\Traits\DefaultConfigurationTrait;
use Drupal\user\UserInterface;
/**
@@ -16,6 +17,8 @@
*/
class MenuLanguageTest extends ContentTranslationTestBase {
+ use DefaultConfigurationTrait;
+
/**
* {@inheritdoc}
*/
@@ -38,6 +41,7 @@ class MenuLanguageTest extends ContentTranslationTestBase {
'menu_ui',
'menu_link_content',
'menu_block_current_language',
+ 'system',
'helfi_platform_config',
];
@@ -64,20 +68,13 @@ protected function setUp() : void {
'access administration pages',
'administer menu',
]);
- $this->drupalLogin($this->adminUser);
-
- $edit = [
- 'language_interface[enabled][language-session]' => TRUE,
- 'language_interface[weight][language-session]' => -12,
- ];
- $this->drupalGet('/admin/config/regional/language/detection');
- $this->submitForm($edit, 'Save settings');
- // Make sure we are not logged in.
- $this->drupalLogout();
+ $this->config('language.negotiation')
+ ->set('url.prefixes', ['en' => 'en', 'fr' => 'fr', 'it' => 'it'])
+ ->save();
}
/**
- * Create new menu link.
+ * Create a new menu link.
*
* @param string $langcode
* The language code.
@@ -89,13 +86,13 @@ protected function setUp() : void {
* @return \Drupal\menu_link_content\Entity\MenuLinkContent
* The menu link.
*/
- protected function createTestLink($langcode, $title, array $overrides = []) : MenuLinkContent {
+ protected function createTestLink(string $langcode, $title, array $overrides = []) : MenuLinkContent {
$defaults = [
'menu_name' => 'main',
'title' => $title,
'langcode' => $langcode,
'link' => [
- 'uri' => 'internal:/admin/content',
+ 'uri' => 'internal:/admin',
],
];
$link = MenuLinkContent::create($overrides + $defaults);
@@ -113,25 +110,25 @@ public function testMenuLanguage() {
'expanded' => 1,
]);
- $this->drupalGet('admin/structure/menu/manage/main', ['query' => ['language' => 'en']]);
- $this->assertSession()->linkExists($link->label());
+ $this->drupalGetWithLanguage('admin/structure/menu/manage/main', 'en');
+ $this->assertSession()->linkExists('First link');
- // Make sure link is not visible when translation doesnt exist.
- $this->drupalGet('admin/structure/menu/manage/main', ['query' => ['language' => 'fr']]);
+ // Make sure a link is not visible when translation doesn't exist.
+ $this->drupalGetWithLanguage('admin/structure/menu/manage/main', 'fr');
$this->assertSession()->linkNotExists($link->label());
// Add translation and test that links gets visible.
- $link->addTranslation('fr', ['title' => 'First french title'])->save();
- $this->drupalGet('admin/structure/menu/manage/main', ['query' => ['language' => 'fr']]);
- $this->assertSession()->linkExists('First french title');
+ $link->addTranslation('fr', ['title' => 'First French title'])->save();
+ $this->drupalGetWithLanguage('admin/structure/menu/manage/main', 'fr');
+ $this->assertSession()->linkExists('First French title');
// French link should not be visible to english.
- $this->drupalGet('admin/structure/menu/manage/main', ['query' => ['language' => 'en']]);
+ $this->drupalGetWithLanguage('admin/structure/menu/manage/main', 'en');
$this->assertSession()->linkNotExists('First french title');
// Test French only link.
$link2 = $this->createTestLink('fr', 'French only title');
- $this->drupalGet('admin/structure/menu/manage/main', ['query' => ['language' => 'en']]);
+ $this->drupalGetWithLanguage('admin/structure/menu/manage/main', 'en');
$this->assertSession()->linkNotExists($link2->label());
// Test that untranslatable link is visible for both languages.
@@ -144,10 +141,19 @@ public function testMenuLanguage() {
$link = $this->createTestLink($langcode, 'Untranslated ' . $langcode);
foreach (['fr', 'en'] as $lang) {
- $this->drupalGet('admin/structure/menu/manage/main', ['query' => ['language' => $lang]]);
+ $this->drupalGetWithLanguage('admin/structure/menu/manage/main', $lang);
$this->assertSession()->linkExists($link->label());
}
}
}
+ /**
+ * Run same tests with account's 'preferred_admin_langcode' set to French.
+ */
+ public function testMenuLanguageWithAdminUiLanguage() : void {
+ $this->adminUser->set('preferred_admin_langcode', 'fr');
+ $this->adminUser->save();
+ $this->testMenuLanguage();
+ }
+
}