From 55852d3ce0abef73a52aa68c303bdc83f287cdbb Mon Sep 17 00:00:00 2001
From: benbenben2 <110821832+benbenben2@users.noreply.github.com>
Date: Thu, 23 May 2024 22:15:35 +0200
Subject: [PATCH 1/4] fix wanings modperl_error_log
---
lib/ProductOpener/Display.pm | 10 +++++---
lib/ProductOpener/KnowledgePanels.pm | 17 ++++++++++---
lib/ProductOpener/Products.pm | 10 +++++---
lib/ProductOpener/Tags.pm | 2 ++
.../ecoscore/origins_of_ingredients.tt.json | 14 ++++++-----
.../ecoscore/threatened_species.tt.json | 2 +-
.../environment/ecoscore/total.tt.json | 25 ++++++++++++++++++-
.../product/includes/ecoscore_details.tt.html | 8 +++---
8 files changed, 66 insertions(+), 22 deletions(-)
diff --git a/lib/ProductOpener/Display.pm b/lib/ProductOpener/Display.pm
index f380f51ec3a58..e0f008e718be8 100644
--- a/lib/ProductOpener/Display.pm
+++ b/lib/ProductOpener/Display.pm
@@ -1526,7 +1526,8 @@ sub display_text_content ($request_ref, $textid, $text_lc, $file) {
}
if ((defined $request_ref->{page}) and ($request_ref->{page} > 1)) {
- $request_ref->{title} = $title . lang("title_separator") . sprintf(lang("page_x"), $request_ref->{page});
+ $request_ref->{title}
+ = (defined $title ? $title : '') . lang("title_separator") . sprintf(lang("page_x"), $request_ref->{page});
}
else {
$request_ref->{title} = $title;
@@ -9041,11 +9042,14 @@ sub data_to_display_nutrient_levels ($product_ref) {
if ((defined $product_ref->{nutrient_levels}) and (defined $product_ref->{nutrient_levels}{$nid})) {
+ my $nutriment_value = $product_ref->{nutriments}{$nid . $prepared . "_100g"};
+ my $formatted_value = defined $nutriment_value
+ && $nutriment_value =~ /^-?\d+(\.\d+)?$/ ? sprintf("%.2e", $nutriment_value + 0.0) : '';
+
push @{$result_data_ref->{nutrient_levels}}, {
nid => $nid,
nutrient_level => $product_ref->{nutrient_levels}{$nid},
- nutrient_quantity_in_grams =>
- sprintf("%.2e", $product_ref->{nutriments}{$nid . $prepared . "_100g"}) + 0.0,
+ nutrient_quantity_in_grams => $formatted_value,
nutrient_in_quantity => sprintf(
lang("nutrient_in_quantity"),
display_taxonomy_tag($lc, "nutrients", "zz:$nid"),
diff --git a/lib/ProductOpener/KnowledgePanels.pm b/lib/ProductOpener/KnowledgePanels.pm
index a75a97da637ee..47d4f70164d81 100644
--- a/lib/ProductOpener/KnowledgePanels.pm
+++ b/lib/ProductOpener/KnowledgePanels.pm
@@ -719,10 +719,13 @@ sub create_environment_card_panel ($product_ref, $target_lc, $target_cc, $option
if ($options{product_type} eq "food") {
create_ecoscore_panel($product_ref, $target_lc, $target_cc, $options_ref);
- if ( (defined $product_ref->{ecoscore_data})
+ if (
+ (defined $product_ref->{ecoscore_data})
and (defined $product_ref->{ecoscore_data}{adjustments})
and (defined $product_ref->{ecoscore_data}{adjustments}{threatened_species})
- and ($product_ref->{ecoscore_data}{adjustments}{threatened_species}{value} != 0))
+ and (defined $product_ref->{ecoscore_data}{adjustments}{threatened_species}{value}
+ && $product_ref->{ecoscore_data}{adjustments}{threatened_species}{value} != 0)
+ )
{
create_panel_from_json_template("palm_oil", "api/knowledge-panels/environment/palm_oil.tt.json",
@@ -1155,7 +1158,9 @@ sub create_serving_size_panel ($product_ref, $target_lc, $target_cc, $options_re
# Generate a panel only for food products that have a serving size
if (defined $product_ref->{serving_size}) {
my $serving_warning = undef;
- if (($product_ref->{serving_quantity} <= 5) and ($product_ref->{nutrition_data_per} eq 'serving')) {
+ if ( (defined $product_ref->{serving_quantity} && $product_ref->{serving_quantity} <= 5)
+ and ($product_ref->{nutrition_data_per} eq 'serving'))
+ {
$serving_warning = lang_in_other_lc($target_lc, "serving_too_small_for_nutrition_analysis");
}
my $panel_data_ref = {"serving_warning" => $serving_warning,};
@@ -1334,7 +1339,11 @@ sub create_ingredients_panel ($product_ref, $target_lc, $target_cc, $options_ref
title => $title,
ingredients_text => $ingredients_text,
ingredients_text_with_allergens => $ingredients_text_with_allergens,
- ingredients_text_lc => $ingredients_text_lc,
+ ingredients_text_lc => (
+ defined $ingredients_text_lc
+ ? display_taxonomy_tag($target_lc, 'languages', $language_codes{$ingredients_text_lc})
+ : ''
+ ),
ingredients_text_language =>
display_taxonomy_tag($target_lc, 'languages', $language_codes{$ingredients_text_lc}),
};
diff --git a/lib/ProductOpener/Products.pm b/lib/ProductOpener/Products.pm
index 75884ed931535..0146d0201833c 100644
--- a/lib/ProductOpener/Products.pm
+++ b/lib/ProductOpener/Products.pm
@@ -410,6 +410,8 @@ Boolean value indicating if the code is valid or not.
=cut
sub is_valid_code ($code) {
+ # Return an empty string if $code is undef
+ return '' if !defined $code;
return $code =~ /^\d{4,24}$/;
}
@@ -2338,12 +2340,14 @@ sub compute_product_history_and_completeness ($product_data_root, $current_produ
my $number_of_units = $packagings_ref->{number_of_units};
my $weight_measured = $packagings_ref->{weight_measured};
- $packagings_data_signature .= "number_of_units:" . ($number_of_units || '') . ',';
+ $packagings_data_signature
+ .= "number_of_units:" . (defined $number_of_units ? $number_of_units : '') . ',';
foreach my $property (qw(shape material recycling quantity_per_unit)) {
- $packagings_data_signature .= $property . ":" . ($packagings_ref->{$property} || '') . ',';
+ $packagings_data_signature .= $property . ":"
+ . (defined $packagings_ref->{$property} ? $packagings_ref->{$property} : '') . ',';
}
$packagings_data_signature .= "\n";
- $packagings_weights_signature .= ($weight_measured || '') . "\n";
+ $packagings_weights_signature .= (defined $weight_measured ? $weight_measured : '') . "\n";
}
# If the signature is empty or contains only line feeds, we don't have data
if ($packagings_data_signature !~ /^\s*$/) {
diff --git a/lib/ProductOpener/Tags.pm b/lib/ProductOpener/Tags.pm
index 10394b0833859..1dad4c824b113 100644
--- a/lib/ProductOpener/Tags.pm
+++ b/lib/ProductOpener/Tags.pm
@@ -3433,6 +3433,8 @@ sub list_taxonomy_tags_in_language ($target_lc, $tagtype, $tags_ref) {
}
sub canonicalize_tag2 ($tagtype, $tag) {
+ return $tag if !defined $tag;
+
#$tag = lc($tag);
my $canon_tag = $tag;
$canon_tag =~ s/^ //g;
diff --git a/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json b/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json
index 5cdef725bd60c..1f07f12bd0b24 100644
--- a/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json
+++ b/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json
@@ -25,11 +25,11 @@
}
},
[% ELSE %]
- [% IF product.ecoscore_data.adjustments.origins_of_ingredients.value <= 0 %]
+ [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value <= 0 %]
"evaluation": "bad",
"title_element": {
"title": "[% edq(lang('ecoscore_origins_of_ingredients_impact_high')) %]",
- [% ELSIF product.ecoscore_data.adjustments.origins_of_ingredients.value <= 15 %]
+ [% ELSIF defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value <= 15 %]
"evaluation": "average",
"title_element": {
"title": "[% edq(lang('ecoscore_origins_of_ingredients_impact_medium')) %]",
@@ -38,7 +38,7 @@
"title_element": {
"title": "[% edq(lang('ecoscore_origins_of_ingredients_impact_low')) %]",
[% END %]
- [% IF product.ecoscore_data.adjustments.origins_of_ingredients.value > 0 %]
+ [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value > 0 %]
"subtitle": "[% edq(lang('bonus')) %][% sep %]: +[% product.ecoscore_data.adjustments.origins_of_ingredients.value %]",
[% ELSE %]
"subtitle": "[% edq(lang('malus')) %][% sep %]: [% product.ecoscore_data.adjustments.origins_of_ingredients.value %]",
@@ -53,8 +53,8 @@
"text_element": {
"type": "default",
"html": `
- [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF product.ecoscore_data.adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.epi_value) %]
- [% lang('ecoscore_transportation') %][% sep %]: [% IF product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value) %]
+ [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.epi_value && product.ecoscore_data.adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.epi_value) %]
+ [% lang('ecoscore_transportation') %][% sep %]: [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value && product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value) %]
`
}
},
@@ -89,7 +89,9 @@
"percent": [% round(origin.percent) %],
// EPI bonus goes from -5 to 5 with the formula bonus = epi_score / 10 - 5
// Transportation bonus goes from 0 to 15 with the formula bonus = transportation_score * 0.15
- [% SET score = origin.epi_score / 10 - 5 + origin.transportation_score * 0.15 %]
+ [% SET epi_score = defined origin.epi_score ? origin.epi_score : 0 %]
+ [% SET transportation_score = defined origin.transportation_score ? origin.transportation_score : 0 %]
+ [% SET score = epi_score / 10 - 5 + transportation_score * 0.15 %]
[% IF score >= 15 %]
"evaluation": "good",
[% ELSIF score <= 0 %]
diff --git a/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json b/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json
index 88b546b4b4380..9a297571c672a 100644
--- a/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json
+++ b/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json
@@ -24,7 +24,7 @@
}
},
]
- [% ELSIF product.ecoscore_data.adjustments.threatened_species.value < 0 %]
+ [% ELSIF defined product.ecoscore_data.adjustments.threatened_species.value && product.ecoscore_data.adjustments.threatened_species.value < 0 %]
"evaluation": "bad",
"title_element": {
"title": "[% edq(lang('ecoscore_ingredients_whose_cultivation_threatens_species')) %]",
diff --git a/templates/api/knowledge-panels/environment/ecoscore/total.tt.json b/templates/api/knowledge-panels/environment/ecoscore/total.tt.json
index f3869ad73dc44..8a1b1af28363a 100644
--- a/templates/api/knowledge-panels/environment/ecoscore/total.tt.json
+++ b/templates/api/knowledge-panels/environment/ecoscore/total.tt.json
@@ -1,4 +1,27 @@
-[% SET sum_of_bonuses_and_maluses = product.ecoscore_data.adjustments.production_system.value + product.ecoscore_data.adjustments.packaging.value + product.ecoscore_data.adjustments.threatened_species.value + product.ecoscore_data.adjustments.origins_of_ingredients.value %]
+[% USE sum_of_bonuses_and_maluses = 0;
+ USE value;
+ IF (defined product.ecoscore_data.adjustments.production_system.value && product.ecoscore_data.adjustments.production_system.value =~ /^-?\d+(\.\d+)?$/) {
+ value = product.ecoscore_data.adjustments.production_system.value;
+ }
+ sum_of_bonuses_and_maluses += value;
+
+ IF (defined product.ecoscore_data.adjustments.packaging.value && product.ecoscore_data.adjustments.packaging.value =~ /^-?\d+(\.\d+)?$/) {
+ value = product.ecoscore_data.adjustments.packaging.value;
+ }
+ sum_of_bonuses_and_maluses += value;
+
+ IF (defined product.ecoscore_data.adjustments.threatened_species.value && product.ecoscore_data.adjustments.threatened_species.value =~ /^-?\d+(\.\d+)?$/) {
+ value = product.ecoscore_data.adjustments.threatened_species.value;
+ }
+ sum_of_bonuses_and_maluses += value;
+
+ IF (defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value =~ /^-?\d+(\.\d+)?$/) {
+ value = product.ecoscore_data.adjustments.origins_of_ingredients.value;
+ }
+ sum_of_bonuses_and_maluses += value;
+%]
+
+
{
"level": "info",
"topics": [
diff --git a/templates/web/pages/product/includes/ecoscore_details.tt.html b/templates/web/pages/product/includes/ecoscore_details.tt.html
index 0cc4ebf0d720e..6f1d08a402413 100644
--- a/templates/web/pages/product/includes/ecoscore_details.tt.html
+++ b/templates/web/pages/product/includes/ecoscore_details.tt.html
@@ -120,7 +120,7 @@
[% lang('ecoscore_additional_bonuses_and_maluses') %]
[% display_icon('agriculture') %] [% lang('ecoscore_production_system') %]
- [% IF adjustments.production_system.value > 0 %]
+ [% IF defined adjustments.production_system.value && adjustments.production_system.value > 0 %]
[% FOREACH label IN adjustments.production_system.labels %]
@@ -164,8 +164,8 @@ [% display_icon('public') %] [% lang('ecoscore_origins_of_ingredients') %]
[% END %]
- [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.epi_value) %]
- [% lang('ecoscore_transportation') %][% sep %]: [% IF adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.transportation_value) %]
+ [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF defined adjustments.origins_of_ingredients.epi_value && adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.epi_value) %]
+ [% lang('ecoscore_transportation') %][% sep %]: [% IF defined adjustments.origins_of_ingredients.epi_value && adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.transportation_value) %]
@@ -233,7 +233,7 @@ [% display_icon('packaging') %] [% lang('ecoscore_packaging') %]
[% lang('ecoscore_score_of_all_components') %][% sep %]: [% adjustments.packaging.score %]
[% END %]
- [% lang('ecoscore_packaging') %][% sep %]: [% IF adjustments.packaging.value > 0 %]+[% END %][% adjustments.packaging.value %]
+ [% lang('ecoscore_packaging') %][% sep %]: [% IF defined adjustments.packaging.value && adjustments.packaging.value > 0 %]+[% END %][% adjustments.packaging.value %]
From 952ec150073d3dd367595d7b08e3cb75cb8bceb5 Mon Sep 17 00:00:00 2001
From: benbenben2 <110821832+benbenben2@users.noreply.github.com>
Date: Sun, 26 May 2024 08:51:14 +0200
Subject: [PATCH 2/4] Apply suggestions from code review
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Stéphane Gigandet
---
lib/ProductOpener/Display.pm | 2 +-
lib/ProductOpener/Products.pm | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/ProductOpener/Display.pm b/lib/ProductOpener/Display.pm
index e0f008e718be8..5a72dedd1fc23 100644
--- a/lib/ProductOpener/Display.pm
+++ b/lib/ProductOpener/Display.pm
@@ -1527,7 +1527,7 @@ sub display_text_content ($request_ref, $textid, $text_lc, $file) {
if ((defined $request_ref->{page}) and ($request_ref->{page} > 1)) {
$request_ref->{title}
- = (defined $title ? $title : '') . lang("title_separator") . sprintf(lang("page_x"), $request_ref->{page});
+ = ($title // '') . lang("title_separator") . sprintf(lang("page_x"), $request_ref->{page});
}
else {
$request_ref->{title} = $title;
diff --git a/lib/ProductOpener/Products.pm b/lib/ProductOpener/Products.pm
index 0146d0201833c..1e744a121b7a1 100644
--- a/lib/ProductOpener/Products.pm
+++ b/lib/ProductOpener/Products.pm
@@ -2341,7 +2341,7 @@ sub compute_product_history_and_completeness ($product_data_root, $current_produ
my $weight_measured = $packagings_ref->{weight_measured};
$packagings_data_signature
- .= "number_of_units:" . (defined $number_of_units ? $number_of_units : '') . ',';
+ .= "number_of_units:" . ($number_of_units // '') . ',';
foreach my $property (qw(shape material recycling quantity_per_unit)) {
$packagings_data_signature .= $property . ":"
. (defined $packagings_ref->{$property} ? $packagings_ref->{$property} : '') . ',';
From 50695735a9586a2567d6010975d41ce9ea99e240 Mon Sep 17 00:00:00 2001
From: benbenben2 <110821832+benbenben2@users.noreply.github.com>
Date: Sun, 26 May 2024 10:20:51 +0200
Subject: [PATCH 3/4] apply suggestions
---
lib/ProductOpener/Display.pm | 4 ++--
lib/ProductOpener/Products.pm | 8 +++----
.../ecoscore/origins_of_ingredients.tt.json | 14 +++++------
.../ecoscore/threatened_species.tt.json | 2 +-
.../environment/ecoscore/total.tt.json | 24 +------------------
.../product/includes/ecoscore_details.tt.html | 8 +++----
6 files changed, 18 insertions(+), 42 deletions(-)
diff --git a/lib/ProductOpener/Display.pm b/lib/ProductOpener/Display.pm
index 5a72dedd1fc23..0123692faf31c 100644
--- a/lib/ProductOpener/Display.pm
+++ b/lib/ProductOpener/Display.pm
@@ -9043,8 +9043,8 @@ sub data_to_display_nutrient_levels ($product_ref) {
if ((defined $product_ref->{nutrient_levels}) and (defined $product_ref->{nutrient_levels}{$nid})) {
my $nutriment_value = $product_ref->{nutriments}{$nid . $prepared . "_100g"};
- my $formatted_value = defined $nutriment_value
- && $nutriment_value =~ /^-?\d+(\.\d+)?$/ ? sprintf("%.2e", $nutriment_value + 0.0) : '';
+ my $formatted_value = $nutriment_value
+ // '' =~ /^-?\d+(\.\d+)?$/ ? sprintf("%.2e", $nutriment_value + 0.0) : '';
push @{$result_data_ref->{nutrient_levels}}, {
nid => $nid,
diff --git a/lib/ProductOpener/Products.pm b/lib/ProductOpener/Products.pm
index 1e744a121b7a1..185065caec3ef 100644
--- a/lib/ProductOpener/Products.pm
+++ b/lib/ProductOpener/Products.pm
@@ -2340,14 +2340,12 @@ sub compute_product_history_and_completeness ($product_data_root, $current_produ
my $number_of_units = $packagings_ref->{number_of_units};
my $weight_measured = $packagings_ref->{weight_measured};
- $packagings_data_signature
- .= "number_of_units:" . ($number_of_units // '') . ',';
+ $packagings_data_signature .= "number_of_units:" . ($number_of_units // '') . ',';
foreach my $property (qw(shape material recycling quantity_per_unit)) {
- $packagings_data_signature .= $property . ":"
- . (defined $packagings_ref->{$property} ? $packagings_ref->{$property} : '') . ',';
+ $packagings_data_signature .= $property . ":" . ($packagings_ref->{$property} // '') . ',';
}
$packagings_data_signature .= "\n";
- $packagings_weights_signature .= (defined $weight_measured ? $weight_measured : '') . "\n";
+ $packagings_weights_signature .= ($weight_measured // '') . "\n";
}
# If the signature is empty or contains only line feeds, we don't have data
if ($packagings_data_signature !~ /^\s*$/) {
diff --git a/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json b/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json
index 1f07f12bd0b24..679826ed49162 100644
--- a/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json
+++ b/templates/api/knowledge-panels/environment/ecoscore/origins_of_ingredients.tt.json
@@ -25,11 +25,11 @@
}
},
[% ELSE %]
- [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value <= 0 %]
+ [% IF product.ecoscore_data.adjustments.origins_of_ingredients.value.defined && product.ecoscore_data.adjustments.origins_of_ingredients.value <= 0 %]
"evaluation": "bad",
"title_element": {
"title": "[% edq(lang('ecoscore_origins_of_ingredients_impact_high')) %]",
- [% ELSIF defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value <= 15 %]
+ [% ELSIF product.ecoscore_data.adjustments.origins_of_ingredients.value.defined && product.ecoscore_data.adjustments.origins_of_ingredients.value <= 15 %]
"evaluation": "average",
"title_element": {
"title": "[% edq(lang('ecoscore_origins_of_ingredients_impact_medium')) %]",
@@ -38,7 +38,7 @@
"title_element": {
"title": "[% edq(lang('ecoscore_origins_of_ingredients_impact_low')) %]",
[% END %]
- [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value > 0 %]
+ [% IF product.ecoscore_data.adjustments.origins_of_ingredients.value.defined && product.ecoscore_data.adjustments.origins_of_ingredients.value > 0 %]
"subtitle": "[% edq(lang('bonus')) %][% sep %]: +[% product.ecoscore_data.adjustments.origins_of_ingredients.value %]",
[% ELSE %]
"subtitle": "[% edq(lang('malus')) %][% sep %]: [% product.ecoscore_data.adjustments.origins_of_ingredients.value %]",
@@ -53,8 +53,8 @@
"text_element": {
"type": "default",
"html": `
- [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.epi_value && product.ecoscore_data.adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.epi_value) %]
- [% lang('ecoscore_transportation') %][% sep %]: [% IF defined product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value && product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value) %]
+ [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF product.ecoscore_data.adjustments.origins_of_ingredients.epi_value.defined && product.ecoscore_data.adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.epi_value) %]
+ [% lang('ecoscore_transportation') %][% sep %]: [% IF product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value.defined && product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(product.ecoscore_data.adjustments.origins_of_ingredients.transportation_value) %]
`
}
},
@@ -89,8 +89,8 @@
"percent": [% round(origin.percent) %],
// EPI bonus goes from -5 to 5 with the formula bonus = epi_score / 10 - 5
// Transportation bonus goes from 0 to 15 with the formula bonus = transportation_score * 0.15
- [% SET epi_score = defined origin.epi_score ? origin.epi_score : 0 %]
- [% SET transportation_score = defined origin.transportation_score ? origin.transportation_score : 0 %]
+ [% SET epi_score = origin.epi_score.defined ? origin.epi_score : 0 %]
+ [% SET transportation_score = origin.transportation_score.defined ? origin.transportation_score : 0 %]
[% SET score = epi_score / 10 - 5 + transportation_score * 0.15 %]
[% IF score >= 15 %]
"evaluation": "good",
diff --git a/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json b/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json
index 9a297571c672a..3fa593b966746 100644
--- a/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json
+++ b/templates/api/knowledge-panels/environment/ecoscore/threatened_species.tt.json
@@ -24,7 +24,7 @@
}
},
]
- [% ELSIF defined product.ecoscore_data.adjustments.threatened_species.value && product.ecoscore_data.adjustments.threatened_species.value < 0 %]
+ [% ELSIF product.ecoscore_data.adjustments.threatened_species.value.defined && product.ecoscore_data.adjustments.threatened_species.value < 0 %]
"evaluation": "bad",
"title_element": {
"title": "[% edq(lang('ecoscore_ingredients_whose_cultivation_threatens_species')) %]",
diff --git a/templates/api/knowledge-panels/environment/ecoscore/total.tt.json b/templates/api/knowledge-panels/environment/ecoscore/total.tt.json
index 8a1b1af28363a..7c98ab845ac29 100644
--- a/templates/api/knowledge-panels/environment/ecoscore/total.tt.json
+++ b/templates/api/knowledge-panels/environment/ecoscore/total.tt.json
@@ -1,26 +1,4 @@
-[% USE sum_of_bonuses_and_maluses = 0;
- USE value;
- IF (defined product.ecoscore_data.adjustments.production_system.value && product.ecoscore_data.adjustments.production_system.value =~ /^-?\d+(\.\d+)?$/) {
- value = product.ecoscore_data.adjustments.production_system.value;
- }
- sum_of_bonuses_and_maluses += value;
-
- IF (defined product.ecoscore_data.adjustments.packaging.value && product.ecoscore_data.adjustments.packaging.value =~ /^-?\d+(\.\d+)?$/) {
- value = product.ecoscore_data.adjustments.packaging.value;
- }
- sum_of_bonuses_and_maluses += value;
-
- IF (defined product.ecoscore_data.adjustments.threatened_species.value && product.ecoscore_data.adjustments.threatened_species.value =~ /^-?\d+(\.\d+)?$/) {
- value = product.ecoscore_data.adjustments.threatened_species.value;
- }
- sum_of_bonuses_and_maluses += value;
-
- IF (defined product.ecoscore_data.adjustments.origins_of_ingredients.value && product.ecoscore_data.adjustments.origins_of_ingredients.value =~ /^-?\d+(\.\d+)?$/) {
- value = product.ecoscore_data.adjustments.origins_of_ingredients.value;
- }
- sum_of_bonuses_and_maluses += value;
-%]
-
+[% SET sum_of_bonuses_and_maluses = (product.ecoscore_data.adjustments.production_system.value || 0) + (product.ecoscore_data.adjustments.packaging.value || 0) + (product.ecoscore_data.adjustments.threatened_species.value || 0) + (product.ecoscore_data.adjustments.origins_of_ingredients.value || 0) %]
{
"level": "info",
diff --git a/templates/web/pages/product/includes/ecoscore_details.tt.html b/templates/web/pages/product/includes/ecoscore_details.tt.html
index 6f1d08a402413..ded1bb4641b2c 100644
--- a/templates/web/pages/product/includes/ecoscore_details.tt.html
+++ b/templates/web/pages/product/includes/ecoscore_details.tt.html
@@ -120,7 +120,7 @@ [% lang('ecoscore_additional_bonuses_and_maluses') %]
[% display_icon('agriculture') %] [% lang('ecoscore_production_system') %]
- [% IF defined adjustments.production_system.value && adjustments.production_system.value > 0 %]
+ [% IF adjustments.production_system.value.defined && adjustments.production_system.value > 0 %]
[% FOREACH label IN adjustments.production_system.labels %]
@@ -164,8 +164,8 @@ [% display_icon('public') %] [% lang('ecoscore_origins_of_ingredients') %]
[% END %]
- [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF defined adjustments.origins_of_ingredients.epi_value && adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.epi_value) %]
- [% lang('ecoscore_transportation') %][% sep %]: [% IF defined adjustments.origins_of_ingredients.epi_value && adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.transportation_value) %]
+ [% lang('ecoscore_environmental_policy') %][% sep %]: [% IF adjustments.origins_of_ingredients.epi_value.defined && adjustments.origins_of_ingredients.epi_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.epi_value) %]
+ [% lang('ecoscore_transportation') %][% sep %]: [% IF adjustments.origins_of_ingredients.epi_value.defined && adjustments.origins_of_ingredients.transportation_value > 0 %]+[% END %][% round(adjustments.origins_of_ingredients.transportation_value) %]
@@ -233,7 +233,7 @@ [% display_icon('packaging') %] [% lang('ecoscore_packaging') %]
[% lang('ecoscore_score_of_all_components') %][% sep %]: [% adjustments.packaging.score %]
[% END %]
- [% lang('ecoscore_packaging') %][% sep %]: [% IF defined adjustments.packaging.value && adjustments.packaging.value > 0 %]+[% END %][% adjustments.packaging.value %]
+ [% lang('ecoscore_packaging') %][% sep %]: [% IF adjustments.packaging.value.defined && adjustments.packaging.value > 0 %]+[% END %][% adjustments.packaging.value %]
From c32cf48c4e21afb6a724254b8b48a8c0e36fade7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Gigandet?=
Date: Tue, 4 Jun 2024 10:49:40 +0200
Subject: [PATCH 4/4] fix tests
---
lib/ProductOpener/Display.pm | 12 ++++++------
lib/ProductOpener/KnowledgePanels.pm | 6 +-----
.../api_v2_product_read/get-existing-product.json | 2 +-
.../get-fields-all-knowledge-panels.json | 2 +-
...fields-attribute-groups-all-knowledge-panels.json | 2 +-
...et-product-ingredients-text-without-language.json | 2 +-
.../api_v2_product_write/get-product.json | 2 +-
.../get-existing-product-gs1-caret.json | 2 +-
tests/update_tests_results.sh | 8 ++++----
9 files changed, 17 insertions(+), 21 deletions(-)
diff --git a/lib/ProductOpener/Display.pm b/lib/ProductOpener/Display.pm
index 3fed3cad5d5be..3611daa484e78 100644
--- a/lib/ProductOpener/Display.pm
+++ b/lib/ProductOpener/Display.pm
@@ -9053,16 +9053,16 @@ sub data_to_display_nutrient_levels ($product_ref) {
foreach my $nutrient_level_ref (@nutrient_levels) {
my ($nid, $low, $high) = @{$nutrient_level_ref};
- if ((defined $product_ref->{nutrient_levels}) and (defined $product_ref->{nutrient_levels}{$nid})) {
-
- my $nutriment_value = $product_ref->{nutriments}{$nid . $prepared . "_100g"};
- my $formatted_value = $nutriment_value
- // '' =~ /^-?\d+(\.\d+)?$/ ? sprintf("%.2e", $nutriment_value + 0.0) : '';
+ if ( (defined $product_ref->{nutrient_levels})
+ and (defined $product_ref->{nutrient_levels}{$nid})
+ and (defined $product_ref->{nutriments}{$nid . $prepared . "_100g"}))
+ {
push @{$result_data_ref->{nutrient_levels}}, {
nid => $nid,
nutrient_level => $product_ref->{nutrient_levels}{$nid},
- nutrient_quantity_in_grams => $formatted_value,
+ nutrient_quantity_in_grams =>
+ sprintf("%.2e", $product_ref->{nutriments}{$nid . $prepared . "_100g"}) + 0.0,
nutrient_in_quantity => sprintf(
lang("nutrient_in_quantity"),
display_taxonomy_tag($lc, "nutrients", "zz:$nid"),
diff --git a/lib/ProductOpener/KnowledgePanels.pm b/lib/ProductOpener/KnowledgePanels.pm
index 47d4f70164d81..41eddd2211e7d 100644
--- a/lib/ProductOpener/KnowledgePanels.pm
+++ b/lib/ProductOpener/KnowledgePanels.pm
@@ -1339,11 +1339,7 @@ sub create_ingredients_panel ($product_ref, $target_lc, $target_cc, $options_ref
title => $title,
ingredients_text => $ingredients_text,
ingredients_text_with_allergens => $ingredients_text_with_allergens,
- ingredients_text_lc => (
- defined $ingredients_text_lc
- ? display_taxonomy_tag($target_lc, 'languages', $language_codes{$ingredients_text_lc})
- : ''
- ),
+ ingredients_text_lc => $ingredients_text_lc,
ingredients_text_language =>
display_taxonomy_tag($target_lc, 'languages', $language_codes{$ingredients_text_lc}),
};
diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-existing-product.json b/tests/integration/expected_test_results/api_v2_product_read/get-existing-product.json
index 60b02b248cba3..042b12b2119eb 100644
--- a/tests/integration/expected_test_results/api_v2_product_read/get-existing-product.json
+++ b/tests/integration/expected_test_results/api_v2_product_read/get-existing-product.json
@@ -102,7 +102,7 @@
"origins_of_ingredients" : {
"aggregated_origins" : [
{
- "epi_score" : 0,
+ "epi_score" : "0",
"origin" : "en:unknown",
"percent" : 100,
"transportation_score" : null
diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-fields-all-knowledge-panels.json b/tests/integration/expected_test_results/api_v2_product_read/get-fields-all-knowledge-panels.json
index e210a2bd2eeac..e5eaf0d55a393 100644
--- a/tests/integration/expected_test_results/api_v2_product_read/get-fields-all-knowledge-panels.json
+++ b/tests/integration/expected_test_results/api_v2_product_read/get-fields-all-knowledge-panels.json
@@ -102,7 +102,7 @@
"origins_of_ingredients" : {
"aggregated_origins" : [
{
- "epi_score" : 0,
+ "epi_score" : "0",
"origin" : "en:unknown",
"percent" : 100,
"transportation_score" : null
diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-fields-attribute-groups-all-knowledge-panels.json b/tests/integration/expected_test_results/api_v2_product_read/get-fields-attribute-groups-all-knowledge-panels.json
index 9debd82d1cf77..43e697c75458c 100644
--- a/tests/integration/expected_test_results/api_v2_product_read/get-fields-attribute-groups-all-knowledge-panels.json
+++ b/tests/integration/expected_test_results/api_v2_product_read/get-fields-attribute-groups-all-knowledge-panels.json
@@ -750,7 +750,7 @@
"origins_of_ingredients" : {
"aggregated_origins" : [
{
- "epi_score" : 0,
+ "epi_score" : "0",
"origin" : "en:unknown",
"percent" : 100,
"transportation_score" : null
diff --git a/tests/integration/expected_test_results/api_v2_product_write/get-product-ingredients-text-without-language.json b/tests/integration/expected_test_results/api_v2_product_write/get-product-ingredients-text-without-language.json
index 10304f2245596..1870fa4d97df4 100644
--- a/tests/integration/expected_test_results/api_v2_product_write/get-product-ingredients-text-without-language.json
+++ b/tests/integration/expected_test_results/api_v2_product_write/get-product-ingredients-text-without-language.json
@@ -97,7 +97,7 @@
"origins_of_ingredients" : {
"aggregated_origins" : [
{
- "epi_score" : 0,
+ "epi_score" : "0",
"origin" : "en:unknown",
"percent" : 100,
"transportation_score" : null
diff --git a/tests/integration/expected_test_results/api_v2_product_write/get-product.json b/tests/integration/expected_test_results/api_v2_product_write/get-product.json
index 81134f8fcbd40..fa753041fd340 100644
--- a/tests/integration/expected_test_results/api_v2_product_write/get-product.json
+++ b/tests/integration/expected_test_results/api_v2_product_write/get-product.json
@@ -109,7 +109,7 @@
"origins_of_ingredients" : {
"aggregated_origins" : [
{
- "epi_score" : 0,
+ "epi_score" : "0",
"origin" : "en:unknown",
"percent" : 100,
"transportation_score" : null
diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-caret.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-caret.json
index e7a07b2c0184d..fec7ccc4e1d38 100644
--- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-caret.json
+++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-caret.json
@@ -104,7 +104,7 @@
"origins_of_ingredients" : {
"aggregated_origins" : [
{
- "epi_score" : 0,
+ "epi_score" : "0",
"origin" : "en:unknown",
"percent" : 100,
"transportation_score" : null
diff --git a/tests/update_tests_results.sh b/tests/update_tests_results.sh
index ebd7084a7142b..b0a238fad3dfe 100755
--- a/tests/update_tests_results.sh
+++ b/tests/update_tests_results.sh
@@ -19,10 +19,10 @@ rm /mnt/podata/data/categories_stats/*.*
# Unit tests
# all tests use init_expected_results function
-for FILE in $(grep -l init_expected_results unit/*.t);
-do
- perl $FILE --update-expected-results
-done
+#for FILE in $(grep -l init_expected_results unit/*.t);
+#do
+# perl $FILE --update-expected-results
+#done
# Integration tests