diff --git a/composer.json b/composer.json index d827a243612bc7ad709f026c8b1c885b361cf431..a441243d9d3008a41a103ab504f531c175ff3dc0 100644 --- a/composer.json +++ b/composer.json @@ -57,7 +57,7 @@ "drupal/message": "^1.1", "drupal/message_digest": "^1.0.0", "drupal/message_notify": "~1.2", - "drupal/meta_entity": "^1.0-alpha2", + "drupal/meta_entity": "^1.2", "drupal/monolog": "^2.0", "drupal/og": "^1.0-alpha7", "drupal/og_menu": "^2.0", @@ -68,6 +68,7 @@ "drupal/pipeline": "^1.0", "drupal/publication_date": "^2.0-beta2", "drupal/rdf_entity": "^2.0", + "drupal/rdf_meta_entity": "^1.0", "drupal/redirect": "^1.6", "drupal/redis": "^1.4", "drupal/schema_digital_document": "^1.0.0", @@ -293,6 +294,9 @@ "drupal/matomo_reporting_api": { "Ensure backward compatibility with Piwik @see https://www.drupal.org/project/matomo_reporting_api/issues/3080854": "https://www.drupal.org/files/issues/2019-09-18/3080854-7.patch" }, + "drupal/meta_entity": { + "Make the field configurable in the view @see https://www.drupal.org/project/meta_entity/issues/3279161": "https://git.drupalcode.org/project/meta_entity/-/merge_requests/4.diff" + }, "drupal/metatag": { "Views cache wrapper overrides other modules cache logic @see https://www.drupal.org/project/metatag/issues/3261473": "https://git.drupalcode.org/project/metatag/-/merge_requests/48.diff" }, @@ -308,6 +312,10 @@ "drupal/rdf_entity": { "Allow bundle label plural variants @see https://github.com/ec-europa/rdf_entity/pull/12": "https://github.com/ec-europa/rdf_entity/compare/8.x-1.x...ea8f6af001fca732e89a4be0e29643953f49a88f.diff" }, + "drupal/rdf_meta_entity": { + "Provide a default template file @see https://www.drupal.org/project/rdf_meta_entity/issues/3279162": "https://git.drupalcode.org/project/rdf_meta_entity/-/merge_requests/2.diff", + "Provide a default delete form @see https://www.drupal.org/project/rdf_meta_entity/issues/3283343": "https://git.drupalcode.org/project/rdf_meta_entity/-/merge_requests/3.diff" + }, "drupal/search_api": { "item_id column is too short @see https://www.drupal.org/node/2829696": "resources/patch/search_api-item_id-length-2829696.patch", "Some bulk form field options are missing schema @see https://www.drupal.org/project/search_api/issues/3195199": "https://git.drupalcode.org/project/search_api/-/merge_requests/6.diff", diff --git a/composer.lock b/composer.lock index 708ccf724cb27ecf96dcde803bc1a3e7d776d78d..2e8a18c77ee5c977019eacd3e33315fbc43e4921 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": "76e680a21756041cb94704d92fcf8c5e", + "content-hash": "37479f6445442e6aeb259924acd4c3c4", "packages": [ { "name": "asm89/stack-cors", @@ -4078,14 +4078,14 @@ "GPL-2.0-or-later" ], "authors": [ - { - "name": "Centarro", - "homepage": "https://www.drupal.org/user/3661446" - }, { "name": "bojanz", "homepage": "https://www.drupal.org/user/86106" }, + { + "name": "Centarro", + "homepage": "https://www.drupal.org/user/3661446" + }, { "name": "dawehner", "homepage": "https://www.drupal.org/user/99340" @@ -5912,6 +5912,58 @@ "issues": "https://drupal.org/project/issues/rdf_entity" } }, + { + "name": "drupal/rdf_meta_entity", + "version": "1.0.0-alpha2", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/rdf_meta_entity.git", + "reference": "1.0.0-alpha2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/rdf_meta_entity-1.0.0-alpha2.zip", + "reference": "1.0.0-alpha2", + "shasum": "579b6ce3dc0b79f93dd3e2e63b84bdd8a8c1f0b2" + }, + "require": { + "drupal/core": ">=9.3", + "drupal/meta_entity": ">=1.1", + "drupal/sparql_entity_storage": "^2.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "1.0.0-alpha2", + "datestamp": "1651238895", + "security-coverage": { + "status": "not-covered", + "message": "Alpha releases are not covered by Drupal security advisories." + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Ilias Dimopoulos", + "homepage": "https://www.drupal.org/u/idimopoulos-0" + }, + { + "name": "Claudiu Cristea", + "homepage": "https://www.drupal.org/user/2578708", + "email": "https://www.drupal.org/u/claudiucristea" + } + ], + "description": "Allows storing metadata about an entity in entities having a SPARQL backend.", + "homepage": "https://www.drupal.org/project/rdf_meta_entity", + "support": { + "source": "https://git.drupalcode.org/project/rdf_meta_entity", + "issues": "https://www.drupal.org/project/issues/rdf_meta_entity" + } + }, { "name": "drupal/redirect", "version": "1.7.0", diff --git a/config/sync/block.block.anonymous_comment_links.yml b/config/sync/block.block.anonymous_comment_links.yml index 44d928212aa1eef7b04923703b9758d85e2843e9..f9e857bf6b67fa7d0f7c4db205b1281ccedf06af 100644 --- a/config/sync/block.block.anonymous_comment_links.yml +++ b/config/sync/block.block.anonymous_comment_links.yml @@ -5,7 +5,7 @@ dependencies: config: - simple_block.simple_block.anonymous_comment_links module: - - ctools + - node - simple_block - user theme: diff --git a/config/sync/block.block.eiffilterblock.yml b/config/sync/block.block.eiffilterblock.yml new file mode 100644 index 0000000000000000000000000000000000000000..39a330d31e554f96d081e487f0c734436d845146 --- /dev/null +++ b/config/sync/block.block.eiffilterblock.yml @@ -0,0 +1,25 @@ +uuid: ade53e5b-b29c-4bb4-92f8-d0212ab97968 +langcode: en +status: true +dependencies: + module: + - eif + - system + theme: + - joinup_theme +id: eiffilterblock +theme: joinup_theme +region: content +weight: 0 +provider: null +plugin: eif_filter_block +settings: + id: eif_filter_block + label: 'Eif filter block' + label_display: '0' + provider: eif +visibility: + request_path: + id: request_path + negate: false + pages: /node/705372 diff --git a/config/sync/block.block.unpublished_content_of_group.yml b/config/sync/block.block.unpublished_content_of_group.yml index 792acf6972c6c078dff3f8629def65bf0db337a7..d3a62b8d404a4828cb6839c3f65e54a83cac092c 100644 --- a/config/sync/block.block.unpublished_content_of_group.yml +++ b/config/sync/block.block.unpublished_content_of_group.yml @@ -3,9 +3,9 @@ langcode: en status: true dependencies: module: - - ctools - joinup_core - joinup_group + - rdf_entity theme: - joinup_theme _core: diff --git a/config/sync/block.block.views_block__solutions_meta_entity_solutions_meta_entity_block.yml b/config/sync/block.block.views_block__solutions_meta_entity_solutions_meta_entity_block.yml new file mode 100644 index 0000000000000000000000000000000000000000..842c0f0c702bfed22596252c58ee95ac8bc58c6a --- /dev/null +++ b/config/sync/block.block.views_block__solutions_meta_entity_solutions_meta_entity_block.yml @@ -0,0 +1,29 @@ +uuid: e876956e-9577-4d00-8510-104daba13c9a +langcode: en +status: true +dependencies: + config: + - views.view.solutions_meta_entity + module: + - system + - views + theme: + - joinup_theme +id: views_block__solutions_meta_entity_solutions_meta_entity_block +theme: joinup_theme +region: content +weight: 0 +provider: null +plugin: 'views_block:solutions_meta_entity-solutions_meta_entity_block' +settings: + id: 'views_block:solutions_meta_entity-solutions_meta_entity_block' + label: '' + label_display: '0' + provider: views + views_label: '' + items_per_page: none +visibility: + request_path: + id: request_path + negate: false + pages: /node/705372 diff --git a/config/sync/core.entity_form_display.eif_wrapper.recommendation.default.yml b/config/sync/core.entity_form_display.eif_wrapper.recommendation.default.yml new file mode 100644 index 0000000000000000000000000000000000000000..5c636d8ad1359a5fec79a9a8235f6060c97c3255 --- /dev/null +++ b/config/sync/core.entity_form_display.eif_wrapper.recommendation.default.yml @@ -0,0 +1,29 @@ +uuid: 698e36ff-00da-4b30-8349-9ea59f05d2e7 +langcode: en +status: true +dependencies: + config: + - eif.eif_wrapper_type.recommendation + - field.field.eif_wrapper.recommendation.term + module: + - text +id: eif_wrapper.recommendation.default +targetEntityType: eif_wrapper +bundle: recommendation +mode: default +content: + description: + type: text_textarea + weight: 1 + region: content + settings: + rows: 5 + placeholder: '' + third_party_settings: { } + term: + type: options_select + weight: 0 + region: content + settings: { } + third_party_settings: { } +hidden: { } diff --git a/config/sync/core.entity_form_display.rdf_meta_entity.eif_perspective.default.yml b/config/sync/core.entity_form_display.rdf_meta_entity.eif_perspective.default.yml new file mode 100644 index 0000000000000000000000000000000000000000..2552e0c679f66ef5149acf220571aa6e7caec084 --- /dev/null +++ b/config/sync/core.entity_form_display.rdf_meta_entity.eif_perspective.default.yml @@ -0,0 +1,75 @@ +uuid: ce53109a-a2ec-4769-9245-58b4e94ba9ff +langcode: en +status: true +dependencies: + config: + - field.field.rdf_meta_entity.eif_perspective.eif_layer + - field.field.rdf_meta_entity.eif_perspective.eif_model + - field.field.rdf_meta_entity.eif_perspective.eif_principle + - field.field.rdf_meta_entity.eif_perspective.eif_recommendation + - field.field.rdf_meta_entity.eif_perspective.field_eif_description + - field.field.rdf_meta_entity.eif_perspective.field_eif_solution_type + - rdf_meta_entity.type.eif_perspective + module: + - inline_entity_form + - oe_bootstrap_theme_helper + - text +id: rdf_meta_entity.eif_perspective.default +targetEntityType: rdf_meta_entity +bundle: eif_perspective +mode: default +content: + eif_layer: + type: options_buttons + weight: 3 + region: content + settings: { } + third_party_settings: { } + eif_model: + type: options_buttons + weight: 4 + region: content + settings: { } + third_party_settings: { } + eif_principle: + type: options_buttons + weight: 2 + region: content + settings: { } + third_party_settings: { } + eif_recommendation: + type: inline_entity_form_complex + weight: 5 + region: content + settings: + form_mode: default + override_labels: true + label_singular: qualifier + label_plural: qualifiers + allow_new: true + allow_existing: false + match_operator: CONTAINS + allow_duplicate: false + collapsible: false + collapsed: false + revision: false + third_party_settings: { } + field_eif_description: + type: text_textarea + weight: 0 + region: content + settings: + rows: 5 + placeholder: '' + third_party_settings: { } + field_eif_solution_type: + type: options_buttons + weight: 1 + region: content + settings: { } + third_party_settings: + oe_bootstrap_theme_helper: + switch: false +hidden: + label: true + target: true diff --git a/config/sync/core.entity_view_display.eif_wrapper.eif_wrapper.default.yml b/config/sync/core.entity_view_display.eif_wrapper.eif_wrapper.default.yml new file mode 100644 index 0000000000000000000000000000000000000000..8de2577210f4de9f2600d7470777c0f9f9e87e56 --- /dev/null +++ b/config/sync/core.entity_view_display.eif_wrapper.eif_wrapper.default.yml @@ -0,0 +1,33 @@ +uuid: 5662b785-36de-44d1-951d-ff95ffaac673 +langcode: en +status: true +dependencies: + module: + - eif + - joinup_core + - text +id: eif_wrapper.eif_wrapper.default +targetEntityType: eif_wrapper +bundle: eif_wrapper +mode: default +content: + description: + type: text_default + label: hidden + settings: { } + third_party_settings: { } + weight: 10 + region: content + term: + type: entity_reference_custom_link + label: hidden + settings: + path: '[term:url]' + label: '[term:label]' + query_parameters: '' + limit: -1 + third_party_settings: { } + weight: 0 + region: content +hidden: + search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.eif_wrapper.recommendation.default.yml b/config/sync/core.entity_view_display.eif_wrapper.recommendation.default.yml new file mode 100644 index 0000000000000000000000000000000000000000..520db094736049a88b3c0daa5567a1dd40969f76 --- /dev/null +++ b/config/sync/core.entity_view_display.eif_wrapper.recommendation.default.yml @@ -0,0 +1,35 @@ +uuid: 8e4a8f5c-3abe-4494-93f9-35d39db5f7fe +langcode: en +status: true +dependencies: + config: + - eif.eif_wrapper_type.recommendation + - field.field.eif_wrapper.recommendation.term + module: + - template_suggestion + - text +id: eif_wrapper.recommendation.default +targetEntityType: eif_wrapper +bundle: recommendation +mode: default +content: + description: + type: text_default + label: hidden + settings: { } + third_party_settings: { } + weight: 1 + region: content + term: + type: entity_reference_entity_view + label: hidden + settings: + view_mode: eif_recommendation + link: false + third_party_settings: + template_suggestion: + template_suggestion: '' + weight: 0 + region: content +hidden: + search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.node.discussion.default.yml b/config/sync/core.entity_view_display.node.discussion.default.yml index 8e872ca01d8f4d5c366654b1801f83572b7fb4be..4268f6a8b431997630a3f453f5a247c72248a2ee 100644 --- a/config/sync/core.entity_view_display.node.discussion.default.yml +++ b/config/sync/core.entity_view_display.node.discussion.default.yml @@ -126,9 +126,12 @@ content: weight: 8 region: content hidden: + featured: true field_keywords: true field_site_featured: true langcode: true + pinned_in: true published_at: true read_more: true search_api_excerpt: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.discussion.digest_message.yml b/config/sync/core.entity_view_display.node.discussion.digest_message.yml index 4aaab16d39c7ebbf2b5c1fa6bfabac4323057b76..aa3a605f403f4c4fc2844eb5f0f4d21cb2f80043 100644 --- a/config/sync/core.entity_view_display.node.discussion.digest_message.yml +++ b/config/sync/core.entity_view_display.node.discussion.digest_message.yml @@ -47,6 +47,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_keywords: true field_replies: true @@ -59,8 +60,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.discussion.moderation.yml b/config/sync/core.entity_view_display.node.discussion.moderation.yml index 888e02953e618180ae050349618803db65d9eca4..30d12bb7926eaa38659cb49cee9cd94db8e6113f 100644 --- a/config/sync/core.entity_view_display.node.discussion.moderation.yml +++ b/config/sync/core.entity_view_display.node.discussion.moderation.yml @@ -54,6 +54,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_keywords: true field_replies: true @@ -65,8 +66,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.discussion.numbered_listing.yml b/config/sync/core.entity_view_display.node.discussion.numbered_listing.yml index 8df56a4e972bcbf69f6ae9d996d5287ab6bd1066..132baf5739bd3e84f96add9436f576fe45a3a0d7 100644 --- a/config/sync/core.entity_view_display.node.discussion.numbered_listing.yml +++ b/config/sync/core.entity_view_display.node.discussion.numbered_listing.yml @@ -70,6 +70,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_keywords: true field_replies: true @@ -81,8 +82,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.discussion.search_result.yml b/config/sync/core.entity_view_display.node.discussion.search_result.yml index 73f2af4888bfc86c2fe624311cb157129fe71943..def99bd44cd5c3e34a338b029380cda150ed62ba 100644 --- a/config/sync/core.entity_view_display.node.discussion.search_result.yml +++ b/config/sync/core.entity_view_display.node.discussion.search_result.yml @@ -63,6 +63,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_keywords: true field_replies: true @@ -74,7 +75,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.discussion.search_result_featured.yml b/config/sync/core.entity_view_display.node.discussion.search_result_featured.yml index 5bb6e1d861b64ec98d62b929e04e04165e51b8b1..965e1f0376b5897963e970e237498bbaaf8d8d26 100644 --- a/config/sync/core.entity_view_display.node.discussion.search_result_featured.yml +++ b/config/sync/core.entity_view_display.node.discussion.search_result_featured.yml @@ -76,6 +76,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_keywords: true field_replies: true @@ -87,7 +88,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.discussion.view_mode_featured.yml b/config/sync/core.entity_view_display.node.discussion.view_mode_featured.yml index ab4bf1b72334a297e248f9fa2b04cd88926d94b4..ed9d9cf0314d348efa4f9d663729f5ca051b5388 100644 --- a/config/sync/core.entity_view_display.node.discussion.view_mode_featured.yml +++ b/config/sync/core.entity_view_display.node.discussion.view_mode_featured.yml @@ -66,6 +66,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_replies: true field_shared_in: true @@ -76,8 +77,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.discussion.view_mode_tile.yml b/config/sync/core.entity_view_display.node.discussion.view_mode_tile.yml index 778804af46749b2330c5b576261c3d59a86e50c4..8808c2fc21921e43c6c081bc1f3b450c49daa516 100644 --- a/config/sync/core.entity_view_display.node.discussion.view_mode_tile.yml +++ b/config/sync/core.entity_view_display.node.discussion.view_mode_tile.yml @@ -67,6 +67,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_replies: true field_shared_in: true @@ -77,8 +78,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.default.yml b/config/sync/core.entity_view_display.node.document.default.yml index e7465d5be3834d1d5dcd028d571213ea43e3aba3..ba32cd2e840062587ba5395373b81579c091d0d8 100644 --- a/config/sync/core.entity_view_display.node.document.default.yml +++ b/config/sync/core.entity_view_display.node.document.default.yml @@ -171,6 +171,7 @@ content: weight: 5 region: content hidden: + featured: true field_document_logo: true field_document_spatial_coverage: true field_keywords: true @@ -180,6 +181,8 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true search_api_excerpt: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.digest_message.yml b/config/sync/core.entity_view_display.node.document.digest_message.yml index d646a606c19759d239c7252d850ee74f861e0a5c..f045893f75406261e31090165af28434f67895d4 100644 --- a/config/sync/core.entity_view_display.node.document.digest_message.yml +++ b/config/sync/core.entity_view_display.node.document.digest_message.yml @@ -87,6 +87,7 @@ content: weight: 0 region: content hidden: + featured: true field_comments: true field_document_spatial_coverage: true field_file: true @@ -100,8 +101,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.highlighted.yml b/config/sync/core.entity_view_display.node.document.highlighted.yml index 694e99280af5a11b81316a39e700f8560be5c6d0..671fd47b02b505b6e5d61d7b2fd880056cd6a0bf 100644 --- a/config/sync/core.entity_view_display.node.document.highlighted.yml +++ b/config/sync/core.entity_view_display.node.document.highlighted.yml @@ -117,6 +117,7 @@ content: weight: 1 region: content hidden: + featured: true field_comments: true field_document_publication_date: true field_document_spatial_coverage: true @@ -131,8 +132,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.moderation.yml b/config/sync/core.entity_view_display.node.document.moderation.yml index 8e74998b3adaf3fd2095f8c7352438efc4b9006e..ba63dbbfd27de585169c46531e4ce8887e5393db 100644 --- a/config/sync/core.entity_view_display.node.document.moderation.yml +++ b/config/sync/core.entity_view_display.node.document.moderation.yml @@ -60,6 +60,7 @@ content: weight: 1 region: content hidden: + featured: true field_comments: true field_document_logo: true field_document_publication_date: true @@ -75,8 +76,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.numbered_listing.yml b/config/sync/core.entity_view_display.node.document.numbered_listing.yml index 3a98e80362a1890f2572cc1dea92e48cefe7b481..09b47a6477a06b77d407aaed9df8d264347381da 100644 --- a/config/sync/core.entity_view_display.node.document.numbered_listing.yml +++ b/config/sync/core.entity_view_display.node.document.numbered_listing.yml @@ -126,6 +126,7 @@ content: weight: 1 region: content hidden: + featured: true field_comments: true field_document_publication_date: true field_document_spatial_coverage: true @@ -140,8 +141,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.search_result.yml b/config/sync/core.entity_view_display.node.document.search_result.yml index 5f56e924804bafcf52ba4a385cb6cfd22e91c30f..08550810d69753e51b4501e2f4bbe76ed5144c2d 100644 --- a/config/sync/core.entity_view_display.node.document.search_result.yml +++ b/config/sync/core.entity_view_display.node.document.search_result.yml @@ -114,6 +114,7 @@ content: weight: 2 region: content hidden: + featured: true field_comments: true field_document_logo: true field_document_publication_date: true @@ -129,7 +130,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.search_result_featured.yml b/config/sync/core.entity_view_display.node.document.search_result_featured.yml index ea91c357b3e104c3738ac017aeb16dded479e612..677322dabf93d9472aefdacef3a8b345ea08a2bd 100644 --- a/config/sync/core.entity_view_display.node.document.search_result_featured.yml +++ b/config/sync/core.entity_view_display.node.document.search_result_featured.yml @@ -127,6 +127,7 @@ content: weight: 2 region: content hidden: + featured: true field_comments: true field_document_publication_date: true field_document_spatial_coverage: true @@ -141,7 +142,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.view_mode_featured.yml b/config/sync/core.entity_view_display.node.document.view_mode_featured.yml index d4bb9bc21b9a625f7af870495faabfedc6b64401..fa229f514d558d31e987ea605e29dfe082ccd79d 100644 --- a/config/sync/core.entity_view_display.node.document.view_mode_featured.yml +++ b/config/sync/core.entity_view_display.node.document.view_mode_featured.yml @@ -81,6 +81,7 @@ content: weight: 1 region: content hidden: + featured: true field_comments: true field_document_logo: true field_document_publication_date: true @@ -94,8 +95,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.document.view_mode_tile.yml b/config/sync/core.entity_view_display.node.document.view_mode_tile.yml index 425aa8b1492aea1d61e01b24e5e8f28039190d2d..dd8d410cfb5f88400b5f40f6e9aa8de82de5c1ea 100644 --- a/config/sync/core.entity_view_display.node.document.view_mode_tile.yml +++ b/config/sync/core.entity_view_display.node.document.view_mode_tile.yml @@ -97,6 +97,7 @@ content: weight: 1 region: content hidden: + featured: true field_comments: true field_document_publication_date: true field_document_spatial_coverage: true @@ -109,8 +110,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.default.yml b/config/sync/core.entity_view_display.node.event.default.yml index b007dbe9273d3a20dbfaf7c2f5831b1659b72857..3ee95c59d8c6171bff685a67741016bdcc14c632 100644 --- a/config/sync/core.entity_view_display.node.event.default.yml +++ b/config/sync/core.entity_view_display.node.event.default.yml @@ -195,6 +195,7 @@ content: weight: 10 region: content hidden: + featured: true field_event_spatial_coverage: true field_keywords: true field_organisation: true @@ -206,6 +207,8 @@ hidden: field_topic: true langcode: true og_audience: true + pinned_in: true published_at: true read_more: true search_api_excerpt: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.digest_message.yml b/config/sync/core.entity_view_display.node.event.digest_message.yml index c7d3ca9a3ede00ef1f3c486155b7a495b9e0796a..9b22531e7484e2abe6f9105c2fced8790c9df916 100644 --- a/config/sync/core.entity_view_display.node.event.digest_message.yml +++ b/config/sync/core.entity_view_display.node.event.digest_message.yml @@ -91,6 +91,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -111,8 +112,10 @@ hidden: field_topic: true langcode: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.explore_item.yml b/config/sync/core.entity_view_display.node.event.explore_item.yml index 7c48de0b1277da620a10c82c2d9e135c8afcd481..f404f4cb7ea4640f067959eb19a1669f1ab3dd88 100644 --- a/config/sync/core.entity_view_display.node.event.explore_item.yml +++ b/config/sync/core.entity_view_display.node.event.explore_item.yml @@ -165,6 +165,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -187,6 +188,8 @@ hidden: field_topic: true langcode: true og_audience: true + pinned_in: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.highlighted.yml b/config/sync/core.entity_view_display.node.event.highlighted.yml index a327652a2fdbbc7a05a68c29d50b518a1a81e402..bc80de0e3175295b4038cbcaba8225436e375219 100644 --- a/config/sync/core.entity_view_display.node.event.highlighted.yml +++ b/config/sync/core.entity_view_display.node.event.highlighted.yml @@ -83,6 +83,7 @@ content: weight: 1 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -104,8 +105,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.highlighted_event.yml b/config/sync/core.entity_view_display.node.event.highlighted_event.yml index 336ded1d4c4750ac142ea48ca244f8d37bfc9eb0..8998242ff9c5c01bd27bb6e73e3c26cc7a3fcc18 100644 --- a/config/sync/core.entity_view_display.node.event.highlighted_event.yml +++ b/config/sync/core.entity_view_display.node.event.highlighted_event.yml @@ -58,6 +58,7 @@ content: region: content hidden: body: true + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -80,8 +81,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.moderation.yml b/config/sync/core.entity_view_display.node.event.moderation.yml index 1e11603e3334000c5547239807d56cfe4f24d911..1d69c15e192f055f9a0b1e4901bc40631b2aa474 100644 --- a/config/sync/core.entity_view_display.node.event.moderation.yml +++ b/config/sync/core.entity_view_display.node.event.moderation.yml @@ -65,6 +65,7 @@ content: weight: 1 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -87,8 +88,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.numbered_listing.yml b/config/sync/core.entity_view_display.node.event.numbered_listing.yml index 2eb894bd22546fc8b3b2562bc00a96f459ed1c14..d2805e4879031b19f7c6ab6b0047a5dd14d771c8 100644 --- a/config/sync/core.entity_view_display.node.event.numbered_listing.yml +++ b/config/sync/core.entity_view_display.node.event.numbered_listing.yml @@ -94,6 +94,7 @@ content: weight: 1 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -115,8 +116,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.search_result.yml b/config/sync/core.entity_view_display.node.event.search_result.yml index 1c5dc79409d5d15f57f624b8b33c9f831f878953..110d104279b8c131ca90902254947909bdd340b3 100644 --- a/config/sync/core.entity_view_display.node.event.search_result.yml +++ b/config/sync/core.entity_view_display.node.event.search_result.yml @@ -82,6 +82,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -104,7 +105,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.search_result_featured.yml b/config/sync/core.entity_view_display.node.event.search_result_featured.yml index 1e87a737d0284489bb45dc3f6835690491d2ed4e..2f81c79d462c5dda8974e75ac3f44300d65decc0 100644 --- a/config/sync/core.entity_view_display.node.event.search_result_featured.yml +++ b/config/sync/core.entity_view_display.node.event.search_result_featured.yml @@ -95,6 +95,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -116,7 +117,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.view_mode_featured.yml b/config/sync/core.entity_view_display.node.event.view_mode_featured.yml index ceeb299e6c1c22e98f9e2c9552554b7482ad9c80..0bc3fce4c5fb6c501828076d24a9d5d2250b9f89 100644 --- a/config/sync/core.entity_view_display.node.event.view_mode_featured.yml +++ b/config/sync/core.entity_view_display.node.event.view_mode_featured.yml @@ -91,6 +91,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -111,8 +112,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.event.view_mode_tile.yml b/config/sync/core.entity_view_display.node.event.view_mode_tile.yml index 590d1bc2743005c5b0d64c98a4e5be0c3ee67214..228611b9d722e56c326acb16b2ed2c2b7080c09a 100644 --- a/config/sync/core.entity_view_display.node.event.view_mode_tile.yml +++ b/config/sync/core.entity_view_display.node.event.view_mode_tile.yml @@ -91,6 +91,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_comments: true field_event_agenda: true @@ -111,8 +112,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.dated_listing.yml b/config/sync/core.entity_view_display.node.news.dated_listing.yml index a3c586c8d674c7acf2cec159950f4d24e0aa085a..97540d64f40dac4db0a0b1bfa49f5891046ad6de 100644 --- a/config/sync/core.entity_view_display.node.news.dated_listing.yml +++ b/config/sync/core.entity_view_display.node.news.dated_listing.yml @@ -69,6 +69,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -83,8 +84,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true publication_date: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.default.yml b/config/sync/core.entity_view_display.node.news.default.yml index 259c992debf4d5c102f4107dda6cbce3758a809b..9e9edc28ac1282106b1d42bcb35ae888daa86e38 100644 --- a/config/sync/core.entity_view_display.node.news.default.yml +++ b/config/sync/core.entity_view_display.node.news.default.yml @@ -158,6 +158,7 @@ content: weight: 4 region: content hidden: + featured: true field_keywords: true field_news_spatial_coverage: true field_site_featured: true @@ -166,6 +167,8 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true search_api_excerpt: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.digest_message.yml b/config/sync/core.entity_view_display.node.news.digest_message.yml index 11fa48cba6a3fa72e89c376c74a61ad3e6381507..39f0d12aab9491dd0083dad58cbfd1a571fa09d5 100644 --- a/config/sync/core.entity_view_display.node.news.digest_message.yml +++ b/config/sync/core.entity_view_display.node.news.digest_message.yml @@ -72,6 +72,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -85,8 +86,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.explore_item.yml b/config/sync/core.entity_view_display.node.news.explore_item.yml index e0105d26505e4b9627bb35cd4ba80179833b3395..51cafac3f1c83438cde81953925dc918ad356039 100644 --- a/config/sync/core.entity_view_display.node.news.explore_item.yml +++ b/config/sync/core.entity_view_display.node.news.explore_item.yml @@ -171,6 +171,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -186,6 +187,8 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.highlighted.yml b/config/sync/core.entity_view_display.node.news.highlighted.yml index 2a9141d2b155546f62d1aabc0dffce54b95db553..d160044f4e36be33be65af001aced135c54027f7 100644 --- a/config/sync/core.entity_view_display.node.news.highlighted.yml +++ b/config/sync/core.entity_view_display.node.news.highlighted.yml @@ -94,6 +94,7 @@ content: weight: 1 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -107,8 +108,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.moderation.yml b/config/sync/core.entity_view_display.node.news.moderation.yml index fa223d6c70aca5939fa37c5f77f97059e80b3240..fed9847b8f6502803033a676eadaa4253dd9ffc7 100644 --- a/config/sync/core.entity_view_display.node.news.moderation.yml +++ b/config/sync/core.entity_view_display.node.news.moderation.yml @@ -59,6 +59,7 @@ content: weight: 1 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -73,8 +74,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.numbered_listing.yml b/config/sync/core.entity_view_display.node.news.numbered_listing.yml index 68effab5f7148537918b09ec32f4bb7579a127b7..9f4d4453d238dd51cf754a088e0e38934b4ed4ff 100644 --- a/config/sync/core.entity_view_display.node.news.numbered_listing.yml +++ b/config/sync/core.entity_view_display.node.news.numbered_listing.yml @@ -104,6 +104,7 @@ content: weight: 1 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -117,8 +118,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.search_result.yml b/config/sync/core.entity_view_display.node.news.search_result.yml index bc3f8aaf234b7c43c25242f5eb2ef8de570263ad..4020d9a7681f1cdfd43086032217f4facd587d7a 100644 --- a/config/sync/core.entity_view_display.node.news.search_result.yml +++ b/config/sync/core.entity_view_display.node.news.search_result.yml @@ -93,6 +93,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -107,7 +108,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.search_result_featured.yml b/config/sync/core.entity_view_display.node.news.search_result_featured.yml index 4e2693a66de77977aa404436fe0f7e708c676813..c9270424220fcd6c02796d0d87a4389c346e29df 100644 --- a/config/sync/core.entity_view_display.node.news.search_result_featured.yml +++ b/config/sync/core.entity_view_display.node.news.search_result_featured.yml @@ -106,6 +106,7 @@ content: weight: 2 region: content hidden: + featured: true field_attachment: true field_comments: true field_keywords: true @@ -119,7 +120,9 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.view_mode_featured.yml b/config/sync/core.entity_view_display.node.news.view_mode_featured.yml index 215691b56b7aa21aaea19d031f09dcb2bafa74ec..bb20d20d942a56c873caad1101c2254202751fc3 100644 --- a/config/sync/core.entity_view_display.node.news.view_mode_featured.yml +++ b/config/sync/core.entity_view_display.node.news.view_mode_featured.yml @@ -61,6 +61,7 @@ content: weight: 1 region: content hidden: + featured: true field_attachment: true field_comments: true field_news_headline: true @@ -75,8 +76,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.node.news.view_mode_tile.yml b/config/sync/core.entity_view_display.node.news.view_mode_tile.yml index ed0a2a8c71ec4c50234754f51d40a121e126be01..c52b7f7a0e6e250ec961a644a18f0e494c48284f 100644 --- a/config/sync/core.entity_view_display.node.news.view_mode_tile.yml +++ b/config/sync/core.entity_view_display.node.news.view_mode_tile.yml @@ -75,6 +75,7 @@ content: weight: 0 region: content hidden: + featured: true field_attachment: true field_comments: true field_news_headline: true @@ -88,8 +89,10 @@ hidden: langcode: true links: true og_audience: true + pinned_in: true published_at: true read_more: true report: true search_api_excerpt: true share_link: true + visit_count: true diff --git a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.compact.yml b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.compact.yml index cddd33908b3219e634550be06617190104815b6e..c4ed3f74b25b139180280b8f220722962a792bd3 100644 --- a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.compact.yml +++ b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.compact.yml @@ -64,6 +64,7 @@ content: hidden: changed: true created: true + download_count: true field_ad_description: true field_ad_format: true field_ad_gitb_compliant: true diff --git a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.default.yml b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.default.yml index 8fd974898aed3f5670772fc86450ae16223cfae1..38511d0c0a0317cc9da93500a4b04b978fc2ba94 100644 --- a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.default.yml +++ b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.default.yml @@ -131,6 +131,7 @@ content: hidden: changed: true created: true + download_count: true field_ad_creation_date: true field_ad_gitb_compliant: true field_ad_modification_date: true diff --git a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.digest_message.yml b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.digest_message.yml index 53e794481d696e4e8f67885de23e4d194c011c44..b1ef2460eb6427f08e9155786357049316f7f6d8 100644 --- a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.digest_message.yml +++ b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.digest_message.yml @@ -92,6 +92,7 @@ content: region: content hidden: changed: true + download_count: true field_ad_access_url: true field_ad_creation_date: true field_ad_file_size: true diff --git a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result.yml b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result.yml index 464e52476a3bbcde7f6e19c4b1aceccd8e23746c..865b2cdb148b16412e3f52fe5a546edd3d9a858e 100644 --- a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result.yml +++ b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result.yml @@ -136,6 +136,7 @@ content: hidden: changed: true created: true + download_count: true field_ad_creation_date: true field_ad_gitb_compliant: true field_ad_modification_date: true diff --git a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result_featured.yml b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result_featured.yml index 4bf756f0ffe35f751be443236ea54aec9c29e8f8..e04b774677af4b49bcc30ef1d10d4540f41700ed 100644 --- a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result_featured.yml +++ b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.search_result_featured.yml @@ -136,6 +136,7 @@ content: hidden: changed: true created: true + download_count: true field_ad_creation_date: true field_ad_gitb_compliant: true field_ad_modification_date: true diff --git a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_featured.yml b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_featured.yml index 9becc93e1cb53c39b364100976657084598b5a58..521cc3be8e1b83311eed4f2c8fd7fb669b059f0c 100644 --- a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_featured.yml +++ b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_featured.yml @@ -64,6 +64,7 @@ content: hidden: changed: true created: true + download_count: true field_ad_description: true field_ad_format: true field_ad_gitb_compliant: true diff --git a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_tile.yml b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_tile.yml index 62ca5e746c8aaa043d6454086f7ec3b2f5f47ef6..50fde1d9d0a21c1567a6b203abf5da8cbd68dfac 100644 --- a/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_tile.yml +++ b/config/sync/core.entity_view_display.rdf_entity.asset_distribution.view_mode_tile.yml @@ -64,6 +64,7 @@ content: hidden: changed: true created: true + download_count: true field_ad_description: true field_ad_format: true field_ad_gitb_compliant: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.about.yml b/config/sync/core.entity_view_display.rdf_entity.collection.about.yml index dc1022a213905be217f37d6e8e44190d63c5191f..7e141027c0859a97b2b34e768bea0b13f24f911b 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.about.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.about.yml @@ -161,6 +161,7 @@ content: hidden: changed: true created: true + featured: true field_ar_affiliates: true field_ar_banner: true field_ar_logo: true @@ -182,4 +183,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.compact.yml b/config/sync/core.entity_view_display.rdf_entity.collection.compact.yml index cf22ded51eaec9d3e9f552403ac98b59b728cb1e..983622978269f5356b7e0bbd1ab1b6688d6825dd 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.compact.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.compact.yml @@ -60,6 +60,7 @@ content: hidden: changed: true created: true + featured: true field_ar_abstract: true field_ar_access_url: true field_ar_affiliates: true @@ -87,4 +88,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.default.yml b/config/sync/core.entity_view_display.rdf_entity.collection.default.yml index 195af87fcafd8697ac5d6c47c220dbf6dc167efc..6ae233f39421992b30d2f70bc157852845de3b12 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.default.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.default.yml @@ -130,6 +130,7 @@ content: hidden: changed: true created: true + featured: true field_ar_access_url: true field_ar_affiliates: true field_ar_banner: true @@ -152,4 +153,5 @@ hidden: members: true og_group: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.digest_message_header.yml b/config/sync/core.entity_view_display.rdf_entity.collection.digest_message_header.yml index e3a07522aeb063358fb80ea26aadbc31272452a2..23cd285e1adf4ebdb4236bf65da3a9113d2eb617 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.digest_message_header.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.digest_message_header.yml @@ -45,6 +45,7 @@ content: hidden: changed: true created: true + featured: true field_ar_abstract: true field_ar_access_url: true field_ar_affiliates: true @@ -73,4 +74,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.explore_item.yml b/config/sync/core.entity_view_display.rdf_entity.collection.explore_item.yml index b4b453b554dfede1fc88de009899e77fdc513553..e48945677d738a0c40a02a49b14d66d58717f715 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.explore_item.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.explore_item.yml @@ -199,6 +199,7 @@ content: region: content hidden: changed: true + featured: true field_ar_abstract: true field_ar_access_url: true field_ar_affiliates: true @@ -225,4 +226,5 @@ hidden: rdf_entity_field_collection_content_inline_facets: true rdf_entity_field_collection_content_top: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.group_header.yml b/config/sync/core.entity_view_display.rdf_entity.collection.group_header.yml index 9036df731cb77d7eac52382741612628d4768aad..fe33d974fff07a621e12fabedd29e1f50de9d1ff 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.group_header.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.group_header.yml @@ -100,6 +100,7 @@ content: hidden: changed: true created: true + featured: true field_ar_abstract: true field_ar_access_url: true field_ar_affiliates: true @@ -123,3 +124,4 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.rdf_draft.yml b/config/sync/core.entity_view_display.rdf_entity.collection.rdf_draft.yml index ce1ad1ee15bab77caa635133d7dfa4129dab8d94..0d42e77411ada3f08a5a0715f5428253cc79d552 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.rdf_draft.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.rdf_draft.yml @@ -138,6 +138,7 @@ content: hidden: changed: true created: true + featured: true field_ar_affiliates: true field_ar_banner: true field_ar_logo: true @@ -155,4 +156,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.search_result.yml b/config/sync/core.entity_view_display.rdf_entity.collection.search_result.yml index 231d182f12dd4a357e464227f200749ca9ff9515..720e92d03c4a669555ab0e620e18d156bb274615 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.search_result.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.search_result.yml @@ -120,6 +120,7 @@ content: region: content hidden: changed: true + featured: true field_ar_abstract: true field_ar_access_url: true field_ar_affiliates: true @@ -145,4 +146,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.search_result_featured.yml b/config/sync/core.entity_view_display.rdf_entity.collection.search_result_featured.yml index bd42028b776e46816162d5c888abbc108eecee20..aa6bff3bf481e774f527f4a9503e1be1c76c8bd0 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.search_result_featured.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.search_result_featured.yml @@ -133,6 +133,7 @@ content: region: content hidden: changed: true + featured: true field_ar_abstract: true field_ar_access_url: true field_ar_affiliates: true @@ -157,4 +158,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_featured.yml b/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_featured.yml index 9cd91f87734cbff0e00fb3150c8d4c13c9c8d5cd..4aff0d0908b9d1d9a507affd7cc2323561248f28 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_featured.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_featured.yml @@ -82,6 +82,7 @@ content: hidden: changed: true created: true + featured: true field_ar_access_url: true field_ar_affiliates: true field_ar_banner: true @@ -107,4 +108,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_tile.yml b/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_tile.yml index 5de65b2dfff9d3e619ab0f19381c302c61bf5b99..82fd6e451e17183beb7c2406a8f51506499464da 100644 --- a/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_tile.yml +++ b/config/sync/core.entity_view_display.rdf_entity.collection.view_mode_tile.yml @@ -82,6 +82,7 @@ content: hidden: changed: true created: true + featured: true field_ar_access_url: true field_ar_affiliates: true field_ar_banner: true @@ -107,4 +108,5 @@ hidden: rdf_entity_field_collection_content_top: true read_more: true search_api_excerpt: true + settings: true solutions: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.about.yml b/config/sync/core.entity_view_display.rdf_entity.solution.about.yml index 6999fdc94bb8c00fb2915f51149ed0aee37b433b..0c57315d9f170e70c8235a8de54269c3d25b9035 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.about.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.about.yml @@ -350,6 +350,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_affiliations_requests: true field_is_banner: true field_is_content: true @@ -378,9 +380,11 @@ hidden: label: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.compact.yml b/config/sync/core.entity_view_display.rdf_entity.solution.compact.yml index 251a57d847943e3c72273bc9d4d2860316500a26..4432a56869edf2c61ab1c0c0b8687f48c8366040 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.compact.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.compact.yml @@ -101,6 +101,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -143,9 +145,11 @@ hidden: field_topic: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.default.yml b/config/sync/core.entity_view_display.rdf_entity.solution.default.yml index 428b01d3559f152efd4b2e6402d95e27e9931c5e..9de28c27013b6de7da0c8666727f8fe4aa633bc9 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.default.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.default.yml @@ -140,6 +140,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -181,6 +183,8 @@ hidden: label: true langcode: true og_group: true + pinned_in: true + related_solution: true releases_overview: true search_api_excerpt: true share_link: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.digest_message.yml b/config/sync/core.entity_view_display.rdf_entity.solution.digest_message.yml index 26b019000d9faa48125fb3e21c67bea707ffd68a..95e3eb7ea0f2c163decd4404e387d73d51cefdd0 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.digest_message.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.digest_message.yml @@ -91,6 +91,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -133,9 +135,11 @@ hidden: field_topic: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.digest_message_header.yml b/config/sync/core.entity_view_display.rdf_entity.solution.digest_message_header.yml index 7c9621216aa3ed5c5536eafd56d5ed0688b76d95..88eca7b31d49168d9f1cc153bc517019b3998714 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.digest_message_header.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.digest_message_header.yml @@ -66,6 +66,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -109,9 +111,11 @@ hidden: field_topic: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.eif_perspective.yml b/config/sync/core.entity_view_display.rdf_entity.solution.eif_perspective.yml new file mode 100644 index 0000000000000000000000000000000000000000..92d2bd44da4fba14c63b3de350be626634c92575 --- /dev/null +++ b/config/sync/core.entity_view_display.rdf_entity.solution.eif_perspective.yml @@ -0,0 +1,226 @@ +uuid: 8b63515e-9b50-4d1d-9235-1120a065c6b1 +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.rdf_entity.eif_perspective + - field.field.rdf_entity.solution.field_is_actor + - field.field.rdf_entity.solution.field_is_affiliations_requests + - field.field.rdf_entity.solution.field_is_banner + - field.field.rdf_entity.solution.field_is_business_process + - field.field.rdf_entity.solution.field_is_contact_information + - field.field.rdf_entity.solution.field_is_content + - field.field.rdf_entity.solution.field_is_content_creation + - field.field.rdf_entity.solution.field_is_description + - field.field.rdf_entity.solution.field_is_distribution + - field.field.rdf_entity.solution.field_is_documentation + - field.field.rdf_entity.solution.field_is_eif_category + - field.field.rdf_entity.solution.field_is_eif_recommendation + - field.field.rdf_entity.solution.field_is_has_version + - field.field.rdf_entity.solution.field_is_included_asset + - field.field.rdf_entity.solution.field_is_issue_tracker + - field.field.rdf_entity.solution.field_is_landing_page + - field.field.rdf_entity.solution.field_is_language + - field.field.rdf_entity.solution.field_is_logo + - field.field.rdf_entity.solution.field_is_metrics_page + - field.field.rdf_entity.solution.field_is_moderation + - field.field.rdf_entity.solution.field_is_owner + - field.field.rdf_entity.solution.field_is_product_type + - field.field.rdf_entity.solution.field_is_related_solutions + - field.field.rdf_entity.solution.field_is_shared_in + - field.field.rdf_entity.solution.field_is_show_eira_related + - field.field.rdf_entity.solution.field_is_solution_type + - field.field.rdf_entity.solution.field_is_source_code_repository + - field.field.rdf_entity.solution.field_is_standardization_level + - field.field.rdf_entity.solution.field_is_state + - field.field.rdf_entity.solution.field_is_test_resource_type + - field.field.rdf_entity.solution.field_is_translation + - field.field.rdf_entity.solution.field_is_version + - field.field.rdf_entity.solution.field_is_webdav_creation + - field.field.rdf_entity.solution.field_is_webdav_url + - field.field.rdf_entity.solution.field_is_wiki + - field.field.rdf_entity.solution.field_keywords + - field.field.rdf_entity.solution.field_short_id + - field.field.rdf_entity.solution.field_site_featured + - field.field.rdf_entity.solution.field_spatial_coverage + - field.field.rdf_entity.solution.field_status + - field.field.rdf_entity.solution.field_topic + - rdf_entity.rdfentity.solution + - responsive_image.styles.highlighted_content + module: + - field_delimiter + - field_formatter_range + - field_group + - layout_builder + - responsive_image + - smart_trim + - template_suggestion + - user +third_party_settings: + field_group: + group_solution_abstract_wrapper: + children: { } + label: 'Abstract wrapper' + parent_name: '' + region: hidden + weight: 60 + format_type: html_element + format_settings: + classes: '' + id: '' + element: div + show_label: false + label_element: h3 + attributes: '' + effect: none + speed: fast + layout_builder: + enabled: false + allow_custom: false +id: rdf_entity.solution.eif_perspective +targetEntityType: rdf_entity +bundle: solution +mode: eif_perspective +content: + eif_perspective: + type: entity_reference_entity_view + label: hidden + settings: + view_mode: eif_perspective + link: false + third_party_settings: + template_suggestion: + template_suggestion: '' + weight: 6 + region: content + field_is_description: + type: smart_trim + label: hidden + settings: + trim_length: 500 + trim_type: chars + trim_suffix: … + wrap_output: false + wrap_class: trimmed + more_link: false + more_class: more-link + more_text: More + summary_handler: full + trim_options: + text: true + trim_zero: false + third_party_settings: + template_suggestion: + template_suggestion: p_wrapper + weight: 2 + region: content + field_is_logo: + type: responsive_image + label: hidden + settings: + responsive_image_style: highlighted_content + image_link: '' + third_party_settings: + template_suggestion: + template_suggestion: '' + weight: 5 + region: content + field_is_owner: + type: entity_reference_label + label: hidden + settings: + link: false + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 1 + region: content + field_is_solution_type: + type: entity_reference_label + label: hidden + settings: + link: false + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 3 + region: content + label: + type: string + label: hidden + settings: + link_to_entity: false + third_party_settings: { } + weight: 0 + region: content + read_more: + settings: { } + third_party_settings: { } + weight: 4 + region: content +hidden: + changed: true + collections: true + created: true + download_total: true + featured: true + field_is_actor: true + field_is_affiliations_requests: true + field_is_banner: true + field_is_business_process: true + field_is_contact_information: true + field_is_content: true + field_is_content_creation: true + field_is_distribution: true + field_is_documentation: true + field_is_eif_category: true + field_is_eif_recommendation: true + field_is_has_version: true + field_is_included_asset: true + field_is_issue_tracker: true + field_is_landing_page: true + field_is_language: true + field_is_metrics_page: true + field_is_moderation: true + field_is_product_type: true + field_is_related_solutions: true + field_is_shared_in: true + field_is_show_eira_related: true + field_is_source_code_repository: true + field_is_standardization_level: true + field_is_state: true + field_is_test_resource_type: true + field_is_translation: true + field_is_version: true + field_is_webdav_creation: true + field_is_webdav_url: true + field_is_wiki: true + field_keywords: true + field_short_id: true + field_site_featured: true + field_spatial_coverage: true + field_status: true + field_topic: true + langcode: true + og_group: true + pinned_in: true + rdf_entity_field_is_content_inline_facets: true + rdf_entity_field_is_content_top: true + related_solution: true + related_solutions: true + releases_overview: true + search_api_excerpt: true + share_link: true + solution_subscribe: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.explore_item.yml b/config/sync/core.entity_view_display.rdf_entity.solution.explore_item.yml index f8bc4a550e18dcd5ea0d26e6f9de2eca977f7bdc..89abd59f16b3c66a971e27baa6616fd2e42d3192 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.explore_item.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.explore_item.yml @@ -224,6 +224,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -266,8 +268,10 @@ hidden: field_topic: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.group_header.yml b/config/sync/core.entity_view_display.rdf_entity.solution.group_header.yml index 3938a1bbdc182e625653a0aee8ee293d66fab4d6..8603af2ed47e01a2dcaeb825111ac5401046e14e 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.group_header.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.group_header.yml @@ -125,6 +125,8 @@ content: hidden: changed: true created: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_business_process: true @@ -165,9 +167,11 @@ hidden: field_status: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true search_api_excerpt: true share_link: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.highlighted.yml b/config/sync/core.entity_view_display.rdf_entity.solution.highlighted.yml index f7aaa9387d052dec0d72505f195de64f83f497e7..61a41269cdf8f85c182fc40560b22764eeb3cc16 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.highlighted.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.highlighted.yml @@ -148,6 +148,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -187,9 +189,11 @@ hidden: field_status: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.rdf_draft.yml b/config/sync/core.entity_view_display.rdf_entity.solution.rdf_draft.yml index 33af3e519a148c5bfed10134c2e5a151b3c62ee8..72d1afdb046270be7b47f4df980bcf7231db3e7b 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.rdf_draft.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.rdf_draft.yml @@ -312,6 +312,8 @@ hidden: collections: true created: true download_total: true + eif_perspective: true + featured: true field_is_affiliations_requests: true field_is_banner: true field_is_content: true @@ -328,9 +330,11 @@ hidden: field_site_featured: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.search_result.yml b/config/sync/core.entity_view_display.rdf_entity.solution.search_result.yml index ead99d3a69f242f06ad315abb8095a2ba41a91cd..83fd397efdb3c5fea7a346a9d364d068213a3d03 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.search_result.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.search_result.yml @@ -146,6 +146,8 @@ content: hidden: collections: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -187,9 +189,11 @@ hidden: field_status: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.search_result_featured.yml b/config/sync/core.entity_view_display.rdf_entity.solution.search_result_featured.yml index e7793bca092280015777216893699a78d2ab2c21..2e10447b851f217c3cf86ba27b3487678bbec336 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.search_result_featured.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.search_result_featured.yml @@ -163,6 +163,8 @@ content: hidden: collections: true download_total: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -203,9 +205,11 @@ hidden: field_status: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_featured.yml b/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_featured.yml index ff07fff9c4bfc0a7f11e0c3a8f7000340dd87827..e8aee419772b8aab0f60fb05a91174741bc04175 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_featured.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_featured.yml @@ -105,6 +105,8 @@ hidden: changed: true collections: true created: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -146,9 +148,11 @@ hidden: field_topic: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_search_list_item.yml b/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_search_list_item.yml new file mode 100644 index 0000000000000000000000000000000000000000..a40a0af897f4eeb920276b6155fbb3b7ca9eeacd --- /dev/null +++ b/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_search_list_item.yml @@ -0,0 +1,191 @@ +uuid: 8af7cb98-44cf-42e1-a4c1-027715f7088b +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.rdf_entity.view_mode_search_list_item + - field.field.rdf_entity.solution.field_is_actor + - field.field.rdf_entity.solution.field_is_affiliations_requests + - field.field.rdf_entity.solution.field_is_banner + - field.field.rdf_entity.solution.field_is_business_process + - field.field.rdf_entity.solution.field_is_contact_information + - field.field.rdf_entity.solution.field_is_content + - field.field.rdf_entity.solution.field_is_content_creation + - field.field.rdf_entity.solution.field_is_description + - field.field.rdf_entity.solution.field_is_distribution + - field.field.rdf_entity.solution.field_is_documentation + - field.field.rdf_entity.solution.field_is_eif_category + - field.field.rdf_entity.solution.field_is_eif_recommendation + - field.field.rdf_entity.solution.field_is_has_version + - field.field.rdf_entity.solution.field_is_included_asset + - field.field.rdf_entity.solution.field_is_issue_tracker + - field.field.rdf_entity.solution.field_is_landing_page + - field.field.rdf_entity.solution.field_is_language + - field.field.rdf_entity.solution.field_is_logo + - field.field.rdf_entity.solution.field_is_metrics_page + - field.field.rdf_entity.solution.field_is_moderation + - field.field.rdf_entity.solution.field_is_owner + - field.field.rdf_entity.solution.field_is_product_type + - field.field.rdf_entity.solution.field_is_related_solutions + - field.field.rdf_entity.solution.field_is_shared_in + - field.field.rdf_entity.solution.field_is_show_eira_related + - field.field.rdf_entity.solution.field_is_solution_type + - field.field.rdf_entity.solution.field_is_source_code_repository + - field.field.rdf_entity.solution.field_is_standardization_level + - field.field.rdf_entity.solution.field_is_state + - field.field.rdf_entity.solution.field_is_test_resource_type + - field.field.rdf_entity.solution.field_is_translation + - field.field.rdf_entity.solution.field_is_version + - field.field.rdf_entity.solution.field_is_webdav_creation + - field.field.rdf_entity.solution.field_is_webdav_url + - field.field.rdf_entity.solution.field_is_wiki + - field.field.rdf_entity.solution.field_keywords + - field.field.rdf_entity.solution.field_short_id + - field.field.rdf_entity.solution.field_site_featured + - field.field.rdf_entity.solution.field_spatial_coverage + - field.field.rdf_entity.solution.field_status + - field.field.rdf_entity.solution.field_topic + - rdf_entity.rdfentity.solution + - responsive_image.styles.teaser + module: + - field_group + - joinup_html_stripper + - layout_builder + - options + - responsive_image + - template_suggestion + - user +third_party_settings: + field_group: + group_solution_abstract_wrapper: + children: + - read_more + label: 'Abstract wrapper' + parent_name: '' + region: hidden + weight: 59 + format_type: html_element + format_settings: + classes: '' + id: '' + element: div + show_label: false + label_element: h3 + attributes: '' + effect: none + speed: fast + layout_builder: + enabled: false + allow_custom: false +id: rdf_entity.solution.view_mode_search_list_item +targetEntityType: rdf_entity +bundle: solution +mode: view_mode_search_list_item +content: + field_is_description: + type: joinup_html_stripper_stripped + label: hidden + settings: + trim_length: 200 + third_party_settings: + template_suggestion: + template_suggestion: p_wrapper + weight: 3 + region: content + field_is_eif_category: + type: list_default + label: hidden + settings: { } + third_party_settings: { } + weight: 4 + region: content + field_is_logo: + type: responsive_image + label: hidden + settings: + responsive_image_style: teaser + image_link: '' + third_party_settings: + template_suggestion: + template_suggestion: '' + weight: 0 + region: content + field_is_owner: + type: entity_reference_label + label: hidden + settings: + link: true + third_party_settings: { } + weight: 5 + region: content + field_topic: + type: entity_reference_label + label: hidden + settings: + link: true + third_party_settings: { } + weight: 2 + region: content + label: + type: string + label: hidden + settings: + link_to_entity: false + third_party_settings: { } + weight: 1 + region: content +hidden: + changed: true + collections: true + created: true + download_total: true + eif_perspective: true + featured: true + field_is_actor: true + field_is_affiliations_requests: true + field_is_banner: true + field_is_business_process: true + field_is_contact_information: true + field_is_content: true + field_is_content_creation: true + field_is_distribution: true + field_is_documentation: true + field_is_eif_recommendation: true + field_is_has_version: true + field_is_included_asset: true + field_is_issue_tracker: true + field_is_landing_page: true + field_is_language: true + field_is_metrics_page: true + field_is_moderation: true + field_is_product_type: true + field_is_related_solutions: true + field_is_shared_in: true + field_is_show_eira_related: true + field_is_solution_type: true + field_is_source_code_repository: true + field_is_standardization_level: true + field_is_state: true + field_is_test_resource_type: true + field_is_translation: true + field_is_version: true + field_is_webdav_creation: true + field_is_webdav_url: true + field_is_wiki: true + field_keywords: true + field_short_id: true + field_site_featured: true + field_spatial_coverage: true + field_status: true + langcode: true + og_group: true + pinned_in: true + rdf_entity_field_is_content_inline_facets: true + rdf_entity_field_is_content_top: true + read_more: true + related_solution: true + related_solutions: true + releases_overview: true + search_api_excerpt: true + share_link: true + solution_subscribe: true diff --git a/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_tile.yml b/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_tile.yml index 5283d566a9b744154a9b18df1d214439e34c5090..ccdec28f9f5e3f7f6f962e7127df7fceb222ebb8 100644 --- a/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_tile.yml +++ b/config/sync/core.entity_view_display.rdf_entity.solution.view_mode_tile.yml @@ -105,6 +105,8 @@ hidden: changed: true collections: true created: true + eif_perspective: true + featured: true field_is_actor: true field_is_affiliations_requests: true field_is_banner: true @@ -146,9 +148,11 @@ hidden: field_topic: true langcode: true og_group: true + pinned_in: true rdf_entity_field_is_content_inline_facets: true rdf_entity_field_is_content_top: true read_more: true + related_solution: true related_solutions: true releases_overview: true search_api_excerpt: true diff --git a/config/sync/core.entity_view_display.rdf_meta_entity.eif_perspective.default.yml b/config/sync/core.entity_view_display.rdf_meta_entity.eif_perspective.default.yml new file mode 100644 index 0000000000000000000000000000000000000000..9f0e9b9ceae4475c389d7b256cb475b6c09229bf --- /dev/null +++ b/config/sync/core.entity_view_display.rdf_meta_entity.eif_perspective.default.yml @@ -0,0 +1,113 @@ +uuid: 6f97a0a4-a302-454b-a9dc-81d57be0e344 +langcode: en +status: true +dependencies: + config: + - field.field.rdf_meta_entity.eif_perspective.eif_layer + - field.field.rdf_meta_entity.eif_perspective.eif_model + - field.field.rdf_meta_entity.eif_perspective.eif_principle + - field.field.rdf_meta_entity.eif_perspective.eif_recommendation + - field.field.rdf_meta_entity.eif_perspective.field_eif_description + - field.field.rdf_meta_entity.eif_perspective.field_eif_solution_type + - rdf_meta_entity.type.eif_perspective + module: + - field_delimiter + - field_formatter_range + - layout_builder + - template_suggestion + - text +third_party_settings: + layout_builder: + enabled: false + allow_custom: false +id: rdf_meta_entity.eif_perspective.default +targetEntityType: rdf_meta_entity +bundle: eif_perspective +mode: default +content: + eif_layer: + type: entity_reference_label + label: above + settings: + link: true + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 3 + region: content + eif_model: + type: entity_reference_label + label: above + settings: + link: true + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 4 + region: content + eif_principle: + type: entity_reference_label + label: above + settings: + link: true + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 2 + region: content + eif_recommendation: + type: entity_reference_entity_view + label: hidden + settings: + view_mode: default + link: false + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 5 + region: content + field_eif_description: + type: text_default + label: hidden + settings: { } + third_party_settings: { } + weight: 0 + region: content + field_eif_solution_type: + type: entity_reference_label + label: hidden + settings: + link: true + third_party_settings: { } + weight: 1 + region: content +hidden: + changed: true + created: true + label: true + search_api_excerpt: true + target: true diff --git a/config/sync/core.entity_view_display.rdf_meta_entity.eif_perspective.eif_perspective.yml b/config/sync/core.entity_view_display.rdf_meta_entity.eif_perspective.eif_perspective.yml new file mode 100644 index 0000000000000000000000000000000000000000..53cc3fecf4edf5b3f0368617d00b7da7e0cd46d5 --- /dev/null +++ b/config/sync/core.entity_view_display.rdf_meta_entity.eif_perspective.eif_perspective.yml @@ -0,0 +1,129 @@ +uuid: 8d1626f3-4d3e-40ec-8742-852090e55f49 +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.rdf_meta_entity.eif_perspective + - field.field.rdf_meta_entity.eif_perspective.eif_layer + - field.field.rdf_meta_entity.eif_perspective.eif_model + - field.field.rdf_meta_entity.eif_perspective.eif_principle + - field.field.rdf_meta_entity.eif_perspective.eif_recommendation + - field.field.rdf_meta_entity.eif_perspective.field_eif_description + - field.field.rdf_meta_entity.eif_perspective.field_eif_solution_type + - rdf_meta_entity.type.eif_perspective + module: + - field_delimiter + - field_formatter_range + - layout_builder + - template_suggestion + - text +third_party_settings: + layout_builder: + enabled: false + allow_custom: false +id: rdf_meta_entity.eif_perspective.eif_perspective +targetEntityType: rdf_meta_entity +bundle: eif_perspective +mode: eif_perspective +content: + eif_layer: + type: entity_reference_label + label: hidden + settings: + link: true + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 4 + region: content + eif_model: + type: entity_reference_label + label: hidden + settings: + link: true + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 5 + region: content + eif_principle: + type: entity_reference_label + label: hidden + settings: + link: true + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 3 + region: content + eif_recommendation: + type: entity_reference_entity_view + label: hidden + settings: + view_mode: default + link: false + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 6 + region: content + field_eif_description: + type: text_default + label: inline + settings: { } + third_party_settings: { } + weight: 1 + region: content + field_eif_solution_type: + type: entity_reference_label + label: inline + settings: + link: false + third_party_settings: + field_delimiter: + delimiter: '' + field_formatter_range: + order: 0 + limit: 0 + offset: 0 + template_suggestion: + template_suggestion: '' + weight: 2 + region: content + label: + type: string + label: hidden + settings: + link_to_entity: false + third_party_settings: { } + weight: 0 + region: content +hidden: + changed: true + created: true + search_api_excerpt: true + target: true diff --git a/config/sync/core.entity_view_display.taxonomy_term.eif_recommendation.eif_recommendation.yml b/config/sync/core.entity_view_display.taxonomy_term.eif_recommendation.eif_recommendation.yml new file mode 100644 index 0000000000000000000000000000000000000000..61fe9c803b5975ea259bfd6c10d30f2512c1ce15 --- /dev/null +++ b/config/sync/core.entity_view_display.taxonomy_term.eif_recommendation.eif_recommendation.yml @@ -0,0 +1,36 @@ +uuid: d73cd510-d4e1-4e7d-80ef-439fbe16858c +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.taxonomy_term.eif_recommendation + - field.field.taxonomy_term.eif_recommendation.field_eif_identifier + - field.field.taxonomy_term.eif_recommendation.field_eif_related_term + - taxonomy.vocabulary.eif_recommendation + module: + - layout_builder + - template_suggestion +third_party_settings: + layout_builder: + enabled: false + allow_custom: false +id: taxonomy_term.eif_recommendation.eif_recommendation +targetEntityType: taxonomy_term +bundle: eif_recommendation +mode: eif_recommendation +content: + field_eif_related_term: + type: entity_reference_label + label: hidden + settings: + link: false + third_party_settings: + template_suggestion: + template_suggestion: '' + weight: 0 + region: content +hidden: + description: true + field_eif_identifier: true + langcode: true + search_api_excerpt: true diff --git a/config/sync/core.entity_view_mode.rdf_entity.eif_perspective.yml b/config/sync/core.entity_view_mode.rdf_entity.eif_perspective.yml new file mode 100644 index 0000000000000000000000000000000000000000..1ec9315390693facbc6f95974e31c16060d8b866 --- /dev/null +++ b/config/sync/core.entity_view_mode.rdf_entity.eif_perspective.yml @@ -0,0 +1,10 @@ +uuid: d12aec06-877c-40f0-a4c1-b43b5e259ee6 +langcode: en +status: true +dependencies: + module: + - rdf_entity +id: rdf_entity.eif_perspective +label: 'EIF Perspective' +targetEntityType: rdf_entity +cache: true diff --git a/config/sync/core.entity_view_mode.rdf_meta_entity.eif_perspective.yml b/config/sync/core.entity_view_mode.rdf_meta_entity.eif_perspective.yml new file mode 100644 index 0000000000000000000000000000000000000000..18ae9afa402b86bcd0868335740520611a21978a --- /dev/null +++ b/config/sync/core.entity_view_mode.rdf_meta_entity.eif_perspective.yml @@ -0,0 +1,10 @@ +uuid: af376d5b-5f7a-4050-95c1-e624ca822f9d +langcode: en +status: true +dependencies: + module: + - rdf_meta_entity +id: rdf_meta_entity.eif_perspective +label: 'EIF Perspective' +targetEntityType: rdf_meta_entity +cache: true diff --git a/config/sync/core.entity_view_mode.taxonomy_term.eif_recommendation.yml b/config/sync/core.entity_view_mode.taxonomy_term.eif_recommendation.yml new file mode 100644 index 0000000000000000000000000000000000000000..d4a24576e02707532cfa54f35afcb5b9b06a9727 --- /dev/null +++ b/config/sync/core.entity_view_mode.taxonomy_term.eif_recommendation.yml @@ -0,0 +1,10 @@ +uuid: 9f3a81f9-ff69-4a20-b3de-061244b5d525 +langcode: en +status: true +dependencies: + module: + - taxonomy +id: taxonomy_term.eif_recommendation +label: 'EIF recommendation inline' +targetEntityType: taxonomy_term +cache: true diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index e4c3ba206d9739a427dd0004753667b451dbcaf1..49fcc1043b49629ead703f6a6571b34fdfb48a8f 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -168,6 +168,7 @@ module: rdf_entity: 0 rdf_entity_provenance: 0 rdf_export: 0 + rdf_meta_entity: 0 rdf_schema_field_validation: 0 rdf_taxonomy: 0 redirect: 0 diff --git a/config/sync/eif.eif_wrapper_type.recommendation.yml b/config/sync/eif.eif_wrapper_type.recommendation.yml new file mode 100644 index 0000000000000000000000000000000000000000..7017bcac264dfb47afc0ba745c0d73d95e7357a8 --- /dev/null +++ b/config/sync/eif.eif_wrapper_type.recommendation.yml @@ -0,0 +1,6 @@ +uuid: 857366b9-374e-45c4-8bfd-7ca136ef447d +langcode: en +status: true +dependencies: { } +id: recommendation +label: 'Qualified concept recommendation' diff --git a/config/sync/facets.facet_source.search_api__views_block__solutions_meta_entity__solutions_meta_entity_block.yml b/config/sync/facets.facet_source.search_api__views_block__solutions_meta_entity__solutions_meta_entity_block.yml new file mode 100644 index 0000000000000000000000000000000000000000..f2027cbe47cf741ef30025f82006242bf1145e3f --- /dev/null +++ b/config/sync/facets.facet_source.search_api__views_block__solutions_meta_entity__solutions_meta_entity_block.yml @@ -0,0 +1,9 @@ +uuid: a52b6946-52b1-4e8a-b60d-25af807b9703 +langcode: en +status: true +dependencies: { } +id: search_api__views_block__solutions_meta_entity__solutions_meta_entity_block +name: 'search_api:views_block__solutions_meta_entity__solutions_meta_entity_block' +filter_key: null +url_processor: query_string +breadcrumb: { } diff --git a/config/sync/field.field.eif_wrapper.recommendation.term.yml b/config/sync/field.field.eif_wrapper.recommendation.term.yml new file mode 100644 index 0000000000000000000000000000000000000000..9abf1dfd3915c2ff1119a2dcb10c2951c942f4a1 --- /dev/null +++ b/config/sync/field.field.eif_wrapper.recommendation.term.yml @@ -0,0 +1,29 @@ +uuid: 4275ea66-18c2-4297-bf0f-b753bb6083b0 +langcode: en +status: true +dependencies: + config: + - eif.eif_wrapper_type.recommendation + - field.storage.eif_wrapper.term + - taxonomy.vocabulary.eif_recommendation +id: eif_wrapper.recommendation.term +field_name: term +entity_type: eif_wrapper +bundle: recommendation +label: 'EIF qualifier' +description: '' +required: true +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:taxonomy_term' + handler_settings: + target_bundles: + eif_recommendation: eif_recommendation + sort: + field: name + direction: asc + auto_create: false + auto_create_bundle: '' +field_type: entity_reference diff --git a/config/sync/field.field.message.group_content_subscription.field_group_content.yml b/config/sync/field.field.message.group_content_subscription.field_group_content.yml index f0e697098399461c6844c9463ba6953298ce39c7..045568be36c7da47d0b7cd8b50e664d9f096b654 100644 --- a/config/sync/field.field.message.group_content_subscription.field_group_content.yml +++ b/config/sync/field.field.message.group_content_subscription.field_group_content.yml @@ -283,4 +283,16 @@ settings: solr_request_handler: handler: 'default:solr_request_handler' handler_settings: { } + rdf_meta_entity: + handler: 'default:rdf_meta_entity' + handler_settings: { } + rdf_meta_entity_type: + handler: 'default:rdf_meta_entity_type' + handler_settings: { } + eif_wrapper: + handler: 'default:eif_wrapper' + handler_settings: { } + eif_wrapper_type: + handler: 'default:eif_wrapper_type' + handler_settings: { } field_type: dynamic_entity_reference diff --git a/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_layer.yml b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_layer.yml new file mode 100644 index 0000000000000000000000000000000000000000..720ef3440d7f6662b6d106e2f9408547303da700 --- /dev/null +++ b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_layer.yml @@ -0,0 +1,29 @@ +uuid: ac3cd852-008b-4cb2-8c7a-18ff8991c9cc +langcode: en +status: true +dependencies: + config: + - field.storage.rdf_meta_entity.eif_layer + - rdf_meta_entity.type.eif_perspective + - taxonomy.vocabulary.eif_interoperability_layer +id: rdf_meta_entity.eif_perspective.eif_layer +field_name: eif_layer +entity_type: rdf_meta_entity +bundle: eif_perspective +label: Layer +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:taxonomy_term' + handler_settings: + target_bundles: + eif_interoperability_layer: eif_interoperability_layer + sort: + field: name + direction: asc + auto_create: false + auto_create_bundle: '' +field_type: entity_reference diff --git a/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_model.yml b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_model.yml new file mode 100644 index 0000000000000000000000000000000000000000..18ed5593f2732e02bf6902c1fc30fae0f5b1a810 --- /dev/null +++ b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_model.yml @@ -0,0 +1,29 @@ +uuid: ab1e68d5-4e15-4edd-bc62-cf6322080ca7 +langcode: en +status: true +dependencies: + config: + - field.storage.rdf_meta_entity.eif_model + - rdf_meta_entity.type.eif_perspective + - taxonomy.vocabulary.eif_conceptual_model +id: rdf_meta_entity.eif_perspective.eif_model +field_name: eif_model +entity_type: rdf_meta_entity +bundle: eif_perspective +label: Model +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:taxonomy_term' + handler_settings: + target_bundles: + eif_conceptual_model: eif_conceptual_model + sort: + field: name + direction: asc + auto_create: false + auto_create_bundle: '' +field_type: entity_reference diff --git a/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_principle.yml b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_principle.yml new file mode 100644 index 0000000000000000000000000000000000000000..b72d8ef32cfea1a8e7fccd0689efa4b8ccb731ec --- /dev/null +++ b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_principle.yml @@ -0,0 +1,29 @@ +uuid: 5c2b571a-a55b-4a76-afe8-ca4bcccaca68 +langcode: en +status: true +dependencies: + config: + - field.storage.rdf_meta_entity.eif_principle + - rdf_meta_entity.type.eif_perspective + - taxonomy.vocabulary.eif_principle +id: rdf_meta_entity.eif_perspective.eif_principle +field_name: eif_principle +entity_type: rdf_meta_entity +bundle: eif_perspective +label: Principle +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:taxonomy_term' + handler_settings: + target_bundles: + eif_principle: eif_principle + sort: + field: name + direction: asc + auto_create: false + auto_create_bundle: '' +field_type: entity_reference diff --git a/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_recommendation.yml b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_recommendation.yml new file mode 100644 index 0000000000000000000000000000000000000000..80b49a582f0a606f384e2d097ee0b5964413cbf7 --- /dev/null +++ b/config/sync/field.field.rdf_meta_entity.eif_perspective.eif_recommendation.yml @@ -0,0 +1,27 @@ +uuid: 812114c4-72f3-4b6d-99fd-a0bdfb023fae +langcode: en +status: true +dependencies: + config: + - field.storage.rdf_meta_entity.eif_recommendation + - rdf_meta_entity.type.eif_perspective +id: rdf_meta_entity.eif_perspective.eif_recommendation +field_name: eif_recommendation +entity_type: rdf_meta_entity +bundle: eif_perspective +label: Recommendation +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:eif_wrapper' + handler_settings: + target_bundles: + recommendation: recommendation + sort: + field: _none + direction: ASC + auto_create: false +field_type: entity_reference diff --git a/config/sync/field.field.rdf_meta_entity.eif_perspective.field_eif_description.yml b/config/sync/field.field.rdf_meta_entity.eif_perspective.field_eif_description.yml new file mode 100644 index 0000000000000000000000000000000000000000..9f742b8098bee6f248ede64dac3384fad5b8c3e9 --- /dev/null +++ b/config/sync/field.field.rdf_meta_entity.eif_perspective.field_eif_description.yml @@ -0,0 +1,26 @@ +uuid: cf81a3ef-6fcf-494b-83fd-5701b6398c96 +langcode: en +status: true +dependencies: + config: + - field.storage.rdf_meta_entity.field_eif_description + - rdf_meta_entity.type.eif_perspective + module: + - allowed_formats + - text +third_party_settings: + allowed_formats: + allowed_formats: + - content_editor +id: rdf_meta_entity.eif_perspective.field_eif_description +field_name: field_eif_description +entity_type: rdf_meta_entity +bundle: eif_perspective +label: Description +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: text_long diff --git a/config/sync/field.field.rdf_meta_entity.eif_perspective.field_eif_solution_type.yml b/config/sync/field.field.rdf_meta_entity.eif_perspective.field_eif_solution_type.yml new file mode 100644 index 0000000000000000000000000000000000000000..1b241183fc773d529fc222f1f4f67477db0b94b2 --- /dev/null +++ b/config/sync/field.field.rdf_meta_entity.eif_perspective.field_eif_solution_type.yml @@ -0,0 +1,29 @@ +uuid: c10063a8-e5c8-4a8e-975f-430558f0615a +langcode: en +status: true +dependencies: + config: + - field.storage.rdf_meta_entity.field_eif_solution_type + - rdf_meta_entity.type.eif_perspective + - taxonomy.vocabulary.eif_solution_type +id: rdf_meta_entity.eif_perspective.field_eif_solution_type +field_name: field_eif_solution_type +entity_type: rdf_meta_entity +bundle: eif_perspective +label: 'Type of solution' +description: '' +required: true +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:taxonomy_term' + handler_settings: + target_bundles: + solution_category: eif_solution_type + sort: + field: name + direction: asc + auto_create: false + auto_create_bundle: '' +field_type: entity_reference diff --git a/config/sync/field.storage.eif_wrapper.term.yml b/config/sync/field.storage.eif_wrapper.term.yml new file mode 100644 index 0000000000000000000000000000000000000000..e94401644df94438f56c2ad5ec0af8bf9164e613 --- /dev/null +++ b/config/sync/field.storage.eif_wrapper.term.yml @@ -0,0 +1,30 @@ +uuid: b0691923-b874-4286-a363-36c247a4ffd8 +langcode: en +status: true +dependencies: + module: + - eif + - field_permissions + - sparql_entity_storage + - taxonomy +third_party_settings: + field_permissions: + permission_type: public + sparql_entity_storage: + mapping: + target_id: + predicate: 'http://data.europa.eu/eif/adms/qualifier' + format: resource +id: eif_wrapper.term +field_name: term +entity_type: eif_wrapper +type: entity_reference +settings: + target_type: taxonomy_term +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.rdf_meta_entity.eif_layer.yml b/config/sync/field.storage.rdf_meta_entity.eif_layer.yml new file mode 100644 index 0000000000000000000000000000000000000000..e4fd53cebcccb6a793af0785b25dda330d5a972d --- /dev/null +++ b/config/sync/field.storage.rdf_meta_entity.eif_layer.yml @@ -0,0 +1,30 @@ +uuid: bb1c2c82-2052-4bfa-a8a8-971ebcc35b3a +langcode: en +status: true +dependencies: + module: + - field_permissions + - rdf_meta_entity + - sparql_entity_storage + - taxonomy +third_party_settings: + sparql_entity_storage: + mapping: + target_id: + predicate: 'http://data.europa.eu/eif/Layer' + format: resource + field_permissions: + permission_type: public +id: rdf_meta_entity.eif_layer +field_name: eif_layer +entity_type: rdf_meta_entity +type: entity_reference +settings: + target_type: taxonomy_term +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.rdf_meta_entity.eif_model.yml b/config/sync/field.storage.rdf_meta_entity.eif_model.yml new file mode 100644 index 0000000000000000000000000000000000000000..eb460559ec95b7c8e06fca75d6d7b6d0edc64361 --- /dev/null +++ b/config/sync/field.storage.rdf_meta_entity.eif_model.yml @@ -0,0 +1,30 @@ +uuid: 0adccd49-716c-40f1-b79f-a09a7126723a +langcode: en +status: true +dependencies: + module: + - field_permissions + - rdf_meta_entity + - sparql_entity_storage + - taxonomy +third_party_settings: + sparql_entity_storage: + mapping: + target_id: + predicate: 'http://data.europa.eu/eif/Model' + format: resource + field_permissions: + permission_type: public +id: rdf_meta_entity.eif_model +field_name: eif_model +entity_type: rdf_meta_entity +type: entity_reference +settings: + target_type: taxonomy_term +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.rdf_meta_entity.eif_principle.yml b/config/sync/field.storage.rdf_meta_entity.eif_principle.yml new file mode 100644 index 0000000000000000000000000000000000000000..c32bc71908c21def4bb061924f9937362e4b74cc --- /dev/null +++ b/config/sync/field.storage.rdf_meta_entity.eif_principle.yml @@ -0,0 +1,30 @@ +uuid: a9bcc87a-fa30-4b24-9a9a-e5458dc55a34 +langcode: en +status: true +dependencies: + module: + - field_permissions + - rdf_meta_entity + - sparql_entity_storage + - taxonomy +third_party_settings: + sparql_entity_storage: + mapping: + target_id: + predicate: 'http://data.europa.eu/eif/Principle' + format: resource + field_permissions: + permission_type: public +id: rdf_meta_entity.eif_principle +field_name: eif_principle +entity_type: rdf_meta_entity +type: entity_reference +settings: + target_type: taxonomy_term +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.rdf_meta_entity.eif_recommendation.yml b/config/sync/field.storage.rdf_meta_entity.eif_recommendation.yml new file mode 100644 index 0000000000000000000000000000000000000000..4bcbfd3a3133102ac4fb1f86c4f27b60822c834f --- /dev/null +++ b/config/sync/field.storage.rdf_meta_entity.eif_recommendation.yml @@ -0,0 +1,30 @@ +uuid: f4cfbcf0-a29d-4da2-aba4-af33d738785a +langcode: en +status: true +dependencies: + module: + - eif + - field_permissions + - rdf_meta_entity + - sparql_entity_storage +third_party_settings: + sparql_entity_storage: + mapping: + target_id: + predicate: 'http://data.europa.eu/eif/Recommendation' + format: resource + field_permissions: + permission_type: public +id: rdf_meta_entity.eif_recommendation +field_name: eif_recommendation +entity_type: rdf_meta_entity +type: entity_reference +settings: + target_type: eif_wrapper +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.rdf_meta_entity.field_eif_description.yml b/config/sync/field.storage.rdf_meta_entity.field_eif_description.yml new file mode 100644 index 0000000000000000000000000000000000000000..fa54b8538343918e72c394b2e391d0586bcf579a --- /dev/null +++ b/config/sync/field.storage.rdf_meta_entity.field_eif_description.yml @@ -0,0 +1,32 @@ +uuid: 93f9a891-86af-4e25-9892-a8fe3e22af95 +langcode: en +status: true +dependencies: + module: + - field_permissions + - rdf_meta_entity + - sparql_entity_storage + - text +third_party_settings: + sparql_entity_storage: + mapping: + value: + predicate: 'http://purl.org/dc/terms/description' + format: 'xsd:string' + format: + predicate: 'http://joinup.eu/rdf_meta_entity/fields/description#format' + format: literal + field_permissions: + permission_type: public +id: rdf_meta_entity.field_eif_description +field_name: field_eif_description +entity_type: rdf_meta_entity +type: text_long +settings: { } +module: text +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.rdf_meta_entity.field_eif_solution_type.yml b/config/sync/field.storage.rdf_meta_entity.field_eif_solution_type.yml new file mode 100644 index 0000000000000000000000000000000000000000..49a23cc4eee5a9016354dd2b1a15f9e1dd996dd1 --- /dev/null +++ b/config/sync/field.storage.rdf_meta_entity.field_eif_solution_type.yml @@ -0,0 +1,30 @@ +uuid: e01aa716-2548-43fd-85bf-d67a32f3b39b +langcode: en +status: true +dependencies: + module: + - field_permissions + - rdf_meta_entity + - sparql_entity_storage + - taxonomy +third_party_settings: + sparql_entity_storage: + mapping: + target_id: + predicate: 'http://joinup.eu/rdf_meta_entity/fields/type' + format: resource + field_permissions: + permission_type: public +id: rdf_meta_entity.field_eif_solution_type +field_name: field_eif_solution_type +entity_type: rdf_meta_entity +type: entity_reference +settings: + target_type: taxonomy_term +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/rdf_meta_entity.type.eif_perspective.yml b/config/sync/rdf_meta_entity.type.eif_perspective.yml new file mode 100644 index 0000000000000000000000000000000000000000..583436f2ed55570d9440f797572ddbe6c78d99b1 --- /dev/null +++ b/config/sync/rdf_meta_entity.type.eif_perspective.yml @@ -0,0 +1,14 @@ +uuid: ffd106d5-3b01-4485-9460-c19df459fde8 +langcode: en +status: true +dependencies: { } +_core: + default_config_hash: hVv6uOKGMcWjYreZwL7Nbg41Ina-v-54lq1jqcsTlgE +id: eif_perspective +label: 'EIF perspective' +description: 'Holds settings related to the EIF toolbox.' +mapping: + rdf_entity: + solution: + field_name: eif_perspective + auto_create: false diff --git a/config/sync/search_api.index.published.yml b/config/sync/search_api.index.published.yml index 69a84262a06dc0fc4d8b42190faa2aeaa6648206..c9e2ba1ffc572b20032aa34ad4fc4b031b01473b 100644 --- a/config/sync/search_api.index.published.yml +++ b/config/sync/search_api.index.published.yml @@ -58,6 +58,7 @@ third_party_settings: finalize: false commit_before_finalize: false commit_after_finalize: false + debug_finalize: false highlighter: maxAnalyzedChars: 51200 fragmenter: gap @@ -73,11 +74,24 @@ third_party_settings: requireFieldMatch: false snippets: 3 fragsize: 0 + mlt: + mintf: 1 + mindf: 1 + maxdf: 0 + maxdfpct: 0 + minwl: 0 + maxwl: 0 + maxqt: 100 + maxntp: 2000 + boost: false + interestingTerms: none term_modifiers: slop: 10000000 fuzzy: 2 advanced: index_prefix: '' + collection: '' + timezone: '' multilingual: limit_to_content_language: false include_language_independent: true @@ -110,6 +124,14 @@ field_settings: dependencies: module: - node + eif_perspective: + label: 'EIF perspective reference' + datasource_id: 'entity:rdf_entity' + property_path: eif_perspective + type: string + dependencies: + module: + - meta_entity entity_author: label: Author property_path: aggregated_field diff --git a/config/sync/sparql_entity_storage.mapping.eif_wrapper.recommendation.yml b/config/sync/sparql_entity_storage.mapping.eif_wrapper.recommendation.yml new file mode 100644 index 0000000000000000000000000000000000000000..cdfbbd459565d734bbfc5efdff7e61849cf9b090 --- /dev/null +++ b/config/sync/sparql_entity_storage.mapping.eif_wrapper.recommendation.yml @@ -0,0 +1,23 @@ +uuid: 16b396d0-2cf6-4ba0-8b2f-7b45a78f7fad +langcode: en +status: true +dependencies: + config: + - eif.eif_wrapper_type.recommendation + - sparql_entity_storage.graph.default +id: eif_wrapper.recommendation +entity_type_id: eif_wrapper +bundle: recommendation +rdf_type: 'http://joinup.eu/eif-wrapper/rdf-type/recommendation' +graph: + default: 'http://joinup.eu/eif-wrapper/graph/recommendation' +base_fields_mapping: + type: + target_id: + predicate: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' + format: resource + description: + value: + predicate: 'http://purl.org/dc/terms/description' + format: 'xsd:string' +entity_id_plugin: default diff --git a/config/sync/sparql_entity_storage.mapping.rdf_meta_entity.eif_perspective.yml b/config/sync/sparql_entity_storage.mapping.rdf_meta_entity.eif_perspective.yml new file mode 100644 index 0000000000000000000000000000000000000000..997b34e652df3e81c02a94c8d8c60172648f5a70 --- /dev/null +++ b/config/sync/sparql_entity_storage.mapping.rdf_meta_entity.eif_perspective.yml @@ -0,0 +1,58 @@ +uuid: cdb76564-3d18-48dd-926c-ed5206dafb89 +langcode: en +status: true +dependencies: + config: + - rdf_meta_entity.type.eif_perspective + - sparql_entity_storage.graph.default + - sparql_entity_storage.graph.draft + module: + - rdf_schema_field_validation +third_party_settings: + rdf_schema_field_validation: + property_predicates: + - 'http://www.w3.org/2000/01/rdf-schema#domain' + graph: 'http://adms-definition' + class: 'http://www.w3.org/2000/01/rdf-schema#Class' +_core: + default_config_hash: RRKMp6pOX7i_n6VzOCGpqRIJ5WYU0t9ikl8Ej_J4v0M +id: rdf_meta_entity.eif_perspective +entity_type_id: rdf_meta_entity +bundle: eif_perspective +rdf_type: 'http://data.europa.eu/eif/adms/PerspectiveEIF' +graph: + default: 'http://joinup.eu/rdf_meta_entity/eif_perspective/graph/published' + draft: 'http://joinup.eu/rdf_meta_entity/eif_perspective/graph/draft' +base_fields_mapping: + uuid: + value: + predicate: 'http://data.europa.eu/eif/adms/PerspectiveEIF/base/uuid' + format: t_literal + type: + target_id: + predicate: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' + format: resource + label: + value: + predicate: 'http://purl.org/dc/terms/title' + format: t_literal + target: + target_id: + predicate: 'http://joinup.eu/rdf_meta_entity/fields/target_id' + format: resource + target_type: + predicate: 'http://joinup.eu/rdf_meta_entity/fields/target_type' + format: literal + created: + value: + predicate: 'http://purl.org/dc/terms/issued' + format: 'xsd:dateTime' + changed: + value: + predicate: 'http://purl.org/dc/terms/modified' + format: 'xsd:dateTime' + graph: + target_id: + predicate: 'http://joinup.eu/rdf_meta_entity/fields/graph' + format: resource +entity_id_plugin: default diff --git a/config/sync/sparql_entity_storage.mapping.taxonomy_term.eif_solution_type.yml b/config/sync/sparql_entity_storage.mapping.taxonomy_term.eif_solution_type.yml new file mode 100644 index 0000000000000000000000000000000000000000..f971c57bcb87b919390e3d74aa29b990689db924 --- /dev/null +++ b/config/sync/sparql_entity_storage.mapping.taxonomy_term.eif_solution_type.yml @@ -0,0 +1,35 @@ +uuid: 5bdca175-4e89-471a-9335-353f4cf1c214 +langcode: en +status: true +dependencies: + config: + - sparql_entity_storage.graph.default + - taxonomy.vocabulary.eif_solution_type +id: taxonomy_term.eif_solution_type +entity_type_id: taxonomy_term +bundle: eif_solution_type +rdf_type: 'http://data.europa.eu/eif/SolutionType/' +graph: + default: 'http://eif_solution_type' +base_fields_mapping: + vid: + target_id: + predicate: 'http://www.w3.org/2004/02/skos/core#inScheme' + format: resource + name: + value: + predicate: 'http://www.w3.org/2004/02/skos/core#prefLabel' + format: t_literal + description: + value: + predicate: 'http://www.w3.org/2004/02/skos/core#definition' + format: t_literal + format: + value: + predicate: '' + format: '' + weight: + value: + predicate: 'http://www.w3.org/ns/adms#identifier' + format: 'xsd:integer' +entity_id_plugin: null diff --git a/config/sync/taxonomy.vocabulary.eif_solution_type.yml b/config/sync/taxonomy.vocabulary.eif_solution_type.yml new file mode 100644 index 0000000000000000000000000000000000000000..82e981a850a6779344463e0b134451598be5f44c --- /dev/null +++ b/config/sync/taxonomy.vocabulary.eif_solution_type.yml @@ -0,0 +1,11 @@ +uuid: 22a58657-f451-45b0-8ef6-5c5a833a3beb +langcode: en +status: true +dependencies: { } +third_party_settings: + rdf_taxonomy: + locked: true +name: 'EIF solution type' +vid: eif_solution_type +description: 'A categorization of the solutions for the EIF toolbox.' +weight: 0 diff --git a/config/sync/theme_rule.rule.eif_perspective_form.yml b/config/sync/theme_rule.rule.eif_perspective_form.yml new file mode 100644 index 0000000000000000000000000000000000000000..0cb4d7eb7b6cd253fb3158fdca1a30069764811d --- /dev/null +++ b/config/sync/theme_rule.rule.eif_perspective_form.yml @@ -0,0 +1,18 @@ +uuid: 75d0ef37-b33b-4892-afd7-07f862f66c22 +langcode: en +status: true +dependencies: + module: + - joinup_core + theme: + - ventuno +id: eif_perspective_form +label: 'EIF perspective form' +theme: ventuno +weight: 0 +conditions: + request_route: + id: request_route + negate: false + routes: + - eif.eif_perspective_form diff --git a/config/sync/theme_rule.rule.eif_wrapper.yml b/config/sync/theme_rule.rule.eif_wrapper.yml new file mode 100644 index 0000000000000000000000000000000000000000..51cbd28e83d312c4f7b7a4b86b9dab1995a8c0e9 --- /dev/null +++ b/config/sync/theme_rule.rule.eif_wrapper.yml @@ -0,0 +1,19 @@ +uuid: 5dc46554-3a90-4bc9-99f4-3da51609fe13 +langcode: en +status: true +dependencies: + module: + - joinup_core + - system + theme: + - ventuno +id: eif_wrapper +label: 'EIF Wrapper' +theme: ventuno +weight: 0 +conditions: + request_route: + id: request_route + negate: false + routes: + - solution.eif_perspective.form diff --git a/config/sync/theme_rule.rule.entity.rdf_entity.eif_perspective.yml b/config/sync/theme_rule.rule.entity.rdf_entity.eif_perspective.yml new file mode 100644 index 0000000000000000000000000000000000000000..1c40ffd7eca804d632768e9706d2cc322f6828bf --- /dev/null +++ b/config/sync/theme_rule.rule.entity.rdf_entity.eif_perspective.yml @@ -0,0 +1,18 @@ +uuid: 99ae5508-e6b8-4402-b496-a7dcfdbaca10 +langcode: en +status: true +dependencies: + module: + - joinup_core + theme: + - ventuno +id: entity.rdf_entity.eif_perspective +label: 'EIF Perspective' +theme: ventuno +weight: 0 +conditions: + request_route: + id: request_route + negate: false + routes: + - entity.rdf_entity.eif_perspective diff --git a/config/sync/user.role.anonymous.yml b/config/sync/user.role.anonymous.yml index ca5071b9bc591ea2ba082b72fbaf41e29b880c70..c0c9ff2873d47eee6a216b725f739d975eba45cb 100644 --- a/config/sync/user.role.anonymous.yml +++ b/config/sync/user.role.anonymous.yml @@ -7,6 +7,7 @@ dependencies: - filter.format.simple_text module: - comment + - eif - entity_legal - filter - joinup_licence @@ -14,6 +15,7 @@ dependencies: - paragraphs_type_permissions - rdf_entity - rdf_export + - rdf_meta_entity - search_api_autocomplete - system - tour @@ -34,6 +36,8 @@ permissions: - 'use text format basic_html' - 'use text format simple_text' - 'view compatibility documents' + - 'view eif wrapper entity' + - 'view eif_perspective rdf-meta-entity' - 'view media' - 'view paragraph content accordion' - 'view paragraph content accordion_item' diff --git a/config/sync/user.role.authenticated.yml b/config/sync/user.role.authenticated.yml index 03e29c7c32950f0ef40db2ccbc6d1b37facb8b62..7b3dec5f193d5e1b9667c7d680e43a689e492cb3 100644 --- a/config/sync/user.role.authenticated.yml +++ b/config/sync/user.role.authenticated.yml @@ -13,6 +13,7 @@ dependencies: module: - comment - contextual + - eif - entity_legal - filter - flag @@ -23,6 +24,7 @@ dependencies: - paragraphs_type_permissions - rdf_entity - rdf_export + - rdf_meta_entity - search_api_autocomplete - state_machine_permissions - system @@ -140,6 +142,8 @@ permissions: - 'use text format glossary_html' - 'use text format simple_html' - 'view compatibility documents' + - 'view eif wrapper entity' + - 'view eif_perspective rdf-meta-entity' - 'view media' - 'view own unpublished content' - 'view paragraph content accordion' diff --git a/config/sync/user.role.moderator.yml b/config/sync/user.role.moderator.yml index 26e9c653d1a18a483e244f2a18330b6f77237717..b455625d2ba0024b759684b02b8491099a4d6c19 100644 --- a/config/sync/user.role.moderator.yml +++ b/config/sync/user.role.moderator.yml @@ -18,6 +18,7 @@ dependencies: - comment - contact_form - dashboard + - eif - entity_legal - entityqueue - field_permissions @@ -41,6 +42,7 @@ dependencies: - pipeline - rdf_draft - rdf_entity + - rdf_meta_entity - site_alert - solution - state_machine_permissions @@ -91,6 +93,8 @@ permissions: - 'create collection_banner media' - 'create collection_logo media' - 'create discussion content' + - 'create eif wrapper entity' + - 'create eif_perspective rdf-meta-entity' - 'create event_banner media' - 'create event_logo media' - 'create field_is_eif_category' @@ -116,6 +120,7 @@ permissions: - 'delete any solution_logo media' - 'delete asset_release rdf entity' - 'delete contact_information rdf entity' + - 'delete eif wrapper entity' - 'delete licence rdf entity' - 'delete owner rdf entity' - 'delete paragraph content iframe' @@ -280,6 +285,8 @@ permissions: - 'unfeature entity' - 'update any simple_block block content' - 'update collection_settings meta-entity' + - 'update eif wrapper entity' + - 'update eif_perspective rdf-meta-entity' - 'update highlighted_content entityqueue' - 'update highlighted_event entityqueue' - 'update paragraph content iframe' @@ -287,6 +294,7 @@ permissions: - 'update site alerts' - 'update spotlight entityqueue' - 'view any unpublished content' + - 'view eif wrapper entity' - 'view field_is_eif_category' - 'view field_is_eif_recommendation' - 'view licence overview page' diff --git a/config/sync/views.view.solutions_meta_entity.yml b/config/sync/views.view.solutions_meta_entity.yml new file mode 100644 index 0000000000000000000000000000000000000000..654133348f03b98d953b8bae908eb82d19150bca --- /dev/null +++ b/config/sync/views.view.solutions_meta_entity.yml @@ -0,0 +1,578 @@ +uuid: 35e0d80f-d86a-429f-a580-c26a4a8ad72c +langcode: en +status: true +dependencies: + config: + - field.storage.rdf_entity.field_is_eif_category + - search_api.index.published + module: + - options + - search_api +id: solutions_meta_entity +label: 'Solutions w/meta entity' +module: views +description: '' +tag: '' +base_table: search_api_index_published +base_field: search_api_id +display: + default: + id: default + display_title: Default + display_plugin: default + position: 0 + display_options: + title: 'Solutions w/meta entity' + fields: + label: + id: label + table: search_api_datasource_published_entity_rdf_entity + field: label + relationship: none + group_type: group + admin_label: '' + entity_type: rdf_entity + plugin_id: search_api_field + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + field_rendering: true + fallback_handler: search_api + fallback_options: + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + eif_perspective_layer: + id: eif_perspective_layer + table: search_api_index_published + field: eif_perspective_layer + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_field + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + field_rendering: true + fallback_handler: search_api + fallback_options: + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + eif_perspective_model: + id: eif_perspective_model + table: search_api_index_published + field: eif_perspective_model + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_field + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + field_rendering: true + fallback_handler: search_api + fallback_options: + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + eif_perspective_principle: + id: eif_perspective_principle + table: search_api_index_published + field: eif_perspective_principle + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_field + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: false + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + field_rendering: true + fallback_handler: search_api + fallback_options: + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + field_is_eif_category: + id: field_is_eif_category + table: search_api_index_published + field: field_is_eif_category + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_field + label: 'Solution category' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: true + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: list_default + settings: { } + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + field_rendering: true + fallback_handler: search_api + fallback_options: + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + pager: + type: none + options: + offset: 0 + items_per_page: 0 + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + access: + type: none + options: { } + cache: + type: search_api_tag + options: { } + empty: { } + sorts: + label: + id: label + table: search_api_index_published + field: label + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api + order: ASC + expose: + label: '' + field_identifier: '' + exposed: false + arguments: { } + filters: + entity_bundle: + id: entity_bundle + table: search_api_index_published + field: entity_bundle + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_string + operator: '=' + value: + min: '' + max: '' + value: solution + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + min_placeholder: '' + max_placeholder: '' + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + eif_perspective: + id: eif_perspective + table: search_api_index_published + field: eif_perspective + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_string + operator: 'not empty' + value: + min: '' + max: '' + value: '' + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + min_placeholder: '' + max_placeholder: '' + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + filter_groups: + operator: AND + groups: + 1: AND + style: + type: default + row: + type: search_api + options: + view_modes: + 'entity:node': + custom_page: default + discussion: default + document: default + event: default + news: default + tallinn_report: default + video: default + 'entity:rdf_entity': + asset_distribution: default + asset_release: default + collection: default + licence: default + solution: view_mode_search_list_item + spdx_licence: default + 'entity:taxonomy_term': + eif_conceptual_model: default + eif_interoperability_layer: default + eif_principle: default + eif_recommendation: default + topic: default + 'entity:user': + user: default + query: + type: search_api_query + options: + bypass_access: false + skip_access: false + preserve_facet_query_args: false + relationships: { } + header: { } + footer: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - 'user.node_grants:view' + tags: + - 'config:field.storage.rdf_entity.field_is_eif_category' + - 'config:search_api.index.published' + solutions_meta_entity_block: + id: solutions_meta_entity_block + display_title: Block + display_plugin: block + position: 1 + display_options: + cache: + type: none + options: { } + defaults: + cache: false + display_extenders: + metatag_display_extender: + metatags: { } + tokenize: false + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - 'user.node_grants:view' + tags: + - 'config:field.storage.rdf_entity.field_is_eif_category' + - 'config:search_api.index.published' diff --git a/resources/fixtures/eif_solution_type.rdf b/resources/fixtures/eif_solution_type.rdf new file mode 100644 index 0000000000000000000000000000000000000000..8ce821bab5722c95f0166f3a6b9964b077b91b27 --- /dev/null +++ b/resources/fixtures/eif_solution_type.rdf @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8" ?> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:adms="http://www.w3.org/ns/adms#" + xmlns:skos="http://www.w3.org/2004/02/skos/core#" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:dc="http://purl.org/dc/terms/"> + + <skos:ConceptScheme rdf:about="http://data.europa.eu/eif/SolutionType/"> + <rdfs:label>The European Interoperability Framework (EIF) solution type</rdfs:label> + <skos:prefLabel xml:lang="en">The European Interoperability Framework (EIF) solution type</skos:prefLabel> + <adms:identifier></adms:identifier> + + </skos:ConceptScheme> + + <skos:Concept rdf:about="http://data.europa.eu/eif/SolutionType/71244b7e-67cf-4fe4-b937-6346844ce645"> + <skos:prefLabel xml:lang="en">Assessment tools</skos:prefLabel> + <skos:inScheme rdf:resource="http://data.europa.eu/eif/SolutionType/"/> + <adms:identifier>1</adms:identifier> + </skos:Concept> + + <skos:Concept rdf:about="http://data.europa.eu/eif/SolutionType/4168f0f9-461f-4292-9198-c71a22a157e1"> + <skos:prefLabel xml:lang="en">Common frameworks</skos:prefLabel> + <skos:inScheme rdf:resource="http://data.europa.eu/eif/SolutionType/"/> + <adms:identifier>2</adms:identifier> + </skos:Concept> + + <skos:Concept rdf:about="http://data.europa.eu/eif/SolutionType/0670b7fa-f56d-4c16-918d-82ca359c4331"> + <skos:prefLabel xml:lang="en">Common services</skos:prefLabel> + <skos:inScheme rdf:resource="http://data.europa.eu/eif/SolutionType/"/> + <adms:identifier>3</adms:identifier> + </skos:Concept> + + <skos:Concept rdf:about="http://data.europa.eu/eif/SolutionType/867a2cf9-bbdb-40c0-ab60-2fa37847ff68"> + <skos:prefLabel xml:lang="en">Generic tools</skos:prefLabel> + <skos:inScheme rdf:resource="http://data.europa.eu/eif/SolutionType/"/> + <adms:identifier>4</adms:identifier> + </skos:Concept> + + <skos:Concept rdf:about="http://data.europa.eu/eif/SolutionType/b912ca62-ba11-4be7-94f6-0545dc5a3be0"> + <skos:prefLabel xml:lang="en">Legal interoperability tools</skos:prefLabel> + <skos:inScheme rdf:resource="http://data.europa.eu/eif/SolutionType/"/> + <adms:identifier>5</adms:identifier> + </skos:Concept> + + <skos:Concept rdf:about="http://data.europa.eu/eif/SolutionType/aa625643-c0c1-497d-b25f-852b2b86e4ca"> + <skos:prefLabel xml:lang="en">Semantic assets</skos:prefLabel> + <skos:inScheme rdf:resource="http://data.europa.eu/eif/SolutionType/"/> + <adms:identifier>6</adms:identifier> + </skos:Concept> + + <skos:Concept rdf:about="http://data.europa.eu/eif/SolutionType/a1074ec0-a479-4517-8529-22eb346e36b1"> + <skos:prefLabel xml:lang="en">Catalogue of open standards and specifications</skos:prefLabel> + <skos:inScheme rdf:resource="http://data.europa.eu/eif/SolutionType/"/> + <adms:identifier>7</adms:identifier> + </skos:Concept> + +</rdf:RDF> diff --git a/resources/runner/dev.yml b/resources/runner/dev.yml index 75771ef3b02bc2b2953c03faa9f82b016b3fd701..5a9529e05e3c7741bc514e9cae16eec018da5c4c 100644 --- a/resources/runner/dev.yml +++ b/resources/runner/dev.yml @@ -59,7 +59,7 @@ commands: # Make sure CAS mock server module is installed. - task: run command: drush:module-install - arguments: cas_mock_server + arguments: joinup_cas_mock_server - task: exec command: ${drush.bin} arguments: @@ -183,6 +183,7 @@ commands: - resources/fixtures/eif_interoperability_layer.rdf - resources/fixtures/eif_principle.rdf - resources/fixtures/eif_recommendation.rdf + - resources/fixtures/eif_solution_type.rdf - resources/fixtures/EIRA_SKOS.rdf - resources/fixtures/filetypes-skos.rdf - resources/fixtures/languages-skos.rdf diff --git a/scripts/check_status_report.php b/scripts/check_status_report.php index a14dc5a681734be14c7f12489858e81e260f9bcc..78e90596cb35247d19a4d031d979580706b0c5dd 100755 --- a/scripts/check_status_report.php +++ b/scripts/check_status_report.php @@ -18,14 +18,14 @@ $ignored_requirements = getenv('DRUPAL_STATUS_REPORT_IGNORE') ?: 'update status,joinup_core_root_user_blocked,search_api_solr_schema_joinup_modifications'; $ignored_option = "--ignore='$ignored_requirements'"; -function run_status_report(bool $title_only): string { +function run_status_report(bool $title_only): ?string { global $ignored_option; $command = __DIR__ . "/../vendor/bin/drush core:requirements --severity=1 $ignored_option "; $command .= $title_only ? '--field=title' : '--fields=title,severity,value,description'; - return trim(shell_exec($command)); + return shell_exec($command); } -if (run_status_report(TRUE)) { +if (run_status_report(TRUE) !== NULL) { print "Status Report shows errors & warnings\n"; print run_status_report(FALSE) . "\n"; exit(1); diff --git a/tests/features/collection/collection.member_administration.feature b/tests/features/collection/collection.member_administration.feature index e675bb39be6bdf0555acb74ff3581195bafde602..adf5f571700151957a80009ad7dcc39fd14f9897 100644 --- a/tests/features/collection/collection.member_administration.feature +++ b/tests/features/collection/collection.member_administration.feature @@ -441,7 +441,7 @@ Feature: Collection membership administration When I fill in "E-mail" with "pending_member@example.com" And I press "Add" Then the page should show the following chips in the Content region: - | Pending Member | + | Pending Member | And I press "Invite members" Then I should not see the success message "Successfully invited the selected users." And I should see the error message "1 user has a pending membership. Please, approve their membership request and assign the roles." diff --git a/tests/features/collection/propose.feature b/tests/features/collection/propose.feature index f7bb8cd5360e3d0afeb7079c7e71d58088f42397..bf7d9039d5becda1b37cf6e943552de629f7133e 100644 --- a/tests/features/collection/propose.feature +++ b/tests/features/collection/propose.feature @@ -191,6 +191,7 @@ Feature: Proposing a collection When I go to the edit form of the "Just a proposal" collection And I press "Additional fields" + And I scroll "Logo" into view Then I should see the link "logo.png" # As some entities were created via UI, we should explicitly delete them. diff --git a/tests/features/communities/eif/api.feature b/tests/features/communities/eif/api.feature new file mode 100644 index 0000000000000000000000000000000000000000..b9f7fee3443948e2fdfaaca0e472d6f81c25a15b --- /dev/null +++ b/tests/features/communities/eif/api.feature @@ -0,0 +1,61 @@ +@api +Feature: + Basic test steps for the EIF perspective meta entity. + + Scenario: Create an EIF perspective and view the data. + Given the following solutions: + | title | description | state | + | EIF solution | Some description not to be shown in the EIF page | validated | + | EIF only type | Some description not to be shown in the EIF page | validated | + Given the following EIF perspective data for the "EIF solution" solution: + | Description | This should be in the description field. | + | Solution type | Common frameworks | + | Principle | Underlying Principle 1: Subsidiarity and proportionality, Underlying Principle 3: Transparency | + | Layer | Interoperability Layer 3: Legal interoperability | + | Recommendation | name: Recommendation 21, description: This is recommended | + | Recommendation | name: Recommendation 15, description: This is also recommended | + Given the following EIF perspective data for the "EIF only type" solution: + | Description | This should be in the description field. | + | Solution type | Common frameworks | + Then there should be an EIF perspective associated with the "EIF solution" solution + And there should be an EIF perspective associated with the "EIF only type" solution + + When I go to the EIF perspective page of the "EIF solution" solution + Then I should see the heading "EIF solution" + And I should see the heading "General information" + + And I should see the text "This should be in the description field." + But I should not see the text "Some description not to be shown in the EIF page" + + # Verify that only columns with data are shown. + And I should see the heading "Principles" + And I should see the heading "Interoperability layers" + And I should see the text "implements the following EIF recommendations as explained below" + But I should not see the heading "Conceptual model" + + And I should see the text "Common frameworks" + And I should see the following links: + | Subsidiarity and proportionality | + | Transparency | + | Legal interoperability | + + And I should see the following lines of text: + # Recommendation titles appear with their related term a + # "Recommendation [identifier] | Term name". + | Recommendation 21 \| Interoperability Layer 1: Interoperability governance | + | This is recommended | + | Recommendation 15 | + | Recommendation 15 \| Underlying Principle 8: Security and privacy | + + When I go to the EIF perspective page of the "EIF only type" solution + Then I should see the heading "EIF only type" + And I should see the heading "General information" + + And I should see the text "This should be in the description field." + But I should not see the text "Some description not to be shown in the EIF page" + + # Verify that only columns with data are shown. + And I should not see the heading "Principles" + And I should not see the heading "Interoperability layers" + But I should not see the heading "Conceptual model" + And I should not see the text "implements the following EIF recommendations as explained below" diff --git a/tests/features/communities/eif/rdf_meta_entity.bundles.feature b/tests/features/communities/eif/rdf_meta_entity.bundles.feature new file mode 100644 index 0000000000000000000000000000000000000000..ea64f1295a313bf4a90aeee98f863ece4747cfaa --- /dev/null +++ b/tests/features/communities/eif/rdf_meta_entity.bundles.feature @@ -0,0 +1,63 @@ +@api +Feature: + In order to manage the EIF perspective + as a user of the website + I need to be able to access a page where I can configure them. + + Background: + Given solutions: + | title | state | + | Some EIF solution | validated | + + Scenario Outline: Only moderators can access the EIF perspective page. + Given I am <role> + And I go to the "Some EIF solution" solution + Then I should <see or not see> the link "EIF perspective" + + Examples: + | role | see or not see | + | not logged in | not see | + | logged in as a user with the authenticated role | not see | + | logged in as a facilitator of the "Some EIF solution" solution | not see | + | logged in as a user with the moderator role | see | + + Scenario: The authorized user should be able to add edit all available fields. + Given I am logged in as a user with the moderator role + And I go to the "Some EIF solution" solution + And I click "EIF perspective" + Then I should see the heading "Some EIF solution EIF perspective" + And the following fields should be present "Description, Type of solution" + And the following field widgets should be present "Principle, Layer, Model, Recommendation" + + When I press "Save" + Then I should see the following error messages: + | error messages | + | Type of solution field is required. | + | An EIF perspective cannot be created without any information. Please, fill in at least one field. | + + Given I fill in "Description" with "It will be an amazing principle." + # Solution type. + And I check "Assessment tools" + And I check "Common frameworks" + # Principle. + And I check "Subsidiarity and proportionality" + And I check "Openness" + # Model. + And I check "Coordination function" + When I press "Save" + + Then I should see the heading "Some EIF solution" + When I click "EIF perspective" + + And I press "Add new" + # Test the '_none' option label, the better naming of the recommendations + # and the order - that 10 does not come after 1 (string comparison) and 2 + # follows normally. + Then the "EIF qualifier" select should contain the following options: + | - Select a Recommendation - | + | Recommendation 1 - Underlying Principle 1: Subsidiarity and proportionality | + | Recommendation 2 - Underlying Principle 2: Openness | + + Given I select "Recommendation 2 - Underlying Principle 2: Openness" from "EIF qualifier" + And I press "Save" + Then I should see the heading "Some EIF solution" diff --git a/tests/features/communities/eif/toolbox.feature b/tests/features/communities/eif/toolbox.feature new file mode 100644 index 0000000000000000000000000000000000000000..7496dc9600c622343018eac4f09f593121bc86b6 --- /dev/null +++ b/tests/features/communities/eif/toolbox.feature @@ -0,0 +1,183 @@ +@api @eif_community @terms @group-e +Feature: + As the owner of the EIF toolbox + in order to make it easier for users to find appropriate solutions + I need to be able to present them in a nice searchable way. + + @javascript + Scenario: Present and search the solutions. + Given owner: + | name | type | + | ACDC | Company | + And collections: + | title | state | + | Killjoy | validated | + | Sage | validated | + | Phoenix | draft | + And solutions: + | title | eif reference | eif category | collection | state | + | Jordan 1 | Recommendation 1, Recommendation 2 | Common services | Killjoy | validated | + | Jordan 2 | Recommendation 4 | Common services | Sage | validated | + | Jordan 3 | Recommendation 5, Recommendation 2 | Common services | Sage | draft | + | Jordan 4 | Recommendation 3, Recommendation 1 | Common services | Phoenix | validated | + | Jordan 5 | Recommendation 4 | Common services | Killjoy | draft | + + # Visit the toolbox page once to ensure that solutions are properly + # re-indexed when an EIF perspective is created or deleted and that + # cache is invalidated properly. + Given I visit the "Online Assistant" custom page + Then I should not see the following headings: + | Jordan 1 | + | Jordan 2 | + | Jordan 3 | + | Jordan 4 | + | Jordan 5 | + + Given the following EIF perspective data for the "Jordan 1" solution: + | Description | It will be an amazing principle. | + | Type of solution | Common services | + | Solution type | Assessment tools, Generic tools | + | Layer | Interoperability Layer 3: Legal interoperability | + | Model | Basic Component 1: Coordination function | + | Principle | Underlying Principle 2: Openness, Underlying Principle 3: Transparency, Underlying Principle 8: Security and privacy | + And the following EIF perspective data for the "Jordan 2" solution: + | Description | It will be an amazing principle. | + | Solution type | Assessment tools, Generic tools | + | Layer | Interoperability Layer 3: Legal interoperability | + | Model | Basic Component 1: Coordination function | + | Principle | Underlying Principle 3: Transparency | + And the following EIF perspective data for the "Jordan 3" solution: + | Description | It will be an amazing principle. | + | Solution type | Common services | + | Principle | Underlying Principle 11: Preservation of information | + | Layer | Interoperability Layer 1: Interoperability governance | + | Model | Basic Component 4: Open data | + And the following EIF perspective data for the "Jordan 4" solution: + | Description | It will be an amazing principle. | + | Solution type | Common services | + | Principle | Underlying Principle 11: Preservation of information | + | Layer | Interoperability Layer 1: Interoperability governance | + | Model | Basic Component 4: Open data | + + When I visit the "Online Assistant" custom page + And I should see the following filter categories in the correct order: + | Underlying principles | + | Interoperability layer | + | Conceptual model | + | Solution category | + And I should see the following headings: + | Jordan 1 | + | Jordan 2 | + | Jordan 4 | + But I should not see the following headings: + | Jordan 3 | + | Jordan 5 | + + # Test the principles. + When I click "Transparency" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + | Jordan 2 | + But I should not see the following headings: + | Jordan 3 | + | Jordan 4 | + | Jordan 5 | + + # Test multiple options. Both "Transparency" and "Security and privacy" are + # selected. + When I click "Security and privacy" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + But I should not see the following headings: + | Jordan 2 | + | Jordan 3 | + | Jordan 4 | + | Jordan 5 | + + # Reset the options. + When I click "Transparency" in the "Content" region + When I click "Security and privacy" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + | Jordan 2 | + | Jordan 4 | + But I should not see the following headings: + | Jordan 3 | + | Jordan 5 | + + # Test the interoperability layer. + When I click "Legal interoperability" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + | Jordan 2 | + But I should not see the following headings: + | Jordan 3 | + | Jordan 4 | + | Jordan 5 | + + # Test selecting terms from more than one vocabularies. + When I click "Openness" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + But I should not see the following headings: + | Jordan 2 | + | Jordan 3 | + | Jordan 4 | + | Jordan 5 | + + # Reset the options. + When I click "Openness" in the "Content" region + When I click "Legal interoperability" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + | Jordan 2 | + | Jordan 4 | + But I should not see the following headings: + | Jordan 3 | + | Jordan 5 | + + # Test the conceptual model. + When I click "Open data" in the "Content" region + Then I should see the following headings: + | Jordan 4 | + But I should not see the following headings: + | Jordan 1 | + | Jordan 2 | + | Jordan 3 | + | Jordan 5 | + + # Reset the options. + When I click "Open data" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + | Jordan 2 | + | Jordan 4 | + But I should not see the following headings: + | Jordan 3 | + | Jordan 5 | + + # Test the solution category. + When I click "Assessment tools" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + | Jordan 2 | + Then I should not see the following headings: + | Jordan 3 | + | Jordan 4 | + | Jordan 5 | + + # Reset the options. + When I click "Assessment tools" in the "Content" region + Then I should see the following headings: + | Jordan 1 | + | Jordan 2 | + | Jordan 4 | + But I should not see the following headings: + | Jordan 3 | + | Jordan 5 | + + # Ensure that deleting an EIF perspective, the online assistant is updated + # as well. + Given I delete the EIF perspective of the "Jordan 1" solution + When I visit the "Online Assistant" custom page + And I should not see the heading "Jordan 1" diff --git a/tests/features/update/post_update_108100.feature b/tests/features/update/post_update_108100.feature new file mode 100644 index 0000000000000000000000000000000000000000..89ff5a7928fffa56b1d1a2c147961e46287c5a8e --- /dev/null +++ b/tests/features/update/post_update_108100.feature @@ -0,0 +1,6 @@ +@api @group-clone +Feature: Test update joinup_core_post_update_108100. + + Scenario: Ensure that solution types have been imported. + Given I visit "/taxonomy/term/http_e_f_fdata_ceuropa_ceu_feif_fSolutionType_f0670b7fa_bf56d_b4c16_b918d_b82ca359c4331" + Then I should see the heading "Common services" diff --git a/tests/src/Context/EifContext.php b/tests/src/Context/EifContext.php index 756d9bca7b80ff968caf83862864dac8f4e17bf2..cb39ea8e2715c85d00331dccc6a06efb59bbd744 100644 --- a/tests/src/Context/EifContext.php +++ b/tests/src/Context/EifContext.php @@ -6,16 +6,24 @@ use Behat\Behat\Hook\Scope\AfterScenarioScope; use Behat\Behat\Hook\Scope\BeforeScenarioScope; +use Behat\Gherkin\Node\TableNode; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\Url; use Drupal\DrupalExtension\Context\RawDrupalContext; use Drupal\eif\EifInterface; +use Drupal\eif\EifWrapperInterface; +use Drupal\eif\Entity\EifWrapper; +use Drupal\joinup\Traits\EntityReferenceTrait; +use Drupal\joinup\Traits\RdfEntityTrait; use Drupal\joinup\Traits\SearchTrait; +use Drupal\joinup\Traits\TestingEntitiesTrait; +use Drupal\joinup\Traits\UtilityTrait; use Drupal\menu_link_content\Entity\MenuLinkContent; use Drupal\node\Entity\Node; use Drupal\og\OgGroupAudienceHelperInterface; use Drupal\paragraphs\Entity\Paragraph; use Drupal\rdf_entity\Entity\Rdf; +use Drupal\rdf_meta_entity\Entity\RdfMetaEntity; use Drupal\sparql_entity_storage\UriEncoder; use Drupal\taxonomy\Entity\Term; @@ -24,8 +32,12 @@ */ class EifContext extends RawDrupalContext { + use EntityReferenceTrait; + use RdfEntityTrait; use SearchTrait; use StringTranslationTrait; + use TestingEntitiesTrait; + use UtilityTrait; /** * Creates the standard 'EIF' solution and a random parent collection. @@ -92,6 +104,20 @@ public function setupEifData(BeforeScenarioScope $scope): void { ]), ])->save(); + Node::create([ + 'type' => 'custom_page', + 'nid' => EifInterface::EIF_ONLINE_ASSISTANT, + 'title' => 'Online Assistant', + 'og_audience' => EifInterface::EIF_ID, + 'field_paragraphs_body' => Paragraph::create([ + 'type' => 'simple_paragraph', + 'field_body' => [ + 'value' => '', + 'format' => 'content_editor', + ], + ]), + ])->save(); + $instances = \Drupal::entityTypeManager()->getStorage('ogmenu_instance')->loadByProperties([ 'type' => 'navigation', OgGroupAudienceHelperInterface::DEFAULT_FIELD => $solution->id(), @@ -157,4 +183,143 @@ public function cleanEifData(AfterScenarioScope $scope): void { $this->enableCommitOnUpdate(); } + /** + * Generates an EIF perspective entity for a solution. + * + * @param \Behat\Gherkin\Node\TableNode $table_data + * The table data. + * @param string $solution + * The solution label. + * + * @Given the following EIF perspective data for the :solution solution: + */ + public function givenEifPerspectiveOfSolution(TableNode $table_data, string $solution): void { + $solution = $this->getRdfEntityByLabel($solution, 'solution'); + $qualifiers = []; + $eif_perspective_fields = []; + foreach ($table_data->getRows() as $row) { + switch ($row[0]) { + case 'Description': + $eif_perspective_fields['field_eif_description'] = trim($row[1]); + break; + + case 'Solution type': + $eif_perspective_fields['field_eif_solution_type'] = $this->explodeCommaSeparatedStepArgument($row[1]); + break; + + case 'Layer': + case 'Model': + case 'Principle': + $eif_perspective_fields['eif_' . strtolower($row[0])] = $this->explodeCommaSeparatedStepArgument($row[1]); + break; + + case 'Recommendation': + $bundle = strtolower($row[0]); + // The following will split a phrase in the format of: + // name: Some title without comma, description: Some description. + // + // The part from the comma symbol on (the description) is optional. + preg_match_all('/name:(\s*?)(?<name>[^,]*)(?:,(\s*?)description:(\s*?)(?<description>.*$))?/', $row[1], $matches); + if (isset($matches['name'][0])) { + $values = ['term' => trim($matches['name'][0])]; + if (isset($matches['description'][0])) { + $values['description'] = trim($matches['description'][0]); + } + + $qualifiers['eif_recommendation'][] = $this->createEifWrapper($bundle, $values); + } + break; + } + } + + $eif_perspective_fields = $this->convertEntityReferencesValues('rdf_meta_entity', 'eif_perspective', $eif_perspective_fields); + $eif_perspective = RdfMetaEntity::create([ + 'type' => 'eif_perspective', + 'target' => $solution, + ] + $eif_perspective_fields + $qualifiers); + $eif_perspective->save(); + $this->entities['rdf_meta_entity'][$eif_perspective->id()] = $eif_perspective; + } + + /** + * Creates an EIF wrapper entity and returns it. Does not save the entity. + * + * @param string $bundle + * The bundle of the EIF wrapper. + * @param array $values + * An array of values of the EIF wrapper. + * + * @return \Drupal\eif\EifWrapperInterface + * The created EIF wrapper. + */ + protected function createEifWrapper(string $bundle, array $values): EifWrapperInterface { + $values = $this->convertEntityReferencesValues('eif_wrapper', $bundle, $values); + $values['type'] = $bundle; + $eif_wrapper = EifWrapper::create($values); + $eif_wrapper->save(); + $this->entities['eif_wrapper'][$eif_wrapper->id()] = $eif_wrapper; + return $eif_wrapper; + } + + /** + * Navigates to the EIF perspective page of the given solution. + * + * @param string $solution + * The solution label. + * + * @Given I go to the EIF perspective page of the :solution solution + */ + public function goToEifPerspectiveOfSolution(string $solution): void { + $solution = $this->getRdfEntityByLabel($solution, 'solution'); + $url = Url::fromRoute('entity.rdf_entity.eif_perspective', [ + 'rdf_entity' => $solution->id(), + ]); + $this->visitPath($url->getInternalPath()); + } + + /** + * Navigates to the EIF perspective edit form of the given solution. + * + * @param string $solution + * The solution label. + * + * @Given I go to the EIF perspective edit form of the :solution solution + */ + public function goToEifEditFormOfSolution(string $solution): void { + $solution = $this->getRdfEntityByLabel($solution, 'solution'); + $url = Url::fromRoute('eif.eif_perspective_form', [ + 'rdf_entity' => $solution->id(), + ]); + $this->visitPath($url->getInternalPath()); + } + + /** + * Asserts that there is an EIF perspective entity associated to the solution. + * + * @param string $solution + * The solution label. + * + * @Given there should be an EIF perspective associated with the :solution solution + */ + public function assertSolutionWithPerspective(string $solution): void { + $solution = $this->getRdfEntityByLabel($solution, 'solution'); + if (empty(\Drupal::getContainer()->get('rdf_meta_entity.repository')->getMetaEntityForEntity($solution, 'eif_perspective'))) { + throw new \Exception('No perspective was found for the solution'); + } + } + + /** + * Deletes the EIF perspective of a solution. + * + * @param string $solution_label + * The solution label. + * + * @Given I delete the EIF perspective of the :solution_label solution + */ + public function deletePerspectiveOfSolution(string $solution_label): void { + $solution = $this->getRdfEntityByLabel($solution_label, 'solution'); + $eif_perspective = $solution->get('eif_perspective')->entity; + $eif_perspective->delete(); + } + } diff --git a/tests/src/Context/EuplContext.php b/tests/src/Context/EuplContext.php index 454d43bb84147f29025d9f5abc36e828c55f42c7..6ff884183647a48d6217ef6e37531f768ee4dfdd 100644 --- a/tests/src/Context/EuplContext.php +++ b/tests/src/Context/EuplContext.php @@ -160,7 +160,7 @@ public function assertLegalTypeTagsCategoriesAndOrder(string $spdx, TableNode $t */ public function assertFilterCategoriesAndOrder(TableNode $table): void { $expected = $table->getColumn(0); - $xpath = '//div[contains(concat(" ", normalize-space(@class), " "), " licence-filter ")]//div[contains(concat(" ", normalize-space(@class), " "), " licence-filter__header ")]'; + $xpath = '//div[contains(concat(" ", normalize-space(@class), " "), " licence-filter ")]//div[contains(concat(" ", normalize-space(@class), " "), " licence-filter__header ")] | //div[contains(concat(" ", normalize-space(@class), " "), " eif-filter ")]//div[contains(concat(" ", normalize-space(@class), " "), " eif-filter__header ")]'; $this->assertCategoriesAndOrder($xpath, $expected); } diff --git a/tests/src/Context/FeatureContext.php b/tests/src/Context/FeatureContext.php index 40acaf186a93d39b53f94fb6567a6bdf7477586b..73f38992a2e67a9cf10e4522b1b4fcf7bfa2490d 100644 --- a/tests/src/Context/FeatureContext.php +++ b/tests/src/Context/FeatureContext.php @@ -272,8 +272,12 @@ public function assertFieldsetsPresent(string $fieldsets): void { $page = $this->getSession()->getPage(); $not_found = []; foreach ($fieldsets as $fieldset) { - $is_found = $page->find('named', ['fieldset', $fieldset]); + // Find by fieldset legend or by details summary depending on how the + // fieldset is rendered. + $is_found = $page->find('named', ['fieldset', $fieldset]) + || $page->find('xpath', "//details/summary[contains(text(), '$fieldset')]"); if (!$is_found) { + // Try to find the fieldset according to the collapse button. $not_found[] = $fieldset; } } @@ -478,6 +482,7 @@ public function assertOptionNotSelected(string $text): void { * not the expected one. * * @Then the option with text :option from select :select is selected + * @Then the option with text :option from select :select should be selected */ public function assertFieldOptionSelected(string $option, string $select): void { $this->assertFieldOptionSelectedInRegion($option, $select); @@ -2427,6 +2432,22 @@ public function removeFirstFileFromField(string $field_name): void { $button->press(); } + /** + * Asserts that a link has an attribute set to a specific value. + * + * @param string $link_text + * The link text. + * @param string $attribute_name + * The name of the attribute to assert. + * @param string $attribute_value + * The value of the attribute to assert. + * + * @Then the :link_text link should have the :attribute_name attribute set to :attribute_value + */ + public function givenLinkHasAttribute(string $link_text, string $attribute_name, string $attribute_value): void { + Assert::assertNotNull($this->getSession()->getPage()->find('xpath', "//a[@$attribute_name='$attribute_value' and text()='$link_text']")); + } + /** * Disables cookie consent banner for all tests. * diff --git a/tests/src/Traits/EntityReferenceTrait.php b/tests/src/Traits/EntityReferenceTrait.php index 6e4b98bead4ad72280cbb5c0e371a4c8e8e7203a..fc98efa850d6eabb4a4f33a4d54da4de67ce63a6 100644 --- a/tests/src/Traits/EntityReferenceTrait.php +++ b/tests/src/Traits/EntityReferenceTrait.php @@ -41,6 +41,10 @@ public function convertEntityReferencesValues($entity_type, $entity_bundle, arra $values[$name] = [$values[$name]]; } + if (is_string($values[$name])) { + $values[$name] = [$values[$name]]; + } + foreach ($values[$name] as &$label) { $id = $this->getEntityIdByLabel($label, $target_entity_type, $target_entity_bundles); diff --git a/web/modules/custom/collection/src/Controller/CollectionSettingsController.php b/web/modules/custom/collection/src/Controller/CollectionSettingsController.php index 89c9abc6f28dd7e4a3a7d07011db1a68d5b42f2f..78b1a80b41f8913525787a880c57ae80bc2410c9 100644 --- a/web/modules/custom/collection/src/Controller/CollectionSettingsController.php +++ b/web/modules/custom/collection/src/Controller/CollectionSettingsController.php @@ -90,7 +90,7 @@ public function settings(CollectionInterface $rdf_entity): array { } /** - * Povides an access controller for the 'collection.settings_form' route. + * Provides an access controller for the 'collection.settings_form' route. * * @param \Drupal\collection\Entity\CollectionInterface $rdf_entity * The collection. diff --git a/web/modules/custom/contact_information/contact_information.module b/web/modules/custom/contact_information/contact_information.module index 0ff8e1bd3732035f95e6d30795127b8b2de2f20a..8e4317497232f99918cf9d754e2429c4f9771678 100644 --- a/web/modules/custom/contact_information/contact_information.module +++ b/web/modules/custom/contact_information/contact_information.module @@ -9,6 +9,7 @@ use Drupal\Core\Access\AccessResult; use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Session\AccountInterface; use Drupal\contact_information\Entity\ContactInformation; use Drupal\contact_information\Entity\ContactInformationInterface; @@ -69,7 +70,10 @@ function contact_information_inline_entity_form_table_fields_alter(&$fields, $co * the entity until the parent entity is saved. Due to this, the label column * in the widget table would be empty. */ -function contact_information_inline_entity_form_entity_form_alter(&$entity_form, &$form_state) { +function contact_information_inline_entity_form_entity_form_alter(array &$entity_form, FormStateInterface &$form_state): void { + if ($entity_form['#entity_type'] !== 'rdf_entity' || $entity_form['#bundle'] !== 'contact_information') { + return; + } // Add an entity builder callback to fill the label field with the values of // the name field. This is needed because inline entity form doesn't save // the entity until the parent entity is saved. Due to this, the label column @@ -85,11 +89,7 @@ function contact_information_inline_entity_form_entity_form_alter(&$entity_form, * @param \Drupal\Core\Entity\EntityInterface $entity * The entity being built. */ -function contact_information_inline_entity_form_entity_builder($entity_type, EntityInterface $entity) { - // Handle only contact information entities. - if ($entity->bundle() != 'contact_information') { - return; - } +function contact_information_inline_entity_form_entity_builder(string $entity_type, EntityInterface $entity): void { contact_information_entity_auto_label($entity); } diff --git a/web/modules/custom/joinup_communities/eif/config/schema/eif.schema.yml b/web/modules/custom/joinup_communities/eif/config/schema/eif.schema.yml index 590fa48507a5ff8dca44364306c97a5c1dca1658..da341fbc489387291c5de894b42d6d5d9ae6f7a5 100644 --- a/web/modules/custom/joinup_communities/eif/config/schema/eif.schema.yml +++ b/web/modules/custom/joinup_communities/eif/config/schema/eif.schema.yml @@ -9,3 +9,14 @@ condition.plugin.eif_solutions_page: views.argument_validator.eif_toolbox: type: views.argument_validator_entity label: 'EIF Toolbox argument validator' + +eif.eif_wrapper_type.*: + type: config_entity + label: 'EIF Wrapper type' + mapping: + id: + type: string + label: 'Machine-readable name' + label: + type: label + label: 'Label' diff --git a/web/modules/custom/joinup_communities/eif/eif.info.yml b/web/modules/custom/joinup_communities/eif/eif.info.yml index 2826cc0753d4a47392d41f0e49af9034ae781bdd..d91ccae97c4bee9af1b299cef1be5decd920842e 100644 --- a/web/modules/custom/joinup_communities/eif/eif.info.yml +++ b/web/modules/custom/joinup_communities/eif/eif.info.yml @@ -5,4 +5,7 @@ core_version_requirement: ^8.9 || ^9.1 php: 7.1 package: Joinup communities dependencies: + - drupal:text + - inline_entity_form:inline_entity_form - joinup:custom_page + - rdf_meta_entity:rdf_meta_entity diff --git a/web/modules/custom/joinup_communities/eif/eif.libraries.yml b/web/modules/custom/joinup_communities/eif/eif.libraries.yml index 9fc5f38a506335d0879bafcd818614511996a33b..6af80b54b8fe7c9cc27b46fa3e5bc2cb3c53c77b 100644 --- a/web/modules/custom/joinup_communities/eif/eif.libraries.yml +++ b/web/modules/custom/joinup_communities/eif/eif.libraries.yml @@ -3,3 +3,10 @@ recommendations.selector: js/eif_recommendations.js: {} dependencies: - core/drupal + +eif-filter: + js: + js/eif_filter.js: {} + dependencies: + - core/jquery + - core/drupal diff --git a/web/modules/custom/joinup_communities/eif/eif.links.action.yml b/web/modules/custom/joinup_communities/eif/eif.links.action.yml new file mode 100644 index 0000000000000000000000000000000000000000..08ca9d81cef7803d51cc346f04641e45f57f4342 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/eif.links.action.yml @@ -0,0 +1,10 @@ +eif_wrapper_type.add_form: + route_name: entity.eif_wrapper_type.add_form + title: 'Add EIF Wrapper type' + appears_on: + - entity.eif_wrapper_type.collection +eif_wrapper.add_form: + route_name: entity.eif_wrapper.add_form + title: 'Add EIF Wrapper' + appears_on: + - entity.eif_wrapper.collection diff --git a/web/modules/custom/joinup_communities/eif/eif.links.menu.yml b/web/modules/custom/joinup_communities/eif/eif.links.menu.yml new file mode 100644 index 0000000000000000000000000000000000000000..71fcf8f769d6ab5005312c8df402a8a58276c2d6 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/eif.links.menu.yml @@ -0,0 +1,11 @@ +entity.eif_wrapper_type.collection: + title: EIF Wrapper + description: Configure an EIF Wrapper bundles + route_name: entity.eif_wrapper_type.collection + parent: system.admin_structure + +entity.eif_wrapper.collection: + title: EIF Wrappers + description: List of EIF Wrappers + route_name: entity.eif_wrapper.collection + parent: system.admin_content diff --git a/web/modules/custom/joinup_communities/eif/eif.links.task.yml b/web/modules/custom/joinup_communities/eif/eif.links.task.yml new file mode 100644 index 0000000000000000000000000000000000000000..4517dcfc6b7ba66a7ab2c1635a257c1209db3ae6 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/eif.links.task.yml @@ -0,0 +1,35 @@ +eif.eif_perspective_form: + route_name: eif.eif_perspective_form + title: 'EIF perspective' + base_route: entity.rdf_entity.canonical + +# EIF Wrapper Type links +entity.eif_wrapper_type.collection: + title: EIF Wrapper + route_name: entity.eif_wrapper_type.collection + base_route: system.admin_structure + +entity.eif_wrapper_type.edit_form: + title: Edit + route_name: entity.eif_wrapper_type.edit_form + base_route: entity.eif_wrapper_type.edit_form + +## EIF Wrapper links +entity.eif_wrapper.collection: + title: EIF Wrapper + route_name: entity.eif_wrapper.collection + base_route: system.admin_content + weight: 10 +entity.eif_wrapper.view: + title: View + route_name: entity.eif_wrapper.canonical + base_route: entity.eif_wrapper.canonical +entity.eif_wrapper.edit_form: + title: Edit + route_name: entity.eif_wrapper.edit_form + base_route: entity.eif_wrapper.canonical +entity.eif_wrapper.delete_form: + title: Delete + route_name: entity.eif_wrapper.delete_form + base_route: entity.eif_wrapper.canonical + weight: 10 diff --git a/web/modules/custom/joinup_communities/eif/eif.module b/web/modules/custom/joinup_communities/eif/eif.module index def34af34bc71326ba09b2971c7f0dab898dcec0..aebdf4cf42b5bb4660f5431900072bfbec997413 100644 --- a/web/modules/custom/joinup_communities/eif/eif.module +++ b/web/modules/custom/joinup_communities/eif/eif.module @@ -7,29 +7,67 @@ declare(strict_types = 1); +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Access\AccessResultInterface; +use Drupal\Core\Cache\Cache; +use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Render\Element; +use Drupal\Core\Session\AccountInterface; use Drupal\eif\EifInterface; +use Drupal\eif\Form\EifWrapperInlineForm; use Drupal\eif\Plugin\views\argument\EifGroupArgument; +use Drupal\field\FieldConfigInterface; use Drupal\og\OgGroupAudienceHelperInterface; +use Drupal\rdf_meta_entity\Entity\RdfMetaEntityInterface; +use Drupal\views\ViewExecutable; /** * Implements hook_theme(). */ function eif_theme(array $existing, string $type, string $theme, string $path): array { return [ + 'eif_wrapper' => [ + 'render element' => 'elements', + ], 'eif_category_navigator' => [ 'variables' => [ 'all_link' => NULL, 'category_links' => [], ], ], + 'eif_filter_list' => [ + 'variables' => [ + 'items' => NULL, + ], + ], ]; } +/** + * Prepares variables for EIF wrapper templates. + * + * Default template: eif-wrapper.html.twig. + * + * @param array $variables + * An associative array containing: + * - elements: An associative array containing the user information and any + * fields attached to the entity. Properties used: + * - #eif_wrapper: A \Drupal\eif\Entity\EifWrapper + * object. The entity being viewed. + * - attributes: HTML attributes for the containing element. + */ +function template_preprocess_eif_wrapper(array &$variables): void { + $variables['eif_wrapper'] = $variables['elements']['#eif_wrapper']; + foreach (Element::children($variables['elements']) as $key) { + $variables['content'][$key] = $variables['elements'][$key]; + } +} + /** * Implements hook_views_plugins_argument_alter(). */ -function eif_views_plugins_argument_alter(array &$plugins) { +function eif_views_plugins_argument_alter(array &$plugins): void { // We don't want to apply a group contextual filter for eif_recommendation // view. The contextual filter is added only for validation. Swapping the // class to treat this exception. @@ -42,7 +80,7 @@ function eif_views_plugins_argument_alter(array &$plugins) { /** * Implements hook_preprocess_HOOK(). */ -function eif_preprocess_views_view_field(&$variables) { +function eif_preprocess_views_view_field(array &$variables): void { if ($variables['view']->id() !== 'eif_recommendation') { return; } @@ -157,3 +195,217 @@ function eif_preprocess_menu__og__navigation(array &$variables): void { $variables['items'][$plugin_id]['in_active_trail'] = TRUE; } + +/** + * Implements hook_entity_type_build(). + */ +function eif_entity_type_build(array &$entity_types): void { + /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */ + if (isset($entity_types['eif_wrapper']) && !$entity_types['eif_wrapper']->getHandlerClass('inline_form')) { + // Use a dedicated inline form handler for 'eif_wrapper' entities. + $entity_types['eif_wrapper']->setHandlerClass('inline_form', EifWrapperInlineForm::class); + } +} + +/** + * Implements hook_form_FORM_ID_alter(). + */ +function eif_form_rdf_meta_entity_eif_perspective_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void { + foreach (Element::children($form) as $name) { + if (!empty($form[$name]['widget']['form'])) { + // Don't show the EIF Wrapper bundle label as sub-form title. + $form[$name]['widget']['form']['#title'] = NULL; + } + } + + $form['#validate'][] = '_eif_form_rdf_meta_entity_no_empty_field_validate'; +} + +/** + * Validation callback for the EIF perspective form. + * + * @param array $form + * The form array. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The form state object. + */ +function _eif_form_rdf_meta_entity_no_empty_field_validate(array &$form, FormStateInterface $form_state): void { + // No field is required but the user needs to fill in at least 1 field in the + // form. + if (empty($form_state->getValue('field_eif_description')[0]['value']) + && empty($form_state->getValue('eif_solution_type')) + && empty($form_state->getValue('eif_model')) + && empty($form_state->getValue('eif_layer')) + && empty($form_state->getValue('eif_principle')) + && empty($form_state->getValue('eif_recommendation')['entities']) + ) { + $form_state->setError($form, 'An EIF perspective cannot be created without any information. Please, fill in at least one field.'); + } +} + +/** + * Implements hook_ENTITY_TYPE_create_access(). + */ +function eif_eif_wrapper_create_access(AccountInterface $account, array $context, $entity_bundle): AccessResultInterface { + return AccessResult::allowedIf($account->hasPermission('create eif wrapper entity')); +} + +/** + * Implements hook_ENTITY_TYPE_access(). + */ +function eif_eif_wrapper_access(EntityInterface $entity, string $operation, AccountInterface $account): AccessResultInterface { + return AccessResult::allowedIf($account->hasPermission("{$operation} eif wrapper entity")); +} + +/** + * Implements hook_ENTITY_TYPE_insert(). + */ +function eif_rdf_meta_entity_insert(RdfMetaEntityInterface $entity): void { + _eif_reindex_parent_solution($entity); +} + +/** + * Implements hook_ENTITY_TYPE_update(). + */ +function eif_rdf_meta_entity_update(RdfMetaEntityInterface $entity): void { + _eif_reindex_parent_solution($entity); +} + +/** + * Implements hook_ENTITY_TYPE_delete(). + */ +function eif_rdf_meta_entity_delete(RdfMetaEntityInterface $entity): void { + _eif_reindex_parent_solution($entity); +} + +/** + * Re index the parent solution to include the reference to the perspective. + * + * @param \Drupal\rdf_meta_entity\Entity\RdfMetaEntityInterface $entity + * The RDF meta entity. + */ +function _eif_reindex_parent_solution(RdfMetaEntityInterface $entity): void { + if ($entity->bundle() !== 'eif_perspective') { + return; + } + + $solution = \Drupal::entityTypeManager()->getStorage('rdf_entity')->loadUnchanged($entity->target->target_id); + + // Manually update the entry of the solution in the SOLR index as we need to + // index the extra property for the EIF perspective. + $tracking_manager = \Drupal::getContainer()->get('search_api.entity_datasource.tracking_manager'); + $tracking_manager->trackEntityChange($solution); + + // Invalidate cache tags of the solution and the RDF meta entity in order to + // invalidate screens that are presenting them, like the EIF toolbox. The + // solution cache tags are needed because text from the solution is displayed + // in the EIF toolbox. The solution entity type list tags are not though, as + // there needs to be a change to an EIF perspective in order to have an + // addition or a deletion to/from the EIF toolbox. Deletion of solutions will + // trigger the deletion of the EIF perspective. Creation of a solution 'with' + // an EIF perspective, will trigger the invalidation of cache as well. The + // solution cache tags are added independently to ensure minimal performance + // impact in CRUD operations of the EIF perspective. + // @see eif_views_pre_render(). + $cache_tags_invalidator = \Drupal::service('cache_tags.invalidator'); + $list_cache_tags = ["{$entity->getEntityTypeId()}_list:{$entity->bundle()}"]; + $tags_to_invalidate = Cache::mergeTags($solution->getCacheTagsToInvalidate(), $list_cache_tags, $entity->getCacheTagsToInvalidate()); + $cache_tags_invalidator->invalidateTags($tags_to_invalidate); +} + +/** + * Implements hook_views_pre_render(). + */ +function eif_views_pre_render(ViewExecutable $view): void { + if ($view->current_display !== 'solutions_meta_entity_block') { + return; + } + + $cache_tags = []; + + /** @var \Drupal\search_api\Plugin\views\ResultRow $result_row */ + foreach ($view->result as $result_row) { + $solution = $result_row->_entity; + $cache_tags = Cache::mergeTags($cache_tags, $solution->getCacheTags()); + } + + $eif_perspective_list_cache_tags = \Drupal::entityTypeManager() + ->getStorage('rdf_meta_entity_type') + ->load('eif_perspective') + ->getCacheTags(); + $cache_tags[] = 'rdf_meta_entity_list:eif_perspective'; + $cache_tags = Cache::mergeTags($cache_tags, $eif_perspective_list_cache_tags); + $view->element['#cache']['tags'] = Cache::mergeTags($view->element['#cache']['tags'], $cache_tags); +} + +/** + * Implements hook_options_list_alter(). + */ +function eif_options_list_alter(array &$options, array $context): void { + // @todo Remove this in ISAICP-7110 apart from the sorting part. + // @see https://citnet.tech.ec.europa.eu/CITnet/jira/browse/ISAICP-7110. + if (empty($context['fieldDefinition']) || !($context['fieldDefinition'] instanceof FieldConfigInterface)) { + return; + } + + $fields = ['eif_layer', 'eif_model', 'eif_principle']; + if (in_array($context['fieldDefinition']->getName(), $fields)) { + foreach ($options as $key => $value) { + $parts = explode(':', $value); + // Some labels do not have prefix. + if (count($parts) === 2) { + $options[$key] = trim($parts[1]); + } + } + } + elseif ($context['fieldDefinition']->id() === 'eif_wrapper.recommendation.term') { + $empty_option = []; + if (isset($options['_none'])) { + $empty_option['_none'] = t('- Select a Recommendation -'); + } + + $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadByProperties([ + 'vid' => 'eif_recommendation', + ]); + foreach ($options as $key => $value) { + if (isset($terms[$key]) && !empty($terms[$key]->field_eif_related_term->entity)) { + $options[$key] = $value . ' - ' . $terms[$key]->field_eif_related_term->entity->label(); + } + } + + // Remove the empty option - if available - to re-add it later first. + unset($options['_none']); + uksort($options, function (string $key1, string $key2) use ($terms): bool { + return $terms[$key1]->field_eif_identifier->value > $terms[$key2]->field_eif_identifier->value; + }); + $options = $empty_option + $options; + } +} + +/** + * Implements hook_inline_entity_form_entity_form_alter(). + */ +function eif_inline_entity_form_entity_form_alter(array &$entity_form, FormStateInterface &$form_state): void { + if ($entity_form['#entity_type'] !== 'eif_wrapper' || $entity_form['#bundle'] !== 'recommendation') { + return; + } + + $entity_form['term']['widget']['#title_display'] = 'invisible'; + $entity_form['#after_build'][] = '_eif_inline_entity_form_actions_alter'; +} + +/** + * Callback function to rename IEF action buttons for the EIF recommendation. + * + * @param array $entity_form + * The entity form. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The form API form state object. + * + * @return array + * The processed form array. + */ +function _eif_inline_entity_form_actions_alter(array $entity_form, FormStateInterface $form_state): array { + $entity_form['actions']['ief_add_save']['#value'] = t('Save recommendation'); + return $entity_form; +} diff --git a/web/modules/custom/joinup_communities/eif/eif.permissions.yml b/web/modules/custom/joinup_communities/eif/eif.permissions.yml new file mode 100644 index 0000000000000000000000000000000000000000..817cda4adff8a2c2c7529d884cceb7381a749393 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/eif.permissions.yml @@ -0,0 +1,11 @@ +# EIF wrappers are meant to be helper entities. There is no point +# having bundle level permissions as the actual check should happen +# in the parent entity. +view eif wrapper entity: + title: 'View EIF wrapper entity' +create eif wrapper entity: + title: 'Create EIF wrapper entity' +update eif wrapper entity: + title: 'Update EIF wrapper entity' +delete eif wrapper entity: + title: 'Delete EIF wrapper entity' diff --git a/web/modules/custom/joinup_communities/eif/eif.routing.yml b/web/modules/custom/joinup_communities/eif/eif.routing.yml index 88fa67af5ac2b4e0d086754039adf905d1ceb7bc..da0ce8e520106a7adf0825d360bd87786ec829bd 100644 --- a/web/modules/custom/joinup_communities/eif/eif.routing.yml +++ b/web/modules/custom/joinup_communities/eif/eif.routing.yml @@ -10,3 +10,30 @@ eif.solutions: parameters: eif_category: type: eif_category + +eif.eif_perspective_form: + path: '/rdf_entity/{rdf_entity}/eif-perspective/edit' + defaults: + _controller: Drupal\eif\Controller\EifPerspectiveController::settings + _title_callback: Drupal\eif\Controller\EifPerspectiveController::title + requirements: + _custom_access: Drupal\eif\Controller\EifPerspectiveController::editAccess + options: + parameters: + rdf_entity: + type: entity:rdf_entity + bundle: + - solution + +entity.rdf_entity.eif_perspective: + path: '/rdf_entity/{rdf_entity}/eif-perspective' + defaults: + _entity_view: 'rdf_entity.eif_perspective' + requirements: + _custom_access: Drupal\eif\Controller\EifPerspectiveController::viewAccess + options: + parameters: + rdf_entity: + type: entity:rdf_entity + bundle: + - solution diff --git a/web/modules/custom/joinup_communities/eif/js/eif_filter.js b/web/modules/custom/joinup_communities/eif/js/eif_filter.js new file mode 100644 index 0000000000000000000000000000000000000000..7d5542c9b4e4dacc86caa6308bf6b4ba460845a7 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/js/eif_filter.js @@ -0,0 +1,55 @@ +/** + * @file + * Eif filter functionality. + */ + +(function ($, drupalSettings) { + "use strict"; + function checkEifCategories() { + var $eifTile = $('.eif-tile'); + + // Remove hidden class before further processing. + $eifTile.each(function () { + $(this).removeClass('visually-hidden'); + }); + + // Check every active filter item and hide tiles which don't contain proper + // data-eif-category. + $('.eif-filter__item a.is-active').each(function () { + const currentEifCategory = $(this).attr('data-eif-category'); + if (typeof currentEifCategory !== 'undefined') { + $eifTile.each(function () { + const eifCategory = $(this).attr('data-eif-category'); + if (typeof eifCategory !== 'undefined') { + const eifCategoryArray = eifCategory.split(' '); + if ($.inArray(currentEifCategory, eifCategoryArray) < 0 && !$(this).hasClass('visually-hidden')) { + $(this).addClass('visually-hidden'); + } + } + }); + } + }); + } + + // Trigger if eif filter is clicked. + $('.eif-filter__item a').each(function () { + $(this).on('click', function (event) { + event.preventDefault(); + + $(this).toggleClass('is-active'); + checkEifCategories(); + }); + }); + + // Reset eif listing. + $('#eif-reset').on('click', function (event) { + $('.eif-filter__item a.is-active').removeClass('is-active'); + checkEifCategories(); + }); + + // Filter on window load. Needed for eif search filter. + $(window).on('load', function () { + checkEifCategories(); + }); + +})(jQuery, drupalSettings); diff --git a/web/modules/custom/joinup_communities/eif/src/Controller/EifPerspectiveController.php b/web/modules/custom/joinup_communities/eif/src/Controller/EifPerspectiveController.php new file mode 100644 index 0000000000000000000000000000000000000000..a332f90f41da31e0a01d119257de6d254853b221 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/Controller/EifPerspectiveController.php @@ -0,0 +1,134 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif\Controller; + +use Drupal\Component\Render\MarkupInterface; +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Access\AccessResultInterface; +use Drupal\Core\Controller\ControllerBase; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Url; +use Drupal\og\OgAccessInterface; +use Drupal\rdf_meta_entity\Entity\RdfMetaEntity; +use Drupal\solution\Entity\SolutionInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Controller class for the solution EIF perspective. + */ +class EifPerspectiveController extends ControllerBase { + + /** + * The entity type manager service. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The OG access service. + * + * @var \Drupal\og\OgAccessInterface + */ + protected $ogAccess; + + /** + * Constructs a new controller instance. + * + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager service. + * @param \Drupal\og\OgAccessInterface $og_access + * The OG access service. + */ + public function __construct(EntityTypeManagerInterface $entity_type_manager, OgAccessInterface $og_access) { + $this->entityTypeManager = $entity_type_manager; + $this->ogAccess = $og_access; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity_type.manager'), + $container->get('og.access') + ); + } + + /** + * Provides a controller for the 'eif.eif_perspective_form' route title. + * + * @param \Drupal\solution\Entity\SolutionInterface $rdf_entity + * The solution. + * + * @return \Drupal\Component\Render\MarkupInterface + * The content as a render array. + */ + public function title(SolutionInterface $rdf_entity): MarkupInterface { + return $this->t('@solution EIF perspective', [ + '@solution' => $rdf_entity->label(), + ]); + } + + /** + * Provides a controller for the 'eif.eif_perspective_form' route. + * + * @param \Drupal\solution\Entity\SolutionInterface $rdf_entity + * The solution. + * + * @return array + * The content as a render array. + */ + public function settings(SolutionInterface $rdf_entity): array { + $meta_entity = RdfMetaEntity::loadOrCreate('eif_perspective', $rdf_entity); + return $this->entityFormBuilder()->getForm($meta_entity, 'default', [ + 'redirect' => Url::fromRoute('entity.rdf_entity.canonical', [ + 'rdf_entity' => $rdf_entity->id(), + ]), + ]); + } + + /** + * Provides an access callback for the 'eif.eif_perspective_form' route. + * + * @param \Drupal\solution\Entity\SolutionInterface $rdf_entity + * The solution. + * + * @return \Drupal\Core\Access\AccessResultInterface + * The access result. + */ + public function editAccess(SolutionInterface $rdf_entity): AccessResultInterface { + $meta_entity = RdfMetaEntity::loadOrCreate('eif_perspective', $rdf_entity); + if (!$meta_entity->isNew()) { + $access_result = $meta_entity->access('update', NULL, TRUE); + } + else { + $access_result = $this->entityTypeManager->getAccessControlHandler('rdf_meta_entity')->createAccess('eif_perspective', NULL, [], TRUE); + } + + if ($access_result->isAllowed()) { + return $access_result; + } + return $access_result->orIf($this->ogAccess->userAccess($rdf_entity, 'update eif_perspective rdf-meta-entity')); + } + + /** + * Provides an access callback to view the EIF perspective. + * + * @param \Drupal\solution\Entity\SolutionInterface $rdf_entity + * The solution. + * + * @return \Drupal\Core\Access\AccessResultInterface + * The access result. + */ + public function viewAccess(SolutionInterface $rdf_entity): AccessResultInterface { + if (empty($rdf_entity->eif_perspective->entity) || !$rdf_entity->access('view')) { + return AccessResult::forbidden(); + } + + return $this->entityTypeManager->getAccessControlHandler('rdf_meta_entity')->access($rdf_entity->eif_perspective->entity, 'view', NULL, TRUE); + } + +} diff --git a/web/modules/custom/joinup_communities/eif/src/EifInterface.php b/web/modules/custom/joinup_communities/eif/src/EifInterface.php index 1a34b1fc7be75f1d9b47fd8d651ae4de04fac22d..63a157a18ca265c076721bb3a1742f044969b67e 100644 --- a/web/modules/custom/joinup_communities/eif/src/EifInterface.php +++ b/web/modules/custom/joinup_communities/eif/src/EifInterface.php @@ -40,6 +40,13 @@ interface EifInterface { */ public const EIF_SOLUTIONS_NID = 703013; + /** + * The node ID of the EIF Online Assistant solutions custom page. + * + * @var int + */ + public const EIF_ONLINE_ASSISTANT = 705372; + /** * Returns the EIF categories. * diff --git a/web/modules/custom/joinup_communities/eif/src/EifWrapperInterface.php b/web/modules/custom/joinup_communities/eif/src/EifWrapperInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..6d7912c7de1fd53c5cc230f1a359d46d50445559 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/EifWrapperInterface.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif; + +use Drupal\Core\Entity\ContentEntityInterface; + +/** + * Provides an interface defining an EIF Wrapper entity type. + */ +interface EifWrapperInterface extends ContentEntityInterface { + +} diff --git a/web/modules/custom/joinup_communities/eif/src/EifWrapperListBuilder.php b/web/modules/custom/joinup_communities/eif/src/EifWrapperListBuilder.php new file mode 100644 index 0000000000000000000000000000000000000000..05154d942bc8594f06cea4a708d1ef5a1d7d9d8b --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/EifWrapperListBuilder.php @@ -0,0 +1,96 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif; + +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityListBuilder; +use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Routing\RedirectDestinationInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Provides a list controller for the eif wrapper entity type. + */ +class EifWrapperListBuilder extends EntityListBuilder { + + /** + * The redirect destination service. + * + * @var \Drupal\Core\Routing\RedirectDestinationInterface + */ + protected $redirectDestination; + + /** + * Constructs a new EifWrapperListBuilder object. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type definition. + * @param \Drupal\Core\Entity\EntityStorageInterface $storage + * The entity storage class. + * @param \Drupal\Core\Routing\RedirectDestinationInterface $redirect_destination + * The redirect destination service. + */ + public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, RedirectDestinationInterface $redirect_destination) { + parent::__construct($entity_type, $storage); + $this->redirectDestination = $redirect_destination; + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type): self { + return new static( + $entity_type, + $container->get('entity_type.manager')->getStorage($entity_type->id()), + $container->get('redirect.destination') + ); + } + + /** + * {@inheritdoc} + */ + public function render(): array { + $build['table'] = parent::render(); + + $total = $this->getStorage() + ->getQuery() + ->count() + ->execute(); + + $build['summary']['#markup'] = $this->t('Total EIF wrappers: @total', ['@total' => $total]); + return $build; + } + + /** + * {@inheritdoc} + */ + public function buildHeader(): array { + $header['id'] = $this->t('ID'); + return $header + parent::buildHeader(); + } + + /** + * {@inheritdoc} + */ + public function buildRow(EntityInterface $entity): array { + /** @var \Drupal\eif\EifWrapperInterface $entity */ + $row['id'] = $entity->toLink(); + return $row + parent::buildRow($entity); + } + + /** + * {@inheritdoc} + */ + protected function getDefaultOperations(EntityInterface $entity): array { + $operations = parent::getDefaultOperations($entity); + $destination = $this->redirectDestination->getAsArray(); + foreach ($operations as $key => $operation) { + $operations[$key]['query'] = $destination; + } + return $operations; + } + +} diff --git a/web/modules/custom/joinup_communities/eif/src/EifWrapperTypeListBuilder.php b/web/modules/custom/joinup_communities/eif/src/EifWrapperTypeListBuilder.php new file mode 100644 index 0000000000000000000000000000000000000000..aa6754e1fe64d5e71089a9905e3ae58ef5439a37 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/EifWrapperTypeListBuilder.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif; + +use Drupal\Core\Config\Entity\ConfigEntityListBuilder; +use Drupal\Core\Entity\EntityInterface; + +/** + * List builder for 'eif_wrapper_type' entities. + */ +class EifWrapperTypeListBuilder extends ConfigEntityListBuilder { + + /** + * {@inheritdoc} + */ + public function buildHeader(): array { + return [ + 'type' => $this->t('Type'), + ] + parent::buildHeader(); + } + + /** + * {@inheritdoc} + */ + public function buildRow(EntityInterface $entity): array { + return [ + 'type' => $entity->toLink(NULL, 'edit-form'), + ] + parent::buildRow($entity); + } + +} diff --git a/web/modules/custom/joinup_communities/eif/src/Entity/EifWrapper.php b/web/modules/custom/joinup_communities/eif/src/Entity/EifWrapper.php new file mode 100644 index 0000000000000000000000000000000000000000..42339b1a720206fa499e8e4e5ad76059649c81ae --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/Entity/EifWrapper.php @@ -0,0 +1,92 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif\Entity; + +use Drupal\Core\Entity\ContentEntityBase; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\eif\EifWrapperInterface; + +/** + * Acts as a wrapper around EIF reference to term and description. + * + * An 'EIF Perspective' RDF Meta Entity should link a multi-value field having + * two columns: + * - Taxonomy term reference, pointing to EIF vocabularies, + * - Description. + * Currently, fields of entity types using SPARQL Entity Storage cannot have + * multiple columns and multiple values in the same time. This is a well known + * limitation handled in ISAICP-3576. This entity type acts in the same way as + * the custom field type and is a temporary solution until ISAICP-3576 is fixed. + * + * @ContentEntityType( + * id = "eif_wrapper", + * label = @Translation("EIF Wrapper"), + * label_collection = @Translation("EIF Wrappers"), + * bundle_label = @Translation("EIF Wrapper type"), + * handlers = { + * "form" = { + * "default" = "Drupal\eif\Form\EifWrapperForm", + * "delete" = "Drupal\Core\Entity\ContentEntityDeleteForm", + * }, + * "list_builder" = "Drupal\eif\EifWrapperListBuilder", + * "route_provider" = { + * "html" = "Drupal\Core\Entity\Routing\AdminHtmlRouteProvider", + * }, + * "storage" = "\Drupal\sparql_entity_storage\SparqlEntityStorage", + * }, + * base_table = NULL, + * admin_permission = "administer rdf meta entity", + * entity_keys = { + * "id" = "id", + * "label" = "id", + * "bundle" = "type", + * }, + * links = { + * "add-form" = "/admin/content/eif-wrapper/add", + * "canonical" = "/admin/content/eif-wrapper/manage/{eif_wrapper}", + * "edit-form" = "/admin/content/eif-wrapper/manage/{eif_wrapper}/edit", + * "delete-form" = "/admin/content/eif-wrapper/manage/{eif_wrapper}/delete", + * "collection" = "/admin/content/eif-wrapper" + * }, + * field_ui_base_route = "entity.eif_wrapper_type.edit_form", + * bundle_entity_type = "eif_wrapper_type", + * ) + * + * @todo Move the whole logic to a custom field type once ISAICP-3576 lands. + * + * @see https://citnet.tech.ec.europa.eu/CITnet/jira/browse/ISAICP-3576 + */ +class EifWrapper extends ContentEntityBase implements EifWrapperInterface { + + /** + * {@inheritdoc} + */ + public static function baseFieldDefinitions(EntityTypeInterface $entity_type): array { + $fields = parent::baseFieldDefinitions($entity_type); + + $fields['id'] = BaseFieldDefinition::create('uri') + ->setLabel(t('ID')) + ->setTranslatable(FALSE); + + $fields['description'] = BaseFieldDefinition::create('text_long') + ->setLabel(t('Description')) + ->setRevisionable(FALSE) + ->setTranslatable(FALSE) + ->setCardinality(1) + ->setDisplayConfigurable('form', TRUE) + ->setDisplayConfigurable('view', TRUE); + + return $fields; + } + + /** + * {@inheritdoc} + */ + public function label(): string { + return $this->hasField('term') ? $this->get('term')->entity->label() : $this->id(); + } + +} diff --git a/web/modules/custom/joinup_communities/eif/src/Entity/EifWrapperType.php b/web/modules/custom/joinup_communities/eif/src/Entity/EifWrapperType.php new file mode 100644 index 0000000000000000000000000000000000000000..c0ac4325d86bf3442927af4590960d214ea383e0 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/Entity/EifWrapperType.php @@ -0,0 +1,61 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif\Entity; + +use Drupal\Core\Config\Entity\ConfigEntityBundleBase; + +/** + * Defines the EIF Wrapper type configuration entity. + * + * @ConfigEntityType( + * id = "eif_wrapper_type", + * label = @Translation("EIF Wrapper Type"), + * handlers = { + * "form" = { + * "add" = "Drupal\eif\Form\EifWrapperTypeForm", + * "edit" = "Drupal\eif\Form\EifWrapperTypeForm", + * "delete" = "Drupal\Core\Entity\EntityDeleteForm", + * }, + * "route_provider" = { + * "html" = "Drupal\Core\Entity\Routing\AdminHtmlRouteProvider", + * }, + * "list_builder" = "Drupal\eif\EifWrapperTypeListBuilder", + * }, + * links = { + * "add-form" = "/admin/structure/eif-wrapper/add", + * "edit-form" = "/admin/structure/eif-wrapper/manage/{eif_wrapper_type}", + * "delete-form" = "/admin/structure/eif-wrapper/manage/{eif_wrapper_type}/delete", + * "collection" = "/admin/structure/eif-wrapper", + * }, + * admin_permission = "administer rdf meta entity", + * bundle_of = "eif_wrapper", + * config_prefix = "eif_wrapper_type", + * entity_keys = { + * "id" = "id", + * "label" = "label", + * }, + * config_export = { + * "id", + * "label", + * }, + * ) + */ +class EifWrapperType extends ConfigEntityBundleBase { + + /** + * The entity ID. + * + * @var string + */ + protected string $id; + + /** + * The human-readable name of the EIF Wrapper type. + * + * @var string + */ + protected string $label; + +} diff --git a/web/modules/custom/joinup_communities/eif/src/Form/EifWrapperInlineForm.php b/web/modules/custom/joinup_communities/eif/src/Form/EifWrapperInlineForm.php new file mode 100644 index 0000000000000000000000000000000000000000..f2b4b3d418a438e1cb73119882ea1af6b48a1357 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/Form/EifWrapperInlineForm.php @@ -0,0 +1,42 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif\Form; + +use Drupal\inline_entity_form\Form\EntityInlineForm; +use Drupal\inline_entity_form\InlineFormInterface; + +/** + * Inline form handler for 'eif_wrapper' entity type. + */ +class EifWrapperInlineForm extends EntityInlineForm implements InlineFormInterface { + + /** + * {@inheritdoc} + */ + public function getTableFields($bundles): array { + $fields = parent::getTableFields($bundles); + + $fields['label']['label'] = $this->t('Qualifier'); + $fields['description'] = [ + 'type' => 'field', + 'label' => $this->t('Description'), + 'weight' => 10, + 'display_options' => [ + 'type' => 'text_trimmed', + 'settings' => ['trim_length' => 250], + ], + ]; + + return $fields; + } + + /** + * {@inheritdoc} + */ + public function isTableDragEnabled($element): bool { + return FALSE; + } + +} diff --git a/web/modules/custom/joinup_communities/eif/src/Form/EifWrapperTypeForm.php b/web/modules/custom/joinup_communities/eif/src/Form/EifWrapperTypeForm.php new file mode 100644 index 0000000000000000000000000000000000000000..3f453690c0bd177700e14f2aaedc07d23f036274 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/Form/EifWrapperTypeForm.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif\Form; + +use Drupal\Core\Entity\BundleEntityFormBase; + +/** + * EIF Wrapper Type edit form. + */ +class EifWrapperTypeForm extends BundleEntityFormBase { + +} diff --git a/web/modules/custom/joinup_communities/eif/src/Plugin/Block/EifFilterBlock.php b/web/modules/custom/joinup_communities/eif/src/Plugin/Block/EifFilterBlock.php new file mode 100644 index 0000000000000000000000000000000000000000..dcf456d815208b66aa55e8e18b8324f6456524f7 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/src/Plugin/Block/EifFilterBlock.php @@ -0,0 +1,130 @@ +<?php + +declare(strict_types = 1); + +namespace Drupal\eif\Plugin\Block; + +use Drupal\Core\Block\BlockBase; +use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Provides the block that displays the Eif filters. + * + * @Block( + * id = "eif_filter_block", + * admin_label = @Translation("EIF filter block"), + * category = @Translation("EIF") + * ) + */ +class EifFilterBlock extends BlockBase implements ContainerFactoryPluginInterface { + + /** + * The entity type manager service. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected EntityTypeManagerInterface $entityTypeManager; + + /** + * Constructs a new EifFilterBlock. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager + * The entity type manager service. + */ + public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityTypeManagerInterface $entityTypeManager) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->entityTypeManager = $entityTypeManager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): self { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity_type.manager') + ); + } + + /** + * {@inheritdoc} + */ + public function build(): array { + $tree = []; + $term_storage = $this->entityTypeManager->getStorage('taxonomy_term'); + + $vocabularies = [ + 'eif_principle' => $this->t('Underlying principles'), + 'eif_interoperability_layer' => $this->t('Interoperability layer'), + 'eif_conceptual_model' => $this->t('Conceptual model'), + 'eif_solution_type' => $this->t('Solution category'), + ]; + + foreach ($vocabularies as $machine_name => $name) { + $principle_terms = $term_storage->loadTree($machine_name); + $id = htmlentities(str_replace([' ', '/', ':'], ['-', '-', ''], strtolower((string) $name))); + foreach ($principle_terms as $term) { + $tree = $this->getTree($id, (string) $name, $tree, $term, $term_storage); + } + } + + if (empty($tree)) { + return []; + } + + $build['tree_filters'] = [ + '#theme' => 'eif_filter_list', + '#items' => $tree, + ]; + $build['#attached']['library'][] = 'eif/eif-filter'; + return $build; + } + + /** + * Get taxonomy term data. + * + * @param string $id + * Filter identify. + * @param string $name + * Filter name. + * @param array $tree + * Items in filter. + * @param object $term + * Taxonomy term. + * @param \Drupal\Core\Entity\EntityStorageInterface $storage + * The entity storage. + * + * @return array + * Added items for filters. + */ + public function getTree(string $id, string $name, array $tree, \stdClass $term, EntityStorageInterface $storage): array { + $tree[$id]['title'] = $name; + $tree[$id]['class'] = 'eif-filter--' . $id; + + // @todo Use an alternative title instead of dynamically splitting it. + // @see https://citnet.tech.ec.europa.eu/CITnet/jira/browse/ISAICP-7110. + $parts = explode(':', $term->name); + $name = empty($parts[1]) ? $term->name : trim($parts[1]); + + $tree[$id]['items'][] = [ + 'title' => $name, + 'description' => $storage->load($term->tid)->getDescription(), + 'eif_category' => htmlentities( + str_replace([' ', '/', ':'], ['-', '-', ''], strtolower($term->name)) + ), + ]; + return $tree; + } + +} diff --git a/web/modules/custom/joinup_communities/eif/templates/eif-filter-list.html.twig b/web/modules/custom/joinup_communities/eif/templates/eif-filter-list.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..e8e22d9eb83aac2215bd2c4d2a007060e9c07eca --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/templates/eif-filter-list.html.twig @@ -0,0 +1,37 @@ +{# +/** + * @file + * Default implementation of displaying a grid of lists. + * + * Available variables: + * - items: A nested list of items. Each item contains: + * -- title: The title of the parent. + * -- class: The explicit parent class to pass to the list + * -- children: A nested list of items. Each item contains: + * --- data-eif-category: The eif category to pass to the data attribute data-eif-category. + * --- title: The title of the child. + * --- description: The description of the field to pass to the data attribute. + */ +#} +<div class="listing listing--grid"> + <div class="row"> + <div> + {% for parent_item in items %} + <div class="eif-filter {{ parent_item.class }}"> + <div class="eif__card"> + <div class="eif-filter__header"> + <span>{{ parent_item.title }}</span> + </div> + <div class="eif-filter__content"> + <ul class="eif-filter__list"> + {% for child in parent_item.items %} + <li class="eif-filter__item"><a data-eif-category="{{ child.eif_category }}" href="#" title="{{ child.description }}">{{ child.title }}</a></li> + {% endfor %} + </ul> + </div> + </div> + </div> + {% endfor %} + </div> + </div> +</div> diff --git a/web/modules/custom/joinup_communities/eif/templates/eif-wrapper.html.twig b/web/modules/custom/joinup_communities/eif/templates/eif-wrapper.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..b17618a52da65cfbf09371411fcd1da7a4cac2f5 --- /dev/null +++ b/web/modules/custom/joinup_communities/eif/templates/eif-wrapper.html.twig @@ -0,0 +1,9 @@ +{# +/** + * @file + * Themeing for EIF wrapper. + */ +#} +<article {{ attributes }}> + <a title="{{ content.description.0['#text']|striptags }}" href="{{ content.term.0['#url'] }}">{{ content.term.0['#title'] }}</a> +</article> diff --git a/web/modules/custom/joinup_core/joinup_core.install b/web/modules/custom/joinup_core/joinup_core.install index 4f923d06dad967128beff1c21fc52e8413d3f725..0c7093f5ef20e9f2273dcc8cdd59b64a651eff89 100644 --- a/web/modules/custom/joinup_core/joinup_core.install +++ b/web/modules/custom/joinup_core/joinup_core.install @@ -91,3 +91,13 @@ function joinup_core_requirements($phase): array { return $requirements; } + +/** + * Install 'EIF Wrapper' entity type. + */ +function joinup_core_update_108300(?array &$sandbox = NULL): void { + $entity_type_manager = \Drupal::entityTypeManager(); + $entity_definition_manager = \Drupal::entityDefinitionUpdateManager(); + $entity_definition_manager->installEntityType($entity_type_manager->getDefinition('eif_wrapper_type')); + $entity_definition_manager->installEntityType($entity_type_manager->getDefinition('eif_wrapper')); +} diff --git a/web/modules/custom/joinup_core/joinup_core.post_update.php b/web/modules/custom/joinup_core/joinup_core.post_update.php index 031777be204cd926bb93f68c66d13c042bed6816..80a8eaa320cbb987a95a9a6dcd539842b35bc07a 100644 --- a/web/modules/custom/joinup_core/joinup_core.post_update.php +++ b/web/modules/custom/joinup_core/joinup_core.post_update.php @@ -14,3 +14,11 @@ */ declare(strict_types = 1); + +/** + * Import the EIF solution type vocabulary. + */ +function joinup_core_post_update_108300(?array &$sandbox = NULL): void { + $fixtures_helper = \Drupal::getContainer()->get('joinup_rdf.vocabulary_fixtures.helper'); + $fixtures_helper->importFixtures('eif_solution_type'); +} diff --git a/web/modules/custom/joinup_rdf/src/VocabularyFixturesHelper.php b/web/modules/custom/joinup_rdf/src/VocabularyFixturesHelper.php index 1b25b8507f402ed102d9181c5f50f053e6dcdf43..b6277cfebca9113a3b2bccf9d437cf0d627bbe6e 100644 --- a/web/modules/custom/joinup_rdf/src/VocabularyFixturesHelper.php +++ b/web/modules/custom/joinup_rdf/src/VocabularyFixturesHelper.php @@ -52,6 +52,11 @@ protected function getFixturesData(): array { 'WITH <http://licence-legal-type> INSERT { ?member skos:broaderTransitive ?collection } WHERE { ?collection a skos:Collection . ?collection skos:member ?member };', ], ], + 'eif_solution_type' => [ + 'graph' => 'http://eif_solution_type', + 'filename' => 'eif_solution_type.rdf', + 'extra queries' => [], + ], ]; } diff --git a/web/modules/custom/joinup_search/joinup_search.module b/web/modules/custom/joinup_search/joinup_search.module index de7ab05ab5fc15cf8d2350d2ea2415150e69b04e..f8c4af6dd0ab362284f10c1c08911a8d7f2bc17d 100644 --- a/web/modules/custom/joinup_search/joinup_search.module +++ b/web/modules/custom/joinup_search/joinup_search.module @@ -184,7 +184,7 @@ function joinup_search_search_api_index_items_alter(IndexInterface $index, array [, $raw_id] = Utility::splitCombinedId($item_id); [, $langcode] = Utility::splitPropertyPath($raw_id); // Unset non-english content from the index. - if ($langcode != 'en') { + if (!in_array($langcode, ['en', 'und'])) { unset($items[$item_id]); } } diff --git a/web/modules/custom/joinup_search/src/Plugin/views/row/JoinupSearchApiRow.php b/web/modules/custom/joinup_search/src/Plugin/views/row/JoinupSearchApiRow.php index e52a96d79e53fa8e7c61dacddc2a0d163dc8adb5..a455de49ab3f8780d4360ab07bc1f2290c634de2 100644 --- a/web/modules/custom/joinup_search/src/Plugin/views/row/JoinupSearchApiRow.php +++ b/web/modules/custom/joinup_search/src/Plugin/views/row/JoinupSearchApiRow.php @@ -12,7 +12,7 @@ * * @ViewsRow( * id = "joinup_search_api", - * title = @Translation("Rendered entity"), + * title = @Translation("Rendered entity with 3 featured items"), * help = @Translation("Displays entity of the matching search API item"), * ) * diff --git a/web/modules/custom/owner/owner.module b/web/modules/custom/owner/owner.module index 6e6598a74f73fa5a3e199896a9dfbf487a6dfb92..e17e8ac42fa0a168eb1c74c52c9c2655328ad69e 100644 --- a/web/modules/custom/owner/owner.module +++ b/web/modules/custom/owner/owner.module @@ -92,7 +92,7 @@ function owner_inline_entity_form_entity_form_alter(&$entity_form, &$form_state) * @param \Drupal\Core\Entity\EntityInterface $entity * The entity being built. */ -function owner_inline_entity_form_entity_builder($entity_type, EntityInterface $entity) { +function owner_inline_entity_form_entity_builder(string $entity_type, EntityInterface $entity) { owner_entity_auto_label($entity); } diff --git a/web/modules/custom/solution/solution.routing.yml b/web/modules/custom/solution/solution.routing.yml index 855b5151dc5a08c8854a086aac2c8ec113de4e0c..8ad88b78c6b68ab4e2571fc137b93bbb7b035ba3 100644 --- a/web/modules/custom/solution/solution.routing.yml +++ b/web/modules/custom/solution/solution.routing.yml @@ -63,3 +63,17 @@ solution.change_collection: parameters: rdf_entity: type: entity:rdf_entity + +solution.eif_perspective.form: + path: '/rdf_entity/{rdf_entity}/eif-perspective' + defaults: + _controller: Drupal\collection\Controller\CollectionSettingsController::settings + _title_callback: Drupal\collection\Controller\CollectionSettingsController::title + requirements: + _custom_access: Drupal\collection\Controller\CollectionSettingsController::access + options: + parameters: + rdf_entity: + type: entity:rdf_entity + bundle: + - collection diff --git a/web/themes/joinup/joinup_theme.theme b/web/themes/joinup/joinup_theme.theme index f08fa4ea8a58554e7663f2c15384ddeb199d7b9a..ac86695d7d8a610000fb9127e4780fccb8a14ff6 100644 --- a/web/themes/joinup/joinup_theme.theme +++ b/web/themes/joinup/joinup_theme.theme @@ -1846,6 +1846,109 @@ function joinup_theme_preprocess_rdf_entity__licence__search_list_item(&$variabl } } +/** + * Implements hook_preprocess_HOOK(). + */ +function joinup_theme_preprocess_rdf_entity__solution__view_mode_search_list_item(array &$variables): void { + /** @var \Drupal\joinup_licence\Entity\LicenceInterface $entity */ + $entity = $variables['elements']['#rdf_entity']; + $eif_perspective = $entity->eif_perspective->entity; + if (empty($eif_perspective)) { + return; + } + + // Provides variables needed for the search_list_item view mode of licences. + // This is used on the Joinup Licence Assistant overview page. + $data_property_categories = []; + + $parent_id = 'solution-category'; + $category_lists[$parent_id] = [ + 'title' => 'Solution category', + 'weight' => 3, + 'class' => 'eif-tile__line--' . $parent_id, + ]; + $category_lists[$parent_id]['items'] = []; + foreach ($eif_perspective->field_eif_solution_type as $solution_type) { + $solution_type = $solution_type->entity; + $category_lists[$parent_id]['items'][] = [ + 'title' => $solution_type->label(), + 'weight' => 0, + 'description' => '', + ]; + + $normalized_title = htmlentities(str_replace([' ', '/'], ['-', '-'], strtolower($solution_type->label()))); + $data_property_categories[$solution_type->id()] = $normalized_title; + } + + $data = [ + 'layer' => [ + 'field' => 'eif_layer', + 'label' => 'Interoperability layer', + 'class' => 'interoperability-layer', + ], + 'principle' => [ + 'field' => 'eif_principle', + 'label' => 'Underlying principle', + 'class' => 'underlying-principles', + ], + 'model' => [ + 'field' => 'eif_model', + 'label' => 'Conceptual model', + 'class' => 'conceptual-model', + ], + ]; + + $search = [' ', '/', ':']; + $replace = ['-', '-', '']; + foreach ($data as $key => $key_data) { + $category_lists[$key] = [ + 'title' => $key_data['label'], + 'weight' => 3, + 'class' => 'eif-tile__line--' . $key_data['class'], + ]; + $category_lists[$key]['items'] = []; + foreach ($eif_perspective->{$key_data['field']} as $eif_wrapper_reference) { + // @todo Use an alternative title instead of dynamically splitting it. + // @see https://citnet.tech.ec.europa.eu/CITnet/jira/browse/ISAICP-7110. + $term = $eif_wrapper_reference->entity; + $parts = explode(':', $term->label()); + $name = empty($parts[1]) ? $term->label() : trim($parts[1]); + + $category_lists[$key]['items'][] = [ + 'title' => $name, + 'weight' => $term->getWeight(), + 'description' => $eif_wrapper_reference->entity->description->value, + ]; + + $normalized_title = htmlentities(str_replace($search, $replace, strtolower($term->label()))); + $data_property_categories[$term->id()] = $normalized_title; + } + } + + $variables['attributes']['data-eif-category'] = implode(' ', $data_property_categories); + $variables['attributes']['class'][] = 'eif-tile'; + + if (!empty($data_property_categories)) { + $sort_function = function ($a, $b) { + return $a['weight'] <=> $b['weight']; + }; + + usort($category_lists, $sort_function); + foreach ($category_lists as &$category_data) { + usort($category_data['items'], $sort_function); + } + + $variables['eif_categories'] = implode(' ', $data_property_categories); + $variables['category_lists'] = $category_lists; + } + + $eif_perspective_view = \Drupal::entityTypeManager()->getViewBuilder('rdf_meta_entity')->viewField($eif_perspective->field_eif_description, [ + 'label' => 'hidden', + ]); + $variables['eif_perspective_description'] = $eif_perspective_view; + $variables['solution_url'] = $entity->toUrl()->setAbsolute()->toString(); +} + /** * Implements hook_preprocess_HOOK() for rdf-entity--solution--listing-item.html.twig. * diff --git a/web/themes/joinup/scss/app.scss b/web/themes/joinup/scss/app.scss index 1bcd314898a4307918b05c456cf3375c37976e2f..6563dd63cf0d43c2b77203f5d86589e9c1f0c0c3 100644 --- a/web/themes/joinup/scss/app.scss +++ b/web/themes/joinup/scss/app.scss @@ -12,79 +12,80 @@ // Basic html elements // // Styleguide 1 +@import "base/blockquote"; @import "base/body"; -@import "base/paragraph"; +@import "base/checkbox"; +@import "base/cookie_consent_kit"; @import "base/heading"; -@import "base/blockquote"; +@import "base/input"; @import "base/link"; @import "base/ordered_list"; -@import "base/unordered_list"; -@import "base/table"; +@import "base/paragraph"; @import "base/radio"; -@import "base/checkbox"; -@import "base/cookie_consent_kit"; -@import "base/input"; @import "base/shared"; +@import "base/table"; +@import "base/unordered_list"; // Components // // Joinup components // // Styleguide 2 -@import "components/search-bar"; -@import "components/header"; -@import "components/header-logo"; -@import "components/header-menu"; -@import "components/login-menu"; -@import "components/icons-bar"; -@import "components/sidebar-menu"; -@import "components/listing"; -@import "components/featured"; -@import "components/featured-interoperable-europe"; -@import "components/featured-lg"; -@import "components/icon"; +@import "components/accordion"; +@import "components/action-link"; +@import "components/alert"; +@import "components/announcement"; +@import "components/avatar"; @import "components/background"; +@import "components/block"; @import "components/button"; -@import "components/form"; -@import "components/editor-area"; -@import "components/tab"; -@import "components/alert"; -@import "components/tallinn"; -@import "components/form-table"; -@import "components/file-upload"; -@import "components/field-image-widget"; -@import "components/draggable"; -@import "components/vertical-table"; -@import "components/vertical-tabs"; +@import "components/chip"; +@import "components/chipfield"; @import "components/circle-menu"; -@import "components/filters"; +@import "components/comment"; @import "components/details"; -@import "components/action-link"; +@import "components/draggable"; +@import "components/editor-area"; +@import "components/eif"; @import "components/etiquette"; -@import "components/timeline"; -@import "components/announcement"; -@import "components/avatar"; -@import "components/comment"; -@import "components/load-more"; +@import "components/featured"; +@import "components/featured-interoperable-europe"; +@import "components/featured-lg"; +@import "components/field-image-widget"; @import "components/fieldset"; -@import "components/pager"; -@import "components/share-box"; +@import "components/file-upload"; +@import "components/filters"; @import "components/footer"; @import "components/footer-ec-menu"; @import "components/footer-social-media"; -@import "components/vertical-menu"; -@import "components/page"; -@import "components/block"; +@import "components/form"; +@import "components/form-table"; +@import "components/glossary"; +@import "components/header"; +@import "components/header-logo"; +@import "components/header-menu"; +@import "components/icon"; @import "components/icon-card"; +@import "components/icons-bar"; +@import "components/image-caption"; @import "components/inline-social-media"; -@import "components/chip"; -@import "components/chipfield"; @import "components/invite-form"; -@import "components/navigation-bottom"; -@import "components/image-caption"; @import "components/licence"; -@import "components/glossary"; -@import "components/accordion"; +@import "components/listing"; +@import "components/load-more"; +@import "components/login-menu"; +@import "components/navigation-bottom"; +@import "components/page"; +@import "components/pager"; +@import "components/search-bar"; +@import "components/share-box"; +@import "components/sidebar-menu"; +@import "components/tab"; +@import "components/tallinn"; +@import "components/timeline"; +@import "components/vertical-menu"; +@import "components/vertical-table"; +@import "components/vertical-tabs"; // Revamp (Ventuno theme) components @import "components/navbar-search--revamp"; diff --git a/web/themes/joinup/scss/components/_eif.scss b/web/themes/joinup/scss/components/_eif.scss new file mode 100644 index 0000000000000000000000000000000000000000..48ce60a3263eda8e909c80c27c888ef318da8192 --- /dev/null +++ b/web/themes/joinup/scss/components/_eif.scss @@ -0,0 +1,559 @@ +// EIF +// + +// Component +// -------------------------------------------------- + +// Elements +// -------------------------------------------------- +.eif-filter__header { + height: 45px; + color: #fff; + text-align: center; + + span { + font-weight: $font-weight-medium; + vertical-align: middle; + line-height: 45px; + } +} + +.eif-filter__label { + color: $color-blue-dark; + font-weight: bold; + margin: 0 0 10px; +} + +.eif-filter__content { + margin: 7px 0; +} + +.eif__card { + height: 100%; +} + +.eif-filter__list { + padding: 0; + margin: 0; + list-style: none; + + .eif-filter__item { + font-size: $font-size-small; + + &:last-child { + margin-bottom: 0; + } + + a { + display: block; + padding: 7px 14px; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + + &.is-active { + padding: 7px 14px 6px; + background: $color-grey-input; + border-bottom: 1px solid #fff; + color: #fff; + } + } + } +} + +.eif-tile { + display: block; +} + +.eif-tile__title { + div { + display: inline; + } + + .icon { + margin-left: 0; + margin-right: 5px; + float: left; + } + + @include breakpoint(mobile) { + margin-left: -21px; + } +} + +.eif-tile__line { + font-size: $font-size-xsmall; + display: flex; + align-items: center; +} + +.eif-tile__label { + color: #fff; + padding: 5px 10px; + margin-right: 10px; +} + +.eif-tile__label-wrapper { + min-width: 150px; + text-align: right; +} + +.eif-tile__button { + display: inline-block; + text-decoration: none; + padding: 10px 30px; + border: 2px solid $color-blue-warm; + font-size: $font-size-small; + border-radius: 5px; + background: $color-blue-warm; + color: #fff; + + &:hover { + color: $color-base; + background: transparent; + } +} + +.eif-tile__button--disabled { + background: transparent; + color: $color-base; + border-color: $color-orange-warm; + pointer-events: none; +} + +.eif-tile__actions { + @include z-index(highlight + 1); + @include breakpoint(lg-desktop) { + position: absolute; + right: 20px; + bottom: 20px; + } +} + +.eif-tile__actions-item { + display: inline-block; + margin-right: $field-margin; + margin-bottom: $field-margin; + + &:last-child { + margin-right: 0; + margin-bottom: 0; + } + + @include breakpoint(lg-desktop) { + margin-bottom: 0; + } +} + +.eif-counter { + font-weight: bold; + margin: 10px 0; + + @include breakpoint(desktop) { + margin: 0 0 10px; + } +} + +.eif-search__label { + color: $color-blue-dark; + font-weight: bold; + display: inline-block; + vertical-align: middle; +} + +.eif-search__input { + display: inline-block; + vertical-align: middle; + + @include breakpoint(mobile) { + margin: 0 10px 5px 10px; + } +} + +.eif-search__form { + .eif-search__reset { + margin: 10px 0; + } + + @include breakpoint(desktop) { + margin: 0; + display: flex; + justify-content: space-between; + align-items: center; + } +} + +.eif-comparer__dialog { + /* hack to correctly center jquery ui-dialog. */ + left: 50% !important; + top: 50% !important; + transform: translate(-50%, -50%); + margin: 0 !important; + + .ui-dialog-content { + margin-top: 20px; + } + .ui-dialog-buttonset { + margin-top: 0 !important; + } + .ui-button { + background: white; + border: 3px solid #227BD9; + padding: 12px 25px; + font-size: 16px; + &:focus { + outline: none; + } + &:hover { + background: #227BD9; + color:white; + } + } +} + +// Modifiers +// -------------------------------------------------- +.eif-filter--underlying-principles { + .eif-filter__header { + background-color: $color-green-warm; + } + + .eif-filter__item { + a { + color: $color-green-warm; + } + } + + &.eif-comparer__sidebar-header { + background-color: $color-green-warm; + } + + &.eif-comparer__sidebar-cell { + color: $color-green-warm; + } +} + +.eif-filter--must { + .eif-filter__header { + background-color: $color-beige-warm; + } + + .eif-filter__item { + a { + color: $color-beige-warm; + } + } + + &.eif-comparer__sidebar-header { + background-color: $color-beige-warm; + } + + &.eif-comparer__sidebar-cell { + color: $color-beige-warm; + } +} + +.eif-filter--cannot { + .eif-filter__header { + background-color: $color-red-warm; + } + + .eif-filter__item { + a { + color: $color-red-warm; + } + } + + &.eif-comparer__sidebar-header { + background-color: $color-red-warm; + } + + &.eif-comparer__sidebar-cell { + color: $color-red-warm; + } +} + +.eif-filter--conceptual-model { + .eif-filter__header { + background-color: $color-blue-warm; + } + + .eif-filter__item { + a { + color: $color-blue-warm; + } + } + + &.eif-comparer__sidebar-header { + background-color: $color-blue-warm; + } + + &.eif-comparer__sidebar-cell { + color: $color-blue-warm; + } +} + +.eif-filter--solution-category { + .eif-filter__header { + background-color: $color-grey-warm; + } + + .eif-filter__item { + a { + color: $color-grey-warm; + } + } + + &.eif-comparer__sidebar-header { + background-color: $color-grey-warm; + } + + &.eif-comparer__sidebar-cell { + color: $color-grey-warm; + } +} + +.eif-filter--interoperability-layer { + .eif-filter__header { + background-color: $color-orange-warm; + } + + .eif-filter__item { + a { + color: $color-orange-warm; + } + } + + &.eif-comparer__sidebar-header { + background-color: $color-orange-warm; + } + + &.eif-comparer__sidebar-cell { + color: $color-orange-warm; + } +} + +.eif-tile__line--underlying-principles { + .eif-tile__label { + background-color: $color-green-warm; + } + + .eif-tile__value { + color: $color-green-warm; + } +} + +.eif-tile__line--must { + .eif-tile__label { + background-color: $color-beige-warm; + } + + .eif-tile__value { + color: $color-beige-warm; + } +} + +.eif-tile__line--cannot { + .eif-tile__label { + background-color: $color-red-warm; + } + + .eif-tile__value { + color: $color-red-warm; + } +} + +.eif-tile__line--conceptual-model { + .eif-tile__label { + background-color: $color-blue-warm; + } + + .eif-tile__value { + color: $color-blue-warm; + } +} + +.eif-tile__line--solution-category { + .eif-tile__label { + background-color: $color-grey-warm; + } + + .eif-tile__value { + color: $color-grey-warm; + } +} + +.eif-tile__line--interoperability-layer { + .eif-tile__label { + background-color: $color-orange-warm; + } + + .eif-tile__value { + color: $color-orange-warm; + } +} + +.eif-comparer { + border-spacing: 0; + width: 100%; + + @include breakpoint(tablet) { + table-layout: fixed; + } + + td { + padding: 5px; + } + + .icon { + font-size: $font-size-xsmall; + color: #fff; + background: $color-orange; + border-radius: 50%; + padding: 5px; + } + + .icon--info { + font-size: $font-size-medium; + color: #000; + background: transparent; + border-radius: initial; + } + + &__wrapper { + overflow-x: auto; + } + + &__cell, &__header { + background: #fff; + padding: 5px; + border: 5px solid $color-grey-bg; + text-align: center; + + &:nth-child(2) { + border-left-width: 10px; + } + } + + &__header { + font-weight: $font-weight-bold; + padding: 7px; + + span { + display: inline-block; + vertical-align: middle; + padding: 0 5px; + + &.icon--info { + cursor: pointer; + } + } + } + + &__sidebar-header { + color: #fff; + padding: 5px; + height: 45px; + text-align: center; + font-weight: $font-weight-medium; + font-size: $font-size-base; + } + + &__sidebar-cell { + border: 5px solid #fff; + background: #fff; + } + + &__empty-cell { + background: $color-grey-filler; + } +} + +// Modifiers +// -------------------------------------------------- +.listing__item--compatibility { + .listing__card--inline-container { + padding: 10px; + .listing__inner-tile--shifted { + flex: 2 1 300px; + padding: 10px; + + .listing__title, + .listing__teaser { + margin-left: 0; + max-height: initial; + line-height: initial; + overflow: initial; + } + } + .eif-tile__actions { + position: initial; + top: initial; + left: initial; + } + } +} + +// Dependencies +// -------------------------------------------------- +.eif-tile { + border: 1px solid $color-grey-warm; + padding: 1rem; + background: white; + .listing__card { + min-height: 0; + flex-direction: column!important; + @include breakpoint(tablet) { + flex-direction: row!important; + } + .listing__inner-tile--wider { + padding-right: 1rem; + } + .listing__card--inline-container { + border: 1px solid $color-grey-warm; + border-radius: .5rem; + .listing__inner-tile:first-of-type { + display: none; + @include breakpoint(tablet) { + display: flex; + align-items: center; + flex: 0 0 25%; + } + } + .listing__inner-tile:last-of-type { + flex: 0 0 100%; + @include breakpoint(tablet) { + flex: 0 0 75%; + } + .listing__field { + .listing__title { + font-size: 16px; + font-weight: $font-weight-bold; + max-height: unset; + } + li, p { + font-size: 12px; + line-height: 1.2; + } + li { + color: $color-grey-medium; + list-style-type: none; + } + } + .eif-tile__button { + float: right; + } + } + } + } +} + +// States +// -------------------------------------------------- +.eif-tile { + &.is-hidden { + display: none; + } +} diff --git a/web/themes/joinup/templates/parts/eif-filter-list.html.twig b/web/themes/joinup/templates/parts/eif-filter-list.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..288ec7b9e5305cdbb7f077c7f0a11552d9cac4ab --- /dev/null +++ b/web/themes/joinup/templates/parts/eif-filter-list.html.twig @@ -0,0 +1,37 @@ +{# +/** + * @file + * Default implementation of displaying a grid of lists. + * + * Available variables: + * - items: A nested list of items. Each item contains: + * -- title: The title of the parent. + * -- class: The explicit parent class to pass to the list + * -- children: A nested list of items. Each item contains: + * --- data-eif-category: The eif category to pass to the data attribute data-eif-category. + * --- title: The title of the child. + * --- description: The description of the field to pass to the data attribute. + */ +#} +<div class="listing listing--grid"> + <div class="row"> + <div class="mdl-grid"> + {% for parent_item in items %} + <div class="eif-filter {{ parent_item.class }} mdl-cell mdl-cell--3-col mdl-cell--3-col-wide"> + <div class="eif__card mdl-card"> + <div class="eif-filter__header"> + <span>{{ parent_item.title }}</span> + </div> + <div class="eif-filter__content"> + <ul class="eif-filter__list"> + {% for child in parent_item.items %} + <li class="eif-filter__item"><a data-eif-category="{{ child.eif_category }}" href="#" title="{{ child.description }}">{{ child.title }}</a></li> + {% endfor %} + </ul> + </div> + </div> + </div> + {% endfor %} + </div> + </div> +</div> diff --git a/web/themes/joinup/templates/rdf_entity/rdf-entity--solution--view-mode-search-list-item.html.twig b/web/themes/joinup/templates/rdf_entity/rdf-entity--solution--view-mode-search-list-item.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..4da24e52cac245c6cd1af3fe775d8d097efd679b --- /dev/null +++ b/web/themes/joinup/templates/rdf_entity/rdf-entity--solution--view-mode-search-list-item.html.twig @@ -0,0 +1,67 @@ +{# +/** + * @file + * Themeing for the search_list_item view mode of solution rdf entities. + * + * Available variables: + * - eif_title: The eif title. + * - category_lists: An array of variables with details on the category lists. Contains variables: + */ +#} +{% + set classes = [ + 'eif-tile', + 'mdl-cell', + 'mdl-cell--12-col', + 'mdl-cell--12-col-wide', + ] +%} +<div class="listing listing--grid"> + <div class="row"> + <div class="mdl-grid"> + <div {{ attributes.addClass(classes) }} data-eif-category="{{ eif_categories }}"> + <div class="listing__card listing__card--inline-container mdl-card"> + <div class="listing__inner-tile listing__inner-tile--wider"> + {% for category_list in category_lists %} + <div class="listing__field"> + <div class="eif-tile__line {{ category_list.class }}"> + <div class="eif-tile__label-wrapper"> + <span class="eif-tile__label"> + {{ category_list.title }} + </span> + </div> + <div class="eif-tile__value"> + {% for item in category_list.items %} + <span title="{{ item.description }}">{{ item.title }}</span>{% if loop.last == false %}, {% endif %} + {% endfor %} + </div> + </div> + </div> + {% endfor %} + </div> + <div class="listing__card listing__card--inline-container"> + <div class="listing__inner-tile"> + <div class="listing__field"> + {{ content.field_is_logo }} + </div> + </div> + <div class="listing__inner-tile"> + <div class="listing__field"> + {{ title_prefix }}<h2 class="listing__title licence-tile__title">{{ label }}</h2>{{ title_suffix }} + </div> + <div class="listing__field"> + {{ eif_perspective_description }} + </div> + <div class="listing__field"> + <li class="mb-2"><strong>{{ 'Solution\'s owner'|t }}:</strong> {{ content.field_is_owner|render|striptags }}</li> + </div> + <div class="listing__field"> + <a class="eif-tile__button eif-tile__button--compare " href="{{ solution_url }}">{{ 'Go to Solution'|t }}</a> + </div> + </div> + </div> + </div> + </div> + </div> + </div> +</div> diff --git a/web/themes/ventuno/bcl-builder.config.js b/web/themes/ventuno/bcl-builder.config.js index af353afe1cbf12e1a90866478d507728ab62d2fc..772ed17fa6334c460cccdb986b5a6f5a4b8f4a2c 100644 --- a/web/themes/ventuno/bcl-builder.config.js +++ b/web/themes/ventuno/bcl-builder.config.js @@ -173,6 +173,14 @@ module.exports = { sourceMap: "file", }, }, + { + entry: path.resolve(outputFolder, "src/scss/form-checkboxes.scss"), + dest: path.resolve(outputFolder, "assets/css/form-checkboxes.css"), + options: { + includePaths, + sourceMap: "file", + }, + }, { entry: path.resolve(outputFolder, "src/scss/forms.scss"), dest: path.resolve(outputFolder, "assets/css/forms.css"), @@ -415,11 +423,13 @@ module.exports = { 'folder2-open.svg', 'info-circle.svg', 'info-circle-fill.svg', + 'journal-text.svg', 'justify.svg', 'lightning-charge.svg', 'linkedin.svg', 'newspaper.svg', 'person-circle.svg', + 'question-lg.svg', 'search.svg', 'star.svg', 'twitter.svg', diff --git a/web/themes/ventuno/src/scss/components/_form-checkboxes.scss b/web/themes/ventuno/src/scss/components/_form-checkboxes.scss new file mode 100644 index 0000000000000000000000000000000000000000..d8439cbfd8a2063259956b27c149c7e633118580 --- /dev/null +++ b/web/themes/ventuno/src/scss/components/_form-checkboxes.scss @@ -0,0 +1,8 @@ +.form-checkboxes { + .form-switch, + .form-check { + .form-label { + font-weight: $font-weight-base; + } + } +} diff --git a/web/themes/ventuno/src/scss/core/overrides/_utilities.scss b/web/themes/ventuno/src/scss/core/overrides/_utilities.scss index 57a663a1b26b82c5423da1152d2c2ce11e9594a8..646deafd0cb3df1cfa6f504b1cbb4997bf03e3c7 100644 --- a/web/themes/ventuno/src/scss/core/overrides/_utilities.scss +++ b/web/themes/ventuno/src/scss/core/overrides/_utilities.scss @@ -14,15 +14,15 @@ $utilities: map-merge( // ), // scss-docs-end utils-vertical-align // scss-docs-start utils-float - // "float": ( - // responsive: true, - // property: float, - // values: ( - // start: left, - // end: right, - // none: none, - // ) - // ), + "float": ( + responsive: false, + property: float, + values: ( + start: left, + end: right, + none: none, + ) + ), // scss-docs-end utils-float // Opacity utilities // scss-docs-start utils-opacity diff --git a/web/themes/ventuno/src/scss/form-checkboxes.scss b/web/themes/ventuno/src/scss/form-checkboxes.scss new file mode 100644 index 0000000000000000000000000000000000000000..153cbfb0f9da1dd70f493a48a6840887134d4546 --- /dev/null +++ b/web/themes/ventuno/src/scss/form-checkboxes.scss @@ -0,0 +1,2 @@ +@import "core"; +@import "components/form-checkboxes"; diff --git a/web/themes/ventuno/templates/eif-wrapper/eif-wrapper--recommendation--default.html.twig b/web/themes/ventuno/templates/eif-wrapper/eif-wrapper--recommendation--default.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..be7742df614f903ebff42b5f59cef21bd9754c97 --- /dev/null +++ b/web/themes/ventuno/templates/eif-wrapper/eif-wrapper--recommendation--default.html.twig @@ -0,0 +1,10 @@ +{# +/** + * @file + * Themeing for EIF wrapper. + */ +#} +<article {{ attributes.addClass('d-inline') }}> +{{ content.term }} +{{ content.description }} +</article> diff --git a/web/themes/ventuno/templates/field/field--rdf-entity--eif-perspective--solution.html.twig b/web/themes/ventuno/templates/field/field--rdf-entity--eif-perspective--solution.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..729bc46d99e2516b16157c5fda8857a6702968ac --- /dev/null +++ b/web/themes/ventuno/templates/field/field--rdf-entity--eif-perspective--solution.html.twig @@ -0,0 +1,49 @@ +{# +/** + * @file + * Default template for a field. + */ +#} +{% + set classes = [ + 'field--name-' ~ field_name|clean_class, + bundle|clean_class ~ '__' ~ field_name_clean|clean_class, + label_display == 'inline' ? 'd-flex', + ] +%} +{% + set title_classes = [ + 'field__label', + 'fw-bold', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + <div{{ attributes.addClass(classes) }}> + {% for item in items %} + <div{{ item.attributes.addClass('field__item') }}>{{ item.content }}</div> + {% endfor %} + </div> + {% else %} + {% for item in items %} + <div{{ attributes.addClass(classes) }}>{{ item.content }}</div> + {% endfor %} + {% endif %} +{% else %} + <div{{ attributes.addClass(classes) }}> + <div{{ title_attributes.addClass(title_classes) }}> + {{ label }}{% if label_display == 'inline' %}<span class="me-1">:</span>{% endif %} + </div> + {% if multiple %} + <div class="field__items"> + {% endif %} + {% for item in items %} + <div{{ item.attributes.addClass('field__item') }}>{{ item.content }}</div> + {% endfor %} + {% if multiple %} + </div> + {% endif %} + </div> +{% endif %} diff --git a/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-layer--eif-perspective.html.twig b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-layer--eif-perspective.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..b4d05b5f68bf4455e1a1d37f2619656102e356cb --- /dev/null +++ b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-layer--eif-perspective.html.twig @@ -0,0 +1,71 @@ +{# +/** + * @file + * Default template for a field. + */ +#} +{% + set classes = [ + 'ps-0', + 'field--name-' ~ field_name|clean_class, + bundle|clean_class ~ '__' ~ field_name_clean|clean_class, + ] +%} +{% + set title_classes = [ + 'field__label', + 'fw-bold', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + <ul{{ attributes.addClass(classes) }}> + {% for item in items %} + <li{{ item.attributes.addClass(['field__item', 'list-unstyled', 'mb-2']) }}> + <span class="text-success"> + {{ pattern('icon', { + name: 'check-circle-fill', + path: bcl_icon_path, + size: 's', + }) }} + </span> + {{ item.content }} + </li> + {% endfor %} + </ul> + {% else %} + {% for item in items %} + <div{{ attributes.addClass(classes) }}>{{ item.content }}</div> + {% endfor %} + {% endif %} +{% else %} + <div{{ attributes.addClass(classes) }}> + {% if multiple %} + {% if label_display == 'inline' %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}<span class="me-1">:</span></span> + {% else %} + <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div> + {% endif %} + {% for item in items %} + <span{{ item.attributes }}>{{ item.content }}</span>{{ not loop.last ? ', ' }} + {% endfor %} + {% else %} + {% if label_display == 'inline' %} + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% else %} + <div{{ title_attributes.addClass(title_classes) }}> + {{ label }} + </div> + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% endif %} + {% endif %} + </div> +{% endif %} diff --git a/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-model--eif-perspective.html.twig b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-model--eif-perspective.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..b4d05b5f68bf4455e1a1d37f2619656102e356cb --- /dev/null +++ b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-model--eif-perspective.html.twig @@ -0,0 +1,71 @@ +{# +/** + * @file + * Default template for a field. + */ +#} +{% + set classes = [ + 'ps-0', + 'field--name-' ~ field_name|clean_class, + bundle|clean_class ~ '__' ~ field_name_clean|clean_class, + ] +%} +{% + set title_classes = [ + 'field__label', + 'fw-bold', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + <ul{{ attributes.addClass(classes) }}> + {% for item in items %} + <li{{ item.attributes.addClass(['field__item', 'list-unstyled', 'mb-2']) }}> + <span class="text-success"> + {{ pattern('icon', { + name: 'check-circle-fill', + path: bcl_icon_path, + size: 's', + }) }} + </span> + {{ item.content }} + </li> + {% endfor %} + </ul> + {% else %} + {% for item in items %} + <div{{ attributes.addClass(classes) }}>{{ item.content }}</div> + {% endfor %} + {% endif %} +{% else %} + <div{{ attributes.addClass(classes) }}> + {% if multiple %} + {% if label_display == 'inline' %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}<span class="me-1">:</span></span> + {% else %} + <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div> + {% endif %} + {% for item in items %} + <span{{ item.attributes }}>{{ item.content }}</span>{{ not loop.last ? ', ' }} + {% endfor %} + {% else %} + {% if label_display == 'inline' %} + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% else %} + <div{{ title_attributes.addClass(title_classes) }}> + {{ label }} + </div> + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% endif %} + {% endif %} + </div> +{% endif %} diff --git a/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-perspective.html.twig b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-perspective.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..be5c321e7c9c61d1cc35c99629e47993ec08f40e --- /dev/null +++ b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-perspective.html.twig @@ -0,0 +1,64 @@ +{# +/** + * @file + * Default template for a field. + */ +#} +{% + set classes = [ + 'ps-0', + 'field--name-' ~ field_name|clean_class, + bundle|clean_class ~ '__' ~ field_name_clean|clean_class, + ] +%} +{% + set title_classes = [ + 'field__label', + 'fw-bold', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + <ul{{ attributes.addClass(classes) }}> + {% for item in items %} + <li{{ item.attributes.addClass(['field__item', 'list-unstyled', 'mb-2']) }}> + {{ item.content }} + </li> + {% endfor %} + </ul> + {% else %} + {% for item in items %} + <div{{ attributes.addClass(classes) }}>{{ item.content }}</div> + {% endfor %} + {% endif %} +{% else %} + <div{{ attributes.addClass(classes) }}> + {% if multiple %} + {% if label_display == 'inline' %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}<span class="me-1">:</span></span> + {% else %} + <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div> + {% endif %} + {% for item in items %} + <span{{ item.attributes }}>{{ item.content }}</span>{{ not loop.last ? ', ' }} + {% endfor %} + {% else %} + {% if label_display == 'inline' %} + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% else %} + <div{{ title_attributes.addClass(title_classes) }}> + {{ label }} + </div> + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% endif %} + {% endif %} + </div> +{% endif %} diff --git a/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-principle--eif-perspective.html.twig b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-principle--eif-perspective.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..e936564520635d8dfff489837aa4fd09f0d69bee --- /dev/null +++ b/web/themes/ventuno/templates/field/field--rdf-meta-entity--eif-principle--eif-perspective.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Default template for a field. + */ +#} +{% + set classes = [ + 'ps-0', + 'field--name-' ~ field_name|clean_class, + bundle|clean_class ~ '__' ~ field_name_clean|clean_class, + ] +%} + +<ul{{ attributes.addClass(classes) }}> + {% for item in items %} + <li{{ item.attributes.addClass(['field__item', 'list-unstyled', 'mb-2']) }}> + <span class="text-success"> + {{ pattern('icon', { + name: 'check-circle-fill', + path: bcl_icon_path, + size: 's', + }) }} + </span> + {{ item.content }} + </li> + {% endfor %} +</ul> diff --git a/web/themes/ventuno/templates/field/field--rdf-meta-entity--field-eif-description--eif-perspective.html.twig b/web/themes/ventuno/templates/field/field--rdf-meta-entity--field-eif-description--eif-perspective.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..a9d20ffae668f9bc5dc54451b6f2e5b962cc59dc --- /dev/null +++ b/web/themes/ventuno/templates/field/field--rdf-meta-entity--field-eif-description--eif-perspective.html.twig @@ -0,0 +1,47 @@ +{# +/** + * @file + * Default template for a field. + */ +#} +{% + set classes = [ + 'mb-2', + 'field--name-' ~ field_name|clean_class, + bundle|clean_class ~ '__' ~ field_name_clean|clean_class, + ] +%} +{% + set title_classes = [ + 'field__label', + 'fw-bold', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} +<div{{ attributes.addClass(classes) }}> + {% if multiple %} + {% if label_display == 'inline' %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}<span class="me-1">:</span></span> + {% else %} + <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div> + {% endif %} + {% for item in items %} + <span{{ item.attributes }}>{{ item.content }}</span>{{ not loop.last ? ', ' }} + {% endfor %} + {% else %} + {% if label_display == 'inline' %} + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% else %} + <div{{ title_attributes.addClass(title_classes) }}> + {{ label }} + </div> + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% endif %} + {% endif %} +</div> diff --git a/web/themes/ventuno/templates/field/field--rdf-meta-entity--field-eif-solution-type--eif-perspective.html.twig b/web/themes/ventuno/templates/field/field--rdf-meta-entity--field-eif-solution-type--eif-perspective.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..1ceae9ae496c3f65599dd39d634e5b663a7482bd --- /dev/null +++ b/web/themes/ventuno/templates/field/field--rdf-meta-entity--field-eif-solution-type--eif-perspective.html.twig @@ -0,0 +1,47 @@ +{# +/** + * @file + * Default template for a field. + */ +#} +{% + set classes = [ + 'mb-3', + 'field--name-' ~ field_name|clean_class, + bundle|clean_class ~ '__' ~ field_name_clean|clean_class, + ] +%} +{% + set title_classes = [ + 'field__label', + 'fw-bold', + ] +%} + +<div{{ attributes.addClass(classes) }}> + {% if multiple %} + {% if label_display == 'inline' %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}<span class="me-1">:</span></span> + {% else %} + <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div> + {% endif %} + {% for item in items %} + <span{{ item.attributes }}>{{ item.content }}</span>{{ not loop.last ? ', ' }} + {% endfor %} + {% else %} + {% if label_display == 'inline' %} + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% else %} + <div{{ title_attributes.addClass(title_classes) }}> + {{ label }} + </div> + {% for item in items %} + <span{{ title_attributes.addClass(title_classes) }}>{{ label }}:</span> + <span{{ item.attributes }}>{{ item.content }}</span> + {% endfor %} + {% endif %} + {% endif %} +</div> diff --git a/web/themes/ventuno/templates/misc/status-messages.html.twig b/web/themes/ventuno/templates/misc/status-messages.html.twig index c59e0a0880cac8d05b9fd0c72d6eaf29057b5931..430fecd0624a65864d1246793ef506e14ec5d2ec 100644 --- a/web/themes/ventuno/templates/misc/status-messages.html.twig +++ b/web/themes/ventuno/templates/misc/status-messages.html.twig @@ -19,7 +19,6 @@ * - class: HTML classes. */ #} -{{ attach_library('ventuno/site-alerts-messages') }} <div data-drupal-messages class="container mt-4"> {% block messages %} {% for type, messages in message_list %} diff --git a/web/themes/ventuno/templates/rdf-entity/rdf-entity--solution--eif-perspective.html.twig b/web/themes/ventuno/templates/rdf-entity/rdf-entity--solution--eif-perspective.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..dc94695498cd381e121c857fea452073bbb5a49b --- /dev/null +++ b/web/themes/ventuno/templates/rdf-entity/rdf-entity--solution--eif-perspective.html.twig @@ -0,0 +1,47 @@ +{# +/** + * @file + * Themeing for rdf entities. + */ +#} +<article{{ attributes }}> + <div class="d-flex justify-content-between"> + <div> + <a class="btn btn-sm btn-outline-brand rounded-pill mb-1" href="{{ url('<front>')|render }}/node/703244">Back to recommendations</a> + <a class="btn btn-sm btn-outline-brand rounded-pill mb-1" href="{{ url('<front>')|render }}/node/703245">Back to solutions</a> + </div> + <div> + <a class="btn btn-sm btn-outline-brand rounded-pill mb-1" href="{{ url('<front>')|render }}/collection/nifo-national-interoperability-framework-observatory/glossary"> + {{ pattern('icon', { + name: 'journal-text', + path: bcl_icon_path, + size: 'fluid', + }) }} + {{ 'Glossary'|t }} + </a> + <a class="btn btn-sm btn-outline-brand rounded-pill mb-1" href="{{ url('<front>')|render }}/collection/nifo-national-interoperability-framework-observatory/solution/eif-toolbox/what-eif"> + {{ pattern('icon', { + name: 'question-lg', + path: bcl_icon_path, + size: 'fluid', + }) }} + {{ 'What is EIF'|t }} + </a> + </div> + </div> + + {{ title_prefix }} + <h2 class="my-3 fs-4">{{ "General information"|t }}</h2> + {{ title_suffix }} + <div class="row"> + <div class="col-12 col-sm-4 col-md-3 col-lg-2"> + {{ content.field_is_logo }} + </div> + <div class="col-12 col-sm-8 col-md-9 col-lg-10"> + <p class="mb-2"><strong>{{ 'Name of the solution'|t }}:</strong> {{ label|striptags }}</p> + <p class="mb-2"><strong>{{ 'Solution\'s owner'|t }}:</strong> {{ content.field_is_owner|render|striptags }}</p> + <p class="mb-2">{{ content.eif_perspective_fields.field_eif_description }}</p> + </div> + {{ content.eif_perspective }} + </div> +</article> diff --git a/web/themes/ventuno/templates/rdf-meta-entity/rdf-meta-entity.html.twig b/web/themes/ventuno/templates/rdf-meta-entity/rdf-meta-entity.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..5c832323a7fe64d8a18554ef0f515d886fc58d81 --- /dev/null +++ b/web/themes/ventuno/templates/rdf-meta-entity/rdf-meta-entity.html.twig @@ -0,0 +1,39 @@ +{# +/** + * @file + * Themeing for RDF meta entities. + */ +#} +<article{{ attributes.addClass(['mt-3']) }}> + {{ content.field_eif_solution_type }} + <a class="btn btn-sm btn-outline-brand rounded-pill" href="{{ solution_url }}">{{ 'Go to Solution'|t }}</a> + {% if edit_url %} + <a class="btn btn-sm btn-outline-brand rounded-pill" href="{{ edit_url }}">{{ 'Edit EIF perspective'|t }}</a> + {% endif %} + <h3 class="fs-5 mt-4 mb-3">{{ 'The'|t}} {{ solution_label }} {{ 'implements the following'|t }}:</h3> + <div class="row"> + {{ dump(content) }} + {% if content.eif_principle.0 %} + <div class="col-12 col-md-6 col-lg-4"> + <h4 class="fs-6 pb-2 border-bottom">Principles</h4> + {{ content.eif_principle }} + </div> + {% endif %} + {% if content.eif_layer.0 %} + <div class="col-12 col-md-6 col-lg-4"> + <h4 class="fs-6 pb-2 border-bottom">Interoperability layers</h4> + {{ content.eif_layer }} + </div> + {% endif %} + {% if content.eif_model.0 %} + <div class="col-12 col-md-6 col-lg-4"> + <h4 class="fs-6 pb-2 border-bottom">Conceptual model</h4> + {{ content.eif_model }} + </div> + {% endif %} + </div> + {% if content.eif_recommendation.0 %} + <h3 class="fs-5 mt-4 mb-3">{{ solution_label }} {{ 'implements the following EIF recommendations as explained below'|t }}:</h3> + {{ content.eif_recommendation }} + {% endif %} +</article> diff --git a/web/themes/ventuno/templates/taxonomy-term/taxonomy-term--eif-recommendation--eif-recommendation.html.twig b/web/themes/ventuno/templates/taxonomy-term/taxonomy-term--eif-recommendation--eif-recommendation.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..f09a67376450036d2398b98c571194f8024c026d --- /dev/null +++ b/web/themes/ventuno/templates/taxonomy-term/taxonomy-term--eif-recommendation--eif-recommendation.html.twig @@ -0,0 +1,18 @@ +{# +/** + * @file + * Themeing for eif_recommendation term. + */ +#} +{{ title_prefix }} + +<p class="mb-0"> + <span class="text-success"> + {{ pattern('icon', { + name: 'check-circle-fill', + path: bcl_icon_path, + size: 's', + }) }} + </span> + <strong>{{ name.0 }} | {{ content.field_eif_related_term.0 }}</strong></p> +{{ title_suffix }} diff --git a/web/themes/ventuno/ventuno.libraries.yml b/web/themes/ventuno/ventuno.libraries.yml index 210d6544c362678ca189eb3ba217b5dad2ed8fe5..bfb32d09ee324d5d99677dcb8944972920b3d600 100644 --- a/web/themes/ventuno/ventuno.libraries.yml +++ b/web/themes/ventuno/ventuno.libraries.yml @@ -24,6 +24,7 @@ components.js: assets/js/oe-bcl-joinup.bundle.min.js: { minified: true } dependencies: - core/drupal + - ventuno/site-alerts-messages theme: version: VERSION @@ -87,6 +88,11 @@ footer: theme: assets/css/footer.css: {} +form-checkboxes: + css: + theme: + assets/css/form-checkboxes.css: {} + forms: css: theme: diff --git a/web/themes/ventuno/ventuno.theme b/web/themes/ventuno/ventuno.theme index fb28fcacb015941047a958a1e14198eeb370a4b3..9c2b91d63d891ed0f85472f65e100208f32e1136 100644 --- a/web/themes/ventuno/ventuno.theme +++ b/web/themes/ventuno/ventuno.theme @@ -26,7 +26,7 @@ * Adds a theme suggestion for the menus rendered in the footer, so they can be * styled in the same way. */ -function ventuno_theme_suggestions_menu_alter(array &$suggestions, array $variables) { +function ventuno_theme_suggestions_menu_alter(array &$suggestions, array $variables): void { if (in_array($variables['menu_name'], [ 'footer', 'support', @@ -49,7 +49,7 @@ function ventuno_theme_suggestions_menu_alter(array &$suggestions, array $variab * block for the 4 different entity bundles shown in the "Explore" block on * the homepage. */ -function ventuno_theme_suggestions_block_alter(array &$suggestions, array $variables) { +function ventuno_theme_suggestions_block_alter(array &$suggestions, array $variables): void { $elements = &$variables['elements']; if ( $elements['#base_plugin_id'] === 'extra_field_block' && @@ -62,7 +62,7 @@ function ventuno_theme_suggestions_block_alter(array &$suggestions, array $varia /** * Implements hook_preprocess_rdf_entity(). */ -function ventuno_preprocess_rdf_entity(&$variables) { +function ventuno_preprocess_rdf_entity(array &$variables): void { // Workaround for incorrect rendering of RDF entity label. // @see https://www.drupal.org/project/rdf_entity/issues/3209500 $variables['label'] = $variables['rdf_entity']->label(); @@ -71,7 +71,7 @@ function ventuno_preprocess_rdf_entity(&$variables) { /** * Implements hook_preprocess_HOOK() for html.html.twig. */ -function ventuno_preprocess_html(&$variables) { +function ventuno_preprocess_html(array &$variables): void { // Expose the base path so we can use it to generate favicon URIs. $variables['base_path'] = base_path(); // Licence comparer specific styling. @@ -83,7 +83,7 @@ function ventuno_preprocess_html(&$variables) { /** * Implements hook_preprocess_page(). */ -function ventuno_preprocess_page(&$variables) { +function ventuno_preprocess_page(array &$variables): void { // Retrieve the Joinup version and link to display in the footer. // @todo Move this into a block. /** @var \Drupal\joinup_core\JoinupVersionInterface $joinup_version */ @@ -101,7 +101,7 @@ function ventuno_preprocess_page(&$variables) { /** * Implements template_preprocess_region(). */ -function ventuno_preprocess_region__header(&$variables) { +function ventuno_preprocess_region__header(array &$variables): void { // Export the user name to display in the header. $variables['user_name'] = \Drupal::currentUser()->getDisplayName(); @@ -129,7 +129,7 @@ function ventuno_preprocess_region__header(&$variables) { /** * Implements hook_preprocess_block(). */ -function ventuno_preprocess_block__facetsblock_searchpage(&$variables) { +function ventuno_preprocess_block__facetsblock_searchpage(array &$variables): void { $block_manager = \Drupal::getContainer()->get('plugin.manager.block'); $plugin_block = $block_manager->createInstance('joinup_search_clear_filters'); $clear_button = $plugin_block->build(); @@ -149,7 +149,7 @@ function ventuno_preprocess_block__facetsblock_searchpage(&$variables) { * by the first referenced topic. If no topics are referenced the link will be * hidden. */ -function ventuno_preprocess_block__entityqueue_block__highlighted_content(&$variables) { +function ventuno_preprocess_block__entityqueue_block__highlighted_content(array &$variables): void { /** @var \Drupal\node\NodeInterface $node */ $node = $variables['elements']['content']['entities'][0]['#node'] ?? NULL; @@ -184,7 +184,7 @@ function ventuno_preprocess_block__entityqueue_block__highlighted_content(&$vari * Page Manager as a variable. This section is using a Layout but needs to be * rendered outside the main content region which is controlled by Page Manager. */ -function ventuno_preprocess_page__home(&$variables) { +function ventuno_preprocess_page__home(array &$variables): void { /** @var \Drupal\page_manager\Entity\PageVariant $about_section_variant */ $about_section_variant = \Drupal::entityTypeManager()->getStorage('page_variant')->load('homepage-layout_builder-1'); $view_builder = \Drupal::entityTypeManager()->getViewBuilder('page_variant'); @@ -194,7 +194,7 @@ function ventuno_preprocess_page__home(&$variables) { /** * Implements hook_preprocess_HOOK(). */ -function ventuno_preprocess_node__numbered_listing(&$variables) { +function ventuno_preprocess_node__numbered_listing(array &$variables): void { /** @var \Drupal\node\NodeInterface $node */ $node = $variables['node']; @@ -221,7 +221,7 @@ function ventuno_preprocess_node__numbered_listing(&$variables) { /** * Implements hook_preprocess_HOOK(). */ -function ventuno_preprocess_responsive_image_formatter(&$variables) { +function ventuno_preprocess_responsive_image_formatter(array &$variables): void { if ($variables['url']) { $options = $variables['url']->getOptions(); if ($options['entity'] instanceof CommunityContentInterface) { @@ -240,7 +240,7 @@ function ventuno_preprocess_responsive_image_formatter(&$variables) { * Trim the labels of the items in the Explore block on the homepage down to a * manageable size. */ -function ventuno_preprocess_node__explore_item(&$variables) { +function ventuno_preprocess_node__explore_item(array &$variables): void { /** @var \Drupal\node\NodeInterface $node */ $node = $variables['node']; @@ -254,7 +254,7 @@ function ventuno_preprocess_node__explore_item(&$variables) { * Trim the labels of the items in the Explore block on the homepage down to a * manageable size. */ -function ventuno_preprocess_rdf_entity__explore_item(&$variables) { +function ventuno_preprocess_rdf_entity__explore_item(array &$variables): void { /** @var \Drupal\rdf_entity\RdfInterface $entity */ $entity = $variables['rdf_entity']; @@ -265,7 +265,7 @@ function ventuno_preprocess_rdf_entity__explore_item(&$variables) { /** * Implements template_preprocess_menu(). */ -function ventuno_preprocess_menu(&$variables) { +function ventuno_preprocess_menu(array &$variables): void { // Set a class on each link in the social media footer menu, so that the link // text can be replaced with an icon. if ($variables['menu_name'] === 'footer-social-media') { @@ -279,7 +279,7 @@ function ventuno_preprocess_menu(&$variables) { * These classes identify the social media links so we can replace them with * icons. Used for the links to Twitter and LinkedIn. */ -function _ventuno_preprocess_menu_items(&$items) { +function _ventuno_preprocess_menu_items(array &$items): void { foreach ($items as $item) { /** @var \Drupal\Core\Menu\MenuLinkDefault $menu_link */ $menu_link ??= $item['original_link']; @@ -321,49 +321,124 @@ function ventuno_form_facets_form_alter(array &$form, FormStateInterface $form_s } /** - * Implements hook_theme_suggestions_alter(). + * Implements hook_theme_suggestions_HOOK_alter(). + */ +function ventuno_theme_suggestions_user_alter(array &$suggestions, array $variables): void { + $view_mode = $variables['elements']['#view_mode']; + $suggestions[] = 'user__' . str_replace('-', '_', $view_mode); +} + +/** + * Implements hook_theme_suggestions_HOOK_alter(). + */ +function ventuno_theme_suggestions_eif_wrapper_alter(array &$suggestions, array $variables): void { + _ventuno_theme_suggestions_alter($suggestions, $variables); +} + +/** + * Implements hook_theme_suggestions_HOOK_alter(). */ -function ventuno_theme_suggestions_alter(array &$suggestions, array $variables, $hook) { - // Add suggestion based on view mode for user entity. - if ($hook == 'user' && !empty($variables['elements']['#view_mode'])) { - $original_theme_hook = $variables['theme_hook_original']; - $view_mode = $variables['elements']['#view_mode']; - $suggestions[] = $original_theme_hook . '__' . str_replace('-', '_', $view_mode); +function ventuno_theme_suggestions_taxonomy_term_alter(array &$suggestions, array $variables): void { + _ventuno_theme_suggestions_alter($suggestions, $variables); +} + +/** + * Provides a helper to create suggestions per view mode. + * + * @param array $suggestions + * Current suggestions, passed by reference. + * @param array $variables + * Template variables. + * + * @see ventuno_theme_suggestions_eif_wrapper_alter() + * @see ventuno_theme_suggestions_taxonomy_term_alter() + */ +function _ventuno_theme_suggestions_alter(array &$suggestions, array $variables): void { + $original_theme_hook = $variables['theme_hook_original']; + $view_mode = $variables['elements']['#view_mode']; + $suggestions[] = $original_theme_hook . '__' . str_replace('-', '_', $view_mode); + + $entity_type_id = $variables['elements']['#entity_type']; + $bundle = $variables['elements']["#{$entity_type_id}"]->bundle(); + $suggestions[] = $original_theme_hook . '__' . str_replace('-', '_', $bundle) . '__' . str_replace('-', '_', $view_mode); +} + +/** + * Implements hook_preprocess_HOOK(). + */ +function ventuno_preprocess_rdf_meta_entity(array &$variables): void { + /** @var \Drupal\rdf_meta_entity\Entity\RdfMetaEntityInterface $rdf_meta_entity */ + $rdf_meta_entity = $variables['rdf_meta_entity']; + /** @var \Drupal\solution\Entity\SolutionInterface $solution */ + $solution = $variables['rdf_meta_entity']->getTargetEntity(); + $variables['solution_label'] = $solution->label(); + $variables['solution_url'] = $solution->toUrl()->setAbsolute()->toString(); + $route_parameters = ['rdf_meta_entity' => $rdf_meta_entity->id()]; + $url_options = [ + 'query' => [ + 'destination' => Url::fromRoute('entity.rdf_entity.eif_perspective', [ + 'rdf_entity' => $solution->id(), + ])->getInternalPath(), + ], + ]; + $edit_url = Url::fromRoute('entity.rdf_meta_entity.edit_form', $route_parameters, $url_options); + if ($edit_url->access()) { + $variables['edit_url'] = $edit_url->setAbsolute()->toString(); } } /** * Implements hook_preprocess_user(). */ -function ventuno_preprocess_user(&$variables) { +function ventuno_preprocess_user(array &$variables): void { $variables['full_name'] = $variables['user']->getDisplayName(); } /** * Implements hook_preprocess_HOOK(). */ -function ventuno_preprocess_rdf_entity__search_result_featured(&$variables) { +function ventuno_preprocess_rdf_entity__search_result_featured(array &$variables): void { _ventuno_preprocess_search_result($variables, 'rdf_entity'); } /** * Implements hook_preprocess_HOOK(). */ -function ventuno_preprocess_rdf_entity__search_result(&$variables) { +function ventuno_preprocess_rdf_entity__search_result(array &$variables): void { _ventuno_preprocess_search_result($variables, 'rdf_entity'); } /** * Implements hook_preprocess_HOOK(). */ -function ventuno_preprocess_node__search_result_featured(&$variables) { +function ventuno_preprocess_rdf_entity__solution__eif_perspective(array &$variables): void { + /** @var \Drupal\solution\Entity\SolutionInterface $solution */ + $solution = $variables['rdf_entity']; + if (empty($solution)) { + return; + } + + $rdf_meta_entity = $solution->eif_perspective->entity; + if (empty($rdf_meta_entity)) { + return; + } + + $eif_description = \Drupal::entityTypeManager()->getViewBuilder('rdf_meta_entity')->viewField($rdf_meta_entity->get('field_eif_description'), 'eif_perspective'); + $eif_description[0]['#text'] = strip_tags($eif_description[0]['#text']); + $variables['content']['eif_perspective_fields']['field_eif_description'] = $eif_description; +} + +/** + * Implements hook_preprocess_HOOK(). + */ +function ventuno_preprocess_node__search_result_featured(array &$variables): void { _ventuno_preprocess_search_result($variables, 'node'); } /** * Implements hook_preprocess_HOOK(). */ -function ventuno_preprocess_node__search_result(&$variables) { +function ventuno_preprocess_node__search_result(array &$variables): void { _ventuno_preprocess_search_result($variables, 'node'); } @@ -454,7 +529,7 @@ function _ventuno_get_default_icon_render_array(string $entity_type_id, string $ /** * Implements hook_preprocess(). */ -function ventuno_preprocess(&$variables) { +function ventuno_preprocess(array &$variables): void { /** @var \Drupal\Core\Extension\ThemeHandler $themeHandler */ $themeHandler = \Drupal::service('theme_handler'); $ventuno = $themeHandler->getTheme('ventuno')->getPath(); @@ -473,7 +548,7 @@ function ventuno_theme_suggestions_form_element_alter(array &$suggestions, array /** * Implements hook_form_alter(). */ -function ventuno_form_alter(&$form, FormStateInterface $form_state, $form_id): void { +function ventuno_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void { // Check if the form contains exposed filter form element. if ($form_id === 'views_exposed_form') { $route_name = \Drupal::routeMatch()->getRouteName(); @@ -510,7 +585,7 @@ function ventuno_form_alter(&$form, FormStateInterface $form_state, $form_id): v * We use the 16:9 ratio as a premise: ratios are not fixed, we allow users to * upload images without restrictions. It's not possible to match them exaclty. */ -function ventuno_preprocess_responsive_image(&$variables) { +function ventuno_preprocess_responsive_image(array &$variables): void { $style_id = $variables['responsive_image_style_id']; switch ($style_id) { // 'In the spotlight' section on homepage @@ -536,7 +611,7 @@ function ventuno_preprocess_responsive_image(&$variables) { /** * Implements hook_preprocess_image(). */ -function ventuno_preprocess_image(&$variables) { +function ventuno_preprocess_image(array &$variables): void { $variables['attributes']['loading'] = 'lazy'; } @@ -552,6 +627,20 @@ function ventuno_theme_suggestions_field_alter(array &$suggestions, array $varia } } +/** + * Implements hook_preprocess_container__text_format_filter_help(). + */ +function ventuno_preprocess_container__text_format_filter_help(array &$variables): void { + $variables['attributes']['class'] = ['text-end', 'fs-sm']; +} + +/** + * Implements hook_preprocess_form_element_label(). + */ +function ventuno_preprocess_form_element_label(array &$variables): void { + $variables['#attached']['library'][] = 'ventuno/form-checkboxes'; +} + /** * Implements hook_theme_suggestions_HOOK_alter() for container.html.twig. */