diff --git a/composer.json b/composer.json index 89544619e..2d9b1ea46 100644 --- a/composer.json +++ b/composer.json @@ -119,6 +119,9 @@ }, "drupal/entity_reference_revisions": { "https://www.drupal.org/project/entity_reference_revisions/issues/2937835": "https://www.drupal.org/files/issues/2021-03-26/entity_reference_revisions-field_formatter_label-2937835-36.patch" + }, + "openeuropa/oe_content": { + "https://github.com/openeuropa/oe_content/pull/573": "https://github.com/openeuropa/oe_content/compare/3.0.0-alpha8...3.x.diff" } }, "drupal-scaffold": { diff --git a/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.full.yml b/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.full.yml index 58d9e4860..294b37d68 100644 --- a/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.full.yml +++ b/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.full.yml @@ -2,6 +2,7 @@ langcode: en status: true dependencies: config: + - core.entity_view_mode.node.full - field.field.node.oe_project.body - field.field.node.oe_project.oe_departments - field.field.node.oe_project.oe_documents @@ -12,6 +13,8 @@ dependencies: - field.field.node.oe_project.oe_project_contact - field.field.node.oe_project.oe_project_coordinators - field.field.node.oe_project.oe_project_dates + - field.field.node.oe_project.oe_project_eu_budget + - field.field.node.oe_project.oe_project_eu_contrib - field.field.node.oe_project.oe_project_funding_programme - field.field.node.oe_project.oe_project_locations - field.field.node.oe_project.oe_project_participants @@ -31,6 +34,7 @@ dependencies: - oe_theme_helper - rdf_skos - text + - user third_party_settings: field_group: group_top: @@ -40,11 +44,14 @@ third_party_settings: - group_details - group_budget - group_resources + label: Top parent_name: '' - weight: 0 - format_type: html_element region: content + weight: 1 + format_type: html_element format_settings: + classes: '' + id: '' element: div show_label: false label_element: h3 @@ -52,54 +59,54 @@ third_party_settings: attributes: '' effect: none speed: fast - id: '' - classes: '' - label: Top group_details: children: - oe_reference_code - oe_project_dates - oe_project_locations + label: Details parent_name: group_top + region: content weight: 3 format_type: oe_theme_helper_field_list_pattern - region: content format_settings: variant: featured_horizontal - label: Details group_budget: children: - - oe_project_budget + - extra_field_oe_theme_content_project_budget - extra_field_oe_theme_content_project_percentage + label: Budget parent_name: group_top + region: content weight: 4 format_type: oe_theme_helper_field_list_pattern - region: content format_settings: variant: featured_horizontal - label: Budget group_resources: children: - oe_project_website - oe_departments + label: Resources parent_name: group_top + region: content weight: 5 format_type: oe_theme_helper_field_list_pattern - region: content format_settings: - variant: featured_horizontal classes: '' id: '' - label: Resources + variant: featured_horizontal group_result: children: - oe_project_results - oe_project_result_files + label: Results parent_name: '' - weight: 2 - format_type: html_element region: content + weight: 3 + format_type: html_element format_settings: + classes: '' + id: '' element: div show_label: true label_element: h3 @@ -107,18 +114,18 @@ third_party_settings: attributes: '' effect: none speed: fast - id: '' - classes: '' - label: Results group_stakeholders: children: - oe_project_coordinators - oe_project_participants + label: Stakeholders parent_name: '' - weight: 4 - format_type: html_element region: content + weight: 5 + format_type: html_element format_settings: + classes: '' + id: '' element: div show_label: true label_element: h3 @@ -126,18 +133,18 @@ third_party_settings: attributes: '' effect: none speed: fast - id: '' - classes: '' - label: Stakeholders group_funding: children: - oe_project_funding_programme - oe_project_calls + label: Funding parent_name: '' - weight: 3 - format_type: html_element region: content + weight: 4 + format_type: html_element format_settings: + classes: '' + id: '' element: div show_label: true label_element: h3 @@ -145,66 +152,55 @@ third_party_settings: attributes: '' effect: none speed: fast - id: '' - classes: '' - label: Funding id: node.oe_project.full targetEntityType: node bundle: oe_project mode: full content: body: - label: hidden type: text_default + label: hidden + settings: { } + third_party_settings: { } weight: 1 + region: content + extra_field_oe_theme_content_project_budget: settings: { } third_party_settings: { } + weight: 0 region: content extra_field_oe_theme_content_project_percentage: - weight: 9 - region: content settings: { } third_party_settings: { } + weight: 1 + region: content oe_departments: type: skos_concept_entity_reference_label - weight: 6 - region: content label: above settings: link: false third_party_settings: { } + weight: 6 + region: content oe_documents: type: entity_reference_entity_view - weight: 1 - region: content label: hidden settings: view_mode: default link: false third_party_settings: { } + weight: 2 + region: content oe_featured_media: type: oe_theme_helper_featured_media_formatter - weight: 0 - region: content label: hidden settings: image_style: oe_theme_medium_no_crop third_party_settings: { } - oe_project_budget: - type: number_decimal - weight: 7 + weight: 0 region: content - label: above - settings: - thousand_separator: ' ' - decimal_separator: . - scale: 0 - prefix_suffix: true - third_party_settings: { } oe_project_calls: type: link - weight: 14 - region: content label: hidden settings: trim_length: null @@ -213,79 +209,79 @@ content: rel: '0' target: '0' third_party_settings: { } + weight: 14 + region: content oe_project_contact: type: entity_reference_revisions_entity_view - weight: 5 - region: content label: hidden settings: view_mode: full link: '' third_party_settings: { } + weight: 6 + region: content oe_project_coordinators: type: entity_reference_revisions_entity_view - weight: 10 - region: content label: hidden settings: view_mode: full link: '' third_party_settings: { } + weight: 10 + region: content oe_project_dates: type: daterange_default - weight: 1 - region: content label: above settings: timezone_override: '' format_type: oe_project_date separator: '-' third_party_settings: { } + weight: 1 + region: content oe_project_funding_programme: type: skos_concept_entity_reference_label - weight: 13 - region: content label: hidden settings: link: false third_party_settings: { } + weight: 13 + region: content oe_project_locations: type: oe_theme_helper_address_inline - weight: 2 - region: content label: above settings: delimiter: ', ' third_party_settings: { } + weight: 2 + region: content oe_project_participants: type: entity_reference_revisions_entity_view - weight: 11 - region: content label: hidden settings: view_mode: full link: '' third_party_settings: { } + weight: 11 + region: content oe_project_result_files: - weight: 3 + type: entity_reference_entity_view label: hidden settings: view_mode: default link: false third_party_settings: { } - type: entity_reference_entity_view + weight: 3 region: content oe_project_results: type: text_default - weight: 2 - region: content label: hidden settings: { } third_party_settings: { } + weight: 2 + region: content oe_project_website: type: link - weight: 5 - region: content label: above settings: trim_length: 80 @@ -294,14 +290,16 @@ content: rel: '' target: '' third_party_settings: { } + weight: 5 + region: content oe_reference_code: type: string - weight: 0 - region: content label: above settings: link_to_entity: false third_party_settings: { } + weight: 0 + region: content hidden: extra_field_oe_theme_helper_short_title_with_fallback: true langcode: true @@ -311,7 +309,10 @@ hidden: oe_content_legacy_link: true oe_content_navigation_title: true oe_content_short_title: true + oe_project_budget: true oe_project_budget_eu: true + oe_project_eu_budget: true + oe_project_eu_contrib: true oe_subject: true oe_summary: true oe_teaser: true diff --git a/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.teaser.yml b/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.teaser.yml index 633eb522d..34d11bbd5 100644 --- a/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.teaser.yml +++ b/modules/oe_theme_content_project/config/install/core.entity_view_display.node.oe_project.teaser.yml @@ -79,6 +79,7 @@ content: region: content hidden: body: true + extra_field_oe_theme_content_project_budget: true extra_field_oe_theme_content_project_percentage: true langcode: true links: true diff --git a/modules/oe_theme_content_project/config/post_updates/30001_decimal_budget_fields/core.entity_view_display.node.oe_project.full.yml b/modules/oe_theme_content_project/config/post_updates/30001_decimal_budget_fields/core.entity_view_display.node.oe_project.full.yml new file mode 100644 index 000000000..294b37d68 --- /dev/null +++ b/modules/oe_theme_content_project/config/post_updates/30001_decimal_budget_fields/core.entity_view_display.node.oe_project.full.yml @@ -0,0 +1,318 @@ +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.node.full + - field.field.node.oe_project.body + - field.field.node.oe_project.oe_departments + - field.field.node.oe_project.oe_documents + - field.field.node.oe_project.oe_featured_media + - field.field.node.oe_project.oe_project_budget + - field.field.node.oe_project.oe_project_budget_eu + - field.field.node.oe_project.oe_project_calls + - field.field.node.oe_project.oe_project_contact + - field.field.node.oe_project.oe_project_coordinators + - field.field.node.oe_project.oe_project_dates + - field.field.node.oe_project.oe_project_eu_budget + - field.field.node.oe_project.oe_project_eu_contrib + - field.field.node.oe_project.oe_project_funding_programme + - field.field.node.oe_project.oe_project_locations + - field.field.node.oe_project.oe_project_participants + - field.field.node.oe_project.oe_project_result_files + - field.field.node.oe_project.oe_project_results + - field.field.node.oe_project.oe_project_website + - field.field.node.oe_project.oe_reference_code + - field.field.node.oe_project.oe_subject + - field.field.node.oe_project.oe_summary + - field.field.node.oe_project.oe_teaser + - node.type.oe_project + module: + - datetime_range + - entity_reference_revisions + - field_group + - link + - oe_theme_helper + - rdf_skos + - text + - user +third_party_settings: + field_group: + group_top: + children: + - oe_featured_media + - body + - group_details + - group_budget + - group_resources + label: Top + parent_name: '' + region: content + weight: 1 + format_type: html_element + format_settings: + classes: '' + id: '' + element: div + show_label: false + label_element: h3 + label_element_classes: '' + attributes: '' + effect: none + speed: fast + group_details: + children: + - oe_reference_code + - oe_project_dates + - oe_project_locations + label: Details + parent_name: group_top + region: content + weight: 3 + format_type: oe_theme_helper_field_list_pattern + format_settings: + variant: featured_horizontal + group_budget: + children: + - extra_field_oe_theme_content_project_budget + - extra_field_oe_theme_content_project_percentage + label: Budget + parent_name: group_top + region: content + weight: 4 + format_type: oe_theme_helper_field_list_pattern + format_settings: + variant: featured_horizontal + group_resources: + children: + - oe_project_website + - oe_departments + label: Resources + parent_name: group_top + region: content + weight: 5 + format_type: oe_theme_helper_field_list_pattern + format_settings: + classes: '' + id: '' + variant: featured_horizontal + group_result: + children: + - oe_project_results + - oe_project_result_files + label: Results + parent_name: '' + region: content + weight: 3 + format_type: html_element + format_settings: + classes: '' + id: '' + element: div + show_label: true + label_element: h3 + label_element_classes: '' + attributes: '' + effect: none + speed: fast + group_stakeholders: + children: + - oe_project_coordinators + - oe_project_participants + label: Stakeholders + parent_name: '' + region: content + weight: 5 + format_type: html_element + format_settings: + classes: '' + id: '' + element: div + show_label: true + label_element: h3 + label_element_classes: '' + attributes: '' + effect: none + speed: fast + group_funding: + children: + - oe_project_funding_programme + - oe_project_calls + label: Funding + parent_name: '' + region: content + weight: 4 + format_type: html_element + format_settings: + classes: '' + id: '' + element: div + show_label: true + label_element: h3 + label_element_classes: '' + attributes: '' + effect: none + speed: fast +id: node.oe_project.full +targetEntityType: node +bundle: oe_project +mode: full +content: + body: + type: text_default + label: hidden + settings: { } + third_party_settings: { } + weight: 1 + region: content + extra_field_oe_theme_content_project_budget: + settings: { } + third_party_settings: { } + weight: 0 + region: content + extra_field_oe_theme_content_project_percentage: + settings: { } + third_party_settings: { } + weight: 1 + region: content + oe_departments: + type: skos_concept_entity_reference_label + label: above + settings: + link: false + third_party_settings: { } + weight: 6 + region: content + oe_documents: + type: entity_reference_entity_view + label: hidden + settings: + view_mode: default + link: false + third_party_settings: { } + weight: 2 + region: content + oe_featured_media: + type: oe_theme_helper_featured_media_formatter + label: hidden + settings: + image_style: oe_theme_medium_no_crop + third_party_settings: { } + weight: 0 + region: content + oe_project_calls: + type: link + label: hidden + settings: + trim_length: null + url_only: false + url_plain: false + rel: '0' + target: '0' + third_party_settings: { } + weight: 14 + region: content + oe_project_contact: + type: entity_reference_revisions_entity_view + label: hidden + settings: + view_mode: full + link: '' + third_party_settings: { } + weight: 6 + region: content + oe_project_coordinators: + type: entity_reference_revisions_entity_view + label: hidden + settings: + view_mode: full + link: '' + third_party_settings: { } + weight: 10 + region: content + oe_project_dates: + type: daterange_default + label: above + settings: + timezone_override: '' + format_type: oe_project_date + separator: '-' + third_party_settings: { } + weight: 1 + region: content + oe_project_funding_programme: + type: skos_concept_entity_reference_label + label: hidden + settings: + link: false + third_party_settings: { } + weight: 13 + region: content + oe_project_locations: + type: oe_theme_helper_address_inline + label: above + settings: + delimiter: ', ' + third_party_settings: { } + weight: 2 + region: content + oe_project_participants: + type: entity_reference_revisions_entity_view + label: hidden + settings: + view_mode: full + link: '' + third_party_settings: { } + weight: 11 + region: content + oe_project_result_files: + type: entity_reference_entity_view + label: hidden + settings: + view_mode: default + link: false + third_party_settings: { } + weight: 3 + region: content + oe_project_results: + type: text_default + label: hidden + settings: { } + third_party_settings: { } + weight: 2 + region: content + oe_project_website: + type: link + label: above + settings: + trim_length: 80 + url_only: false + url_plain: false + rel: '' + target: '' + third_party_settings: { } + weight: 5 + region: content + oe_reference_code: + type: string + label: above + settings: + link_to_entity: false + third_party_settings: { } + weight: 0 + region: content +hidden: + extra_field_oe_theme_helper_short_title_with_fallback: true + langcode: true + links: true + oe_author: true + oe_content_content_owner: true + oe_content_legacy_link: true + oe_content_navigation_title: true + oe_content_short_title: true + oe_project_budget: true + oe_project_budget_eu: true + oe_project_eu_budget: true + oe_project_eu_contrib: true + oe_subject: true + oe_summary: true + oe_teaser: true diff --git a/modules/oe_theme_content_project/oe_theme_content_project.post_update.php b/modules/oe_theme_content_project/oe_theme_content_project.post_update.php index bf1332a87..a8a4dcb78 100644 --- a/modules/oe_theme_content_project/oe_theme_content_project.post_update.php +++ b/modules/oe_theme_content_project/oe_theme_content_project.post_update.php @@ -78,3 +78,26 @@ function oe_theme_content_project_post_update_00003(): void { $display->save(); } } + +/** + * Update project displays. + */ +function oe_theme_content_project_post_update_30001(): void { + $storage = new FileStorage(\Drupal::service('extension.list.module')->getPath('oe_theme_content_project') . '/config/post_updates/30001_decimal_budget_fields'); + $display_values = $storage->read('core.entity_view_display.node.oe_project.full'); + $view_display = EntityViewDisplay::load($display_values['id']); + if ($view_display) { + $display = \Drupal::entityTypeManager()->getStorage('entity_view_display')->updateFromStorageRecord($view_display, $display_values); + $display->save(); + } + + // Ensure new extra field is hidden on teaser display. + $view_display = EntityViewDisplay::load('node.oe_project.teaser'); + if ($view_display) { + $properties = $view_display->get('hidden'); + $properties['extra_field_oe_theme_content_project_budget'] = TRUE; + $view_display->set('hidden', $properties); + $view_display->save(); + } + +} diff --git a/modules/oe_theme_content_project/src/Plugin/ExtraField/Display/OverallBudgetExtraField.php b/modules/oe_theme_content_project/src/Plugin/ExtraField/Display/OverallBudgetExtraField.php new file mode 100644 index 000000000..cc2494d87 --- /dev/null +++ b/modules/oe_theme_content_project/src/Plugin/ExtraField/Display/OverallBudgetExtraField.php @@ -0,0 +1,104 @@ +viewBuilder = $entity_type_manager->getViewBuilder('node'); + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity_type.manager') + ); + } + + /** + * {@inheritdoc} + */ + public function getLabel() { + return $this->t('Overall budget'); + } + + /** + * {@inheritdoc} + */ + public function viewElements(ContentEntityInterface $entity) { + if ($entity->get('oe_project_budget')->isEmpty() && $entity->get('oe_project_eu_budget')->isEmpty()) { + return []; + } + $build = []; + + $display_options = [ + 'label' => 'hidden', + 'type' => 'number_decimal', + 'settings' => [ + 'thousand_separator' => ' ', + 'decimal_separator' => '.', + 'scale' => 0, + 'prefix_suffix' => TRUE, + ], + ]; + if ($entity->get('oe_project_eu_contrib')->isEmpty()) { + // Fallback to old field. + $build[] = $this->viewBuilder->viewField($entity->get('oe_project_budget'), $display_options); + } + else { + // Render new field value. + $build[] = $this->viewBuilder->viewField($entity->get('oe_project_eu_budget'), $display_options); + } + + return $build; + } + +} diff --git a/modules/oe_theme_content_project/src/Plugin/ExtraField/Display/PercentageExtraField.php b/modules/oe_theme_content_project/src/Plugin/ExtraField/Display/PercentageExtraField.php index 1428b2898..f6581d08c 100644 --- a/modules/oe_theme_content_project/src/Plugin/ExtraField/Display/PercentageExtraField.php +++ b/modules/oe_theme_content_project/src/Plugin/ExtraField/Display/PercentageExtraField.php @@ -74,11 +74,12 @@ public function getLabel() { * {@inheritdoc} */ public function viewElements(ContentEntityInterface $entity) { - if ($entity->get('oe_project_budget_eu')->isEmpty()) { + if ($entity->get('oe_project_budget_eu')->isEmpty() && $entity->get('oe_project_eu_contrib')->isEmpty()) { return []; } $build = []; - $build[] = $this->viewBuilder->viewField($entity->get('oe_project_budget_eu'), [ + + $display_options = [ 'label' => 'hidden', 'type' => 'number_decimal', 'settings' => [ @@ -87,16 +88,25 @@ public function viewElements(ContentEntityInterface $entity) { 'scale' => 0, 'prefix_suffix' => TRUE, ], - ]); + ]; + if ($entity->get('oe_project_eu_contrib')->isEmpty()) { + // Fallback to old field. + $build[] = $this->viewBuilder->viewField($entity->get('oe_project_budget_eu'), $display_options); + $budget_eu = $entity->get('oe_project_budget')->value; + } + else { + // Render new field value. + $build[] = $this->viewBuilder->viewField($entity->get('oe_project_eu_contrib'), $display_options); + $budget_eu = $entity->get('oe_project_eu_contrib')->value; + } // Return only EU contribution if budget is empty. - if ($entity->get('oe_project_budget')->isEmpty()) { + if ($entity->get('oe_project_budget')->isEmpty() && $entity->get('oe_project_eu_budget')->isEmpty()) { return $build; } // Compute budget percentage field value. - $budget = $entity->get('oe_project_budget')->value; - $budget_eu = $entity->get('oe_project_budget_eu')->value; + $budget = $entity->get('oe_project_eu_budget')->isEmpty() ? $entity->get('oe_project_budget_eu')->value : $entity->get('oe_project_eu_budget')->value; $percentage = $this->getPercentage((float) $budget, (float) $budget_eu); $build[] = [ '#markup' => '