diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a88c7d5bc3bf9..3fbf56e680640 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -80,8 +80,20 @@ jobs: # see https://stackoverflow.com/a/60984318/2886726 run: | git ls-files taxonomies/ | xargs -I{} git log -1 --date=format:%Y%m%d%H%M.%S --format='touch -t %ad "{}"' "{}" | bash - - name: Rebuild taxonomies + - name: Rebuild taxonomies for Open Food Facts (off) run: make DOCKER_LOCAL_DATA="$(pwd)" build_taxonomies GITHUB_TOKEN="${{ secrets.TAXONOMY_CACHE_GITHUB_TOKEN }}" + - name: Rebuild taxonomies for Open Beauty Facts (obf) + run: | + source env/setenv.sh obf + make DOCKER_LOCAL_DATA="$(pwd)" build_taxonomies GITHUB_TOKEN="${{ secrets.TAXONOMY_CACHE_GITHUB_TOKEN }}" + - name: Rebuild taxonomies for Open Products Facts (opf) + run: | + source env/setenv.sh opf + make DOCKER_LOCAL_DATA="$(pwd)" build_taxonomies GITHUB_TOKEN="${{ secrets.TAXONOMY_CACHE_GITHUB_TOKEN }}" + - name: Rebuild taxonomies for Open Pet Food Facts (opff) + run: | + source env/setenv.sh opff + make DOCKER_LOCAL_DATA="$(pwd)" build_taxonomies GITHUB_TOKEN="${{ secrets.TAXONOMY_CACHE_GITHUB_TOKEN }}" check_perl: name: 🐪 Check Perl @@ -229,3 +241,17 @@ jobs: run: make livecheck || ( tail -n 300 logs/apache2/*error*log; docker compose logs; false ) - name: test clean run: make hdown + + test_deployment: + name: 🦾 Some test of deployment tools + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: verify apache2 envvars is correct + run: | + env/setenv.sh off; + sh -c ". conf/apache-2.4/off-envvars" + sh -c "APACHE_CONFDIR=/etc/apache2-priority; . conf/apache-2.4/off-envvars" \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e5d6965ffdbcc..9599907d28b94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,45 @@ # Changelog +## [2.55.0](https://github.com/openfoodfacts/openfoodfacts-server/compare/v2.54.0...v2.55.0) (2025-01-17) + + +### Features + +* determine packaging components in contact with food ([#11238](https://github.com/openfoodfacts/openfoodfacts-server/issues/11238)) ([c5cda35](https://github.com/openfoodfacts/openfoodfacts-server/commit/c5cda35c36d0e2aaf353d286cf9f40f27ff0dc86)) +* serve content without header and footer for mobile app ([#11245](https://github.com/openfoodfacts/openfoodfacts-server/issues/11245)) ([662a96b](https://github.com/openfoodfacts/openfoodfacts-server/commit/662a96b167d13add3ed1c380c0236f627ecc75c9)) + + +### Bug Fixes + +* Green-Score attributes/panels titles and subtitles ([#11244](https://github.com/openfoodfacts/openfoodfacts-server/issues/11244)) ([1eb84a5](https://github.com/openfoodfacts/openfoodfacts-server/commit/1eb84a5c26b0f5320a65bbb92656819d8e449df6)) +* more positive messages for Nova 4 ([#11231](https://github.com/openfoodfacts/openfoodfacts-server/issues/11231)) ([79e63cd](https://github.com/openfoodfacts/openfoodfacts-server/commit/79e63cd2ecf5ab4a74c134ba977ef4150b0cff3b)) +* Update fundraiser text to 2025 ([#11248](https://github.com/openfoodfacts/openfoodfacts-server/issues/11248)) ([b88f43e](https://github.com/openfoodfacts/openfoodfacts-server/commit/b88f43e2506325b7a11e20ed6086985a326a1369)) + +## [2.54.0](https://github.com/openfoodfacts/openfoodfacts-server/compare/v2.53.0...v2.54.0) (2025-01-10) + + +### Features + +* gzip js, css, SVG icons assets ([#11208](https://github.com/openfoodfacts/openfoodfacts-server/issues/11208)) ([c0a5275](https://github.com/openfoodfacts/openfoodfacts-server/commit/c0a5275dcf73da40ecb9c1fb3d3d01dcbea9b4cb)) + + +### Bug Fixes + +* "NutriScore V2" SVGs with blank space ([#11218](https://github.com/openfoodfacts/openfoodfacts-server/issues/11218)) ([38d79e8](https://github.com/openfoodfacts/openfoodfacts-server/commit/38d79e81a6b2639b1e79744a6ec9e6c9d2db6eb3)) +* avoid crash in display_orgs_table when org.created_t is not set, fix permission ([#11203](https://github.com/openfoodfacts/openfoodfacts-server/issues/11203)) ([765d796](https://github.com/openfoodfacts/openfoodfacts-server/commit/765d7965422cc836cd785e7a896548e89782f4cc)) +* greenscore attribute with old ecoscore_data ([#11212](https://github.com/openfoodfacts/openfoodfacts-server/issues/11212)) ([4f596ad](https://github.com/openfoodfacts/openfoodfacts-server/commit/4f596ad3fda8393a89797d188168c36a870f56b6)) +* Invalid OFF dark icon ([#11206](https://github.com/openfoodfacts/openfoodfacts-server/issues/11206)) ([f63daa8](https://github.com/openfoodfacts/openfoodfacts-server/commit/f63daa8b1da31483c79f8bfd1e832865dbd898b4)) +* Nutripatrol url trailing slash removal regex ([#11204](https://github.com/openfoodfacts/openfoodfacts-server/issues/11204)) ([f42f8dd](https://github.com/openfoodfacts/openfoodfacts-server/commit/f42f8ddfb45e7d4172b11488b5bd8830133345c1)) +* Nutriscore for fresh herbs ([#11112](https://github.com/openfoodfacts/openfoodfacts-server/issues/11112)) ([cdd7cf5](https://github.com/openfoodfacts/openfoodfacts-server/commit/cdd7cf5f14c4ac82704da4921c9b05bd7582dac6)) +* Remove irrelevant things in Config_obf.pm ([c5d448d](https://github.com/openfoodfacts/openfoodfacts-server/commit/c5d448de8ad15dd7d7d1fc805f97d56f0fcadb9f)) +* Remove irrelevant things in the Open Beauty Facts config ([#11195](https://github.com/openfoodfacts/openfoodfacts-server/issues/11195)) ([c5d448d](https://github.com/openfoodfacts/openfoodfacts-server/commit/c5d448de8ad15dd7d7d1fc805f97d56f0fcadb9f)) +* remove warning in Display.pm related to Environmental Scoring ([#11172](https://github.com/openfoodfacts/openfoodfacts-server/issues/11172)) ([176fe9e](https://github.com/openfoodfacts/openfoodfacts-server/commit/176fe9eed7247fe155769b242e0bcdb860343ffb)) +* Removing irrelevant fields in the Open Products Facts config ([4583ed2](https://github.com/openfoodfacts/openfoodfacts-server/commit/4583ed21f8e656f289e9ecd579ba6150db6f9646)) +* Removing irrelevant fields in the Open Products Facts config ([#11202](https://github.com/openfoodfacts/openfoodfacts-server/issues/11202)) ([4583ed2](https://github.com/openfoodfacts/openfoodfacts-server/commit/4583ed21f8e656f289e9ecd579ba6150db6f9646)) +* typo in ecoscore redirect ([#11213](https://github.com/openfoodfacts/openfoodfacts-server/issues/11213)) ([85fd575](https://github.com/openfoodfacts/openfoodfacts-server/commit/85fd5752f1f6954eb71eee4e2d340aea078239db)) +* use ecoscore data when greenscore not available ([#11197](https://github.com/openfoodfacts/openfoodfacts-server/issues/11197)) ([5ae1273](https://github.com/openfoodfacts/openfoodfacts-server/commit/5ae1273c83babd0dfc0681707599c529f74a0047)) +* warnings in producers tests ([#11190](https://github.com/openfoodfacts/openfoodfacts-server/issues/11190)) ([0588976](https://github.com/openfoodfacts/openfoodfacts-server/commit/05889765c863cfe72530c88c11774b571df8f85b)) + ## [2.53.0](https://github.com/openfoodfacts/openfoodfacts-server/compare/v2.52.0...v2.53.0) (2025-01-06) diff --git a/conf/apache-2.4/modperl.conf b/conf/apache-2.4/modperl.conf index 486c211c80dc2..215c967924c15 100644 --- a/conf/apache-2.4/modperl.conf +++ b/conf/apache-2.4/modperl.conf @@ -21,6 +21,7 @@ PerlPassEnv CROWDIN_PROJECT_KEY PerlPassEnv GEOLITE2_PATH PerlPassEnv POSTGRES_USER PerlPassEnv POSTGRES_PASSWORD +PerlPassEnv LOG4PERL_CONF PerlPassEnv LOG_LEVEL_ROOT PerlPassEnv LOG_LEVEL_MONGODB PerlPassEnv LOG_LEVEL_RATE_LIMITER @@ -31,4 +32,4 @@ PerlPassEnv RATE_LIMITER_BLOCKING_ENABLED PerlPassEnv ODOO_CRM_URL PerlPassEnv ODOO_CRM_DB PerlPassEnv ODOO_CRM_USER -PerlPassEnv ODOO_CRM_PASSWORD \ No newline at end of file +PerlPassEnv ODOO_CRM_PASSWORD diff --git a/conf/apache-2.4/mpm_prefork.conf b/conf/apache-2.4/mpm_prefork.conf new file mode 100644 index 0000000000000..09601ecec512e --- /dev/null +++ b/conf/apache-2.4/mpm_prefork.conf @@ -0,0 +1,12 @@ +# prefork MPM + + + StartServers ${APACHE_MPM_START_SERVERS} + MinSpareServers ${APACHE_MPM_MIN_SPARSE_SERVERS} + MaxSpareServers ${APACHE_MPM_MAX_SPARSE_SERVERS} + MaxRequestWorkers ${APACHE_MPM_MAX_REQUEST_WORKERS} + ServerLimit ${APACHE_MPM_SERVER_LIMIT} + MaxConnectionsPerChild ${APACHE_MPM_MAX_CONN_PER_CHILD} + + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/off-envvars b/conf/apache-2.4/off-envvars new file mode 100644 index 0000000000000..db2343b8b7dc4 --- /dev/null +++ b/conf/apache-2.4/off-envvars @@ -0,0 +1,75 @@ +# This file override the envvars of apache2 +# It is an important place to tweak apache2 through environment variables +# and put some logic in them + +# It will use variables +# that are set in env. +# And also the instance name + +# SUFFIX can be used to tweak settings according to the instance name +if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then + SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}" + APACHE_INSTANCE=${APACHE_CONFDIR##/etc/apache2-} +else + SUFFIX= + APACHE_INSTANCE= +fi + +# we will first source the standard envvars file (if it exists) +if [ -f /etc/apache2${SUFFIX}/envvars ]; +then + . /etc/apache2/envvars +fi + +# now we can set our specific settings + +# we use off user instead of www-data +export APACHE_RUN_USER=off +export APACHE_RUN_GROUP=off + +# port - standard or priority +export APACHE2_PORT=8001 +if [ "$APACHE_INSTANCE" = "priority" ] +then + export APACHE2_PORT=8002 +fi + +APP_DIR=/srv/$PRODUCT_OPENER_FLAVOR_SHORT + +LOG4PERL_CONF=$APP_DIR/conf/$PRODUCT_OPENER_FLAVOR_SHORT-log.conf +if [ -n "$APACHE_INSTANCE" ] +then + export LOG4PERL_CONF=$APP_DIR/conf/$PRODUCT_OPENER_FLAVOR_SHORT-$APACHE_INSTANCE-log.conf +fi + +# MPM settings ----------- + +# StartServers: number of server processes to start +export APACHE_MPM_START_SERVERS=2 +# MaxRequestWorkers: maximum number of server processes allowed to start +export APACHE_MPM_MAX_REQUEST_WORKERS=20 +# MaxConnectionsPerChild: maximum number of requests a server process serves +# keep this a bit low to avoid memory issues +export APACHE_MPM_MAX_CONN_PER_CHILD=100 +# specific MPM settings +if [ "$PRODUCT_OPENER_FLAVOR_SHORT" = "off" ] +then + export APACHE_MPM_START_SERVERS=5 + export APACHE_MPM_MAX_REQUEST_WORKERS=25 + if [ "$INSTANCE_NAME" = "priority" ] + then + export APACHE_MPM_MAX_REQUEST_WORKERS=50 + fi +fi +if [ "$PRODUCT_OPENER_FLAVOR_SHORT" = "off-pro" ] +then + export APACHE_MPM_MAX_REQUEST_WORKERS=10 +fi +# MinSpareServers: minimum number of server processes which are kept spare +# we use StartServers value +export APACHE_MPM_MIN_SPARSE_SERVERS=${APACHE_MPM_START_SERVERS} +# MaxSpareServers: maximum number of server processes which are kept spare +# we use MinSpareServers * 2 +export APACHE_MPM_MAX_SPARSE_SERVERS=$((APACHE_MPM_MIN_SPARSE_SERVERS * 2)) +# corresponds to max request workers + sparse servers +export APACHE_MPM_SERVER_LIMIT=$((APACHE_MPM_MAX_REQUEST_WORKERS + APACHE_MPM_MAX_SPARSE_SERVERS)) diff --git a/conf/apache-2.4/off-mpm_prefork.conf b/conf/apache-2.4/off-mpm_prefork.conf deleted file mode 100644 index 77b1e22c15cf8..0000000000000 --- a/conf/apache-2.4/off-mpm_prefork.conf +++ /dev/null @@ -1,17 +0,0 @@ -# prefork MPM -# StartServers: number of server processes to start -# MinSpareServers: minimum number of server processes which are kept spare -# MaxSpareServers: maximum number of server processes which are kept spare -# MaxRequestWorkers: maximum number of server processes allowed to start -# MaxConnectionsPerChild: maximum number of requests a server process serves - - - StartServers 5 - MinSpareServers 5 - MaxSpareServers 10 - MaxRequestWorkers 50 - ServerLimit 55 - MaxConnectionsPerChild 100 - - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/off-ports.conf b/conf/apache-2.4/off-ports.conf deleted file mode 100644 index b3116f1893ab5..0000000000000 --- a/conf/apache-2.4/off-ports.conf +++ /dev/null @@ -1,7 +0,0 @@ -# If you just change the port or add more ports here, you will likely also -# have to change the VirtualHost statement in -# /etc/apache2/sites-enabled/000-default.conf - -Listen 8004 - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/off-pro-mpm_prefork.conf b/conf/apache-2.4/off-pro-mpm_prefork.conf deleted file mode 100644 index 58645cbbf9dfe..0000000000000 --- a/conf/apache-2.4/off-pro-mpm_prefork.conf +++ /dev/null @@ -1,16 +0,0 @@ -# prefork MPM -# StartServers: number of server processes to start -# MinSpareServers: minimum number of server processes which are kept spare -# MaxSpareServers: maximum number of server processes which are kept spare -# MaxRequestWorkers: maximum number of server processes allowed to start -# MaxConnectionsPerChild: maximum number of requests a server process serves - - - StartServers 2 - MinSpareServers 2 - MaxSpareServers 2 - MaxRequestWorkers 10 - MaxConnectionsPerChild 100 - - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/off-pro-ports.conf b/conf/apache-2.4/off-pro-ports.conf deleted file mode 100644 index 65c945369d3e4..0000000000000 --- a/conf/apache-2.4/off-pro-ports.conf +++ /dev/null @@ -1,7 +0,0 @@ -# If you just change the port or add more ports here, you will likely also -# have to change the VirtualHost statement in -# /etc/apache2/sites-enabled/000-default.conf - -Listen 8014 - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/opf-ports.conf b/conf/apache-2.4/opf-ports.conf deleted file mode 100644 index 870783962f41d..0000000000000 --- a/conf/apache-2.4/opf-ports.conf +++ /dev/null @@ -1,7 +0,0 @@ -# If you just change the port or add more ports here, you will likely also -# have to change the VirtualHost statement in -# /etc/apache2/sites-enabled/000-default.conf - -Listen 8003 - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/opff-ports.conf b/conf/apache-2.4/opff-ports.conf deleted file mode 100644 index 76cb071281dd0..0000000000000 --- a/conf/apache-2.4/opff-ports.conf +++ /dev/null @@ -1,7 +0,0 @@ -# If you just change the port or add more ports here, you will likely also -# have to change the VirtualHost statement in -# /etc/apache2/sites-enabled/000-default.conf - -Listen 8001 - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/obf-ports.conf b/conf/apache-2.4/ports.conf similarity index 64% rename from conf/apache-2.4/obf-ports.conf rename to conf/apache-2.4/ports.conf index ab80878b05fbe..bebf257596d8d 100644 --- a/conf/apache-2.4/obf-ports.conf +++ b/conf/apache-2.4/ports.conf @@ -2,6 +2,7 @@ # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf -Listen 8002 +# APACHE2_PORT has to be passed using -D directive in systemd/apache2.service.d/override.conf +Listen ${APACHE2_PORT} # vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/conf/apache-2.4/sites-available/obf.conf b/conf/apache-2.4/sites-available/obf.conf index cc954de8fafd6..00a2a897de1d0 100644 --- a/conf/apache-2.4/sites-available/obf.conf +++ b/conf/apache-2.4/sites-available/obf.conf @@ -25,8 +25,8 @@ Require all granted DocumentRoot /srv/obf/html ServerName openbeautyfacts.org -ErrorLog /srv/obf/logs/error_log -CustomLog /srv/obf/logs/access_log proxy +ErrorLog /srv/obf/logs/error_log_${APACHE2_PORT} +CustomLog /srv/obf/logs/access_log_${APACHE2_PORT} proxy LogLevel warn ScriptAlias /cgi/ "/srv/obf/cgi/" diff --git a/conf/apache-2.4/sites-available/off-pro.conf b/conf/apache-2.4/sites-available/off-pro.conf index ab71c48fd95af..a58b3d4b1e133 100644 --- a/conf/apache-2.4/sites-available/off-pro.conf +++ b/conf/apache-2.4/sites-available/off-pro.conf @@ -26,8 +26,8 @@ Require all granted DocumentRoot /srv/off-pro/html ServerName pro.openfoodfacts.org -ErrorLog /srv/off-pro/logs/error_log -CustomLog /srv/off-pro/logs/access_log proxy +ErrorLog /srv/off-pro/logs/error_log_${APACHE2_PORT} +CustomLog /srv/off-pro/logs/access_log_${APACHE2_PORT} proxy LogLevel warn ScriptAlias /cgi/ "/srv/off-pro/cgi/" diff --git a/conf/apache-2.4/sites-available/off.conf b/conf/apache-2.4/sites-available/off.conf index 8ab062d608efc..593dbd4ec7bb3 100644 --- a/conf/apache-2.4/sites-available/off.conf +++ b/conf/apache-2.4/sites-available/off.conf @@ -26,8 +26,8 @@ Require all granted DocumentRoot /srv/off/html ServerName openfoodfacts.org -ErrorLog /srv/off/logs/error_log -CustomLog /srv/off/logs/access_log proxy +ErrorLog /srv/off/logs/error_log_${APACHE2_PORT} +CustomLog /srv/off/logs/access_log_${APACHE2_PORT} proxy LogLevel warn ScriptAlias /cgi/ "/srv/off/cgi/" diff --git a/conf/apache-2.4/sites-available/opf.conf b/conf/apache-2.4/sites-available/opf.conf index 8d758a679cac7..de2d13651c507 100644 --- a/conf/apache-2.4/sites-available/opf.conf +++ b/conf/apache-2.4/sites-available/opf.conf @@ -25,8 +25,8 @@ Require all granted DocumentRoot /srv/opf/html ServerName openproductsfacts.org -ErrorLog /srv/opf/logs/error_log -CustomLog /srv/opf/logs/access_log proxy +ErrorLog /srv/opf/logs/error_log_${APACHE2_PORT} +CustomLog /srv/opf/logs/access_log_${APACHE2_PORT} proxy LogLevel warn ScriptAlias /cgi/ "/srv/opf/cgi/" diff --git a/conf/apache-2.4/sites-available/opff.conf b/conf/apache-2.4/sites-available/opff.conf index 9bc061fc1619c..8a020414eb380 100644 --- a/conf/apache-2.4/sites-available/opff.conf +++ b/conf/apache-2.4/sites-available/opff.conf @@ -26,8 +26,8 @@ Require all granted DocumentRoot /srv/opff/html ServerName openpetfoodfacts.org -ErrorLog /srv/opff/logs/error_log -CustomLog /srv/opff/logs/access_log combined +ErrorLog /srv/opff/logs/error_log_${APACHE2_PORT} +CustomLog /srv/opff/logs/access_log_${APACHE2_PORT} combined LogLevel warn ScriptAlias /cgi/ "/srv/opff/cgi/" diff --git a/conf/etc-default/prometheus-apache-exporter b/conf/etc-default/prometheus-apache-exporter index 40c4e38a79068..2428bb1d85dd3 100644 --- a/conf/etc-default/prometheus-apache-exporter +++ b/conf/etc-default/prometheus-apache-exporter @@ -1,5 +1,5 @@ # Set the command-line arguments to pass to the server. -ARGS='-scrape_uri http://127.0.0.1:8004/server-status/?auto' +ARGS='-scrape_uri http://127.0.0.1:8001/server-status/?auto' #Usage of prometheus-apache-exporter: # -host_override string diff --git a/conf/etc-default/prometheus-apache-priority-exporter b/conf/etc-default/prometheus-apache-priority-exporter new file mode 100644 index 0000000000000..d9d0471ca60a6 --- /dev/null +++ b/conf/etc-default/prometheus-apache-priority-exporter @@ -0,0 +1,16 @@ +# Set the command-line arguments to pass to the server. +# we use a different port than the standard exporter +ARGS='-telemetry.address :9118 -scrape_uri http://127.0.0.1:8002/server-status/?auto' + +#Usage of prometheus-apache-exporter: +# -host_override string +# Override for HTTP Host header; empty string for no override. +# -insecure +# Ignore server certificate if using https. +# -scrape_uri string +# URI to apache stub status page. (default +# "http://localhost/server-status/?auto") +# -telemetry.address string +# Address on which to expose metrics. (default ":9117") +# -telemetry.endpoint string +# Path under which to expose metrics. (default "/metrics") diff --git a/conf/nginx/sites-available/howmuchsugar b/conf/nginx/sites-available/howmuchsugar index e6c7c1645ea7c..991c474cf40cf 100644 --- a/conf/nginx/sites-available/howmuchsugar +++ b/conf/nginx/sites-available/howmuchsugar @@ -76,6 +76,6 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Site-Name $howmuchsugar_name; proxy_set_header X-Site-Lang $howmuchsugar_lang; - proxy_pass http://127.0.0.1:8004; + proxy_pass http://127.0.0.1:8001; } } diff --git a/conf/nginx/sites-available/obf b/conf/nginx/sites-available/obf index a4f2c577b680b..07df904f86041 100644 --- a/conf/nginx/sites-available/obf +++ b/conf/nginx/sites-available/obf @@ -126,7 +126,7 @@ server { access_log /var/log/nginx/proxy-obf-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-obf-error.log; - proxy_pass http://127.0.0.1:8002/cgi/display.pl?; + proxy_pass http://127.0.0.1:8001/cgi/display.pl?; } location /cgi/ { @@ -137,7 +137,7 @@ server { access_log /var/log/nginx/proxy-obf-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-obf-error.log; - proxy_pass http://127.0.0.1:8002; + proxy_pass http://127.0.0.1:8001; } } diff --git a/conf/nginx/sites-available/off b/conf/nginx/sites-available/off index b2fcfb3565f5f..42c70249b825e 100644 --- a/conf/nginx/sites-available/off +++ b/conf/nginx/sites-available/off @@ -13,6 +13,21 @@ server { } } +# map to decide if we go to the priority (8002) or standard service (8001) +map $uri $apache_port { + default 8001; + + # home pages + "~*^/$" 8002; + # product read / write (note that nginx does not support direct utf-8) + "~*^/(mountaj|m\xc9\x99hsul|\xd0\xbf\xd1\x80\xd0\xbe\xd0\xb4\xd1\x83\xd0\xba\xd1\x82|gynnyrch|produkt|product|product|product|produkto|producto|toode|produkto|produit|produto|term\xc3\xa9k|produk|\xe8\xa3\xbd\xe5\x93\x81|afaris|\xd3\xa9\xd0\xbd\xd1\x96\xd0\xbc|\xec\x83\x9d\xec\x84\xb1\xeb\xac\xbc|berhem|\xe0\xa4\x89\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xa8|produk|produkt|\xe0\xa4\x89\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xa8|product|product|product|produkt|produkt|produit|produto|produto|produto|\xd0\xbf\xd1\x80\xd0\xbe\xd0\xb4\xd1\x83\xd0\xba\xd1\x82|product|proizvod|produkto|\xc3\xbcr\xc3\xbcn|\xd0\xbf\xd1\x80\xd0\xbe\xd0\xb4\xd1\x83\xd0\xba\xd1\x82|\xe4\xba\xa7\xe5\x93\x81|\xe7\x94\xa2\xe5\x93\x81|\xe7\x94\xa2\xe5\x93\x81)/" 8002; + "~*^/cgi/product.pl" 8002; + # product API read / write + "~*^/api/v./product/" 8002; + # whitelist most cgi (but display and search) + "~*^/cgi/(?!display|search).pl" 8002; +} + # variables definitions for expiry headers are loaded from /etc/nginx/conf.d/expires-no-json-xml.conf server { @@ -147,8 +162,8 @@ server { real_ip_recursive on; access_log /var/log/nginx/proxy-off-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-off-error.log; - - proxy_pass http://127.0.0.1:8004/cgi/display.pl?; + # Note: as soon as we use a variable in proxy_pass, $uri and the rest must be explicit + proxy_pass http://127.0.0.1:$apache_port/cgi/display.pl?$uri$is_args$args; } location /cgi/ { @@ -158,8 +173,8 @@ server { real_ip_recursive on; access_log /var/log/nginx/proxy-off-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-off-error.log; - - proxy_pass http://127.0.0.1:8004; + # Note: as soon as we use a variable in proxy_pass, $uri and the rest must be explicit + proxy_pass http://127.0.0.1:$apache_port$uri$is_args$args; } } diff --git a/conf/nginx/sites-available/off-pro b/conf/nginx/sites-available/off-pro index 2d4bc0b3dba9c..4e46ea15e8737 100644 --- a/conf/nginx/sites-available/off-pro +++ b/conf/nginx/sites-available/off-pro @@ -94,7 +94,7 @@ server { access_log /var/log/nginx/proxy-off-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-off-error.log; - proxy_pass http://127.0.0.1:8014/cgi/display.pl?; + proxy_pass http://127.0.0.1:8001/cgi/display.pl?; } location /cgi/ { @@ -105,7 +105,7 @@ server { access_log /var/log/nginx/proxy-off-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-off-error.log; - proxy_pass http://127.0.0.1:8014; + proxy_pass http://127.0.0.1:8001; } } diff --git a/conf/nginx/sites-available/opf b/conf/nginx/sites-available/opf index 933ef77bce433..5e6e69ec7e595 100644 --- a/conf/nginx/sites-available/opf +++ b/conf/nginx/sites-available/opf @@ -125,7 +125,7 @@ server { access_log /var/log/nginx/proxy-opf-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-opf-error.log; - proxy_pass http://127.0.0.1:8003/cgi/display.pl?; + proxy_pass http://127.0.0.1:8001/cgi/display.pl?; } location /cgi/ { @@ -136,7 +136,7 @@ server { access_log /var/log/nginx/proxy-opf-access.log proxied_requests buffer=256K flush=1s; error_log /var/log/nginx/proxy-opf-error.log; - proxy_pass http://127.0.0.1:8003; + proxy_pass http://127.0.0.1:8001; } } diff --git a/conf/nginx/snippets/off.locations-redirects.include b/conf/nginx/snippets/off.locations-redirects.include index 35ba591b1f2de..123d5c80ce67e 100644 --- a/conf/nginx/snippets/off.locations-redirects.include +++ b/conf/nginx/snippets/off.locations-redirects.include @@ -4,6 +4,10 @@ location = /nutriscore-v2 { return 301 https://$host/new-nutriscore; } +location ~ ^/(greenscore|ecoscore|eco-score-l-impact-environnemental-des-produits-alimentaires|eco-score-the-environmental-impact-of-food-products)$ { + return 301 https://$host/green-score; +} + # Donations # 100 % translated: fr, bg, ca, zh, cs, da, nl, de, he, id, it, lt, pl, pt, ro, ru, es, tr, uk, vi # EN diff --git a/conf/off-priority-log.conf b/conf/off-priority-log.conf new file mode 100644 index 0000000000000..0dd4c1a822beb --- /dev/null +++ b/conf/off-priority-log.conf @@ -0,0 +1,36 @@ +log4perl.rootLogger=ERROR, LOGFILE +log4perl.logger.mongodb=INFO, MONGODB_LOGFILE +log4perl.logger.ratelimiter=INFO, RATELIMITER_LOGFILE +log4perl.logger.requeststats=INFO, REQUESTSTATS_LOGFILE + +log4perl.PatternLayout.cspec.S = sub { my $context = Log::Log4perl::MDC->get_context; use Data::Dumper (); local $Data::Dumper::Indent = 0; local $Data::Dumper::Terse = 1; local $Data::Dumper::Sortkeys = 1; local $Data::Dumper::Quotekeys = 0; local $Data::Dumper::Deparse = 1; my $str = Data::Dumper::Dumper($context); $str =~ s/[\n\r]/ /g; return $str; } +log4perl.PatternLayout.cspec.J = sub { my $context = Log::Log4perl::MDC->get_context; use JSON::MaybeXS; my $json_utf8 = JSON::MaybeXS->new->utf8(1)->allow_nonref->canonical; my $str = $json_utf8->encode($context); return $str; } + +log4perl.appender.LOGFILE=Log::Log4perl::Appender::File +log4perl.appender.LOGFILE.filename=/srv/off/logs/log4perl-2.log +log4perl.appender.LOGFILE.mode=append +# note: autoflush=0 results in multiple log entries being mixed (probably because there are several Apache processes writing to the same file) +log4perl.appender.LOGFILE.autoflush=1 +log4perl.appender.LOGFILE.layout=PatternLayout +log4perl.appender.LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n + +log4perl.appender.MONGODB_LOGFILE=Log::Log4perl::Appender::File +log4perl.appender.MONGODB_LOGFILE.filename=/srv/off/logs/mongodb_log4perl-2.log +log4perl.appender.MONGODB_LOGFILE.mode=append +log4perl.appender.MONGODB_LOGFILE.autoflush=1 +log4perl.appender.MONGODB_LOGFILE.layout=PatternLayout +log4perl.appender.MONGODB_LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n + +log4perl.appender.RATELIMITER_LOGFILE=Log::Log4perl::Appender::File +log4perl.appender.RATELIMITER_LOGFILE.filename=/srv/off/logs/ratelimiter_log4perl-2.log +log4perl.appender.RATELIMITER_LOGFILE.mode=append +log4perl.appender.RATELIMITER_LOGFILE.autoflush=1 +log4perl.appender.RATELIMITER_LOGFILE.layout=PatternLayout +log4perl.appender.RATELIMITER_LOGFILE.layout.ConversionPattern=[%d] %F %L %c %S %m{chomp}%n + +log4perl.appender.REQUESTSTATS_LOGFILE=Log::Log4perl::Appender::File +log4perl.appender.REQUESTSTATS_LOGFILE.filename=/srv/off/logs/requeststats_log4perl-2.log +log4perl.appender.REQUESTSTATS_LOGFILE.mode=append +log4perl.appender.REQUESTSTATS_LOGFILE.autoflush=1 +log4perl.appender.REQUESTSTATS_LOGFILE.layout=PatternLayout +log4perl.appender.REQUESTSTATS_LOGFILE.layout.ConversionPattern=%J %n diff --git a/conf/systemd/apache2.service.d/override.conf b/conf/systemd/apache2.service.d/override.conf index 1df951a9b21a4..99bd3e5d8df02 100644 --- a/conf/systemd/apache2.service.d/override.conf +++ b/conf/systemd/apache2.service.d/override.conf @@ -1,5 +1,5 @@ [Unit] -OnFailure=email-failures@apache2-%l.service +OnFailure=email-failures@apache2.service # we need time to reboot apache because we load a lot of things… JobTimeoutSec=600 JobRunningTimeoutSec=600 @@ -7,6 +7,8 @@ JobRunningTimeoutSec=600 [Service] # Apache needs some environment variables like PRODUCT_OPENER_FLAVOR_SHORT # %l is the short host name (e.g. off, obf, off-pro) +# NOTE: if the hostname does not match the instance type, +# there might be a specific directory for env matching the hostname EnvironmentFile=/srv/%l/env/env.%l TimeoutStartSec=600 Restart=always diff --git a/conf/systemd/apache2@.service.d/override.conf b/conf/systemd/apache2@.service.d/override.conf new file mode 100644 index 0000000000000..2be79a89cdae1 --- /dev/null +++ b/conf/systemd/apache2@.service.d/override.conf @@ -0,0 +1,15 @@ +[Unit] +OnFailure=email-failures@apache2-%i.service +# we need time to reboot apache because we load a lot of things… +JobTimeoutSec=600 +JobRunningTimeoutSec=600 + +[Service] +# Apache needs some environment variables like PRODUCT_OPENER_FLAVOR_SHORT +# %l is the short host name (e.g. off, obf, off-pro) +# NOTE: if the hostname does not match the instance type, +# there might be a specific directory for env matching the hostname +EnvironmentFile=/srv/%l/env/env.%l + +TimeoutStartSec=600 +Restart=always diff --git a/conf/systemd/nginx.service.d/override.conf b/conf/systemd/nginx.service.d/override.conf index c26e5bd57aa79..668dc02308138 100644 --- a/conf/systemd/nginx.service.d/override.conf +++ b/conf/systemd/nginx.service.d/override.conf @@ -1,7 +1,7 @@ +[Unit] +OnFailure=email-failures@nginx.service + [Service] # let nginx decide on that LimitNOFILE=65535 - -[Unit] -OnFailure=email-failures@nginx.service Restart=always diff --git a/conf/systemd/prometheus-apache-exporter@.service b/conf/systemd/prometheus-apache-exporter@.service new file mode 100644 index 0000000000000..5331d067262ec --- /dev/null +++ b/conf/systemd/prometheus-apache-exporter@.service @@ -0,0 +1,13 @@ +[Unit] +Description=Prometheus exporter for Apache %i +Documentation=https://github.com/Lusitaniae/apache_exporter/ + +[Service] +Restart=on-failure +User=prometheus +# ARGS are define in environment file +EnvironmentFile=/etc/default/prometheus-apache-%i-exporter +ExecStart=/usr/bin/prometheus-apache-exporter $ARGS + +[Install] +WantedBy=multi-user.target diff --git a/conf/well-known/off-apple-developer-merchantid-domain-association b/conf/well-known/off-apple-developer-merchantid-domain-association index 2ff95c962810a..6bbc10cd2e635 100644 --- a/conf/well-known/off-apple-developer-merchantid-domain-association +++ b/conf/well-known/off-apple-developer-merchantid-domain-association @@ -1 +1 @@ -7B227073704964223A2239373943394538343346343131343044463144313834343232393232313734313034353044314339464446394437384337313531303944334643463542433731222C2276657273696F6E223A312C22637265617465644F6E223A313536363233343735303036312C227369676E6174757265223A22333038303036303932613836343838366637306430313037303261303830333038303032303130313331306633303064303630393630383634383031363530333034303230313035303033303830303630393261383634383836663730643031303730313030303061303830333038323033653333303832303338386130303330323031303230323038346333303431343935313964353433363330306130363038326138363438636533643034303330323330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333031653137306433313339333033353331333833303331333333323335333735613137306433323334333033353331333633303331333333323335333735613330356633313235333032333036303335353034303330633163363536333633326437333664373032643632373236663662363537323264373336393637366535663535343333343264353035323466343433313134333031323036303335353034306230633062363934663533323035333739373337343635366437333331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333035393330313330363037326138363438636533643032303130363038326138363438636533643033303130373033343230303034633231353737656465626436633762323231386636386464373039306131323138646337623062643666326332383364383436303935643934616634613534313162383334323065643831316633343037653833333331663163353463336637656233323230643662616435643465666634393238393839336537633066313361333832303231313330383230323064333030633036303335353164313330313031666630343032333030303330316630363033353531643233303431383330313638303134323366323439633434663933653465663237653663346636323836633366613262626664326534623330343530363038326230363031303530353037303130313034333933303337333033353036303832623036303130353035303733303031383632393638373437343730336132663266366636333733373032653631373037303663363532653633366636643266366636333733373033303334326436313730373036633635363136393633363133333330333233303832303131643036303335353164323030343832303131343330383230313130333038323031306330363039326138363438383666373633363430353031333038316665333038316333303630383262303630313035303530373032303233303831623630633831623335323635366336393631366536333635323036663665323037343638363937333230363336353732373436393636363936333631373436353230363237393230363136653739323037303631373237343739323036313733373337353664363537333230363136333633363537303734363136653633363532303666363632303734363836353230373436383635366532303631373037303663363936333631363236633635323037333734363136653634363137323634323037343635373236643733323036313665363432303633366636653634363937343639366636653733323036663636323037353733363532633230363336353732373436393636363936333631373436353230373036663663363936333739323036313665363432303633363537323734363936363639363336313734363936663665323037303732363136333734363936333635323037333734363137343635366436353665373437333265333033363036303832623036303130353035303730323031313632613638373437343730336132663266373737373737326536313730373036633635326536333666366432663633363537323734363936363639363336313734363536313735373436383666373236393734373932663330333430363033353531643166303432643330326233303239613032376130323538363233363837343734373033613266326636333732366332653631373037303663363532653633366636643266363137303730366336353631363936333631333332653633373236633330316430363033353531643065303431363034313439343537646236666435373438313836383938393736326637653537383530376537396235383234333030653036303335353164306630313031666630343034303330323037383033303066303630393261383634383836663736333634303631643034303230353030333030613036303832613836343863653364303430333032303334393030333034363032323130306265303935373166653731653165373335623535653561666163623463373266656234343566333031383532323263373235313030326236316562643666353530323231303064313862333530613564643664643665623137343630333562313165623263653837636661336536616636636264383338303839306463383263646461613633333038323032656533303832303237356130303330323031303230323038343936643266626633613938646139373330306130363038326138363438636533643034303330323330363733313162333031393036303335353034303330633132343137303730366336353230353236663666373432303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330316531373064333133343330333533303336333233333334333633333330356131373064333233393330333533303336333233333334333633333330356133303761333132653330326330363033353530343033306332353431373037303663363532303431373037303663363936333631373436393666366532303439366537343635363737323631373436393666366532303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330353933303133303630373261383634386365336430323031303630383261383634386365336430333031303730333432303030346630313731313834313964373634383564353161356532353831303737366538383061326566646537626165346465303864666334623933653133333536643536363562333561653232643039373736306432323465376262613038666437363137636538386362373662623636373062656338653832393834666635343435613338316637333038316634333034363036303832623036303130353035303730313031303433613330333833303336303630383262303630313035303530373330303138363261363837343734373033613266326636663633373337303265363137303730366336353265363336663664326636663633373337303330333432643631373037303663363537323666366637343633363136373333333031643036303335353164306530343136303431343233663234396334346639336534656632376536633466363238366333666132626266643265346233303066303630333535316431333031303166663034303533303033303130316666333031663036303335353164323330343138333031363830313462626230646561313538333338383961613438613939646562656264656261666461636232346162333033373036303335353164316630343330333032653330326361303261613032383836323636383734373437303361326632663633373236633265363137303730366336353265363336663664326636313730373036633635373236663666373436333631363733333265363337323663333030653036303335353164306630313031666630343034303330323031303633303130303630613261383634383836663736333634303630323065303430323035303033303061303630383261383634386365336430343033303230333637303033303634303233303361636637323833353131363939623138366662333563333536636136326266663431376564643930663735346461323865626566313963383135653432623738396638393866373962353939663938643534313064386639646539633266653032333033323264643534343231623061333035373736633564663333383362393036376664313737633263323136643936346663363732363938323132366635346638376137643162393963623962303938393231363130363939306630393932316430303030333138323031386233303832303138373032303130313330383138363330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533303230383463333034313439353139643534333633303064303630393630383634383031363530333034303230313035303061303831393533303138303630393261383634383836663730643031303930333331306230363039326138363438383666373064303130373031333031633036303932613836343838366637306430313039303533313066313730643331333933303338333133393331333733313332333333303561333032613036303932613836343838366637306430313039333433313164333031623330306430363039363038363438303136353033303430323031303530306131306130363038326138363438636533643034303330323330326630363039326138363438383666373064303130393034333132323034323062303731303365313430613462386231376262613230316130336163643036396234653431366232613263383066383661383338313435633239373566633131333030613036303832613836343863653364303430333032303434363330343430323230343639306264636637626461663833636466343934396534633035313039656463663334373665303564373261313264376335666538633033303033343464663032323032363764353863393365626233353031333836363062353730373938613064643731313734316262353864626436613138363633353038353431656565393035303030303030303030303030227D \ No newline at end of file +7B227073704964223A2239373943394538343346343131343044463144313834343232393232313734313034353044314339464446394437384337313531303944334643463542433731222C2276657273696F6E223A312C22637265617465644F6E223A313536363233343735303036312C227369676E6174757265223A22333038303036303932613836343838366637306430313037303261303830333038303032303130313331306633303064303630393630383634383031363530333034303230313035303033303830303630393261383634383836663730643031303730313030303061303830333038323033653333303832303338386130303330323031303230323038346333303431343935313964353433363330306130363038326138363438636533643034303330323330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333031653137306433313339333033353331333833303331333333323335333735613137306433323334333033353331333633303331333333323335333735613330356633313235333032333036303335353034303330633163363536333633326437333664373032643632373236663662363537323264373336393637366535663535343333343264353035323466343433313134333031323036303335353034306230633062363934663533323035333739373337343635366437333331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333035393330313330363037326138363438636533643032303130363038326138363438636533643033303130373033343230303034633231353737656465626436633762323231386636386464373039306131323138646337623062643666326332383364383436303935643934616634613534313162383334323065643831316633343037653833333331663163353463336637656233323230643662616435643465666634393238393839336537633066313361333832303231313330383230323064333030633036303335353164313330313031666630343032333030303330316630363033353531643233303431383330313638303134323366323439633434663933653465663237653663346636323836633366613262626664326534623330343530363038326230363031303530353037303130313034333933303337333033353036303832623036303130353035303733303031383632393638373437343730336132663266366636333733373032653631373037303663363532653633366636643266366636333733373033303334326436313730373036633635363136393633363133333330333233303832303131643036303335353164323030343832303131343330383230313130333038323031306330363039326138363438383666373633363430353031333038316665333038316333303630383262303630313035303530373032303233303831623630633831623335323635366336393631366536333635323036663665323037343638363937333230363336353732373436393636363936333631373436353230363237393230363136653739323037303631373237343739323036313733373337353664363537333230363136333633363537303734363136653633363532303666363632303734363836353230373436383635366532303631373037303663363936333631363236633635323037333734363136653634363137323634323037343635373236643733323036313665363432303633366636653634363937343639366636653733323036663636323037353733363532633230363336353732373436393636363936333631373436353230373036663663363936333739323036313665363432303633363537323734363936363639363336313734363936663665323037303732363136333734363936333635323037333734363137343635366436353665373437333265333033363036303832623036303130353035303730323031313632613638373437343730336132663266373737373737326536313730373036633635326536333666366432663633363537323734363936363639363336313734363536313735373436383666373236393734373932663330333430363033353531643166303432643330326233303239613032376130323538363233363837343734373033613266326636333732366332653631373037303663363532653633366636643266363137303730366336353631363936333631333332653633373236633330316430363033353531643065303431363034313439343537646236666435373438313836383938393736326637653537383530376537396235383234333030653036303335353164306630313031666630343034303330323037383033303066303630393261383634383836663736333634303631643034303230353030333030613036303832613836343863653364303430333032303334393030333034363032323130306265303935373166653731653165373335623535653561666163623463373266656234343566333031383532323263373235313030326236316562643666353530323231303064313862333530613564643664643665623137343630333562313165623263653837636661336536616636636264383338303839306463383263646461613633333038323032656533303832303237356130303330323031303230323038343936643266626633613938646139373330306130363038326138363438636533643034303330323330363733313162333031393036303335353034303330633132343137303730366336353230353236663666373432303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330316531373064333133343330333533303336333233333334333633333330356131373064333233393330333533303336333233333334333633333330356133303761333132653330326330363033353530343033306332353431373037303663363532303431373037303663363936333631373436393666366532303439366537343635363737323631373436393666366532303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330353933303133303630373261383634386365336430323031303630383261383634386365336430333031303730333432303030346630313731313834313964373634383564353161356532353831303737366538383061326566646537626165346465303864666334623933653133333536643536363562333561653232643039373736306432323465376262613038666437363137636538386362373662623636373062656338653832393834666635343435613338316637333038316634333034363036303832623036303130353035303730313031303433613330333833303336303630383262303630313035303530373330303138363261363837343734373033613266326636663633373337303265363137303730366336353265363336663664326636663633373337303330333432643631373037303663363537323666366637343633363136373333333031643036303335353164306530343136303431343233663234396334346639336534656632376536633466363238366333666132626266643265346233303066303630333535316431333031303166663034303533303033303130316666333031663036303335353164323330343138333031363830313462626230646561313538333338383961613438613939646562656264656261666461636232346162333033373036303335353164316630343330333032653330326361303261613032383836323636383734373437303361326632663633373236633265363137303730366336353265363336663664326636313730373036633635373236663666373436333631363733333265363337323663333030653036303335353164306630313031666630343034303330323031303633303130303630613261383634383836663736333634303630323065303430323035303033303061303630383261383634386365336430343033303230333637303033303634303233303361636637323833353131363939623138366662333563333536636136326266663431376564643930663735346461323865626566313963383135653432623738396638393866373962353939663938643534313064386639646539633266653032333033323264643534343231623061333035373736633564663333383362393036376664313737633263323136643936346663363732363938323132366635346638376137643162393963623962303938393231363130363939306630393932316430303030333138323031386233303832303138373032303130313330383138363330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533303230383463333034313439353139643534333633303064303630393630383634383031363530333034303230313035303061303831393533303138303630393261383634383836663730643031303930333331306230363039326138363438383666373064303130373031333031633036303932613836343838366637306430313039303533313066313730643331333933303338333133393331333733313332333333303561333032613036303932613836343838366637306430313039333433313164333031623330306430363039363038363438303136353033303430323031303530306131306130363038326138363438636533643034303330323330326630363039326138363438383666373064303130393034333132323034323062303731303365313430613462386231376262613230316130336163643036396234653431366232613263383066383661383338313435633239373566633131333030613036303832613836343863653364303430333032303434363330343430323230343639306264636637626461663833636466343934396534633035313039656463663334373665303564373261313264376335666538633033303033343464663032323032363764353863393365626233353031333836363062353730373938613064643731313734316262353864626436613138363633353038353431656565393035303030303030303030303030227D diff --git a/docs/dev/how-to-deploy.md b/docs/dev/how-to-deploy.md deleted file mode 100644 index 503e8ad4c33d0..0000000000000 --- a/docs/dev/how-to-deploy.md +++ /dev/null @@ -1,22 +0,0 @@ -# How to deploy to Prod environment - -Note: prod deployment is very manual and not automated yet. - -- Login to the off1 server, as the "off" user -- cd /home/off/openfoodfacts-server -- Check that you are on the main branch -- git pull -- Copy changed files (don't copy everything, in particular not the lang directory that is being moved to the openfoodfacts-web repository) -- e.g. cp cgi scripts lib po taxonomies templates /srv/off/ -- cd /srv/off -- export NPM_CONFIG_PREFIX=~/.npm-global -- npm install -- npm run build -- cd /srv/off/cgi -- export PERL5LIB=. -- ./build_lang.pl -- as the root user: -- systemctl stop apache2@off -- systemctl start apache2@off -- systemctl stop minion-off -- systemctl start minion-off diff --git a/docs/dev/how-to-release.md b/docs/dev/how-to-release.md new file mode 100644 index 0000000000000..ecd4a7a403c74 --- /dev/null +++ b/docs/dev/how-to-release.md @@ -0,0 +1,63 @@ +# How to release + +## Staging environment + +This is automatically done by the CI of github, +see `.github/workflows/container-build.yml`. + +The deployment uses docker compose with specific environments variables +and the `docker/prod.yml` overlay. + +As soon as you merge a pull request in the `main` branch, +the action is triggered. You can see it at +https://github.com/openfoodfacts/openfoodfacts-server/actions/workflows/container-build.yml + +## Production environment + +Product Opener is deployed on a container in Proxmox. +The container is a debian server, it must follow the `backend` container version. + +In the command lines, I use $SERVICE and $VERSION variables, +corresponding to the service short name (off, opf, etc.) and the version tag. + +To deploy you need to execute the following steps: +1. merge the Release Please pull request. + This will create a new release / version tag on github +1. verify there is no unreleased code on the server: + ```bash + sudo -u off bash + cd /srv/$SERVICE + git status + ``` +1. update the code: + ```bash + sudo -u off bash + cd /srv/$SERVICE + git fetch + git checkout $VERSION + ``` +1. verify every needed symlink is in place + ```bash + sudo /srv/$SERVICE/scripts/deploy/verify-deployment.sh $SERVICE + ``` +1. rebuild taxonomies and lang + ```bash + sudo -u off bash + cd /srv/$SERVICE + source env/setenv.sh $SERVICE + ./scripts/taxonomies/build_tags_taxonomy.pl + ./scripts/build_lang.pl + ``` +1. update the frontend assets you just downloaded + ```bash + sudo -u off /srv/$SERVICE/scripts/deploy/install-dist-files.sh $VERSION $SERVICE + ``` +1. restart services + ```bash + sudo systemctl daemon-reload + sudo systemctl restart nginx + sudo systemctl stop apache2 cloud_vision_ocr@$SERVICE.service minion@$SERVICE.service; \ + sudo systemctl start apache2 cloud_vision_ocr@$SERVICE.service minion@$SERVICE.service + # On off + sudo systemctl stop apache2@priority; sudo systemctl start apache2@priority + ``` diff --git a/env/env.obf b/env/env.obf index 4e43a8e03ecb5..02601ccc0648d 100644 --- a/env/env.obf +++ b/env/env.obf @@ -1,8 +1,13 @@ # NOTE: this is an addition to .env file, not a standalone file ! # It should be loaded with: source env/setenv.sh +# docker compose configuration COMPOSE_PROJECT_NAME=po_obf +# containers specific configurations +APACHE_ENVVARS=/etc/apache2/off-envvars + +# app configuration PRODUCT_OPENER_FLAVOR=openbeautyfacts PRODUCT_OPENER_FLAVOR_SHORT=obf ROBOTOFF_URL=https://robotoff.openfoodfacts.org diff --git a/env/env.off b/env/env.off index 049c5d157cb45..554bfd445b76a 100644 --- a/env/env.off +++ b/env/env.off @@ -1,8 +1,13 @@ # NOTE: this is an addition to .env file, not a standalone file ! # It should be loaded with: source env/setenv.sh +# docker compose configuration COMPOSE_PROJECT_NAME=po_off +# containers specific configurations +APACHE_ENVVARS=/etc/apache2/off-envvars + +# app configuration PRODUCT_OPENER_FLAVOR=openfoodfacts PRODUCT_OPENER_FLAVOR_SHORT=off diff --git a/env/env.opf b/env/env.opf index 679340860fb0d..be138d740ba64 100644 --- a/env/env.opf +++ b/env/env.opf @@ -1,9 +1,13 @@ # NOTE: this is an addition to .env file, not a standalone file ! # It should be loaded with: source env/setenv.sh +# docker compose configuration COMPOSE_PROJECT_NAME=po_opf +# containers specific configurations +APACHE_ENVVARS=/etc/apache2/off-envvars + +# app configuration PRODUCT_OPENER_FLAVOR=openproductfacts PRODUCT_OPENER_FLAVOR_SHORT=opf - NUTRIPATROL_URL=https://nutripatrol.openfoodfacts.org/ \ No newline at end of file diff --git a/env/env.opff b/env/env.opff index a4da1805e07e8..ddf14b03b5de9 100644 --- a/env/env.opff +++ b/env/env.opff @@ -1,9 +1,14 @@ # NOTE: this is an addition to .env file, not a standalone file ! # It should be loaded with: source env/setenv.sh +# docker compose configuration COMPOSE_PROJECT_NAME=po_opff + +# containers specific configurations +APACHE_ENVVARS=/etc/apache2/off-envvars + +# app configuration PRODUCT_OPENER_FLAVOR=openpetfoodfacts PRODUCT_OPENER_FLAVOR_SHORT=opff - NUTRIPATROL_URL=https://nutripatrol.openfoodfacts.org/ \ No newline at end of file diff --git a/env/setenv.sh b/env/setenv.sh index 07d07b9eb1a8e..7afe4068d0cd8 100755 --- a/env/setenv.sh +++ b/env/setenv.sh @@ -28,11 +28,17 @@ MINION_QUEUE= # Load environment variables from env file source env/env.$1 -# Set a variable that we use in Makefile to add an extra env file +# Set a variable that we use in Makefile to add an extra env file # in addition to .env when we run docker compose EXTRA_ENV_FILE=env/env.$1 LOAD_EXTRA_ENV_FILE=--env-file=env/env.$1 +# eventually add lib for prod environment +if [[ -d /srv/$1/lib ]] +then + PERL5LIB=/srv/$1/lib +fi + set +o allexport # add (env) to the prompt diff --git a/gulpfile.ts b/gulpfile.ts index 1c88db077d73a..eb770251f5a7d 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -3,6 +3,7 @@ import { init, write } from "gulp-sourcemaps"; import concat from "gulp-concat"; import gulpSass from "gulp-sass"; +import gzip from "gulp-gzip"; import minifyCSS from "gulp-csso"; import sassLib from "sass"; import svgmin from "gulp-svgmin"; @@ -23,8 +24,10 @@ const sassSrc = "./scss/**/*.scss"; const imagesSrc = ["./node_modules/leaflet/dist/**/*.png"]; +// nginx needs both uncompressed and compressed files as we use try_files with gzip_static always & gunzip + export function icons() { - return src("*.svg", { cwd: "./icons" }). + const processed = src("*.svg", { cwd: "./icons" }). pipe( svgmin({ // @ts-ignore @@ -32,18 +35,30 @@ export function icons() { }) ). pipe(dest("./html/images/icons/dist")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/images/icons/dist")); + + return processed && compressed; } export function attributesIcons() { - return src("*.svg", { cwd: "./html/images/attributes/src" }). + const processed = src("*.svg", { cwd: "./html/images/attributes/src" }). pipe(svgmin()). pipe(dest("./html/images/attributes/dist")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/images/attributes/dist")); + + return processed && compressed; } export function css() { console.log("(re)building css"); - return src(sassSrc). + const processed = src(sassSrc). pipe(init()). pipe( sass({ @@ -55,10 +70,16 @@ export function css() { pipe(minifyCSS()). pipe(write(".")). pipe(dest("./html/css/dist")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/css/dist")); + + return processed && compressed; } export function copyJs() { - return src([ + const processed = src([ "./node_modules/@webcomponents/**/webcomponentsjs/**/*.js", "./node_modules/foundation-sites/js/vendor/*.js", "./node_modules/foundation-sites/js/foundation.js", @@ -84,20 +105,32 @@ export function copyJs() { pipe(terser()). pipe(write(".")). pipe(dest("./html/js/dist")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/js/dist")); + + return processed && compressed; } export function buildJs() { console.log("(re)building js"); - return src(jsSrc). + const processed = src(jsSrc). pipe(init()). pipe(terser()). pipe(write(".")). pipe(dest("./html/js/dist")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/js/dist")); + + return processed && compressed; } function buildjQueryUi() { - return src([ + const processed = src([ "./node_modules/jquery-ui/ui/jquery-patch.js", "./node_modules/jquery-ui/ui/version.js", "./node_modules/jquery-ui/ui/widget.js", @@ -113,10 +146,16 @@ function buildjQueryUi() { pipe(concat("jquery-ui.js")). pipe(write(".")). pipe(dest("./html/js/dist")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/js/dist")); + + return processed && compressed; } function jQueryUiThemes() { - return src([ + const processed = src([ "./node_modules/jquery-ui/themes/base/core.css", "./node_modules/jquery-ui/themes/base/autocomplete.css", "./node_modules/jquery-ui/themes/base/menu.css", @@ -127,10 +166,16 @@ function jQueryUiThemes() { pipe(concat("jquery-ui.css")). pipe(write(".")). pipe(dest("./html/css/dist/jqueryui/themes/base")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/css/dist/jqueryui/themes/base")); + + return processed && compressed; } function copyCss() { - return src([ + const processed = src([ "./node_modules/leaflet/dist/leaflet.css", "./node_modules/leaflet.markercluster/dist/MarkerCluster.css", "./node_modules/leaflet.markercluster/dist/MarkerCluster.Default.css", @@ -142,6 +187,12 @@ function copyCss() { pipe(minifyCSS()). pipe(write(".")). pipe(dest("./html/css/dist")); + + const compressed = processed. + pipe(gzip()). + pipe(dest("./html/css/dist")); + + return processed && compressed; } function copyImages() { diff --git a/html/donate/aa.html b/html/donate/aa.html index f14758c86eb66..11c15b7459a3c 100644 --- a/html/donate/aa.html +++ b/html/donate/aa.html @@ -12,7 +12,7 @@
-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ach.html b/html/donate/ach.html index 5b8944d5e31c5..aeaed3967b13c 100644 --- a/html/donate/ach.html +++ b/html/donate/ach.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/af.html b/html/donate/af.html index 9c2459dfa510d..4645d8c413112 100644 --- a/html/donate/af.html +++ b/html/donate/af.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ak.html b/html/donate/ak.html index 66bb12f686c52..8de6c0d07d6c2 100644 --- a/html/donate/ak.html +++ b/html/donate/ak.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/am.html b/html/donate/am.html index 990cd1d6d9f87..d6fa9b7f4d53d 100644 --- a/html/donate/am.html +++ b/html/donate/am.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ar.html b/html/donate/ar.html index ff5db88d564da..674262eebbccb 100644 --- a/html/donate/ar.html +++ b/html/donate/ar.html @@ -12,7 +12,7 @@

-

ساعدنا في تمويل ميزانية 2024!

+

ساعدنا في تمويل ميزانية 2025!

Open Food Facts مجاني بنسبة 100٪ ومستقل عن صناعة المواد الغذائية. نحن بحاجة إلى مساعدتك للاستمرار في المشروع وتنميته. @@ -149,7 +149,7 @@

ساعدنا في تمويل ميزانية 2024!

>
-

ساعدنا في تمويل ميزانية Open Food Facts لعام 2024!

+

ساعدنا في تمويل ميزانية Open Food Facts لعام 2025!

Open Food Facts مجاني بنسبة 100٪ ومستقل عن صناعة المواد الغذائية. نحن بحاجة إلى مساعدتك للاستمرار في المشروع وتنميته. diff --git a/html/donate/as.html b/html/donate/as.html index 24022762c788e..89cd189c2dde6 100644 --- a/html/donate/as.html +++ b/html/donate/as.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ast.html b/html/donate/ast.html index 283e306f9ee0f..794ca8f81f2cd 100644 --- a/html/donate/ast.html +++ b/html/donate/ast.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/az.html b/html/donate/az.html index 8200d2ce08150..d687bdb0a3072 100644 --- a/html/donate/az.html +++ b/html/donate/az.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/be.html b/html/donate/be.html index b7279b11e0682..eb5766c221055 100644 --- a/html/donate/be.html +++ b/html/donate/be.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ber.html b/html/donate/ber.html index ffd6f913eb505..4a2a1ea3db059 100644 --- a/html/donate/ber.html +++ b/html/donate/ber.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/bg.html b/html/donate/bg.html index ad63f05436a27..def2d624bf970 100644 --- a/html/donate/bg.html +++ b/html/donate/bg.html @@ -12,7 +12,7 @@

-

Помогнете ни да финансираме бюджета за 2024г!

+

Помогнете ни да финансираме бюджета за 2025г!

Open Food Facts е 100% безплатен и независим от хранителната индустрия. Нуждаем се от твоята помощ, за да продължим и да развиваме проекта. @@ -149,7 +149,7 @@

Помогнете ни да финансираме бюджета за 2024 >
-

Помогнете ни да финансираме бюджета на Open Food Facts за 2024г!

+

Помогнете ни да финансираме бюджета на Open Food Facts за 2025г!

Open Food Facts е 100% безплатен и независим от хранителната индустрия. Нуждаем се от твоята помощ, за да продължим и да развиваме проекта. diff --git a/html/donate/bm.html b/html/donate/bm.html index d5bb9ec18c122..cc8b138f7a874 100644 --- a/html/donate/bm.html +++ b/html/donate/bm.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/bn.html b/html/donate/bn.html index 27a4c13eb9dbb..442da4c0b19e6 100644 --- a/html/donate/bn.html +++ b/html/donate/bn.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/bo.html b/html/donate/bo.html index 0be6614f8c1b3..c49cfed67ff61 100644 --- a/html/donate/bo.html +++ b/html/donate/bo.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/br.html b/html/donate/br.html index 097950e4d09f7..7dbb567e55050 100644 --- a/html/donate/br.html +++ b/html/donate/br.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/bs.html b/html/donate/bs.html index 9a6a69f88f878..14cb5f296d268 100644 --- a/html/donate/bs.html +++ b/html/donate/bs.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ca.html b/html/donate/ca.html index 7fef157f7c083..c6ebabf75dd28 100644 --- a/html/donate/ca.html +++ b/html/donate/ca.html @@ -12,7 +12,7 @@

-

Ajudeu-nos a finançar el pressupost 2024!

+

Ajudeu-nos a finançar el pressupost 2025!

Open Food Facts és totalment independent de la indústria alimentària. Necessitem el vostre suport per continuar i fer créixer el projecte. @@ -149,7 +149,7 @@

Ajudeu-nos a finançar el pressupost 2024!

>
-

Ajudeu-nos a finançar el pressupost d'Open Food Facts 2024!

+

Ajudeu-nos a finançar el pressupost d'Open Food Facts 2025!

Open Food Facts és totalment independent de la indústria alimentària. Necessitem el vostre suport per continuar i fer créixer el projecte. diff --git a/html/donate/ce.html b/html/donate/ce.html index b3dad9d450a67..c2689d42325fe 100644 --- a/html/donate/ce.html +++ b/html/donate/ce.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/chr.html b/html/donate/chr.html index aade2156b4e35..f4160e5bad41d 100644 --- a/html/donate/chr.html +++ b/html/donate/chr.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/co.html b/html/donate/co.html index fa28dceee71fc..c5569c4d5ec21 100644 --- a/html/donate/co.html +++ b/html/donate/co.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/crs.html b/html/donate/crs.html index 1b4c679d19d1a..726e9f16cec61 100644 --- a/html/donate/crs.html +++ b/html/donate/crs.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/cs.html b/html/donate/cs.html index 5590582e0660d..e569e66144269 100644 --- a/html/donate/cs.html +++ b/html/donate/cs.html @@ -12,7 +12,7 @@

-

Pomozte nám financovat rozpočet na rok 2024!

+

Pomozte nám financovat rozpočet na rok 2025!

Open Food Facts je 100% bezplatná a nezávislá na potravinářském průmyslu. Potřebujeme vaši pomoc, abychom mohli pokračovat a rozvíjet projekt. @@ -149,7 +149,7 @@

Pomozte nám financovat rozpočet na rok 2024!

>
-

Pomozte nám financovat rozpočet Open Food Facts 2024!

+

Pomozte nám financovat rozpočet Open Food Facts 2025!

Open Food Facts je 100% bezplatná a nezávislá na potravinářském průmyslu. Potřebujeme vaši pomoc, abychom mohli pokračovat a rozvíjet projekt. diff --git a/html/donate/cv.html b/html/donate/cv.html index 2b1ff5fd9bd9f..7f4a1f5b39d80 100644 --- a/html/donate/cv.html +++ b/html/donate/cv.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/cy.html b/html/donate/cy.html index 0727063d35461..42e82fc069496 100644 --- a/html/donate/cy.html +++ b/html/donate/cy.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/da.html b/html/donate/da.html index d7263d563d1bc..d2a46957ce1f6 100644 --- a/html/donate/da.html +++ b/html/donate/da.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts er 100% gratis og uafhængigt af fødevareindustrien. Vi behøver din hjælp til at fortsætte og ekspandere projektet. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts er 100% gratis og uafhængigt af fødevareindustrien. Vi behøver din hjælp til at fortsætte og ekspandere projektet. diff --git a/html/donate/de.html b/html/donate/de.html index 29f99d10d0be9..8c83b8a84ebc0 100644 --- a/html/donate/de.html +++ b/html/donate/de.html @@ -12,7 +12,7 @@

-

Helfen Sie uns, den Haushalt für das Jahr 2024 zu finanzieren!

+

Helfen Sie uns, den Haushalt für das Jahr 2025 zu finanzieren!

Open Food Facts ist 100% kostenlos und unabhängig von der Lebensmittelindustrie. Wir brauchen Ihre Hilfe, um das Projekt weiterzuführen und zu erweitern. @@ -149,7 +149,7 @@

Helfen Sie uns, den Haushalt für das Jahr 2024 zu finanzieren!

>
-

Helfen Sie uns bei der Finanzierung des Open Food Facts 2024 Budgets!

+

Helfen Sie uns bei der Finanzierung des Open Food Facts 2025 Budgets!

Open Food Facts ist 100% kostenlos und unabhängig von der Lebensmittelindustrie. Wir brauchen Ihre Hilfe, um das Projekt weiterzuführen und zu erweitern. diff --git a/html/donate/el.html b/html/donate/el.html index aa45c981ca80f..bb218da4ea474 100644 --- a/html/donate/el.html +++ b/html/donate/el.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Το Open Food Facts είναι 100% ελεύθερο και ανεξάρτητο από τη βιομηχανία τροφίμων. Χρειαζόμαστε τη βοήθειά σας για να συνεχίσουμε και να αναπτύξουμε αυτό το project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Το Open Food Facts είναι 100% ελεύθερο και ανεξάρτητο από τη βιομηχανία τροφίμων. Χρειαζόμαστε τη βοήθειά σας για να συνεχίσουμε και να αναπτύξουμε αυτό το project. diff --git a/html/donate/en.html b/html/donate/en.html index 436fec89511c0..bf5336ac0dfe1 100644 --- a/html/donate/en.html +++ b/html/donate/en.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/en_AU.html b/html/donate/en_AU.html index 436fec89511c0..bf5336ac0dfe1 100644 --- a/html/donate/en_AU.html +++ b/html/donate/en_AU.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/en_GB.html b/html/donate/en_GB.html index 436fec89511c0..bf5336ac0dfe1 100644 --- a/html/donate/en_GB.html +++ b/html/donate/en_GB.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/eo.html b/html/donate/eo.html index be647d74c4805..4d41ffb0da26b 100644 --- a/html/donate/eo.html +++ b/html/donate/eo.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/es.html b/html/donate/es.html index bcf12166223ca..1ba05324bce3d 100644 --- a/html/donate/es.html +++ b/html/donate/es.html @@ -12,7 +12,7 @@

-

¡Ayúdanos con la financiación del presupuesto de 2024!

+

¡Ayúdanos con la financiación del presupuesto de 2025!

Open Food Facts es 100 % gratuito e independiente de la industria alimentaria. Necesitamos tu ayuda para continuar con el proyecto y hacer que crezca. @@ -149,7 +149,7 @@

¡Ayúdanos con la financiación del presupuesto de 2024!

>
-

¡Ayúdanos a financiar el presupuesto de Open Food Facts de 2024!

+

¡Ayúdanos a financiar el presupuesto de Open Food Facts de 2025!

Open Food Facts es 100 % gratuito e independiente de la industria alimentaria. Necesitamos tu ayuda para continuar con el proyecto y hacer que crezca. diff --git a/html/donate/et.html b/html/donate/et.html index 32699cceebf11..9835be266944b 100644 --- a/html/donate/et.html +++ b/html/donate/et.html @@ -12,7 +12,7 @@

-

Aidake meil rahastada 2024. aasta eelarvet!

+

Aidake meil rahastada 2025. aasta eelarvet!

Open Food Facts on 100% tasuta ja toiduainetööstusest sõltumatu. Vajame teie abi projekti jätkamiseks ja arendamiseks. @@ -149,7 +149,7 @@

Aidake meil rahastada 2024. aasta eelarvet!

>
-

Aidake meil rahastada Open Food Facts 2024. aasta eelarvet!

+

Aidake meil rahastada Open Food Facts 2025. aasta eelarvet!

Open Food Facts on 100% tasuta ja toiduainetööstusest sõltumatu. Vajame teie abi projekti jätkamiseks ja arendamiseks. diff --git a/html/donate/eu.html b/html/donate/eu.html index 8e522f0021690..f520dbb9bcedc 100644 --- a/html/donate/eu.html +++ b/html/donate/eu.html @@ -12,7 +12,7 @@

-

Lagun iezaguzu 2024ko aurrekontua finantzatzen.

+

Lagun iezaguzu 2025ko aurrekontua finantzatzen.

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Lagun iezaguzu 2024ko aurrekontua finantzatzen.

>
-

Lagun iezaguzu Open Food Facts-en 2024ko aurrekontua finantzatzen.

+

Lagun iezaguzu Open Food Facts-en 2025ko aurrekontua finantzatzen.

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/fa.html b/html/donate/fa.html index 7061c139c2393..af547515b2bee 100644 --- a/html/donate/fa.html +++ b/html/donate/fa.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/fi.html b/html/donate/fi.html index f3352efc200c2..42fe8e1b02313 100644 --- a/html/donate/fi.html +++ b/html/donate/fi.html @@ -12,7 +12,7 @@

-

Auta meitä rahoittamaan vuoden 2024 budjetti!

+

Auta meitä rahoittamaan vuoden 2025 budjetti!

Open Food Facts on täysin ilmainen ja riippumaton elintarviketeollisuudesta. Tarvitsemme apuasi projektin jatkamiseksi ja kasvattamiseksi. @@ -149,7 +149,7 @@

Auta meitä rahoittamaan vuoden 2024 budjetti!

>
-

Auta meitä rahoittamaan Open Food Factsin vuoden 2024 budjettia!

+

Auta meitä rahoittamaan Open Food Factsin vuoden 2025 budjettia!

Open Food Facts on täysin ilmainen ja riippumaton elintarviketeollisuudesta. Tarvitsemme apuasi projektin jatkamiseksi ja kasvattamiseksi. diff --git a/html/donate/fil.html b/html/donate/fil.html index a892fb90e9062..bbfee239cf720 100644 --- a/html/donate/fil.html +++ b/html/donate/fil.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Ang Open Food Facts ay libre at walang impluwensiya mula sa industriya ng mga pagkain. Kailangan namin ang iyong tulong upang maipagpatuloy at mapalago ang proyekto. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Ang Open Food Facts ay libre at walang impluwensiya mula sa industriya ng mga pagkain. Kailangan namin ang iyong tulong upang maipagpatuloy at mapalago ang proyekto. diff --git a/html/donate/fo.html b/html/donate/fo.html index 076cb072299d2..3dd4df3c9700c 100644 --- a/html/donate/fo.html +++ b/html/donate/fo.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/fr.helloasso.html b/html/donate/fr.helloasso.html index 50febdfc2087c..a9f4640d38813 100644 --- a/html/donate/fr.helloasso.html +++ b/html/donate/fr.helloasso.html @@ -9,7 +9,7 @@ - + - - - - - - - -

-
- Logo Open Food Facts -
- -
-
-

Soutenez Open Food Facts pour 2024 !

-

- Open Food Facts est 100% gratuit et indépendant de l'industrie alimentaire. - Nous avons besoin de votre aide pour continuer à développer le projet. -

-
-
- -
-
- Logo Open Food Facts -
- -
- -
-

Soutenez Open Food Facts pour 2024 !

-

- Open Food Facts est 100% gratuit et indépendant de l'industrie alimentaire. - Nous avons besoin de votre aide pour continuer à développer le projet. -

-
- -

Pourquoi donner à Open Food Facts ?

-

- Open Food Facts est le "Wikipedia de l’alimentation", la plus grande base de données libre et ouverte de produits alimentaires du monde entier. - Nous avons commencé Open Food Facts parce que nous croyons que les informations sur ce que - nous mangeons sont d'intérêt public et doivent - être publiques. gratuites et ouvertes. -

- -
-
-
- -
-
-
-

- Lorsque nous avons fondé Open Food Facts, nous avons ouvertement choisi d'en faire une - association à but non-lucratif pour maximiser notre impact, grâce à la gratuité de nos travaux. - Nous avons aussi pris la décision sans appel d'être totalement indépendants - de l'industrie agro-alimentaire, et de refuser tout financement qui pourrait nous biaiser et - corrompre notre mission. -

-

- Nous avons besoin de votre aide pour continuer à faire fonctionner et à développer Open Food Facts. - Merci d'envisager de faire un don pour protéger et soutenir Open Food Facts. -

-

Merci à vous,
- Anca, Éloïse, Florence, Léonore, Marie, Christian, Ludovic, - Sébastien, Vincent et toute l'équipe Open Food Facts. -

-
-
-
-
-

À quoi servent vos dons

- -

- Technologie : Développement, maintenance régulière et serveurs pour suivre la - croissance de la base de données et ajouter de chouettes nouvelles fonctionnalités à - l'application mobile et au site web Open Food Facts. -

- -

- Volontaires et projets : Pour soutenir au mieux la communauté Open Food Facts, - pour collaborer avec des chercheurs, et pour que nos données alimentaires aient le plus - grand impact possible sur notre santé, notre planète et notre société. -

-
-
- Last meeting in Paris -
-
- - -
- -
-
-
-

Le formulaire de don est en cours de chargement.
Vous pouvez aussi y accéder en cliquant ici.

-
- -
-
-
-
+ diff --git a/html/donate/fr.html b/html/donate/fr.html index 3e3981a906c9f..86a774c527f10 100644 --- a/html/donate/fr.html +++ b/html/donate/fr.html @@ -12,7 +12,7 @@
-

Aidez-nous à financer le budget 2024 !

+

Aidez-nous à financer le budget 2025 !

Open Food Facts est 100% gratuit et indépendant de l'industrie alimentaire. Nous avons besoin de votre aide pour continuer à développer le projet. @@ -149,7 +149,7 @@

Aidez-nous à financer le budget 2024 !

>
-

Aidez-nous à financer le budget 2024 d'Open Food Facts !

+

Aidez-nous à financer le budget 2025 d'Open Food Facts !

Open Food Facts est 100% gratuit et indépendant de l'industrie alimentaire. Nous avons besoin de votre aide pour continuer à développer le projet. diff --git a/html/donate/ga.html b/html/donate/ga.html index b1b78be077bed..be2a7cf92af8b 100644 --- a/html/donate/ga.html +++ b/html/donate/ga.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/gd.html b/html/donate/gd.html index f1befeacd134b..534e3dfbb32b3 100644 --- a/html/donate/gd.html +++ b/html/donate/gd.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/gl.html b/html/donate/gl.html index 9fdad9253a100..4e9a57e4704bb 100644 --- a/html/donate/gl.html +++ b/html/donate/gl.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/gu.html b/html/donate/gu.html index fa42036e1587e..f94e45119ac4e 100644 --- a/html/donate/gu.html +++ b/html/donate/gu.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ha.html b/html/donate/ha.html index 845f36a32a852..e5f35dffc8e1e 100644 --- a/html/donate/ha.html +++ b/html/donate/ha.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/he.html b/html/donate/he.html index cb421cd92bab3..cb12a5bc70fb3 100644 --- a/html/donate/he.html +++ b/html/donate/he.html @@ -12,7 +12,7 @@

-

אנו צריכים את עזרתך במימון תקציב 2024!

+

אנו צריכים את עזרתך במימון תקציב 2025!

Open Food Facts הוא מיזם חופשי ובלתי תלוי בתעשיית המזון ב־100%. אנו זקוקים לעזרתכם כדי להמשיך ולפתח את המיזם. @@ -149,7 +149,7 @@

אנו צריכים את עזרתך במימון תקציב 2024!

>
-

נשמח לקבל את עזרתך במימון התקציב של Open Food Facts ל־2024!

+

נשמח לקבל את עזרתך במימון התקציב של Open Food Facts ל־2025!

Open Food Facts הוא מיזם חופשי ובלתי תלוי בתעשיית המזון ב־100%. אנו זקוקים לעזרתכם כדי להמשיך ולפתח את המיזם. diff --git a/html/donate/hi.html b/html/donate/hi.html index 73e9d2c7fa95f..25cc7fb09a335 100644 --- a/html/donate/hi.html +++ b/html/donate/hi.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/hr.html b/html/donate/hr.html index c132f692f93ba..2214b22b87999 100644 --- a/html/donate/hr.html +++ b/html/donate/hr.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ht.html b/html/donate/ht.html index ecee5a9423c53..abec96fd65c50 100644 --- a/html/donate/ht.html +++ b/html/donate/ht.html @@ -12,7 +12,7 @@

-

Ede nou jwenn bidjè 2024 la!

+

Ede nou jwenn bidjè 2025 la!

Open Food Facts se 100% gratis e li pa depann ak endistry manje. Nou bezwen èd ou pou nou kontinye fè pwojè a grandi. @@ -149,7 +149,7 @@

Ede nou jwenn bidjè 2024 la!

>
-

Ede nou jwenn bidjè Open Food Facts 2024 la!

+

Ede nou jwenn bidjè Open Food Facts 2025 la!

Open Food Facts se 100% gratis e li pa depann ak endistry manje. Nou bezwen èd ou pou nou kontinye fè pwojè a grandi. diff --git a/html/donate/hu.html b/html/donate/hu.html index 3b118f7f45933..932a846b559db 100644 --- a/html/donate/hu.html +++ b/html/donate/hu.html @@ -12,7 +12,7 @@

-

Segíts nekünk finanszírozni a 2024-es költségvetést!

+

Segíts nekünk finanszírozni a 2025-es költségvetést!

Az Open Food Facts 100%-ban ingyenes és független az élelmiszeripartól. A projekt folytatásához és fejlesztéséhez szükségünk van az Ön segítségére. @@ -149,7 +149,7 @@

Segíts nekünk finanszírozni a 2024-es költségvetést!

>
-

Segítsen nekünk finanszírozni az Open Food Facts 2024 költségvetését!

+

Segítsen nekünk finanszírozni az Open Food Facts 2025 költségvetését!

Az Open Food Facts 100%-ban ingyenes és független az élelmiszeripartól. A projekt folytatásához és fejlesztéséhez szükségünk van az Ön segítségére. diff --git a/html/donate/hy.html b/html/donate/hy.html index e0377e94ae41c..09730343d848f 100644 --- a/html/donate/hy.html +++ b/html/donate/hy.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/id.html b/html/donate/id.html index cac66edbfbb90..3345fa7b0ce85 100644 --- a/html/donate/id.html +++ b/html/donate/id.html @@ -12,7 +12,7 @@

-

Bantu kami mendanai anggaran 2024!

+

Bantu kami mendanai anggaran 2025!

Open Food Facts 100% gratis dan terlepas dari industri makanan. Kami memerlukan bantuan Anda untuk melanjutkan dan mengembangkan proyek ini. @@ -149,7 +149,7 @@

Bantu kami mendanai anggaran 2024!

>
-

Bantu kami mendanai anggaran Open Food Facts 2024!

+

Bantu kami mendanai anggaran Open Food Facts 2025!

Open Food Facts 100% gratis dan terlepas dari industri makanan. Kami memerlukan bantuan Anda untuk melanjutkan dan mengembangkan proyek ini. diff --git a/html/donate/ii.html b/html/donate/ii.html index 46df15d48fac0..a0d4b7964f731 100644 --- a/html/donate/ii.html +++ b/html/donate/ii.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/is.html b/html/donate/is.html index 740a038621d07..d99acab32041e 100644 --- a/html/donate/is.html +++ b/html/donate/is.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/it.html b/html/donate/it.html index a9f488b17ad7a..e3aede688738f 100644 --- a/html/donate/it.html +++ b/html/donate/it.html @@ -12,7 +12,7 @@

-

Aiutaci a finanziare il bilancio 2024!

+

Aiutaci a finanziare il bilancio 2025!

Open Food Facts è gratuito al 100% e indipendente dall'industria alimentare. Abbiamo bisogno del tuo aiuto per continuare e far crescere il progetto. @@ -149,7 +149,7 @@

Aiutaci a finanziare il bilancio 2024!

>
-

Aiutaci a finanziare il bilancio di Open Food Facts 2024!

+

Aiutaci a finanziare il bilancio di Open Food Facts 2025!

Open Food Facts è gratuito al 100% e indipendente dall'industria alimentare. Abbiamo bisogno del tuo aiuto per continuare e far crescere il progetto. diff --git a/html/donate/iu.html b/html/donate/iu.html index 653757aed4e48..22d7cbe366a57 100644 --- a/html/donate/iu.html +++ b/html/donate/iu.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ja.html b/html/donate/ja.html index f58acca4bbe0b..3ea7e036ee3d8 100644 --- a/html/donate/ja.html +++ b/html/donate/ja.html @@ -12,7 +12,7 @@

-

2024 年の予算への資金提供にご協力ください。

+

2025 年の予算への資金提供にご協力ください。

Open Food Factsは完全に無料で、食品業界から独立しています。 プロジェクトを継続し、成長させていくためにはあなたの助けが必要です。 @@ -149,7 +149,7 @@

2024 年の予算への資金提供にご協力ください。

>
-

Open Food Factsの2024年度の予算の資金提供にご協力ください。

+

Open Food Factsの2025年度の予算の資金提供にご協力ください。

Open Food Factsは完全に無料で、食品業界から独立しています。 プロジェクトを継続し、成長させていくためにはあなたの助けが必要です。 diff --git a/html/donate/jv.html b/html/donate/jv.html index 503a6b8de91b7..0936047e50eca 100644 --- a/html/donate/jv.html +++ b/html/donate/jv.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ka.html b/html/donate/ka.html index 29b5fe7315739..2d8e3e63b11db 100644 --- a/html/donate/ka.html +++ b/html/donate/ka.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/kab.html b/html/donate/kab.html index 89e405d7297ad..83112fbd5bd26 100644 --- a/html/donate/kab.html +++ b/html/donate/kab.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/kk.html b/html/donate/kk.html index 87660dfee5262..f6dd5cdd23ea6 100644 --- a/html/donate/kk.html +++ b/html/donate/kk.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/km.html b/html/donate/km.html index 14b5d9f2cb343..270713c1730ad 100644 --- a/html/donate/km.html +++ b/html/donate/km.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/kmr_TR.html b/html/donate/kmr_TR.html index b8c6a239444f4..d43afe08c6211 100644 --- a/html/donate/kmr_TR.html +++ b/html/donate/kmr_TR.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/kn.html b/html/donate/kn.html index a883d3b7a6b04..2cf8149ada8f9 100644 --- a/html/donate/kn.html +++ b/html/donate/kn.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ko.html b/html/donate/ko.html index f5aa132d4aea6..4f015bd0a8b3a 100644 --- a/html/donate/ko.html +++ b/html/donate/ko.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts는 100% 무료이며 식품 산업과 무관합니다. 이 프로젝트의 성장 및 유지를 위해 여러분의 도움이 필요합니다. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts는 100% 무료이며 식품 산업과 무관합니다. 이 프로젝트의 성장 및 유지를 위해 여러분의 도움이 필요합니다. diff --git a/html/donate/kw.html b/html/donate/kw.html index 57ae2aad065c4..590b529efc782 100644 --- a/html/donate/kw.html +++ b/html/donate/kw.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ky.html b/html/donate/ky.html index b5aa96984364e..6bb1e569b4539 100644 --- a/html/donate/ky.html +++ b/html/donate/ky.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/la.html b/html/donate/la.html index 91e5b49079538..771156af26e3a 100644 --- a/html/donate/la.html +++ b/html/donate/la.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/lb.html b/html/donate/lb.html index 31374fb2ad428..f3cffb04b566c 100644 --- a/html/donate/lb.html +++ b/html/donate/lb.html @@ -12,7 +12,7 @@

-

Hëllef eis den Budget vun 2024 bei Open Food Facts ze finanzéieren!

+

Hëllef eis den Budget vun 2025 bei Open Food Facts ze finanzéieren!

Open Food Facts ass 100% gratis an onofhängeg vun der Liewensmëttelindustrie. Mir brauchen deng Hëllef fir de Projet weiderzemaachen an ze wuessen. @@ -149,7 +149,7 @@

Hëllef eis den Budget vun 2024 bei Open Food Facts ze finanzéieren!

>
-

Hëllef eis den Budget vun 2024 bei Open Food Facts ze finanzéieren!

+

Hëllef eis den Budget vun 2025 bei Open Food Facts ze finanzéieren!

Open Food Facts ass 100% gratis an onofhängeg vun der Liewensmëttelindustrie. Mir brauchen deng Hëllef fir de Projet weiderzemaachen an ze wuessen. diff --git a/html/donate/lo.html b/html/donate/lo.html index a41b94b8f65fb..68b6e0da6d211 100644 --- a/html/donate/lo.html +++ b/html/donate/lo.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/lt.html b/html/donate/lt.html index 74b04d6eacaa9..12c958544ba08 100644 --- a/html/donate/lt.html +++ b/html/donate/lt.html @@ -12,7 +12,7 @@

-

Padėkite finansuoti 2024 biudžetą!

+

Padėkite finansuoti 2025 biudžetą!

„Open Food Facts“ yra 100% nemokama ir nepriklausoma nuo maisto pramonės. Mums reikia jūsų pagalbos, kad tęstume ir plėtotume projektą. @@ -149,7 +149,7 @@

Padėkite finansuoti 2024 biudžetą!

>
-

Padėkite mums finansuoti Open Food Facts 2024 biudžetą!

+

Padėkite mums finansuoti Open Food Facts 2025 biudžetą!

„Open Food Facts“ yra 100% nemokama ir nepriklausoma nuo maisto pramonės. Mums reikia jūsų pagalbos, kad tęstume ir plėtotume projektą. diff --git a/html/donate/lv.html b/html/donate/lv.html index e46d7a600069a..22e39173d583d 100644 --- a/html/donate/lv.html +++ b/html/donate/lv.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/mg.html b/html/donate/mg.html index 3fc86977d15d4..e750eba28b02e 100644 --- a/html/donate/mg.html +++ b/html/donate/mg.html @@ -12,7 +12,7 @@

-

Ampio izahay hamatsy vola ny teti-bola 2024!

+

Ampio izahay hamatsy vola ny teti-bola 2025!

Ny Open Food Facts dia maimaim-poana 100% ary tsy miankina amin'ny indostrian'ny sakafo. Mila ny fanampianao izahay hanohizana sy hampitombo ny tetikasa. @@ -149,7 +149,7 @@

Ampio izahay hamatsy vola ny teti-bola 2024!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Ny Open Food Facts dia maimaim-poana 100% ary tsy miankina amin'ny indostrian'ny sakafo. Mila ny fanampianao izahay hanohizana sy hampitombo ny tetikasa. diff --git a/html/donate/mi.html b/html/donate/mi.html index 9bd3a4bdad310..dafc438399aa0 100644 --- a/html/donate/mi.html +++ b/html/donate/mi.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ml.html b/html/donate/ml.html index 3e10e0d518bad..fb82f5fe13a4b 100644 --- a/html/donate/ml.html +++ b/html/donate/ml.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/mn.html b/html/donate/mn.html index a4a6ab8add9b3..b786895d389a9 100644 --- a/html/donate/mn.html +++ b/html/donate/mn.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/mr.html b/html/donate/mr.html index 177be94e3daea..d59b43a951364 100644 --- a/html/donate/mr.html +++ b/html/donate/mr.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ms.html b/html/donate/ms.html index ffaecd1b59cf5..c40851f06d7ec 100644 --- a/html/donate/ms.html +++ b/html/donate/ms.html @@ -12,7 +12,7 @@

-

Bantu kami membiayai belanjawan 2024!

+

Bantu kami membiayai belanjawan 2025!

Open Food Fact adalah 100% percuma dan bebas daripada pengaruh industri makanan. Kami memerlukan bantuan anda untuk terus mengembangkan projek ini. @@ -149,7 +149,7 @@

Bantu kami membiayai belanjawan 2024!

>
-

Bantu kami membiayai belanjawan Fakta Makanan Terbuka 2024!

+

Bantu kami membiayai belanjawan Fakta Makanan Terbuka 2025!

Open Food Fact adalah 100% percuma dan bebas daripada pengaruh industri makanan. Kami memerlukan bantuan anda untuk terus mengembangkan projek ini. diff --git a/html/donate/mt.html b/html/donate/mt.html index 00a2c347cefad..d711c26f9da31 100644 --- a/html/donate/mt.html +++ b/html/donate/mt.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/my.html b/html/donate/my.html index b64a4e5b536b9..0723770035330 100644 --- a/html/donate/my.html +++ b/html/donate/my.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/nb.html b/html/donate/nb.html index c16d882e02e86..29b96b0e782d6 100644 --- a/html/donate/nb.html +++ b/html/donate/nb.html @@ -12,7 +12,7 @@

-

Hjelp oss med å finansiere budsjettet for 2024!

+

Hjelp oss med å finansiere budsjettet for 2025!

Open Food Facts er 100 % gratis og uavhengig av matvareindustrien. Vi trenger din hjelp til å fortsette og utvikle prosjektet. @@ -149,7 +149,7 @@

Hjelp oss med å finansiere budsjettet for 2024!

>
-

Hjelp oss med å finansiere Open Food Facts sitt budsjett for 2024!

+

Hjelp oss med å finansiere Open Food Facts sitt budsjett for 2025!

Open Food Facts er 100 % gratis og uavhengig av matvareindustrien. Vi trenger din hjelp til å fortsette og utvikle prosjektet. diff --git a/html/donate/ne.html b/html/donate/ne.html index 284178979da1d..94eca94f0470c 100644 --- a/html/donate/ne.html +++ b/html/donate/ne.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/nl_BE.html b/html/donate/nl_BE.html index 5f753314c5884..2fd627a194d57 100644 --- a/html/donate/nl_BE.html +++ b/html/donate/nl_BE.html @@ -12,7 +12,7 @@

-

Help ons het budget voor 2024 te financieren!

+

Help ons het budget voor 2025 te financieren!

Open Food Facts is 100% gratis en onafhankelijk van de voedingsindustrie. We hebben uw hulp nodig om het project voort te zetten en te laten groeien. @@ -149,7 +149,7 @@

Help ons het budget voor 2024 te financieren!

>
-

Help ons het Open Food Facts 2024 budget te financieren!

+

Help ons het Open Food Facts 2025 budget te financieren!

Open Food Facts is 100% gratis en onafhankelijk van de voedingsindustrie. We hebben uw hulp nodig om het project voort te zetten en te laten groeien. diff --git a/html/donate/nl_NL.html b/html/donate/nl_NL.html index 6d6d72162d6fc..e2b910de4c876 100644 --- a/html/donate/nl_NL.html +++ b/html/donate/nl_NL.html @@ -12,7 +12,7 @@

-

Help ons het budget voor 2024 te financieren!

+

Help ons het budget voor 2025 te financieren!

Open Food Facts is 100% gratis en onafhankelijk van de voedingsindustrie. We hebben je hulp nodig om door te gaan en het project verder te laten groeien. @@ -149,7 +149,7 @@

Help ons het budget voor 2024 te financieren!

>
-

Help ons het Open Food Facts 2024 budget te financieren!

+

Help ons het Open Food Facts 2025 budget te financieren!

Open Food Facts is 100% gratis en onafhankelijk van de voedingsindustrie. We hebben je hulp nodig om door te gaan en het project verder te laten groeien. diff --git a/html/donate/nn.html b/html/donate/nn.html index 4cb591821c864..5997a8ab9298e 100644 --- a/html/donate/nn.html +++ b/html/donate/nn.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/no.html b/html/donate/no.html index e1745687c1d96..fe31f057d8ac7 100644 --- a/html/donate/no.html +++ b/html/donate/no.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/nr.html b/html/donate/nr.html index 37ba44344d92a..044d02bb3f7d3 100644 --- a/html/donate/nr.html +++ b/html/donate/nr.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/oc.html b/html/donate/oc.html index 3465587f39c51..2ee3b8aa8b173 100644 --- a/html/donate/oc.html +++ b/html/donate/oc.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/or.html b/html/donate/or.html index ce44b63d35d07..f4d038e604716 100644 --- a/html/donate/or.html +++ b/html/donate/or.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/pa.html b/html/donate/pa.html index d6180b99f7ba5..f8a0d9ddffef0 100644 --- a/html/donate/pa.html +++ b/html/donate/pa.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/pl.html b/html/donate/pl.html index 2d455d82666c2..9ee3639220c32 100644 --- a/html/donate/pl.html +++ b/html/donate/pl.html @@ -12,7 +12,7 @@

-

Pomóż nam sfinansować budżet na rok 2024!

+

Pomóż nam sfinansować budżet na rok 2025!

Open Food Facts jest w 100% darmowy i niezależny od przemysłu spożywczego. Potrzebujemy Twojej pomocy, aby kontynuować i rozwijać projekt. @@ -149,7 +149,7 @@

Pomóż nam sfinansować budżet na rok 2024!

>
-

Pomóż nam sfinansować budżet Open Food Facts na rok 2024!

+

Pomóż nam sfinansować budżet Open Food Facts na rok 2025!

Open Food Facts jest w 100% darmowy i niezależny od przemysłu spożywczego. Potrzebujemy Twojej pomocy, aby kontynuować i rozwijać projekt. diff --git a/html/donate/pt_BR.html b/html/donate/pt_BR.html index 78042135b809e..0afb6cb482fc2 100644 --- a/html/donate/pt_BR.html +++ b/html/donate/pt_BR.html @@ -12,7 +12,7 @@

-

Ajude-nos a financiar o orçamento de 2024!

+

Ajude-nos a financiar o orçamento de 2025!

O Open Food Facts é 100% gratuito e independente da indústria de alimentos. Precisamos da sua ajuda para continuar e desenvolver o projeto. @@ -149,7 +149,7 @@

Ajude-nos a financiar o orçamento de 2024!

>
-

Ajude-nos a financiar o orçamento do Open Food Facts de 2024!

+

Ajude-nos a financiar o orçamento do Open Food Facts de 2025!

O Open Food Facts é 100% gratuito e independente da indústria de alimentos. Precisamos da sua ajuda para continuar e desenvolver o projeto. diff --git a/html/donate/pt_PT.html b/html/donate/pt_PT.html index b786179201236..d817e21e31420 100644 --- a/html/donate/pt_PT.html +++ b/html/donate/pt_PT.html @@ -12,7 +12,7 @@

-

Ajude-nos a financiar o orçamento de 2024!

+

Ajude-nos a financiar o orçamento de 2025!

O Open Food Facts é 100% gratuito e independente da indústria alimentar. Precisamos da sua ajuda para continuar e desenvolver o projeto. @@ -149,7 +149,7 @@

Ajude-nos a financiar o orçamento de 2024!

>
-

Ajude-nos a financiar o orçamento do Open Food Facts de 2024!

+

Ajude-nos a financiar o orçamento do Open Food Facts de 2025!

O Open Food Facts é 100% gratuito e independente da indústria alimentar. Precisamos da sua ajuda para continuar e desenvolver o projeto. diff --git a/html/donate/qu.html b/html/donate/qu.html index 8a1751114c62b..a8d78bd0d4799 100644 --- a/html/donate/qu.html +++ b/html/donate/qu.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/rm.html b/html/donate/rm.html index 44da54197917d..9596c375e8db3 100644 --- a/html/donate/rm.html +++ b/html/donate/rm.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ro.html b/html/donate/ro.html index 343b41bdfb0cd..1aff05bb09a45 100644 --- a/html/donate/ro.html +++ b/html/donate/ro.html @@ -12,7 +12,7 @@

-

Помогите развитию нашего приложения в 2024 году!

+

Помогите развитию нашего приложения в 2025 году!

Open Food Facts на 100% свободен и независим от пищевой промышленности. Нам нужна ваша помощь для продолжения и развития проекта. @@ -149,7 +149,7 @@

Помогите развитию нашего приложения в 2024 >
-

Помогите развитию проекта Open Food Facts в 2024 году!

+

Помогите развитию проекта Open Food Facts в 2025 году!

Open Food Facts на 100% свободен и независим от пищевой промышленности. Нам нужна ваша помощь для продолжения и развития проекта. diff --git a/html/donate/sa.html b/html/donate/sa.html index 2e0006d5cd108..db5f8adafc0e3 100644 --- a/html/donate/sa.html +++ b/html/donate/sa.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sat.html b/html/donate/sat.html index 8e63c5fd9aca6..25e0a31643cf5 100644 --- a/html/donate/sat.html +++ b/html/donate/sat.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sc.html b/html/donate/sc.html index c04731936e527..693f9129fc626 100644 --- a/html/donate/sc.html +++ b/html/donate/sc.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sco.html b/html/donate/sco.html index 09d13ec44992d..13c11f95317d8 100644 --- a/html/donate/sco.html +++ b/html/donate/sco.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sd.html b/html/donate/sd.html index 17fe693e5b31d..f137c91762904 100644 --- a/html/donate/sd.html +++ b/html/donate/sd.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sg.html b/html/donate/sg.html index 7483be96a497c..72200ef3f01be 100644 --- a/html/donate/sg.html +++ b/html/donate/sg.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/si.html b/html/donate/si.html index 9974b23a6c18f..645cae08611cd 100644 --- a/html/donate/si.html +++ b/html/donate/si.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sk.html b/html/donate/sk.html index 4b2fdc8a8163b..edfbfff59ef54 100644 --- a/html/donate/sk.html +++ b/html/donate/sk.html @@ -12,7 +12,7 @@

-

Pomôžte nám financovať rozpočet na rok 2024!

+

Pomôžte nám financovať rozpočet na rok 2025!

Open Food Facts je 100% bezplatné a nezávislé od potravinárskeho priemyslu. Potrebujeme vašu pomoc, aby sme mohli pokračovať a rozvíjať projekt. @@ -149,7 +149,7 @@

Pomôžte nám financovať rozpočet na rok 2024!

>
-

Pomôžte nám financovať rozpočet Open Food Facts 2024!

+

Pomôžte nám financovať rozpočet Open Food Facts 2025!

Open Food Facts je 100% bezplatné a nezávislé od potravinárskeho priemyslu. Potrebujeme vašu pomoc, aby sme mohli pokračovať a rozvíjať projekt. diff --git a/html/donate/sl.html b/html/donate/sl.html index 53be303d2ecdd..67100c619f5ff 100644 --- a/html/donate/sl.html +++ b/html/donate/sl.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts je 100% brezplačen in neodvisen od živilske industrije. Za nadaljevanje in širitev projekta potrebujemo vašo pomoč. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts je 100% brezplačen in neodvisen od živilske industrije. Za nadaljevanje in širitev projekta potrebujemo vašo pomoč. diff --git a/html/donate/sma.html b/html/donate/sma.html index c04f5452da9e2..706ae9df464b3 100644 --- a/html/donate/sma.html +++ b/html/donate/sma.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sn.html b/html/donate/sn.html index bae89b2487c18..1f877faf791c9 100644 --- a/html/donate/sn.html +++ b/html/donate/sn.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/so.html b/html/donate/so.html index 6cd893cef0a69..1215434595ac2 100644 --- a/html/donate/so.html +++ b/html/donate/so.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/son.html b/html/donate/son.html index 9d603f2ef1805..3b24884b29729 100644 --- a/html/donate/son.html +++ b/html/donate/son.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sq.html b/html/donate/sq.html index 3f1ce125e9fe5..570d74044eac1 100644 --- a/html/donate/sq.html +++ b/html/donate/sq.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sr.html b/html/donate/sr.html index 2ca642f25dbcd..a0d05f7343280 100644 --- a/html/donate/sr.html +++ b/html/donate/sr.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sr_CS.html b/html/donate/sr_CS.html index 729eddfd42792..571aa43ade556 100644 --- a/html/donate/sr_CS.html +++ b/html/donate/sr_CS.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sr_RS.html b/html/donate/sr_RS.html index 2ca642f25dbcd..a0d05f7343280 100644 --- a/html/donate/sr_RS.html +++ b/html/donate/sr_RS.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ss.html b/html/donate/ss.html index 9f5c0928dc0f7..c3fbc365f3217 100644 --- a/html/donate/ss.html +++ b/html/donate/ss.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/st.html b/html/donate/st.html index 55e364ec72ae4..56cafbf6f7553 100644 --- a/html/donate/st.html +++ b/html/donate/st.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/sv.html b/html/donate/sv.html index d0531d359bf26..eaf1d0e4fa19f 100644 --- a/html/donate/sv.html +++ b/html/donate/sv.html @@ -12,7 +12,7 @@

-

Hjälp oss att finansiera 2024 års budget!

+

Hjälp oss att finansiera 2025 års budget!

Open Food Facts är 100% gratis och oberoende av livsmedelsindustrin. Vi behöver er hjälp för att fortsätta och för att få projektet att växa. @@ -149,7 +149,7 @@

Hjälp oss att finansiera 2024 års budget!

>
-

Hjälp oss finansiera Open Food Facts 2024 budget!

+

Hjälp oss finansiera Open Food Facts 2025 budget!

Open Food Facts är 100% gratis och oberoende av livsmedelsindustrin. Vi behöver er hjälp för att fortsätta och för att få projektet att växa. diff --git a/html/donate/sw.html b/html/donate/sw.html index 5338f311fa587..6bbd6fe0b456c 100644 --- a/html/donate/sw.html +++ b/html/donate/sw.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ta.html b/html/donate/ta.html index 761aa4bda2613..5dc1e244b7e47 100644 --- a/html/donate/ta.html +++ b/html/donate/ta.html @@ -123,7 +123,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/te.html b/html/donate/te.html index 00993b553de5e..f1816c4de80d7 100644 --- a/html/donate/te.html +++ b/html/donate/te.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/tg.html b/html/donate/tg.html index 250590182981e..eeb590aeb191c 100644 --- a/html/donate/tg.html +++ b/html/donate/tg.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/th.html b/html/donate/th.html index f6ffe870a936e..7dc34d0ad3e43 100644 --- a/html/donate/th.html +++ b/html/donate/th.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ti.html b/html/donate/ti.html index 15f7ae55484a0..67cf1743f4270 100644 --- a/html/donate/ti.html +++ b/html/donate/ti.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/tl.html b/html/donate/tl.html index 521b6db782d99..3ef5478440270 100644 --- a/html/donate/tl.html +++ b/html/donate/tl.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/tn.html b/html/donate/tn.html index 3ebd7896a8680..645da6eed9e44 100644 --- a/html/donate/tn.html +++ b/html/donate/tn.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/tr.html b/html/donate/tr.html index ba31543727abe..93837ac0fcf19 100644 --- a/html/donate/tr.html +++ b/html/donate/tr.html @@ -12,7 +12,7 @@

-

2024 bütçesini finanse etmemize yardımcı olun!

+

2025 bütçesini finanse etmemize yardımcı olun!

Open Food Facts %100 özgür ve gıda endüstrisinden bağımsızdır. Projeyi devam ettirmek ve büyütmek için yardımlarınıza ihtiyacımız var. @@ -149,7 +149,7 @@

2024 bütçesini finanse etmemize yardımcı olun!

>
-

Open Food Facts 2024 bütçesini finanse etmemize yardımcı olun!

+

Open Food Facts 2025 bütçesini finanse etmemize yardımcı olun!

Open Food Facts %100 özgür ve gıda endüstrisinden bağımsızdır. Projeyi devam ettirmek ve büyütmek için yardımlarınıza ihtiyacımız var. diff --git a/html/donate/ts.html b/html/donate/ts.html index 6138a6234031a..1442b8162d077 100644 --- a/html/donate/ts.html +++ b/html/donate/ts.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/tt.html b/html/donate/tt.html index ab4a47b19ab4d..c5a6be0b33fe7 100644 --- a/html/donate/tt.html +++ b/html/donate/tt.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/tw.html b/html/donate/tw.html index ddffab29db0cb..5e5e0cf123e97 100644 --- a/html/donate/tw.html +++ b/html/donate/tw.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ty.html b/html/donate/ty.html index 49537904be74f..271c95cdedc32 100644 --- a/html/donate/ty.html +++ b/html/donate/ty.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/tzl.html b/html/donate/tzl.html index e0cefd27a3dd2..adbe6cd45f039 100644 --- a/html/donate/tzl.html +++ b/html/donate/tzl.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ug.html b/html/donate/ug.html index fafa552139a22..b736383621dfd 100644 --- a/html/donate/ug.html +++ b/html/donate/ug.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/uk.html b/html/donate/uk.html index 8605b7c358b48..64d1555198640 100644 --- a/html/donate/uk.html +++ b/html/donate/uk.html @@ -12,7 +12,7 @@

-

Допоможи нам профінансувати бюджет 2024!

+

Допоможи нам профінансувати бюджет 2025!

Open Food Facts є повністю безкоштовним та незалежним від виробників харчової галузі. Ми потребуємо Твоєї допомоги, аби надалі розвивати наш проєкт. diff --git a/html/donate/ur.html b/html/donate/ur.html index 7cbc26a491603..75070bb82061a 100644 --- a/html/donate/ur.html +++ b/html/donate/ur.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/uz.html b/html/donate/uz.html index 1e075e929b5f5..8de94ea13c4cc 100644 --- a/html/donate/uz.html +++ b/html/donate/uz.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/val.html b/html/donate/val.html index f507c293b1edf..6c7af7754ab80 100644 --- a/html/donate/val.html +++ b/html/donate/val.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/ve.html b/html/donate/ve.html index b640cc02e8ab9..3511489325fea 100644 --- a/html/donate/ve.html +++ b/html/donate/ve.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/vec.html b/html/donate/vec.html index 30e898991b2ce..54c51f413cbfc 100644 --- a/html/donate/vec.html +++ b/html/donate/vec.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/vi.html b/html/donate/vi.html index 3bf9ab929482c..4fe4e632a0243 100644 --- a/html/donate/vi.html +++ b/html/donate/vi.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts miễn phí 100% và độc lập hoàn toàn với ngành công nghiệp thực phẩm. Nên chúng tôi cần sự giúp đỡ của bạn để tiếp tục và phát triển dự án. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts miễn phí 100% và độc lập hoàn toàn với ngành công nghiệp thực phẩm. Nên chúng tôi cần sự giúp đỡ của bạn để tiếp tục và phát triển dự án. diff --git a/html/donate/vls.html b/html/donate/vls.html index b362b72fb9e40..089160550cbaf 100644 --- a/html/donate/vls.html +++ b/html/donate/vls.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/wa.html b/html/donate/wa.html index 6390691b95d9d..96c57e1311b11 100644 --- a/html/donate/wa.html +++ b/html/donate/wa.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/wo.html b/html/donate/wo.html index 64f28569a4b2c..5b1587c99e4f2 100644 --- a/html/donate/wo.html +++ b/html/donate/wo.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/xh.html b/html/donate/xh.html index 462666e1be6ca..bdb4ad824e7be 100644 --- a/html/donate/xh.html +++ b/html/donate/xh.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/yi.html b/html/donate/yi.html index b3408572497b8..0e7d43048f037 100644 --- a/html/donate/yi.html +++ b/html/donate/yi.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/yo.html b/html/donate/yo.html index 5e8c4e1e1c0a9..3dd490ba880e0 100644 --- a/html/donate/yo.html +++ b/html/donate/yo.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/zea.html b/html/donate/zea.html index 7d374cc6f7844..9c09c9ac2c983 100644 --- a/html/donate/zea.html +++ b/html/donate/zea.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/zh_CN.html b/html/donate/zh_CN.html index 36fdab74e3bfc..e2e6f7825c713 100644 --- a/html/donate/zh_CN.html +++ b/html/donate/zh_CN.html @@ -12,7 +12,7 @@

-

资助我们2024点需求吧!

+

资助我们2025点需求吧!

Open Food Facts是100%免费的,并且独立于产品行业 我们需要您的帮助才能继续发展该项目 @@ -149,7 +149,7 @@

资助我们2024点需求吧!

>
-

帮组我们资助Open Food Facts 2024年预算吧!

+

帮组我们资助Open Food Facts 2025年预算吧!

Open Food Facts是100%免费的,并且独立于产品行业 我们需要您的帮助才能继续发展该项目 diff --git a/html/donate/zh_HK.html b/html/donate/zh_HK.html index 55c3db64d2f48..4dbfc8d82d3ce 100644 --- a/html/donate/zh_HK.html +++ b/html/donate/zh_HK.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/donate/zh_TW.html b/html/donate/zh_TW.html index dbb2079a6b2e6..eef6d711121b1 100644 --- a/html/donate/zh_TW.html +++ b/html/donate/zh_TW.html @@ -12,7 +12,7 @@

-

協助我們為2024年預算而籌備

+

協助我們為2025年預算而籌備

Open Food Facts 是食品業裏 100 % 不收費的獨立個體。 我們懇求您的協助來支持我們繼續發展成長 @@ -149,7 +149,7 @@

協助我們為2024年預算而籌備

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts 是食品業裏 100 % 不收費的獨立個體。 我們懇求您的協助來支持我們繼續發展成長 diff --git a/html/donate/zu.html b/html/donate/zu.html index b0c5caa654780..2b5431efc0b60 100644 --- a/html/donate/zu.html +++ b/html/donate/zu.html @@ -12,7 +12,7 @@

-

Help us fund the 2024 budget!

+

Help us fund the 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. @@ -149,7 +149,7 @@

Help us fund the 2024 budget!

>
-

Help us fund the Open Food Facts 2024 budget!

+

Help us fund the Open Food Facts 2025 budget!

Open Food Facts is 100% free and independent of the food industry. We need your help to continue and to grow the project. diff --git a/html/images/attributes/src/nutriscore-not-applicable-new-de.svg b/html/images/attributes/src/nutriscore-not-applicable-new-de.svg index bcb9957425313..0eded9679ceaa 100644 --- a/html/images/attributes/src/nutriscore-not-applicable-new-de.svg +++ b/html/images/attributes/src/nutriscore-not-applicable-new-de.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-not-applicable-new-en.svg b/html/images/attributes/src/nutriscore-not-applicable-new-en.svg index bcb9957425313..0eded9679ceaa 100644 --- a/html/images/attributes/src/nutriscore-not-applicable-new-en.svg +++ b/html/images/attributes/src/nutriscore-not-applicable-new-en.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-not-applicable-new-fr.svg b/html/images/attributes/src/nutriscore-not-applicable-new-fr.svg index bcb9957425313..0eded9679ceaa 100644 --- a/html/images/attributes/src/nutriscore-not-applicable-new-fr.svg +++ b/html/images/attributes/src/nutriscore-not-applicable-new-fr.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-not-applicable-new-lb.svg b/html/images/attributes/src/nutriscore-not-applicable-new-lb.svg index bcb9957425313..0eded9679ceaa 100644 --- a/html/images/attributes/src/nutriscore-not-applicable-new-lb.svg +++ b/html/images/attributes/src/nutriscore-not-applicable-new-lb.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-not-applicable-new-nl.svg b/html/images/attributes/src/nutriscore-not-applicable-new-nl.svg index bcb9957425313..0eded9679ceaa 100644 --- a/html/images/attributes/src/nutriscore-not-applicable-new-nl.svg +++ b/html/images/attributes/src/nutriscore-not-applicable-new-nl.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-unknown-new-de.svg b/html/images/attributes/src/nutriscore-unknown-new-de.svg index 407614599c9e3..b987bb9a821b6 100644 --- a/html/images/attributes/src/nutriscore-unknown-new-de.svg +++ b/html/images/attributes/src/nutriscore-unknown-new-de.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-unknown-new-en.svg b/html/images/attributes/src/nutriscore-unknown-new-en.svg index 407614599c9e3..b987bb9a821b6 100644 --- a/html/images/attributes/src/nutriscore-unknown-new-en.svg +++ b/html/images/attributes/src/nutriscore-unknown-new-en.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-unknown-new-fr.svg b/html/images/attributes/src/nutriscore-unknown-new-fr.svg index 407614599c9e3..b987bb9a821b6 100644 --- a/html/images/attributes/src/nutriscore-unknown-new-fr.svg +++ b/html/images/attributes/src/nutriscore-unknown-new-fr.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-unknown-new-lb.svg b/html/images/attributes/src/nutriscore-unknown-new-lb.svg index 407614599c9e3..b987bb9a821b6 100644 --- a/html/images/attributes/src/nutriscore-unknown-new-lb.svg +++ b/html/images/attributes/src/nutriscore-unknown-new-lb.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/attributes/src/nutriscore-unknown-new-nl.svg b/html/images/attributes/src/nutriscore-unknown-new-nl.svg index 407614599c9e3..b987bb9a821b6 100644 --- a/html/images/attributes/src/nutriscore-unknown-new-nl.svg +++ b/html/images/attributes/src/nutriscore-unknown-new-nl.svg @@ -1,4 +1,4 @@ - + diff --git a/html/images/logos/off-logo-icon-dark.svg b/html/images/logos/off-logo-icon-dark.svg index fb5f72da277af..3ee86cd92d12e 100644 --- a/html/images/logos/off-logo-icon-dark.svg +++ b/html/images/logos/off-logo-icon-dark.svg @@ -1,91 +1,17 @@ - - - - - - - - - - - - - - - - - + + + Artboard + + + + + + + + + + + + - - + \ No newline at end of file diff --git a/lib/ProductOpener/APIProductServices.pm b/lib/ProductOpener/APIProductServices.pm index 5e237833b239b..0c9bf634b553d 100644 --- a/lib/ProductOpener/APIProductServices.pm +++ b/lib/ProductOpener/APIProductServices.pm @@ -116,6 +116,8 @@ my %service_functions = ( extend_ingredients => \&ProductOpener::Ingredients::extend_ingredients_service, estimate_ingredients_percent => \&ProductOpener::Ingredients::estimate_ingredients_percent_service, analyze_ingredients => \&ProductOpener::Ingredients::analyze_ingredients_service, + determine_food_contact_of_packaging_components => + \&ProductOpener::PackagingFoodContact::determine_food_contact_of_packaging_components_service, ); sub check_product_services_api_input ($request_ref) { diff --git a/lib/ProductOpener/Attributes.pm b/lib/ProductOpener/Attributes.pm index 3c8a8df96071d..f3fe60c2d492e 100644 --- a/lib/ProductOpener/Attributes.pm +++ b/lib/ProductOpener/Attributes.pm @@ -570,7 +570,8 @@ sub compute_attribute_nutriscore ($product_ref, $target_lc, $target_cc) { $attribute_ref->{match} = 0; if ($target_lc ne "data") { $attribute_ref->{title} = lang_in_other_lc($target_lc, "attribute_nutriscore_not_applicable_title"); - $attribute_ref->{description} = f_lang_in_lc( + # Note: we now display the not-applicable category in the short description + $attribute_ref->{description_short} = f_lang_in_lc( $target_lc, "f_attribute_nutriscore_not_applicable_description", { @@ -580,8 +581,8 @@ sub compute_attribute_nutriscore ($product_ref, $target_lc, $target_cc) { ) } ); - $attribute_ref->{description_short} - = lang_in_other_lc($target_lc, "attribute_nutriscore_not_applicable_description_short"); + #$attribute_ref->{description_short} + # = lang_in_other_lc($target_lc, "attribute_nutriscore_not_applicable_description_short"); } } @@ -662,6 +663,8 @@ sub compute_attribute_environmental_score ($product_ref, $target_lc, $target_cc) # TBD: remove this code once all products have been updated (but we won't show the score for old revisions) if ((not defined $product_ref->{environmental_score_data}) and (defined $product_ref->{ecoscore_data})) { $product_ref->{environmental_score_data} = $product_ref->{ecoscore_data}; + $product_ref->{environmental_score_score} = $product_ref->{ecoscore_score}; + $product_ref->{environmental_score_grade} = $product_ref->{ecoscore_grade}; } my $attribute_ref = initialize_attribute($attribute_id, $target_lc); @@ -725,7 +728,8 @@ sub compute_attribute_environmental_score ($product_ref, $target_lc, $target_cc) if ($target_lc ne "data") { $attribute_ref->{title} = lang_in_other_lc($target_lc, "attribute_environmental_score_not_applicable_title"); - $attribute_ref->{description} = f_lang_in_lc( + # Note: we now display the not-applicable category in the short description + $attribute_ref->{description_short} = f_lang_in_lc( $target_lc, "f_attribute_environmental_score_not_applicable_description", { @@ -738,8 +742,8 @@ sub compute_attribute_environmental_score ($product_ref, $target_lc, $target_cc) ) } ); - $attribute_ref->{description_short} - = lang_in_other_lc($target_lc, "attribute_environmental_score_not_applicable_description_short"); + #$attribute_ref->{description_short} + # = lang_in_other_lc($target_lc, "attribute_environmental_score_not_applicable_description_short"); } } # Environmental-Score is unknown diff --git a/lib/ProductOpener/ConfigEnv.pm b/lib/ProductOpener/ConfigEnv.pm index 71eb5306c2f35..956a42e6a31fd 100644 --- a/lib/ProductOpener/ConfigEnv.pm +++ b/lib/ProductOpener/ConfigEnv.pm @@ -33,6 +33,6 @@ BEGIN { use vars @EXPORT_OK; # no 'my' keyword for these $nutripatrol_url = $ENV{NUTRIPATROL_URL}; -$nutripatrol_url =~ s/\///; # remove trailing slash if there is one +$nutripatrol_url =~ s/\/$//; # remove trailing slash if there is one 1; diff --git a/lib/ProductOpener/Config_off.pm b/lib/ProductOpener/Config_off.pm index 3203e05c0674a..a393db09a760d 100644 --- a/lib/ProductOpener/Config_off.pm +++ b/lib/ProductOpener/Config_off.pm @@ -603,11 +603,11 @@ $options{categories_considered_as_beverages_for_nutriscore_2023} = [ $options{categories_exempted_from_nutriscore} = [ qw( en:alcoholic-beverages - en:aromatic-herbs en:baby-foods en:baby-milks en:chewing-gum en:food-additives + en:dietary-supplements en:meal-replacements en:salts en:spices diff --git a/lib/ProductOpener/Config_opf.pm b/lib/ProductOpener/Config_opf.pm index f8fa32521bd12..41dc1288cc228 100644 --- a/lib/ProductOpener/Config_opf.pm +++ b/lib/ProductOpener/Config_opf.pm @@ -375,9 +375,6 @@ HTML conservation_conditions recycling_instructions_to_recycle recycling_instructions_to_discard - nutrition_grade_fr_producer - nutriscore_score_producer - nutriscore_grade_producer recipe_idea origin customer_service @@ -428,9 +425,6 @@ HTML # If adding to this list ensure that the tables are being replicated to Postgres in the openfoodfacts-query repo @drilldown_fields = qw( - nutrition_grades - nova_groups - environmental_score brands categories labels @@ -439,12 +433,6 @@ HTML manufacturing_places emb_codes ingredients - additives - vitamins - minerals - amino_acids - nucleotides - other_nutritional_substances allergens traces misc @@ -488,20 +476,10 @@ HTML traces serving_size serving_quantity - no_nutrition_data additives_n additives - nutriscore_score - nutriscore_grade - nova_group - pnns_groups_1 - pnns_groups_2 - food_groups states brand_owner - environmental_score_score - environmental_score_grade - nutrient_levels_tags product_quantity owner data_quality_errors_tags diff --git a/lib/ProductOpener/DataQualityFood.pm b/lib/ProductOpener/DataQualityFood.pm index 79a9733fc2772..2f6c5bd53806d 100644 --- a/lib/ProductOpener/DataQualityFood.pm +++ b/lib/ProductOpener/DataQualityFood.pm @@ -1839,7 +1839,7 @@ sub check_categories ($product_ref) { # some categories have an expected minimum number of ingredients # push data quality error if ingredients count is lower than the expected number of ingredients - my ($minimum_number_of_ingredients, $category_id2) + my ($minimum_number_of_ingredients, $category_id3) = get_inherited_property_from_categories_tags($product_ref, "minimum_number_of_ingredients:en"); if ((defined $minimum_number_of_ingredients)) { diff --git a/lib/ProductOpener/Display.pm b/lib/ProductOpener/Display.pm index 146eabab55709..8c9d506abc3af 100644 --- a/lib/ProductOpener/Display.pm +++ b/lib/ProductOpener/Display.pm @@ -174,6 +174,7 @@ use ProductOpener::Cache qw/$max_memcached_object_size $memd generate_cache_key/ use ProductOpener::Permissions qw/has_permission/; use ProductOpener::ProductsFeatures qw(feature_enabled); use ProductOpener::RequestStats qw(:all); +use ProductOpener::PackagingFoodContact qw/determine_food_contact_of_packaging_components_service/; use Encode; use URI::Escape::XS; @@ -1267,6 +1268,20 @@ sub display_index_for_producer ($request_ref) { } } + # Count the products with a Nutri-Score computed + my $count = count_products($request_ref, {misc_tags => "en:nutriscore-computed"}); + if ($count > 0) { + push @{$template_data_ref->{facets}}, + { + url => "/misc?filter=nutriscore", + number_of_products => lang("discover_the_evolution_of_the_nutriscore_grades_of_your_products"), + count => $count, + }; + } + else { + $template_data_ref->{add_products_to_discover_the_evolution_of_their_nutriscore_grades} = 1; + } + # Display a message if some product updates have not been published yet # Updates can also be on obsolete products @@ -7618,6 +7633,10 @@ sub display_page ($request_ref) { $template_data_ref->{request} = $request_ref; my $html; + # ?content_only=1 -> only the content, no header, footer, etc. + if (($user_agent =~ /smoothie/) or (single_param('content_only'))) { + $template_data_ref->{content_only} = 1; + } process_template('web/common/site_layout.tt.html', $template_data_ref, \$html, $request_ref) || ($html = "template error: " . $tt->error()); @@ -7978,6 +7997,13 @@ JS $product_ref->{environmental_score_data}); } + # 2025/01 - For moderators, determine which packaging components are in contact with food, so that we can display them + # This is for initial development of the feature, once finalized, we could compute and store this data in the product + + if ($User{moderator}) { + ProductOpener::PackagingFoodContact::determine_food_contact_of_packaging_components_service($product_ref); + } + # Activate knowledge panels for all users initialize_knowledge_panels_options($knowledge_panels_options_ref, $request_ref); diff --git a/lib/ProductOpener/EnvironmentalScore.pm b/lib/ProductOpener/EnvironmentalScore.pm index 4541600992c5d..99c8dc2c4826d 100644 --- a/lib/ProductOpener/EnvironmentalScore.pm +++ b/lib/ProductOpener/EnvironmentalScore.pm @@ -771,17 +771,27 @@ sub compute_environmental_score ($product_ref) { } } } - if (defined $product_ref->{environmental_score_extended_data}) { - add_tag($product_ref, "misc", "en:environmental-score-extended-data-computed"); - if (defined $product_ref->{environmental_score_extended_data_version}) { - add_tag($product_ref, "misc", - "en:environmental-score-extended-data-version-" - . get_string_id_for_lang("no_language", $product_ref->{environmental_score_extended_data_version})); - } - } - else { - add_tag($product_ref, "misc", "en:environmental-score-extended-data-not-computed"); + + # 2024/12 ecoscore fields were renamed to environmental_score fields + # remove ecoscore fields + + delete $product_ref->{ecoscore_grade}; + delete $product_ref->{ecoscore_score}; + + delete $product_ref->{ecoscore_data}; + + remove_tag($product_ref, "misc", "en:ecoscore-computed"); + remove_tag($product_ref, "misc", "en:ecoscore-missing-data-warning"); + remove_tag($product_ref, "misc", "en:ecoscore-missing-data-no-packagings"); + foreach my $missing (qw(labels origins packagings)) { + remove_tag($product_ref, "misc", "en:ecoscore-missing-data-" . $missing); } + remove_tag($product_ref, "misc", "en:ecoscore-no-missing-data"); + remove_tag($product_ref, "misc", "en:ecoscore-not-applicable"); + remove_tag($product_ref, "misc", "en:ecoscore-changed"); + remove_tag($product_ref, "misc", "en:ecoscore-grade-changed"); + remove_tag($product_ref, "misc", "en:ecoscore-score-above-100"); + remove_tag($product_ref, "misc", "en:ecoscore-downgraded"); # Special case for waters and sodas: disable the Environmental-Score @@ -810,6 +820,7 @@ sub compute_environmental_score ($product_ref) { $product_ref->{environmental_score_data}{status} = "unknown"; $product_ref->{environmental_score_tags} = ["not-applicable"]; $product_ref->{environmental_score_grade} = "not-applicable"; + $product_ref->{environmental_score_data}{grade} = "not-applicable"; add_tag($product_ref, "misc", "en:environmental-score-not-applicable"); add_tag($product_ref, "misc", "en:environmental-score-not-computed"); @@ -975,6 +986,7 @@ sub compute_environmental_score ($product_ref) { $product_ref->{environmental_score_data}{status} = "unknown"; $product_ref->{environmental_score_tags} = ["unknown"]; $product_ref->{environmental_score_grade} = "unknown"; + $product_ref->{environmental_score_data}{grade} = "unknown"; add_tag($product_ref, "misc", "en:environmental-score-not-computed"); } diff --git a/lib/ProductOpener/Ingredients.pm b/lib/ProductOpener/Ingredients.pm index b59e1447a9502..037c63e1f762b 100644 --- a/lib/ProductOpener/Ingredients.pm +++ b/lib/ProductOpener/Ingredients.pm @@ -8130,6 +8130,7 @@ can be taken into account, whereas crisps which are thin and completely dehydrat =cut my %fruits_vegetables_legumes_eurocodes = ( + "7.10" => 1, "8.10" => 1, "8.15" => 1, "8.20" => 1, @@ -8149,7 +8150,7 @@ my %fruits_vegetables_legumes_eurocodes = ( "9.40" => 1, "9.50" => 1, "9.60" => 1, - "7.10" => 1, + "12.20" => 1, # Herbs ); sub is_fruits_vegetables_legumes ($ingredient_id, $processing = undef) { @@ -8170,7 +8171,7 @@ sub is_fruits_vegetables_legumes ($ingredient_id, $processing = undef) { ((defined $eurocode_2_group_1) and ($eurocode_2_group_1 eq "9")) # Vegetables and legumes or ((defined $eurocode_2_group_2) - and (exists $fruits_vegetables_legumes_eurocodes{$eurocode_2_group_2})) + and ($fruits_vegetables_legumes_eurocodes{$eurocode_2_group_2})) ) and (not $is_a_further_processed_ingredient) and (not $further_processed) diff --git a/lib/ProductOpener/KnowledgePanels.pm b/lib/ProductOpener/KnowledgePanels.pm index 2a2e4d1c7b905..95b684ee07392 100644 --- a/lib/ProductOpener/KnowledgePanels.pm +++ b/lib/ProductOpener/KnowledgePanels.pm @@ -642,9 +642,9 @@ sub create_environmental_score_panel ($product_ref, $target_lc, $target_cc, $opt } # We can reuse some strings from the Environmental-Score attribute - my $title - = sprintf(lang_in_other_lc($target_lc, "attribute_environmental_score_grade_title"), uc($grade)) . ' - ' - . lang_in_other_lc($target_lc, "attribute_environmental_score_" . $grade_underscore . "_description_short"); + my $title = sprintf(lang_in_other_lc($target_lc, "attribute_environmental_score_grade_title"), $letter_grade); + my $subtitle + = lang_in_other_lc($target_lc, "attribute_environmental_score_" . $grade_underscore . "_description_short"); my $panel_data_ref = { "agribalyse_category_name" => $agribalyse_category_name, @@ -658,6 +658,7 @@ sub create_environmental_score_panel ($product_ref, $target_lc, $target_cc, $opt "grade_underscore" => $grade_underscore, "letter_grade" => $letter_grade, "title" => $title, + "subtitle" => $subtitle, "transportation_warning" => $transportation_warning, }; @@ -673,23 +674,6 @@ sub create_environmental_score_panel ($product_ref, $target_lc, $target_cc, $opt $panel_data_ref, $product_ref, $target_lc, $target_cc, $options_ref ); - # Create an extra panel for products that have extended environmental_score data from the impact estimator - - # 2022/05/06: disabled as we currently have few products with reliable extended environmental_score data - - # if (defined $product_ref->{environmental_score_extended_data}) { - - # extract_data_from_impact_estimator_best_recipe($product_ref, $panel_data_ref); - - # compare_impact_estimator_data_to_category_average($product_ref, $panel_data_ref, $target_cc); - - # # Display a panel only if we can compare the product extended impact - # if (defined $panel_data_ref->{environmental_score_extended_data_for_category}) { - # create_panel_from_json_template("environmental_score_extended", "api/knowledge-panels/environment/environmental_score/environmental_score_extended.tt.json", - # $panel_data_ref, $product_ref, $target_lc, $target_cc, $options_ref); - # } - # } - create_panel_from_json_template("carbon_footprint", "api/knowledge-panels/environment/carbon_footprint_food.tt.json", $panel_data_ref, $product_ref, $target_lc, $target_cc, $options_ref); diff --git a/lib/ProductOpener/PackagingFoodContact.pm b/lib/ProductOpener/PackagingFoodContact.pm new file mode 100644 index 0000000000000..155fdbbed4d16 --- /dev/null +++ b/lib/ProductOpener/PackagingFoodContact.pm @@ -0,0 +1,271 @@ +# This file is part of Product Opener. +# +# Product Opener +# Copyright (C) 2011-2023 Association Open Food Facts +# Contact: contact@openfoodfacts.org +# Address: 21 rue des Iles, 94100 Saint-Maur des Fossés, France +# +# Product Opener is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +=encoding UTF-8 + +=head1 NAME + +ProductOpener::PackagingFoodContact + +=head1 SYNOPSIS + + +=head1 DESCRIPTION + + +=cut + +package ProductOpener::PackagingFoodContact; + +use ProductOpener::PerlStandards; +use Exporter qw< import >; + +use Log::Any qw($log); + +BEGIN { + use vars qw(@ISA @EXPORT_OK %EXPORT_TAGS); + @EXPORT_OK = qw( + &determine_food_contact_of_packaging_components_service + &determine_food_contact_of_packaging_components + ); # symbols to export on request + %EXPORT_TAGS = (all => [@EXPORT_OK]); +} + +use vars @EXPORT_OK; + +use ProductOpener::Config qw/:all/; +use ProductOpener::API qw/add_warning/; +use ProductOpener::Packaging qw/%packaging_taxonomies/; +use ProductOpener::Tags qw/:all/; + +use Data::DeepAccess qw(deep_get deep_val); +use List::Util qw(first); + +=head1 FUNCTIONS + +=head2 determine_food_contact_of_packaging_components_service ( $product_ref, $updated_product_fields_ref, $errors_ref ) + +Determine if packaging components are in contact with the food. + +This function is a product service that can be run through ProductOpener::ApiProductServices + +=head3 Arguments + +=head4 $product_ref + +product object reference + +=head4 $updated_product_fields_ref + +reference to a hash of product fields that have been created or updated + +=head4 $errors_ref + +reference to an array of error messages + +=cut + +sub determine_food_contact_of_packaging_components_service ( + $product_ref, + $updated_product_fields_ref = {}, + $errors_ref = [] + ) +{ + + # Check if we have packaging data in the packagings structure + my $packagings_ref = $product_ref->{packagings}; + + if (not defined $packagings_ref) { + push @{$errors_ref}, + { + message => {id => "missing_field"}, + field => { + id => "packagings", + impact => {id => "skipped_service"}, + service => {id => "determine_food_contact_of_packaging_components"} + } + }; + return; + } + + # indicate that the service is updating the "packagings" structure + $updated_product_fields_ref->{packagings} = 1; + + determine_food_contact_of_packaging_components($packagings_ref); + + return; +} + +=head2 get_matching_and_non_matching_packaging_components ($packagings_ref, $conditions_ref) + +Find packaging components that match specific conditions (e.g material, shape, recycling). +Conditions are matched using the taxonomy, a parent in the condition matches more specific children. +(e.g. "en:plastic" matches "en:pet" and "en:hdpe") + +=head3 Parameters + +=head4 $packaging_ref packaging data + +=head4 $conditions_ref conditions + +Hash reference with conditions like material, shape, recycling as keys, and a value or an array of values as values. + +=head3 Return values + +Array with: +- a reference to an array of packaging components that match the conditions, +- a reference to an array of packaging components that do not match the conditions. + +=cut + +sub get_matching_and_non_matching_packaging_components ($packagings_ref, $conditions_ref) { + + my @matching_packagings = (); + my @non_matching_packagings = (); + + foreach my $packaging_ref (@$packagings_ref) { + + my $matched = 1; + + foreach my $property (keys %$conditions_ref) { + + if (defined $packaging_ref->{$property}) { + + # Check if the component value is a child of one of the condition values + my @values + = ref $conditions_ref->{$property} eq 'ARRAY' + ? @{$conditions_ref->{$property}} + : ($conditions_ref->{$property}); + my $matched_value = 0; + + foreach my $value (@values) { + if (is_a($packaging_taxonomies{$property}, $value, $packaging_ref->{$property})) { + $matched_value = 1; + last; + } + } + if (not $matched_value) { + $matched = 0; + last; + } + } + else { + $matched = 0; + last; + } + } + + if ($matched) { + push @matching_packagings, $packaging_ref; + } + else { + push @non_matching_packagings, $packaging_ref; + } + } + + return \@matching_packagings, \@non_matching_packagings; +} + +sub set_food_contact_property_of_packaging_components ($packagings_ref, $food_contact) { + + foreach my $packaging_ref (@$packagings_ref) { + + $packaging_ref->{food_contact} = $food_contact; + } + + return; +} + +=head2 determine_food_contact_of_packaging_components ($packagings_ref) + +Determine if packaging components are in contact with the food. + +=head3 Parameters + +=head4 $packagings_ref packaging data + +=cut + +sub determine_food_contact_of_packaging_components ($packagings_ref) { + + # Cans: only the can itself is in contact with the food + my ($cans_ref, $non_cans_ref) + = get_matching_and_non_matching_packaging_components($packagings_ref, {shape => "en:can"}); + if (@$cans_ref) { + set_food_contact_property_of_packaging_components($cans_ref, 1); + set_food_contact_property_of_packaging_components($non_cans_ref, 0); + return; + } + + # Bottles, pots, jars: in contact with the food + my ($bottles_ref, $non_bottles_ref) + = get_matching_and_non_matching_packaging_components($packagings_ref, + {shape => ["en:bottle", "en:pot", "en:jar"]}); + if (@$bottles_ref) { + set_food_contact_property_of_packaging_components($bottles_ref, 1); + set_food_contact_property_of_packaging_components($non_bottles_ref, 0); + + # If there is a seal, it is in contact with the food + my ($seals_ref, $non_seals_ref) + = get_matching_and_non_matching_packaging_components($non_bottles_ref, {shape => "en:seal"}); + if (@$seals_ref) { + set_food_contact_property_of_packaging_components($seals_ref, 1); + } + # Otherwise, if there is a lid or a cap, it is in contact wit the food + else { + my ($lids_ref, $non_lids_ref) + = get_matching_and_non_matching_packaging_components($non_bottles_ref, {shape => ["en:lid", "en:cap"]}); + if (@$lids_ref) { + set_food_contact_property_of_packaging_components($lids_ref, 1); + } + } + return; + } + + # Trays: in contact with food, and the film is in contact with the food + my ($trays_ref, $non_trays_ref) + = get_matching_and_non_matching_packaging_components($packagings_ref, {shape => "en:tray"}); + if (@$trays_ref) { + set_food_contact_property_of_packaging_components($trays_ref, 1); + set_food_contact_property_of_packaging_components($non_trays_ref, 0); + + my ($films_ref, $non_films_ref) + = get_matching_and_non_matching_packaging_components($non_trays_ref, {shape => "en:film"}); + if (@$films_ref) { + set_food_contact_property_of_packaging_components($films_ref, 1); + } + return; + } + + # Individual packaging components (dose, bag): in contact with the food + my ($individuals_ref, $non_individuals_ref) + = get_matching_and_non_matching_packaging_components($packagings_ref, + {shape => ["en:individual-dose", "en:individual-bag"]}); + if (@$individuals_ref) { + set_food_contact_property_of_packaging_components($individuals_ref, 1); + set_food_contact_property_of_packaging_components($non_individuals_ref, 0); + return; + } + + return; +} + +1; + diff --git a/lib/ProductOpener/Products.pm b/lib/ProductOpener/Products.pm index e7efb99b54474..a082c40c86b24 100644 --- a/lib/ProductOpener/Products.pm +++ b/lib/ProductOpener/Products.pm @@ -333,6 +333,53 @@ sub normalize_code_zeroes($code) { return $code; } +=head2 is_valid_upc12($code) + +C this function validates a UPC-12 code by: +- checking if the input is exactly 12 digits long, +- verifying the check digit using the modulo 10 algorithm. + +=head3 Arguments + +UPC-12 Code in the Raw form: $code + +=head3 Return Values + +1 (true) if the UPC-12 code is valid, 0 (false) otherwise. + +=cut + +# use strict; +# use warnings; + +sub is_valid_upc12 { + my ($upc) = @_; + + # Check if the input is exactly 12 digits long + return 0 unless $upc =~ /^\d{12}$/; + + # Extract the first 11 digits and the check digit + my $check_digit = substr($upc, -1); + my $upc_without_check_digit = substr($upc, 0, 11); + + # Calculate the check digit + my $sum_odd = 0; + my $sum_even = 0; + for my $i (0 .. 10) { + if ($i % 2 == 0) { + $sum_odd += substr($upc_without_check_digit, $i, 1); + } + else { + $sum_even += substr($upc_without_check_digit, $i, 1); + } + } + my $total_sum = ($sum_odd * 3) + $sum_even; + my $calculated_check_digit = (10 - ($total_sum % 10)) % 10; + + # Validate the check digit + return $check_digit == $calculated_check_digit; +} + =head2 normalize_code_with_gs1_ai($code) C this function normalizes the product code by: @@ -362,7 +409,19 @@ sub normalize_code_with_gs1_ai ($code) { # Keep only digits, remove spaces, dashes and everything else $code =~ s/\D//g; + + # might be upc12 + if (is_valid_upc12($code)) { + $code = "0" . $code; + } + + # Check if the length of the code is 14 and the first character is '0' + if (length($code) == 14 && substr($code, 0, 1) eq '0') { + # Drop the first zero + $code = substr($code, 1); + } } + return ($code, $ai_data_str); } @@ -400,7 +459,7 @@ sub _try_normalize_code_gs1 ($code) { } }; if ($@) { - $log->warn("GS1Parser error", {error => $@}) if $log->is_warn(); + # $log->warn("GS1Parser error", {error => $@}) if $log->is_warn(); $code = undef; $ai_data_str = undef; } diff --git a/lib/startup_apache2.pl b/lib/startup_apache2.pl index 178b57796e2bf..c4430377baf56 100755 --- a/lib/startup_apache2.pl +++ b/lib/startup_apache2.pl @@ -63,7 +63,8 @@ use Log::Any qw($log); use Log::Log4perl; -Log::Log4perl->init("$conf_root/log.conf"); # Init log4perl from a config file. +# Init log4perl from a config file +Log::Log4perl->init($ENV{LOG4PERL_CONF} // "$conf_root/log.conf"); use Log::Any::Adapter; Log::Any::Adapter->set('Log4perl'); # Send all logs to Log::Log4perl diff --git a/package-lock.json b/package-lock.json index 152e9a9222ebe..4698be8e94342 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,7 @@ "@types/gulp": "^4.0.17", "@types/gulp-concat": "^0.0.37", "@types/gulp-csso": "^4.0.5", + "@types/gulp-gzip": "^0.0.36", "@types/gulp-sass": "^5.0.4", "@types/gulp-sourcemaps": "^0.0.38", "@types/gulp-svgmin": "^1.2.4", @@ -53,6 +54,7 @@ "gulp-babel": "^8.0.0", "gulp-concat": "^2.6.1", "gulp-csso": "^4.0.1", + "gulp-gzip": "^1.4.2", "gulp-sass": "^5.1.0", "gulp-sourcemaps": "^3.0.0", "gulp-svgmin": "^4.1.0", @@ -2212,6 +2214,7 @@ "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "detect-libc": "^1.0.3", @@ -2250,6 +2253,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -2270,6 +2274,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2290,6 +2295,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2310,6 +2316,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2330,6 +2337,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2350,6 +2358,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2370,6 +2379,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2390,6 +2400,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2410,6 +2421,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2430,6 +2442,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2450,6 +2463,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2470,6 +2484,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2490,6 +2505,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2503,9 +2519,10 @@ } }, "node_modules/@snyk/protect": { - "version": "1.1294.3", - "resolved": "https://registry.npmjs.org/@snyk/protect/-/protect-1.1294.3.tgz", - "integrity": "sha512-fvdO4kFaQ9wQNLlCMZEwc2VQ3KioFy/wINoE7BLCPiwnw5pYXCKwgduCIKK97Vmtaxn9+NGIT/g0PngRBaKsTQ==", + "version": "1.1295.0", + "resolved": "https://registry.npmjs.org/@snyk/protect/-/protect-1.1295.0.tgz", + "integrity": "sha512-/nqz5lCsqcBNnltPTZFvWXo+a5mcpseOpCo2iG/jjSrRpCWDrLeiP+eTX4FxboVRx+oUCqjMCiIbI215njWY5g==", + "license": "Apache-2.0", "bin": { "snyk-protect": "bin/snyk-protect" }, @@ -2599,6 +2616,16 @@ "@types/node": "*" } }, + "node_modules/@types/gulp-gzip": { + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/gulp-gzip/-/gulp-gzip-0.0.36.tgz", + "integrity": "sha512-zGdc+LGAvcqVXu9ydx0OJLL39C23QYmlptqkVEnWz+03YfPMWBBjMGE0VOvr6AApm08r1G4r5QItRJaGjJQWuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/gulp-sass": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/gulp-sass/-/gulp-sass-5.0.4.tgz", @@ -2718,20 +2745,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz", - "integrity": "sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.1.tgz", + "integrity": "sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.19.0", - "@typescript-eslint/type-utils": "8.19.0", - "@typescript-eslint/utils": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0", + "@typescript-eslint/scope-manager": "8.19.1", + "@typescript-eslint/type-utils": "8.19.1", + "@typescript-eslint/utils": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2747,15 +2775,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.0.tgz", - "integrity": "sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.1.tgz", + "integrity": "sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.19.0", - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/typescript-estree": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0", + "@typescript-eslint/scope-manager": "8.19.1", + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/typescript-estree": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1", "debug": "^4.3.4" }, "engines": { @@ -2771,13 +2800,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz", - "integrity": "sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.1.tgz", + "integrity": "sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0" + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2788,15 +2818,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz", - "integrity": "sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.1.tgz", + "integrity": "sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.19.0", - "@typescript-eslint/utils": "8.19.0", + "@typescript-eslint/typescript-estree": "8.19.1", + "@typescript-eslint/utils": "8.19.1", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2811,10 +2842,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.0.tgz", - "integrity": "sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.1.tgz", + "integrity": "sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -2824,19 +2856,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz", - "integrity": "sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.1.tgz", + "integrity": "sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0", + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2854,6 +2887,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2862,15 +2896,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.0.tgz", - "integrity": "sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.1.tgz", + "integrity": "sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.19.0", - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/typescript-estree": "8.19.0" + "@typescript-eslint/scope-manager": "8.19.1", + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/typescript-estree": "8.19.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2885,12 +2920,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz", - "integrity": "sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.1.tgz", + "integrity": "sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/types": "8.19.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -2906,6 +2942,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -2933,9 +2970,9 @@ } }, "node_modules/@yaireo/tagify": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@yaireo/tagify/-/tagify-4.33.0.tgz", - "integrity": "sha512-8MQF26Q5NIJXXLETAMOSFv2d6Jj5DH0xwUM6kCelQ9CMG7oIA4HIdQ6sMy5dF95IBLqCJOF9MM4vfiyQIcrejA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@yaireo/tagify/-/tagify-4.32.1.tgz", + "integrity": "sha512-QlWP+9K9AIFs1RtGLjw1oqBIAhiKMWRH5s+vxXk4gdhsc6Ii87jucGXdL9uUJ9Pn33A1Zw41ZfBsguQkN0wEuQ==", "engines": { "node": ">=16.15.0", "npm": ">=9.0.0" @@ -3037,6 +3074,13 @@ "node": ">=0.10.0" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -3545,6 +3589,16 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -3627,6 +3681,7 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -3643,6 +3698,7 @@ "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-5.1.1.tgz", "integrity": "sha512-h+QZNfYdlcoyIyOb26N71S7700CP4EY+CQ1X15AsX1RD2xMLAWbMniS7yUTOEC6DzC5yydGV37wu81AGNm8esA==", "dev": true, + "license": "MIT", "dependencies": { "charset": "^1.0.1", "cookiejar": "^2.1.4", @@ -4368,6 +4424,7 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -6322,6 +6379,24 @@ "node": ">=8.0.0" } }, + "node_modules/gulp-gzip": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz", + "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^1.0.1", + "bytes": "^3.0.0", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.0", + "stream-to-array": "^2.3.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/gulp-sass": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz", @@ -6710,7 +6785,8 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", @@ -7924,10 +8000,11 @@ } }, "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8290,6 +8367,7 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/node-expat": { @@ -9609,10 +9687,11 @@ } }, "node_modules/sass": { - "version": "1.83.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.0.tgz", - "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==", + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz", + "integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -10199,6 +10278,16 @@ "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", "dev": true }, + "node_modules/stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.1.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -10954,15 +11043,16 @@ "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues." }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-node": { diff --git a/package.json b/package.json index 9d06b09c7b66a..25e916498d9b8 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "@types/gulp": "^4.0.17", "@types/gulp-concat": "^0.0.37", "@types/gulp-csso": "^4.0.5", + "@types/gulp-gzip": "^0.0.36", "@types/gulp-sass": "^5.0.4", "@types/gulp-sourcemaps": "^0.0.38", "@types/gulp-svgmin": "^1.2.4", @@ -76,6 +77,7 @@ "gulp-babel": "^8.0.0", "gulp-concat": "^2.6.1", "gulp-csso": "^4.0.1", + "gulp-gzip": "^1.4.2", "gulp-sass": "^5.1.0", "gulp-sourcemaps": "^3.0.0", "gulp-svgmin": "^4.1.0", diff --git a/po/common/common.pot b/po/common/common.pot index 6875a9b4da990..c1343e006d8e9 100644 --- a/po/common/common.pot +++ b/po/common/common.pot @@ -5385,12 +5385,12 @@ msgid "User is being deleted. This may take a few minutes." msgstr "User is being deleted. This may take a few minutes." msgctxt "attribute_environmental_score_not_applicable_title" -msgid "Green-Score not yet applicable" -msgstr "Green-Score not yet applicable" +msgid "Green-Score not applicable" +msgstr "Green-Score not applicable" msgctxt "attribute_environmental_score_not_applicable_description_short" -msgid "Not yet applicable for the category" -msgstr "Not yet applicable for the category" +msgid "Not applicable for the category" +msgstr "Not applicable for the category" # variable names between { } must not be translated msgctxt "f_attribute_environmental_score_not_applicable_description" @@ -7363,9 +7363,21 @@ msgid "Limit ultra-processed foods" msgstr "Limit ultra-processed foods" msgctxt "recommendation_limit_ultra_processed_foods_subtitle" -msgid "Ultra-processed foods increase noncommunicable chronic disease risk" -msgstr "Ultra-processed foods increase noncommunicable chronic disease risk" +msgid "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases" +msgstr "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases" msgctxt "recommendation_limit_ultra_processed_foods_text" -msgid "Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." -msgstr "Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." +msgid "Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." +msgstr "Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." + +msgctxt "discover_the_evolution_of_the_nutriscore_grades_of_your_products" +msgid "Discover the evolution of the Nutri-Score grades of your products" +msgstr "Discover the evolution of the Nutri-Score grades of your products" + +msgctxt "add_products_to_discover_the_evolution_of_their_nutriscore_grades" +msgid "Add products with a category, ingredients list and nutrition facts to discover the evolution of their Nutri-Score grades." +msgstr "Add products with a category, ingredients list and nutrition facts to discover the evolution of their Nutri-Score grades." + +msgctxt "in_contact_with_food" +msgid "In contact with food" +msgstr "In contact with food" diff --git a/po/common/en.po b/po/common/en.po index 5dfccc78a13f5..aaa939e017c5f 100644 --- a/po/common/en.po +++ b/po/common/en.po @@ -5404,17 +5404,17 @@ msgid "User is being deleted. This may take a few minutes." msgstr "User is being deleted. This may take a few minutes." msgctxt "attribute_environmental_score_not_applicable_title" -msgid "Green-Score not yet applicable" -msgstr "Green-Score not yet applicable" +msgid "Green-Score not applicable" +msgstr "Green-Score not applicable" msgctxt "attribute_environmental_score_not_applicable_description_short" -msgid "Not yet applicable for the category" -msgstr "Not yet applicable for the category" +msgid "Not applicable for the category" +msgstr "Not applicable for the category" # variable names between { } must not be translated msgctxt "f_attribute_environmental_score_not_applicable_description" -msgid "Not yet applicable for the category: {category}" -msgstr "Not yet applicable for the category: {category}" +msgid "Not applicable for the category: {category}" +msgstr "Not applicable for the category: {category}" msgctxt "environmental_score_not_applicable_coming_soon" msgid "The Green-Score is not yet applicable for this category, but we are working on adding support for it." @@ -7352,9 +7352,21 @@ msgid "Limit ultra-processed foods" msgstr "Limit ultra-processed foods" msgctxt "recommendation_limit_ultra_processed_foods_subtitle" -msgid "Ultra-processed foods increase noncommunicable chronic disease risk" -msgstr "Ultra-processed foods increase noncommunicable chronic disease risk" +msgid "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases" +msgstr "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases" msgctxt "recommendation_limit_ultra_processed_foods_text" -msgid "Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." -msgstr "Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." +msgid "Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." +msgstr "Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." + +msgctxt "discover_the_evolution_of_the_nutriscore_grades_of_your_products" +msgid "Discover the evolution of the Nutri-Score grades of your products" +msgstr "Discover the evolution of the Nutri-Score grades of your products" + +msgctxt "add_products_to_discover_the_evolution_of_their_nutriscore_grades" +msgid "Add products with a category, ingredients list and nutrition facts to discover the evolution of their Nutri-Score grades." +msgstr "Add products with a category, ingredients list and nutrition facts to discover the evolution of their Nutri-Score grades." + +msgctxt "in_contact_with_food" +msgid "In contact with food" +msgstr "In contact with food" diff --git a/po/common/fr.po b/po/common/fr.po index 87c7d422d5f5e..87caa6b542934 100644 --- a/po/common/fr.po +++ b/po/common/fr.po @@ -5403,17 +5403,17 @@ msgid "User is being deleted. This may take a few minutes." msgstr "L'utilisateur est en cours de suppression. Cela peut prendre quelques minutes." msgctxt "attribute_environmental_score_not_applicable_title" -msgid "Green-Score not yet applicable" -msgstr "Green-Score n'est pas encore applicable" +msgid "Green-Score not applicable" +msgstr "Green-Score non applicable" msgctxt "attribute_environmental_score_not_applicable_description_short" -msgid "Not yet applicable for the category" -msgstr "Pas encore applicable pour la catégorie" +msgid "Not applicable for the category" +msgstr "Non applicable pour la catégorie" # variable names between { } must not be translated msgctxt "f_attribute_environmental_score_not_applicable_description" -msgid "Not yet applicable for the category: {category}" -msgstr "Pas encore applicable pour la catégorie : {category}" +msgid "Not applicable for the category: {category}" +msgstr "Non applicable pour la catégorie : {category}" msgctxt "environmental_score_not_applicable_coming_soon" msgid "The Green-Score is not yet applicable for this category, but we are working on adding support for it." @@ -7311,9 +7311,21 @@ msgid "Limit ultra-processed foods" msgstr "Limiter les aliments ultra-transformés" msgctxt "recommendation_limit_ultra_processed_foods_subtitle" -msgid "Ultra-processed foods increase chronic disease risk" -msgstr "Les aliments ultra-transformés augmentent le risque de maladies chroniques" +msgid "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases" +msgstr "Limiter les aliments ultra-transformés réduit le risque de maladies chroniques" msgctxt "recommendation_limit_ultra_processed_foods_text" -msgid "Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." -msgstr "Plusieurs études ont montré qu'une consommation élevée d'aliments ultra-transformés est associée à un risque accru de maladies chroniques non transmissibles, telles que l'obésité, l'hypertension et le diabète." +msgid "Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes." +msgstr "Plusieurs études ont montré qu'une consommation plus faible d'aliments ultra-transformés est associée à un risque diminué de maladies chroniques non transmissibles, telles que l'obésité, l'hypertension et le diabète." + +msgctxt "discover_the_evolution_of_the_nutriscore_grades_of_your_products" +msgid "Discover the evolution of the Nutri-Score grades of your products" +msgstr "Découvrez l'évolution des notes Nutri-Score de vos produits" + +msgctxt "add_products_to_discover_the_evolution_of_their_nutriscore_grades" +msgid "Add products with a category, ingredients list and nutrition facts to discover the evolution of their Nutri-Score grades." +msgstr "Ajoutez des produits avec une catégorie, une liste d'ingrédients et des informations nutritionnelles pour découvrir l'évolution de leurs notes Nutri-Score." + +msgctxt "in_contact_with_food" +msgid "In contact with food" +msgstr "En contact avec l'aliment" diff --git a/scripts/deploy/install-dist-files.sh b/scripts/deploy/install-dist-files.sh new file mode 100755 index 0000000000000..fe41525235006 --- /dev/null +++ b/scripts/deploy/install-dist-files.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +# this script is a helper for deployment +# it downloads the assets for a version and extracts them +# It must be followed by install-dist-files.sh which will install files + + +# fail on error +set -e + +if [[ -z "$1" ]] +then + echo "Usage: $0 []" + echo "ex: $0 v2.53.0 off" + echo "If is not provided, it will be the server name" + exit 2 +fi + +VERSION=$1 + +if [[ -n $2 ]] +then + SERVICE=$2 +else + SERVICE=$(hostname) +fi + +if [[ $(whoami) != off ]] +then + echo "This script must be run as the off user" + exit 3 +fi + +echo "Downloading dist files $VERSION for $SERVICE" +# get archive and untar +curl --fail --location https://github.com/openfoodfacts/openfoodfacts-server/releases/download/$VERSION/frontend-dist.tgz -o /tmp/frontend-dist.tgz +rm -rf /srv/$SERVICE-dist/tmp/$VERSION || true +mkdir -p /srv/$SERVICE-dist/tmp/$VERSION +tar --directory=/srv/$SERVICE-dist/tmp/$VERSION -xzf /tmp/frontend-dist.tgz +# remove old files +rm -rf /srv/$SERVICE-dist/tmp/old || true +mkdir /srv/$SERVICE-dist/tmp/old +# swap current version and old version +shopt -s extglob # extended globbing +mv /srv/$SERVICE-dist/!(tmp) /srv/$SERVICE-dist/tmp/old +mv /srv/$SERVICE-dist/tmp/$VERSION/* /srv/$SERVICE-dist/ +rmdir /srv/$SERVICE-dist/tmp/$VERSION \ No newline at end of file diff --git a/scripts/deploy/verify-deployment.sh b/scripts/deploy/verify-deployment.sh old mode 100644 new mode 100755 index 1b673849a0091..45433aed93002 --- a/scripts/deploy/verify-deployment.sh +++ b/scripts/deploy/verify-deployment.sh @@ -65,6 +65,7 @@ function check_args { exit -2 fi ZFS_PATH="/mnt/$SERVICE" + OFF_ZFS_PATH="/mnt/off" IS_PRO=$(is_pro "$SERVICE") NON_PRO_SERVICE=$(non_pro_name "$SERVICE") PRO_SERVICE=$NON_PRO_SERVICE"-pro" @@ -79,16 +80,25 @@ function check_args { function compute_services { # systemd services to check for symlinks - SYSTEMD_LINKS+=( email-failures@.service nginx.service.d apache2.service.d cloud_vision_ocr@.service ) + SYSTEMD_LINKS+=( email-failures@.service nginx.service.d apache2.service.d cloud_vision_ocr@.service minion@.service ) # units that must be active (and enabled) - SYSTEMD_UNITS_ACTIVE=( nginx.service apache2.service cloud_vision_ocr@$SERVICE.service ) + SYSTEMD_UNITS_ACTIVE=( nginx.service apache2.service cloud_vision_ocr@$SERVICE.service minion@.service ) + # units that must be enabled SYSTEMD_UNITS_ENABLED=( ) + # priority request on off + if [[ $SERVICE = "off" ]] + then + SYSTEMD_LINKS+=( apache2@.service.d prometheus-apache-exporter@.service ) + SYSTEMD_UNITS_ACTIVE+=( apache2@priority.service prometheus-apache-exporter.service prometheus-apache-exporter@priority.service ) + fi if [[ -z $IS_PRO ]] then - SYSTEMD_LINKS+=( gen_feeds{,_daily}@.{service,timer} ) - SYSTEMD_UNITS_ACTIVE+=( gen_feeds@$SERVICE.timer gen_feeds_daily@$SERVICE.timer ) - SYSTEMD_UNITS_ENABLED+=( gen_feeds@$SERVICE.service gen_feeds_daily@$SERVICE.service ) + # non pro + SYSTEMD_LINKS+=( gen_feeds_daily@.{service,timer} ) + SYSTEMD_UNITS_ACTIVE+=( gen_feeds_daily@$SERVICE.timer ) + SYSTEMD_UNITS_ENABLED+=( gen_feeds_daily@$SERVICE.service ) else + # pro SYSTEMD_LINKS+=( producers_import@.{service,timer} ) SYSTEMD_UNITS_ACTIVE+=( producers_import@$SERVICE.timer ) SYSTEMD_UNITS_ENABLED+=( producers_import@$SERVICE.service ) @@ -102,7 +112,6 @@ function compute_expected_links { EXPECTED_LINKS["$REPO_PATH/log.conf"]="$REPO_PATH/conf/$SERVICE-log.conf" EXPECTED_LINKS["$REPO_PATH/minion_log.conf"]="$REPO_PATH/conf/$SERVICE-minion_log.conf" # config - EXPECTED_LINKS["$REPO_PATH/lib/ProductOpener/Config.pm"]="$REPO_PATH/lib/ProductOpener/Config_$NON_PRO_SERVICE.pm" EXPECTED_LINKS["$REPO_PATH/po/site-specific"]="$REPO_PATH/po/$SERVICE_LONG_NAME" # off-web EXPECTED_LINKS["$REPO_PATH/lang"]="/srv/openfoodfacts-web/lang" @@ -111,8 +120,9 @@ function compute_expected_links { EXPECTED_LINKS["$REPO_PATH/data"]="$ZFS_PATH/data" EXPECTED_LINKS["$REPO_PATH/orgs"]="$ZFS_PATH/orgs" EXPECTED_LINKS["$REPO_PATH/users"]="$ZFS_PATH/users" - EXPECTED_LINKS["$REPO_PATH/products"]="$ZFS_PATH/products" - EXPECTED_LINKS["$REPO_PATH/html/images/products"]="$ZFS_PATH/images/products" + # image and products are now merges on off zfs storage + EXPECTED_LINKS["$REPO_PATH/products"]="$OFF_ZFS_PATH/products" + EXPECTED_LINKS["$REPO_PATH/html/images/products"]="$OFF_ZFS_PATH/images/products" # public data EXPECTED_LINKS["$REPO_PATH/html/data"]="$ZFS_PATH/html_data" EXPECTED_LINKS["$REPO_PATH/html/exports"]="$ZFS_PATH/html_data/exports" @@ -190,9 +200,14 @@ function compute_expected_links { fi # apache2 links - EXPECTED_LINKS["/etc/apache2/ports.conf"]="$REPO_PATH/conf/apache-2.4/$SERVICE-ports.conf" - EXPECTED_LINKS["/etc/apache2/mods-available/mpm_prefork.conf"]="$REPO_PATH/conf/apache-2.4/$SERVICE-mpm_prefork.conf" + EXPECTED_LINKS["/etc/apache2/ports.conf"]="$REPO_PATH/conf/apache-2.4/ports.conf" + EXPECTED_LINKS["/etc/apache2/off-envvars"]="$REPO_PATH/conf/apache-2.4/off-envvars" + EXPECTED_LINKS["/etc/apache2/mods-available/mpm_prefork.conf"]="$REPO_PATH/conf/apache-2.4/mpm_prefork.conf" EXPECTED_LINKS["/etc/apache2/sites-enabled/$SERVICE.conf"]="$REPO_PATH/conf/apache-2.4/sites-available/$SERVICE.conf" + if [[ $SERVICE = "off" ]] + then + EXPECTED_LINKS["/etc/apache2-priority"]="/etc/apache2" + fi for systemd_unit in {apache2,nginx}.service.d ${SYSTEMD_LINKS[@]} do @@ -201,6 +216,14 @@ function compute_expected_links { # log rotate config EXPECTED_LINKS["/etc/logrotate.d/apache2"]="$REPO_PATH/conf/logrotate/apache2" + EXPECTED_LINKS["/etc/logrotate.d/nginx"]="$REPO_PATH/conf/logrotate/nginx" + + # prometheus configs + if [[ $SERVICE = "off" ]] + then + EXPECTED_LINKS["/etc/default/prometheus-apache-exporter"]="$REPO_PATH/conf/etc-default/prometheus-apache-exporter" + EXPECTED_LINKS["/etc/default/prometheus-apache-priority-exporter"]="$REPO_PATH/conf/etc-default/prometheus-apache-priority-exporter" + fi # Note: other link on old versions: # /srv/$SERVICE/users_emails.sto -> /srv/$SERVICE/users/users_emails.sto @@ -219,11 +242,11 @@ function check_links { GOT_ERROR=1 if [[ ! -e $target ]] then - >&2 echo "ERROR: link $target does not exist" + >&2 echo "ERROR: link $target does not exist (should link to $destination)" else if [[ ! -e $destination ]] then - >&2 echo "ERROR: link $destination does not exist" + >&2 echo "ERROR: link $destination does not exist (while $target links to it)" else >&2 echo "ERROR: link instead of $target -> $destination, got $(readlink -f $target) instead" fi @@ -240,6 +263,7 @@ function check_systemd_units { do if ! ( systemctl -q is-enabled $unit ) then + GOT_ERROR=1 >&2 echo "ERROR: $unit unit must be enabled" else [[ -n "$VERBOSE" ]] && echo " OK: $unit unit enabled" @@ -249,9 +273,10 @@ function check_systemd_units { do if ! ( systemctl -q is-active $unit ) then - >&2 echo "ERROR: $unit unit must be enabled" + GOT_ERROR=1 + >&2 echo "ERROR: $unit unit must be active" else - [[ -n "$VERBOSE" ]] && echo " OK: $unit unit enabled" + [[ -n "$VERBOSE" ]] && echo " OK: $unit unit active" fi done @@ -259,17 +284,18 @@ function check_systemd_units { function other_checks { - # apache2 must run with off user and group - for variable in USER GROUP - do - if ! ( grep -q "^export APACHE_RUN_$variable=off" /etc/apache2/envvars ) - then - GOT_ERROR=1 - >&2 echo "ERROR: $variable for apache2 should be off instead off" $(grep "^export APACHE_RUN_$variable=.*" /etc/apache2/envvars) - else - [[ -n "$VERBOSE" ]] && echo " OK APACHE_RUN_$variable for apache2" - fi - done + # a common pitfall is to have log rotate not working + # because conf file must be owned by root + [[ -n "$VERBOSE" ]] && echo "Checking other things..." + # we need -follow because our confs are symlinked + NON_ROOT_LOGROTATE_CONF=$(find /etc/logrotate.d/ -follow -type f -not -user root) + if [[ -n "$NON_ROOT_LOGROTATE_CONF" ]] + then + GOT_ERROR=1 + >&2 echo "ERROR: logrotate config files $NON_ROOT_LOGROTATE_CONF must be owned by root" + else + [[ -n "$VERBOSE" ]] && echo " OK: logrotate config files are owned by root" + fi } diff --git a/scripts/gen_users_emails.pl b/scripts/gen_users_emails.pl index 1faacc5b42815..edb667067e9a4 100755 --- a/scripts/gen_users_emails.pl +++ b/scripts/gen_users_emails.pl @@ -38,7 +38,10 @@ my $emails_ref = retrieve("$BASE_DIRS{USERS}/users_emails.sto"); -foreach my $userid (@userids) { +my $i = 0; +my $n = scalar @userids; + +foreach my $userid (sort @userids) { my $user_ref = retrieve_user($userid); if (defined $user_ref) { my $email = $user_ref->{email}; @@ -46,6 +49,11 @@ $emails_ref->{$email} = [$userid]; } } + $i++; + if ($i % 1000 == 0) { + print "$i / $n - $userid\n"; + store("$BASE_DIRS{USERS}/users_emails.sto", $emails_ref); + } } store("$BASE_DIRS{USERS}/users_emails.sto", $emails_ref); diff --git a/scripts/migrations/2024_10_detect_duplicate_products_in_different_flavors.pl b/scripts/migrations/2024_10_detect_duplicate_products_in_different_flavors.pl index aa927469a7cb7..79c68013b66e7 100755 --- a/scripts/migrations/2024_10_detect_duplicate_products_in_different_flavors.pl +++ b/scripts/migrations/2024_10_detect_duplicate_products_in_different_flavors.pl @@ -20,35 +20,42 @@ my %flavor_with_most_data = (); my %flavor_with_most_data_size = (); -foreach my $flavor ("off", "obf", "opf", "opff") { - my $products_collection = get_products_collection({database => $flavor, timeout => $socket_timeout_ms}); +foreach my $obsolete (0, 1) { + foreach my $flavor ("off", "obf", "opf", "opff") { + my $products_collection + = get_products_collection({database => $flavor, obsolete => $obsolete, timeout => $socket_timeout_ms}); - my $cursor = $products_collection->query({}) - ->fields({_id => 1, code => 1, owner => 1, product_name => 1, brands => 1, scans_n => 1}); - $cursor->immortal(1); + my $cursor = $products_collection->query({}) + ->fields({_id => 1, code => 1, owner => 1, product_name => 1, brands => 1, scans_n => 1}); + $cursor->immortal(1); - while (my $product_ref = $cursor->next) { - my $code = $product_ref->{code}; - $flavors{all}{$code}++; - $flavors{$flavor}{$code}++; - # Check which flavor has the biggest product file - my $path = product_path($product_ref); - if (not defined $flavor_with_most_data{$code}) { - $flavor_with_most_data{$code} = $flavor; - $flavor_with_most_data_size{$code} = (-s "/srv/$flavor/products/$path/product.sto") || 0; - } - if (((-s "/srv/$flavor/products/$path/product.sto") || 0) > $flavor_with_most_data_size{$code}) { - $flavor_with_most_data{$code} = $flavor; - $flavor_with_most_data_size{$code} = (-s "/srv/$flavor/products/$path/product.sto") || 0; - } - if (($product_ref->{scans_n} || 0) > ($scans{$code} || 0)) { - $scans{$code} = $product_ref->{scans_n} || 0; - } - if (not defined $product_names{$code}) { - $product_names{$code} = $product_ref->{product_name}; - } - if (not defined $brands{$code}) { - $brands{$code} = $product_ref->{brands}; + while (my $product_ref = $cursor->next) { + my $code = $product_ref->{code}; + $flavors{all}{$code}++; + $flavors{$flavor}{$code}++; + # Check which flavor has the biggest product file + my $path = product_path($product_ref); + if (not defined $flavor_with_most_data{$code}) { + $flavor_with_most_data{$code} = $flavor; + $flavor_with_most_data_size{$code} = (-s "/srv/$flavor/products/$path/product.sto") || 0; + } + if (((-s "/srv/$flavor/products/$path/product.sto") || 0) > $flavor_with_most_data_size{$code}) { + # retrieve the product to check it's not deleted + my $flavor_product_ref = retrieve("/srv/$flavor/products/$path/product.sto"); + if ((defined $flavor_product_ref) and (not $flavor_product_ref->{deleted})) { + $flavor_with_most_data{$code} = $flavor; + $flavor_with_most_data_size{$code} = (-s "/srv/$flavor/products/$path/product.sto") || 0; + } + } + if (($product_ref->{scans_n} || 0) > ($scans{$code} || 0)) { + $scans{$code} = $product_ref->{scans_n} || 0; + } + if (not defined $product_names{$code}) { + $product_names{$code} = $product_ref->{product_name}; + } + if (not defined $brands{$code}) { + $brands{$code} = $product_ref->{brands}; + } } } } diff --git a/taxonomies/additives.txt b/taxonomies/additives.txt index b0ad5e11b755c..71a49012db47f 100644 --- a/taxonomies/additives.txt +++ b/taxonomies/additives.txt @@ -1101,7 +1101,7 @@ lv: E133, Briljantzilais FCF mt: E133, Blu brillanti FCF nb: E133, briljantblà FCF nl: E133, Briljantblauw FCF, Briljantblauw -pl: E133, Błękit brylantowy FCF +pl: E133, Błękit brylantowy FCF, Błękit brylantowy pt: E133, Azul brilhante FCF ro: E133, Albastru briliant FCF sh: E133, Brilijantno plavo FCF diff --git a/taxonomies/food/categories.txt b/taxonomies/food/categories.txt index f228589f17989..073488fabda37 100644 --- a/taxonomies/food/categories.txt +++ b/taxonomies/food/categories.txt @@ -116633,7 +116633,7 @@ nl: Eendterrine met morieljes < en:Duck terrines fr: Terrines de canard au muscat -en: Dietary supplements +en: Dietary supplements, food supplements af: Diëet aanvulling ar: مكمل غذائي bs: Prehrambeni suplement @@ -116647,7 +116647,7 @@ es: Suplementos dietéticos, Complementos alimenticios eu: Elikadura-osagarri fa: مکمل‌های غذایی طبیعی fi: Ravintolisät, Lisäravintoaine -fr: Compléments alimentaires +fr: Compléments alimentaires, complément alimentaire gl: Suplemento dietético he: תוספי תזונה hi: खाद्य पूरक diff --git a/taxonomies/food/ingredients.txt b/taxonomies/food/ingredients.txt index 1afd883bf7986..792a30f92f1b9 100644 --- a/taxonomies/food/ingredients.txt +++ b/taxonomies/food/ingredients.txt @@ -1211,7 +1211,7 @@ it: fermenti lattici, coltura di batteri acidolattici, fermenti lattici vivi, fe lt: jogurtinės bakterijos nb: melkesyrekultur, starterkultur, yoghurtkultur, yoghurtbakterier, syrekultur nl: melkfermenten, melkkiemen, Melkzuurbacteriën, zuursel, yoghurtcultuur, yoghurtculturen -pl: żywe kultury bakterii jogurtowych, bakterie fermentacji mlekowej, kultury bakterii mlekowych, kultury bakterii kwasu mlekowego, kultury bakterii jogurtowych, bakterie fermentacji kwasu mlekowego, bakterie kwasu mlekowego, żywe kultury bakterii mlekowych, kultury bakterii fermentacji mlekowej +pl: żywe kultury bakterii jogurtowych, bakterie fermentacji mlekowej, kultury bakterii mlekowych, kultury bakterii kwasu mlekowego, kultury bakterii jogurtowych, bakterie fermentacji kwasu mlekowego, bakterie kwasu mlekowego, żywe kultury bakterii mlekowych, kultury bakterii fermentacji mlekowej, kultury mleczarskie pt: fermentos lácteos, culturas lácteas, leveduras lacteas, fermentos láticos, fermentos lácticos ro: culturi lactice, culturi lactice selecționate, culturi lactice selectionate, fermenți de iaurt, fermenti de iaurt, fermenți lactici, fermenti lactici ru: Молочные ферменты, пробиотические микроорганизм @@ -3172,14 +3172,14 @@ en: semi-skimmed milk, reduced-fat milk, partly skimmed milk, partially skimmed bg: полуобезмаслено мляко ca: llet parcialment desnatada, llet semidesnatada, llet parcialment desgreixada da: letmælk -de: teilentrahmte milch +de: teilentrahmte milch, Halbentrahmte Milch es: leche parcialmente desnatada, leche semidesnatada, Leche semidescremada, leche parcialmente descremada fi: kevytmaito fr: lait demi-écrémé, lait partiellement écrémé, lait semi-écrémé, Lait à 15.5 g/l de matière grasse hr: djelomično obrano mlijeko, djelimično obrano mlijeko hu: zsírszegény tej, félzsíros tej is: léttmjólk -it: latte parzialmente scremato +it: latte parzialmente scremato, Latte semiscremato nb: lettmelk nl: halfvolle melk, gedeeltelijk afgeroomde melk pl: Mleko półtłuste @@ -20527,7 +20527,7 @@ mk: Црвено вино nb: rødvin nl: rode wijn nn: Raudvin -pl: Wino czerwone +pl: Wino czerwone, czerwone wino pt: vinho tinto ro: vin roșu ru: красное вино @@ -21646,6 +21646,7 @@ de: Grillaroma es: aroma a barbacoa fr: base aromatisante barbecue hr: aroma za roštilj +pl: aromat barbecue # ingredient/fr:base-aromatisante-barbecue has 28 products in 2 languages @2019-03-01 < en:flavouring @@ -21780,6 +21781,7 @@ hr: prirodna aroma kikirikija < en:flavouring en: rum flavouring hr: aroma rum, rum aroma +pl: aromat rumowy < en:natural flavouring < en:rum flavouring @@ -21789,6 +21791,7 @@ fi: luontainen rommiaromi fr: arôme naturel de rhum hr: prirodna aroma ruma hu: természetes rumaroma, természetes rum aroma +pl: naturalny aromat rumowy < en:preparation < en:rum flavouring @@ -22093,6 +22096,7 @@ hr: aroma čokolade hu: csokoládé aroma it: aroma di cioccolato nl: chocoladesmaak +pl: aromat czekolady, aromat czekoladowy ro: aromă de ciocolată < en:flavouring @@ -22270,6 +22274,7 @@ hr: prirodna aroma kruške hu: természetes körte aroma it: aroma naturale di pera nl: natuurlijk perenaroma +pl: naturalny aromat gruszkowy < en:flavouring < en:natural pear flavouring @@ -24729,7 +24734,7 @@ hu: durumbúzaiszt, durum búzaliszt #145 in 7 @2021-09-28 it: farina di grano duro integrale, farina integrale di grano duro nl: volkoren tarwegriesmeel -pl: pełnoziarnista mąka z pszenicy durum, pełnoziarnista mąka z pszenicy twardej +pl: pełnoziarnista mąka z pszenicy durum, pełnoziarnista mąka z pszenicy twardej, mąka pełnoziarnista z pszenicy twardej ru: цельно зерновая мука из твердых сортов пшеницы < en:durum wheat @@ -27389,12 +27394,13 @@ pl: kiełki orkiszu # ingredient/nl:biologische-spelt has 1 product @2019-05-24 < en:spelt -fr: flocons d'épeautre -de: Dinkelflocken +fr: flocons d'épeautre, flocons blé d'épeautre +de: Dinkelflocken, Dinkelweizenflocken fi: spelttihiutale hr: pirove pahuljice hu: tönkölybúzapehely it: fiocchi di quinoa +nl: spelttarwevlokken pl: płatki orkiszowe # openfoodfacts:https://world.openfoodfacts.org/ingredient/fr:flocons-d'épeautre # 69 products in 3 languages @2018-09-22 @@ -27459,7 +27465,7 @@ hr: pirovo brašno, pirovo pšenično brašno hu: tönkölyliszt it: farina di spelta, farina di farro spelta la: Triticum spelta -nl: speltmeel, speltbloem +nl: speltmeel, speltbloem, spelttarwemeel pl: mąka orkiszowa, mąka z pszenicy orkisz pt: farinha de espelta sk: múka z pšenice špaldy @@ -27489,10 +27495,10 @@ fr: farine d'épeautre type 110, Farine de blé d'épeautre T110 en: wholemeal spelt flour, whole grain spelt flour, wholegrain spelt flour bg: пълнозърнесто брашно от спелта ca: farina de blat d'espelta integral, farina integral de blat d'espelta -de: Dinkelvollkornmehl, dinkel vollkornmehl +de: Dinkelvollkornmehl, dinkel vollkornmehl, Dinkelweizenvollkornmehl es: harina de espelta integral, harina integral de espelta, harina integral de trigo de espelta fi: täysjyväspelttijauho, täysjyväspelttivehnäjauho -fr: farine complète d’épeautre, farine d'épeautre complète, farine d'épeautre complet +fr: farine complète d’épeautre, farine d'épeautre complète, farine d'épeautre complet, farine complète blé d'épeautre hr: brašno od cjelovitog zrna pira, brašno iz cijelog zrna pira, pirovo brašno od cjelovitog zrna, pirovo pšenično brašno od cjelovitog zrna hu: teljes kiőrlésű tönkölyliszt it: farina integrale di spelta @@ -27910,7 +27916,7 @@ hu: búzamaláta liszt it: farina di grano maltato, farina di malto di frumento lt: salykliniai kvietiniai miltai nl: gemout tarwemeel, tarwemoutmeel, tarwemoutbloem -pl: mąka słodowa pszenna, mąka pszenna słodowana +pl: mąka słodowa pszenna, mąka pszenna słodowana, mąka pszenna słodowa pt: farinha de malte de trigo sv: vetemaltmjöl @@ -27958,6 +27964,7 @@ fr: Farine de froment T55, Farine de froment T55 pour pains < en:wheat flour fr: farine de blé type 65, farine de blé t65 nl: tarwemeel T65 +pl: mąka pszenna typ 650 < en:wheat flour en: refined wheat flour, maida @@ -28120,7 +28127,7 @@ lt: visų grūdo dalių kvietiniai miltai lv: pilngraudu kviešu milti nb: fullkornshvetemel nl: volkorentarwemeel, volkoren tarwemeel -pl: Mąka pszenna pełnoziarnista, mąka pszenna razowa +pl: Mąka pszenna pełnoziarnista, mąka pszenna razowa, pełnoziarnista mąka pszenna, mąka pełnoziarnista pszenna pt: farinha de trigo integral, farinha integral de trigo ro: făină integrală de grâu sv: fullkornsvetemjöl, grahamsmjöl av vete @@ -28181,6 +28188,7 @@ fi: hieno vehnäjauho fr: farine de blé tendre, farine de blés tendres hr: meko pšenično brašno it: farina di grano tenero +pl: mąka z pszenicy miękkiej, mąka z miękkiej pszenicy < en:soft wheat flour < en:wholemeal flour @@ -41886,6 +41894,21 @@ de: Kaffirlimettenschale, Kaffirlimettenschalen, Kaffernlimettenschale es: piel de lima Kaffir hr: kora kafirske limete +< en: citrus fruit +en: bergamot +fr: bergamote + +< en: bergamot +en: bergamot leaf, bergamot leaves +eurocode_2_group_2:en: 12.20 +eurocode_2_group_3:en: 12.20.16 + +< en: bergamot +en: bergamot flower +fr: fleur de bergamote, fleurs de bergamote +eurocode_2_group_2:en: 12.20 +eurocode_2_group_3:en: 12.20.16 + < en:fruit en: kumquat, kumquats af: koemkwat @@ -45413,7 +45436,6 @@ vi: Củ khởi wikidata:en: Q2617260 wikipedia:en: https://en.wikipedia.org/wiki/Goji - < en:goji en: dried goji berries de: getrocknete Goji-Beeren @@ -49940,7 +49962,7 @@ it: indivia riccia la: Cichorium endivia var. crispum lv: krokainā endīvija, krokaino lapu endīvija nl: krulandijvie, frisée sla -pl: endywia kędzierzawa +pl: endywia kędzierzawa, endywia frisee pt: chicória frisada, chicória crespa sk: čakanka štrbáková pravá kučeravá sv: frisésallat, friséesallat @@ -49967,7 +49989,7 @@ lt: salotinė trūkažolė lv: platlapu endīvija mt: indivja tal-weraq wiesa' nl: kropandijvie, andijvie breedblad -pl: endywia szerokolistna +pl: endywia szerokolistna, endywia escarola sv: escarolesallat description:en: Escarole, or broad-leaved endive (var latifolia), has broad, pale green leaves and is less bitter than the other varieties. Varieties or names include Batavian endive, grumolo, scarola, and scarole. #pcd:pindchucq @@ -51041,6 +51063,7 @@ ciqual_proxy_food_code:en: 11014 ciqual_proxy_food_name:en: Parsley, fresh ciqual_proxy_food_name:fr: Persil, frais # en:22363 in 51 @2021-09-16 +eurocode_2_group_2:en: 8.10 eurocode_2_group_3:en: 8.10.60 # aeb-arab:معدنوس # aeb-latn:ma3dnous @@ -52388,8 +52411,9 @@ ciqual_food_name:en: Fennel, raw ciqual_food_name:fr: Fenouil, cru ecobalyse:en: fennel-eu ecobalyse_origins_en_france:en: fennel-fr +eurocode_2_group_2:en: 12.20 +eurocode_2_group_3:en: 12.20.34 # 2221 in20 @2021-10-09 -eurocode_2_group_3:en: 8.20.20 wikidata:en: Q43511 # aeb-arab:بسباس # ast:fenoyu @@ -52412,7 +52436,6 @@ wikidata:en: Q43511 # zh-tw:茴香 wikipedia:en: https://en.wikipedia.org/wiki/Fennel - < en:stalk vegetable en: sea kale, seakale, crambe es: col marina @@ -55860,10 +55883,13 @@ description:fr: La Bourrache ou Bourrache officinale (Borago officinalis) est un description:it: La borragine (Borago officinalis L.) è una pianta erbacea annuale della famiglia delle Boraginaceae. Le foglie giovani sono variamente impiegate in cucina. description:nl: De bernagie (Borago officinalis), ook vaak komkommerkruid genoemd, is een gemakkelijk herkenbare, ruwharige, eenjarige plant met blauwe bloemen. Als voedsel wordt de plant vooral in het Middellandse Zeegebied gewaardeerd als onderdeel van salades en andere zomerse gerechten. description:pt: Borragem (Borago officinalis L.), é uma planta herbácea anual mediterrânea. Folhas e flores são utilizadas. +eurocode_2_group_2:en: 12.20 +eurocode_2_group_3:en: 12.20.20 wikidata:en: Q147075 wikipedia:en: https://en.wikipedia.org/wiki/Borage # 27 in 4 @2021-09-05 + < en:vegetable en: cardoon, artichoke thistle, cardoons ca: card @@ -60416,6 +60442,7 @@ uk: Адзукі vi: Đậu đỏ za: Lwglimz zh: 紅豆 +eurocode_2_group_2:en: 7.10 wikidata:en: Q380279 < en:legume @@ -64798,7 +64825,7 @@ da: urt, krydderurter de: Gewürz, Kräuter es: hierba, hierbas, plantas aromáticas, planta aromática, hierbas aromaticas, finas hierbas, mezcla de finas hierbas fi: yrtti, yrtit, mausteyrtit -fr: herbe, herbes, plantes aromatiques, plante aromatique, fines herbes, fine herbe, mélange de plantes aromatiques, herbes aromatiques +fr: herbe, herbes, plantes aromatiques, plante aromatique, fines herbes, fine herbe, mélange de plantes aromatiques, herbe aromatique, herbes aromatiques he: עשב hr: aromatskog bilja hu: gyógynövény, gyógynövények @@ -64811,6 +64838,8 @@ pt: plantas aromáticas ro: Ierburi, plante aromatice sl: zelišča sv: örter, örtkryddor, kryddörter +eurocode_2_group_2:en: 12.20 +nutriscore_fruits_vegetables_nuts:en: yes vegan:en: yes vegetarian:en: yes @@ -66203,6 +66232,9 @@ ur: میتھی vi: cỏ ca ri yi: באקסהארן zh: 胡芦巴 +# fr:fenugrec has 171 products in 5 languages @2018-10-23 +eurocode_2_group_2:en: 12.20 +eurocode_2_group_3:en: 12.20.36 #ach:haleuba #arz:حلبة #azb:چمن اوْتو @@ -66216,7 +66248,6 @@ zh: 胡芦巴 #wuu:胡芦巴 wikidata:en: Q133205 wikipedia:en: https://en.wikipedia.org/wiki/Fenugreek -# fr:fenugrec has 171 products in 5 languages @2018-10-23 < en:fenugreek en: fenugreek leaf, fenugreek leaves @@ -66979,8 +67010,10 @@ sv: korianderblad ciqual_food_code:en: 11094 ciqual_food_name:en: Coriander, fresh ciqual_food_name:fr: Coriandre, fraiche -wikidata:en: Q65523167 # 4528 in 9 @2021-09-28 +eurocode_2_group_2:en: 12.20 +eurocode_2_group_3:en: 12.20.38 +wikidata:en: Q65523167 #processing:en: en:dried # [% END %] [% END %] diff --git a/templates/web/common/includes/producers_platform_front_page.tt.html b/templates/web/common/includes/producers_platform_front_page.tt.html index 0e5c70122413a..9842a89eb2a83 100644 --- a/templates/web/common/includes/producers_platform_front_page.tt.html +++ b/templates/web/common/includes/producers_platform_front_page.tt.html @@ -11,7 +11,11 @@ [% facet.number_of_products %][% sep %]: [% facet.count %]

- [% END %] + [% END %] + + [% IF add_products_to_discover_the_evolution_of_their_nutriscore_grades %] +

[% lang("add_products_to_discover_the_evolution_of_their_nutriscore_grades") %]

+ [% END %]

[% lang("your_products") %]

diff --git a/templates/web/common/site_layout.tt.html b/templates/web/common/site_layout.tt.html index 954a885d12eee..82b91403cf6a9 100644 --- a/templates/web/common/site_layout.tt.html +++ b/templates/web/common/site_layout.tt.html @@ -31,9 +31,12 @@ [% analytics %] + [% IF ! content_only %] + [% END %]
+ [% IF ! content_only %]
+ [% END %]
- + + [% IF ! content_only %]
+ [% END %]
+ + [% IF ! content_only %] @@ -273,8 +281,12 @@ [% END %] + [% END %] +
+ + [% IF ! content_only %] [% IF ! server_options_producers_platform %] [%# for now, display the packagings banner in all cases %] [% IF 1 == 0 %] @@ -292,6 +304,7 @@ [% banner_main %] [% END %] [% END %] + [% END %] [% IF page_format == "banner" %] @@ -329,6 +342,7 @@

[% title %]

+ [% IF ! content_only %]
@@ -423,6 +437,7 @@

[% lang('footer_discover_the_project') %]

+ [% END %]
diff --git a/tests/integration/api_v3_product_services.t b/tests/integration/api_v3_product_services.t index eae5f9792a7e2..0b742195a1244 100644 --- a/tests/integration/api_v3_product_services.t +++ b/tests/integration/api_v3_product_services.t @@ -173,6 +173,35 @@ JSON "ingredients_text_fr": "sucre, huile de palme, eau, quelque chose d'inconnu" } } +JSON + }, + + # determine_food_contact_of_packaging_components + { + test_case => 'determine-food-contact-of-packaging-components-service', + method => 'POST', + path => '/api/v3/product_services', + body => <Skip to Content
+
+
+
- + +
+
+ + + +
+ + @@ -343,6 +355,7 @@

Please give to our 2024 Fundraiser

+
@@ -358,6 +371,7 @@

Error

+
@@ -512,6 +526,7 @@

Discover the project

+
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 515b92aa34b9d..2eafe4a5d64e1 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 @@ -817,7 +817,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", 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 6fac5d9327529..2f2189c2ee8d3 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 @@ -1105,7 +1105,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -2441,7 +2442,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -2452,7 +2453,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -2463,7 +2464,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -2638,7 +2639,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -2652,7 +2653,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ @@ -2753,7 +2754,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-fields-all.json b/tests/integration/expected_test_results/api_v2_product_read/get-fields-all.json index 4fd9dd7d5f4ae..76155a3551da3 100644 --- a/tests/integration/expected_test_results/api_v2_product_read/get-fields-all.json +++ b/tests/integration/expected_test_results/api_v2_product_read/get-fields-all.json @@ -817,7 +817,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", 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 0d962a25d7890..30c9009a30b64 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 @@ -1759,7 +1759,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -3095,7 +3096,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -3106,7 +3107,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -3117,7 +3118,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -3292,7 +3293,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -3306,7 +3307,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ @@ -3407,7 +3408,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json b/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json index a9cd31139ff80..a89b615a3acf0 100644 --- a/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json +++ b/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json @@ -241,7 +241,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -603,7 +604,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -614,7 +615,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -625,7 +626,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json b/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json index aa79d9be016fb..50f76992c4e91 100644 --- a/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json +++ b/tests/integration/expected_test_results/api_v2_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json @@ -324,7 +324,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -1615,7 +1616,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -1626,7 +1627,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -1637,7 +1638,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -1812,7 +1813,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -1826,7 +1827,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-fields-raw.json b/tests/integration/expected_test_results/api_v2_product_read/get-fields-raw.json index 855fbd7719d7c..f29c0775f626b 100644 --- a/tests/integration/expected_test_results/api_v2_product_read/get-fields-raw.json +++ b/tests/integration/expected_test_results/api_v2_product_read/get-fields-raw.json @@ -815,7 +815,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels-fr.json b/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels-fr.json index 215571166526a..eb8e2f063e107 100644 --- a/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels-fr.json +++ b/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels-fr.json @@ -331,7 +331,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Impact modéré sur l'environnement", + "subtitle" : "Impact modéré sur l'environnement", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -1667,7 +1668,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Boîte\n \n \n \n (Bois)\n \n
\n \n \n \n \n \n 3 x \n \n Couvercle\n \n \n \n (Acier)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Boîte\n \n \n \n (Bois)\n \n \n
\n \n \n \n \n \n 3 x \n \n Couvercle\n \n \n \n (Acier)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycler", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -1678,7 +1679,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastique)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastique)\n \n \n
\n \n \n ", "icon_alt" : "Jeter", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -1689,7 +1690,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bouteille\n 25cl \n \n \n (Verre)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bouteille\n 25cl \n \n \n (Verre)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Inconnu", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -1864,7 +1865,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Plusieurs études ont montré qu'une consommation élevée d'aliments ultra-transformés est associée à un risque accru de maladies chroniques non transmissibles, telles que l'obésité, l'hypertension et le diabète.\n ", + "html" : "\n Plusieurs études ont montré qu'une consommation plus faible d'aliments ultra-transformés est associée à un risque diminué de maladies chroniques non transmissibles, telles que l'obésité, l'hypertension et le diabète.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -1878,7 +1879,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Les aliments ultra-transformés augmentent le risque de maladies chroniques", + "subtitle" : "Limiter les aliments ultra-transformés réduit le risque de maladies chroniques", "title" : "Limiter les aliments ultra-transformés" }, "topics" : [ diff --git a/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels.json b/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels.json index a3e2e95af0c96..54e20a386b30f 100644 --- a/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels.json +++ b/tests/integration/expected_test_results/api_v2_product_read/get-knowledge-panels.json @@ -324,7 +324,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -1660,7 +1661,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -1671,7 +1672,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -1682,7 +1683,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -1857,7 +1858,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -1871,7 +1872,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ diff --git a/tests/integration/expected_test_results/api_v2_product_write/get-product-auth-good-password.json b/tests/integration/expected_test_results/api_v2_product_write/get-product-auth-good-password.json index 220bc7d308d75..7bf6dac553527 100644 --- a/tests/integration/expected_test_results/api_v2_product_write/get-product-auth-good-password.json +++ b/tests/integration/expected_test_results/api_v2_product_write/get-product-auth-good-password.json @@ -669,7 +669,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-no-packagings", "en:environmental-score-missing-data-origins", 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 e1e0e07eff303..0c4acb88f94c9 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 @@ -325,6 +325,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -456,7 +457,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-2021-better-than-2023", "en:nutriscore-2021-d-2023-e", 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 ce59bc7310cc8..3244ea2693640 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 @@ -667,7 +667,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-no-packagings", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v2_product_write/post-product-auth-bad-user-password.html b/tests/integration/expected_test_results/api_v2_product_write/post-product-auth-bad-user-password.html index 0bc5b6959f84d..07d84208f020b 100644 --- a/tests/integration/expected_test_results/api_v2_product_write/post-product-auth-bad-user-password.html +++ b/tests/integration/expected_test_results/api_v2_product_write/post-product-auth-bad-user-password.html @@ -62,9 +62,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -343,6 +355,7 @@

Merci de contribuer à notre collecte de +
@@ -358,6 +371,7 @@

Erreur

+
@@ -512,6 +526,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-api-v3-1.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-api-v3-1.json index d724ed8466d93..6356949adce05 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-api-v3-1.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-api-v3-1.json @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-ai-data-str.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-ai-data-str.json index 71cd0f464f50f..76bab894fc690 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-ai-data-str.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-ai-data-str.json @@ -1,5 +1,5 @@ { - "code" : "04260392550101", + "code" : "4260392550101", "errors" : [], "product" : { "_id" : "4260392550101", @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", @@ -1106,7 +1105,7 @@ { "field" : { "id" : "code", - "value" : "04260392550101" + "value" : "4260392550101" }, "impact" : { "id" : "none", 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 1ae982623c0be..4a5c4ef3ba3ac 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 @@ -1,5 +1,5 @@ { - "code" : "04260392550101", + "code" : "4260392550101", "errors" : [], "product" : { "_id" : "4260392550101", @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", @@ -1106,7 +1105,7 @@ { "field" : { "id" : "code", - "value" : "04260392550101" + "value" : "4260392550101" }, "impact" : { "id" : "none", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-data-uri.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-data-uri.json index 1ae982623c0be..4a5c4ef3ba3ac 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-data-uri.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-data-uri.json @@ -1,5 +1,5 @@ { - "code" : "04260392550101", + "code" : "4260392550101", "errors" : [], "product" : { "_id" : "4260392550101", @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", @@ -1106,7 +1105,7 @@ { "field" : { "id" : "code", - "value" : "04260392550101" + "value" : "4260392550101" }, "impact" : { "id" : "none", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-fnc1.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-fnc1.json index 71cd0f464f50f..76bab894fc690 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-fnc1.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-fnc1.json @@ -1,5 +1,5 @@ { - "code" : "04260392550101", + "code" : "4260392550101", "errors" : [], "product" : { "_id" : "4260392550101", @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", @@ -1106,7 +1105,7 @@ { "field" : { "id" : "code", - "value" : "04260392550101" + "value" : "4260392550101" }, "impact" : { "id" : "none", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-gs.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-gs.json index 1ae982623c0be..4a5c4ef3ba3ac 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-gs.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-gs1-gs.json @@ -1,5 +1,5 @@ { - "code" : "04260392550101", + "code" : "4260392550101", "errors" : [], "product" : { "_id" : "4260392550101", @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", @@ -1106,7 +1105,7 @@ { "field" : { "id" : "code", - "value" : "04260392550101" + "value" : "4260392550101" }, "impact" : { "id" : "none", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-with-leading-zero.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-with-leading-zero.json index e1abf80e777d1..76bab894fc690 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-with-leading-zero.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product-with-leading-zero.json @@ -1,5 +1,5 @@ { - "code" : "04260392550101", + "code" : "4260392550101", "errors" : [], "product" : { "_id" : "4260392550101", @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", @@ -1101,6 +1100,23 @@ "lc_name" : "Product found", "name" : "Product found" }, - "status" : "success", - "warnings" : [] + "status" : "success_with_warnings", + "warnings" : [ + { + "field" : { + "id" : "code", + "value" : "4260392550101" + }, + "impact" : { + "id" : "none", + "lc_name" : "None", + "name" : "None" + }, + "message" : { + "id" : "different_normalized_product_code", + "lc_name" : "", + "name" : "" + } + } + ] } diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product.json b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product.json index affe982a09b00..2b261a8ae80ab 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-existing-product.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-existing-product.json @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-fields-all-knowledge-panels.json b/tests/integration/expected_test_results/api_v3_product_read/get-fields-all-knowledge-panels.json index 8946b54cd9d33..50131e18877a8 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-fields-all-knowledge-panels.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-fields-all-knowledge-panels.json @@ -1099,7 +1099,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -2065,7 +2066,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -2076,7 +2077,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -2087,7 +2088,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -2262,7 +2263,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -2276,7 +2277,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ @@ -2377,7 +2378,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-fields-all.json b/tests/integration/expected_test_results/api_v3_product_read/get-fields-all.json index affe982a09b00..2b261a8ae80ab 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-fields-all.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-fields-all.json @@ -811,7 +811,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-fields-attribute-groups-all-knowledge-panels.json b/tests/integration/expected_test_results/api_v3_product_read/get-fields-attribute-groups-all-knowledge-panels.json index b42e8c1e15c53..eb49a710d9ae2 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-fields-attribute-groups-all-knowledge-panels.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-fields-attribute-groups-all-knowledge-panels.json @@ -1745,7 +1745,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -2711,7 +2712,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -2722,7 +2723,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -2733,7 +2734,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -2908,7 +2909,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -2922,7 +2923,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ @@ -3023,7 +3024,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json b/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json index 666ac512087ec..4f2d7f7c762f2 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card-knowledge_panels_excluded-health_card.json @@ -242,7 +242,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -604,7 +605,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -615,7 +616,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -626,7 +627,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json b/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json index 8017985d21641..cf4c1570bd0ec 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-fields-knowledge-panels-knowledge-panels_included-health_card-environment_card.json @@ -325,7 +325,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -1246,7 +1247,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -1257,7 +1258,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -1268,7 +1269,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -1443,7 +1444,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -1457,7 +1458,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-fields-raw.json b/tests/integration/expected_test_results/api_v3_product_read/get-fields-raw.json index 34a51cd9c3791..2c8824d9b526a 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-fields-raw.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-fields-raw.json @@ -809,7 +809,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels-fr.json b/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels-fr.json index 68e2d2ede965a..ce5d7e688e8c1 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels-fr.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels-fr.json @@ -332,7 +332,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Impact modéré sur l'environnement", + "subtitle" : "Impact modéré sur l'environnement", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -1298,7 +1299,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Boîte\n \n \n \n (Bois)\n \n
\n \n \n \n \n \n 3 x \n \n Couvercle\n \n \n \n (Acier)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Boîte\n \n \n \n (Bois)\n \n \n
\n \n \n \n \n \n 3 x \n \n Couvercle\n \n \n \n (Acier)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycler", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -1309,7 +1310,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastique)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastique)\n \n \n
\n \n \n ", "icon_alt" : "Jeter", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -1320,7 +1321,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bouteille\n 25cl \n \n \n (Verre)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bouteille\n 25cl \n \n \n (Verre)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Inconnu", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -1495,7 +1496,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Plusieurs études ont montré qu'une consommation élevée d'aliments ultra-transformés est associée à un risque accru de maladies chroniques non transmissibles, telles que l'obésité, l'hypertension et le diabète.\n ", + "html" : "\n Plusieurs études ont montré qu'une consommation plus faible d'aliments ultra-transformés est associée à un risque diminué de maladies chroniques non transmissibles, telles que l'obésité, l'hypertension et le diabète.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -1509,7 +1510,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Les aliments ultra-transformés augmentent le risque de maladies chroniques", + "subtitle" : "Limiter les aliments ultra-transformés réduit le risque de maladies chroniques", "title" : "Limiter les aliments ultra-transformés" }, "topics" : [ diff --git a/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels.json b/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels.json index e3339ee061965..189f2c1181961 100644 --- a/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels.json +++ b/tests/integration/expected_test_results/api_v3_product_read/get-knowledge-panels.json @@ -325,7 +325,8 @@ "grade" : "c", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-c.svg", "name" : "Green-Score", - "title" : "Green-Score C - Moderate environmental impact", + "subtitle" : "Moderate environmental impact", + "title" : "Green-Score C", "type" : "grade" }, "topics" : [ @@ -1291,7 +1292,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "good", - "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n
\n \n \n \n \n ", + "html" : "\n \n \n 1 x \n \n Box\n \n \n \n (Wood)\n \n \n
\n \n \n \n \n \n 3 x \n \n Lid\n \n \n \n (Steel)\n \n \n
\n \n \n \n \n ", "icon_alt" : "Recycle", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/recycle-variant.svg", @@ -1302,7 +1303,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "bad", - "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n \n \n \n \n \n \n 1 x \n \n Film\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Discard", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/delete.svg", @@ -1313,7 +1314,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n
\n \n \n \n \n \n \n ", + "html" : "\n \n \n \n \n 6 x \n \n Bottle\n 25cl \n \n \n (Glass)\n \n \n
\n \n \n \n \n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", @@ -1488,7 +1489,7 @@ { "element_type" : "text", "text_element" : { - "html" : "\n Several studies have found that a high consumption of ultra-processed foods is associated with an increased risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", + "html" : "\n Several studies have found that a lower consumption of ultra-processed foods is associated with a reduced risk of noncommunicable chronic diseases, such as obesity, hypertension and diabetes.\n ", "source_language" : "en", "source_text" : "Ultra-processed foods increase noncommunicable chronic disease risk", "source_url" : "https://pubmed.ncbi.nlm.nih.gov/34798466/", @@ -1502,7 +1503,7 @@ "evaluation" : "bad", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/arrow-bottom-right-thick.svg", - "subtitle" : "Ultra-processed foods increase noncommunicable chronic disease risk", + "subtitle" : "Limiting ultra-processed foods reduces the risk of noncommunicable chronic diseases", "title" : "Limit ultra-processed foods" }, "topics" : [ diff --git a/tests/integration/expected_test_results/api_v3_product_services/determine-food-contact-of-packaging-components-service.json b/tests/integration/expected_test_results/api_v3_product_services/determine-food-contact-of-packaging-components-service.json new file mode 100644 index 0000000000000..cf58f22d011ba --- /dev/null +++ b/tests/integration/expected_test_results/api_v3_product_services/determine-food-contact-of-packaging-components-service.json @@ -0,0 +1,42 @@ +{ + "errors" : [], + "fields" : [ + "updated" + ], + "product" : { + "packagings" : [ + { + "food_contact" : 1, + "material" : { + "id" : "en:plastic" + }, + "shape" : { + "id" : "en:tray" + } + }, + { + "food_contact" : 1, + "material" : { + "id" : "en:plastic" + }, + "shape" : { + "id" : "en:film" + } + }, + { + "food_contact" : 0, + "material" : { + "id" : "en:paper" + }, + "shape" : { + "id" : "en:label" + } + } + ] + }, + "services" : [ + "determine_food_contact_of_packaging_components" + ], + "status" : "success", + "warnings" : [] +} diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-fr-fields.json b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-fr-fields.json index e99e6ba62c152..97efcb3018e28 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-fr-fields.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-fr-fields.json @@ -3,7 +3,6 @@ "errors" : [], "product" : { "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-quantity-and-weight.json b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-quantity-and-weight.json index 1e27a1c9b4903..61afb19b60a07 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-quantity-and-weight.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-quantity-and-weight.json @@ -3,7 +3,6 @@ "errors" : [], "product" : { "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings-with-units.json b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings-with-units.json index b1836783178d8..6692649b0a12a 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings-with-units.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings-with-units.json @@ -3,7 +3,6 @@ "errors" : [], "product" : { "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings.json b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings.json index 9ecb3aa666c29..69a77847ba4da 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-packagings-weights-as-strings.json @@ -3,7 +3,6 @@ "errors" : [], "product" : { "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-all.json b/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-all.json index 59bfd1cba3593..7f3650a0101ad 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-all.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-all.json @@ -309,6 +309,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -347,7 +348,6 @@ "lc" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-environmental_score-data.json b/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-environmental_score-data.json index ef623be03f3b6..893f13edbcee6 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-environmental_score-data.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-environmental_score-data.json @@ -248,6 +248,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-updated-attribute-groups-knowledge-panels.json b/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-updated-attribute-groups-knowledge-panels.json index c186a9b70399a..78752fc8332d8 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-updated-attribute-groups-knowledge-panels.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-request-fields-updated-attribute-groups-knowledge-panels.json @@ -385,7 +385,8 @@ "title_element" : { "grade" : "unknown", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-unknown.svg", - "title" : "Green-Score not computed - Unknown environmental impact", + "subtitle" : "Unknown environmental impact", + "title" : "Green-Score not computed", "type" : "grade" }, "topics" : [ @@ -836,7 +837,7 @@ "element_type" : "text", "text_element" : { "evaluation" : "neutral", - "html" : "\n \n \n 1 x \n \n Bag\n \n \n \n (Plastic)\n \n
\n \n \n ", + "html" : "\n \n \n 1 x \n \n Bag\n \n \n \n (Plastic)\n \n \n
\n \n \n ", "icon_alt" : "Unknown", "icon_color_from_evaluation" : true, "icon_url" : "http://static.openfoodfacts.localhost/images/icons/dist/help.svg", diff --git a/tests/integration/expected_test_results/api_v3_product_write/patch-weight-as-number-or-string.json b/tests/integration/expected_test_results/api_v3_product_write/patch-weight-as-number-or-string.json index f4a4a2ad9c73e..b7c98eaaafefd 100644 --- a/tests/integration/expected_test_results/api_v3_product_write/patch-weight-as-number-or-string.json +++ b/tests/integration/expected_test_results/api_v3_product_write/patch-weight-as-number-or-string.json @@ -3,7 +3,6 @@ "errors" : [], "product" : { "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/change_product_code_and_product_type/get-product-with-new-code.json b/tests/integration/expected_test_results/change_product_code_and_product_type/get-product-with-new-code.json index 836db182c644d..0296661939163 100644 --- a/tests/integration/expected_test_results/change_product_code_and_product_type/get-product-with-new-code.json +++ b/tests/integration/expected_test_results/change_product_code_and_product_type/get-product-with-new-code.json @@ -313,6 +313,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -363,7 +364,6 @@ "lc" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/change_product_code_and_product_type/search-all-products.json b/tests/integration/expected_test_results/change_product_code_and_product_type/search-all-products.json index ac3fc01ca4108..98f4eb177e0bc 100644 --- a/tests/integration/expected_test_results/change_product_code_and_product_type/search-all-products.json +++ b/tests/integration/expected_test_results/change_product_code_and_product_type/search-all-products.json @@ -315,6 +315,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -361,7 +362,6 @@ "lc" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070167470.json b/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070167470.json index 161f7e6eceffd..85ee815a3141d 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070167470.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070167470.json @@ -314,6 +314,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -449,7 +450,6 @@ "main_countries_tags" : [], "max_imgid" : 3, "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070815746.json b/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070815746.json index 907afca3b216d..cf48660431474 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070815746.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/carrefour-images/products/3560070815746.json @@ -316,6 +316,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -487,7 +488,6 @@ "main_countries_tags" : [], "max_imgid" : 5, "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000838.json b/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000838.json index 294e4eecc90e8..4c92f37c00c71 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000838.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000838.json @@ -317,6 +317,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -362,7 +363,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000839.json b/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000839.json index 2e1724f80f9af..d0c91e0c59e6b 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000839.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/openfoodfacts_import_template_fr_test/products/5228857000839.json @@ -336,6 +336,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "ingredients" : 1, @@ -393,7 +394,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-nutrition-data", "en:nutriscore-missing-nutrition-data-energy", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390017165.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390017165.json index 8ee48506773af..ca577ec34f0a8 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390017165.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390017165.json @@ -351,6 +351,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -394,7 +395,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020745.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020745.json index 02211d46d4a29..bc4223183181b 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020745.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020745.json @@ -348,6 +348,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -391,7 +392,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020806.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020806.json index 1bdd519235f67..d179c90499c76 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020806.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020806.json @@ -337,6 +337,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -380,7 +381,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020998.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020998.json index 2b3d0f9d17aa5..e4fb868296a82 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020998.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390020998.json @@ -351,6 +351,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -394,7 +395,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021001.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021001.json index a6ee25103f357..5c7313460c0dc 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021001.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021001.json @@ -345,6 +345,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -388,7 +389,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021469.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021469.json index be2d31ca06ddc..e6e5ea56df182 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021469.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021469.json @@ -342,6 +342,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -385,7 +386,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021544.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021544.json index be9fa70b10e3b..ceaed5c811074 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021544.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021544.json @@ -345,6 +345,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -388,7 +389,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021568.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021568.json index 30f2119fb57cc..55ada10ac898e 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021568.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021568.json @@ -343,6 +343,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -386,7 +387,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021926.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021926.json index 7ea4746a09b26..5014a6e3f7d78 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021926.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390021926.json @@ -335,6 +335,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -378,7 +379,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024781.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024781.json index 2c5229cdc7e59..c79061d0ac3bc 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024781.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024781.json @@ -370,6 +370,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -413,7 +414,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024804.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024804.json index ce24bcd9b9465..5f4f2e6931050 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024804.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024804.json @@ -359,6 +359,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -402,7 +403,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024842.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024842.json index e5c2a30d85ade..adc9c0eb91c3e 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024842.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024842.json @@ -360,6 +360,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -403,7 +404,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024866.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024866.json index 73767e446385f..4a8b3a1d86b30 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024866.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390024866.json @@ -360,6 +360,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -403,7 +404,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025399.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025399.json index 4a6d5a5b01722..9437aed98b999 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025399.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025399.json @@ -352,6 +352,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -395,7 +396,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025863.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025863.json index 094b25099cc0b..08902c5a4af75 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025863.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390025863.json @@ -334,6 +334,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -377,7 +378,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026044.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026044.json index bacb6483a9a0e..cd018afd497bd 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026044.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026044.json @@ -355,6 +355,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -399,7 +400,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026648.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026648.json index 5d2d6de4a7858..2233abc3b8ed5 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026648.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026648.json @@ -371,6 +371,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -414,7 +415,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026754.json b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026754.json index ba3cc740bb5d3..b50f0214d6009 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026754.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/packagings-mousquetaires/products/3250390026754.json @@ -353,6 +353,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -396,7 +397,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/3270190128403.json b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/3270190128403.json index b54d2ccfabcec..6fba1bd308db0 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/3270190128403.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/3270190128403.json @@ -751,7 +751,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-score-above-100", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/4270190128403.json b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/4270190128403.json index 6ab42cb9619b0..1b2d8f5059ed9 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/4270190128403.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/4270190128403.json @@ -339,6 +339,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -462,7 +463,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-nutrition-data", "en:nutriscore-missing-nutrition-data-fat", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/5270190128403.json b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/5270190128403.json index b41ed10496bd5..dd335ffd3da04 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/5270190128403.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/5270190128403.json @@ -326,6 +326,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "labels" : 1, @@ -427,7 +428,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/7270190128403.json b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/7270190128403.json index a518d227a3dd8..8f3fb68ecd3ef 100644 --- a/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/7270190128403.json +++ b/tests/integration/expected_test_results/convert_and_import_excel_file/test/products/7270190128403.json @@ -322,6 +322,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -367,7 +368,6 @@ "lc_imported" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/data_quality_knowledge_panel/data-quality.json b/tests/integration/expected_test_results/data_quality_knowledge_panel/data-quality.json index 19a6d7c692041..80860e0d2f9d2 100644 --- a/tests/integration/expected_test_results/data_quality_knowledge_panel/data-quality.json +++ b/tests/integration/expected_test_results/data_quality_knowledge_panel/data-quality.json @@ -197,7 +197,8 @@ "title_element" : { "grade" : "unknown", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-unknown.svg", - "title" : "Green-Score not computed - Unknown environmental impact", + "subtitle" : "Unknown environmental impact", + "title" : "Green-Score not computed", "type" : "grade" }, "topics" : [ diff --git a/tests/integration/expected_test_results/data_quality_knowledge_panel/no-data-quality.json b/tests/integration/expected_test_results/data_quality_knowledge_panel/no-data-quality.json index 4f5141243d2f5..a3fb598da648d 100644 --- a/tests/integration/expected_test_results/data_quality_knowledge_panel/no-data-quality.json +++ b/tests/integration/expected_test_results/data_quality_knowledge_panel/no-data-quality.json @@ -160,7 +160,8 @@ "title_element" : { "grade" : "unknown", "icon_url" : "http://static.openfoodfacts.localhost/images/attributes/dist/green-score-unknown.svg", - "title" : "Green-Score not computed - Unknown environmental impact", + "subtitle" : "Unknown environmental impact", + "title" : "Green-Score not computed", "type" : "grade" }, "topics" : [ diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json index 80a5878c39e79..4c97d4d803fd5 100644 --- a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json @@ -564,7 +564,6 @@ "main_countries_tags" : [], "misc_tags" : [ "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", "en:environmental-score-missing-data-warning", diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json index 28bfd4d341a5c..2fb078903a2bc 100644 --- a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json @@ -335,6 +335,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -378,7 +379,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json index df57c12bd548c..f0b98b6962c4c 100644 --- a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json @@ -330,6 +330,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -373,7 +374,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json index 5bdaab07d59c9..5557c591a4b28 100644 --- a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json @@ -587,7 +587,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", "en:environmental-score-missing-data-packagings", diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json index 91c5544449016..2681425bc52a3 100644 --- a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json @@ -345,6 +345,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -388,7 +389,6 @@ "lc_imported" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json index 46dc894f5d417..903ac4b628b95 100644 --- a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json @@ -338,6 +338,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -382,7 +383,6 @@ "lc_imported" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json index 09f06fa5aaf0e..0a9c1c5fb6eb3 100644 --- a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json @@ -333,6 +333,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -376,7 +377,6 @@ "lc_imported" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/test/2003004006001.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006001.json index 669929d969b9a..9905e600ceeea 100644 --- a/tests/integration/expected_test_results/import_csv_file/test/2003004006001.json +++ b/tests/integration/expected_test_results/import_csv_file/test/2003004006001.json @@ -557,7 +557,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/import_csv_file/test/2003004006002.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006002.json index f52843d73229a..138dab92c8324 100644 --- a/tests/integration/expected_test_results/import_csv_file/test/2003004006002.json +++ b/tests/integration/expected_test_results/import_csv_file/test/2003004006002.json @@ -327,6 +327,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -370,7 +371,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/test/2003004006003.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006003.json index 4432e40f13911..66a3669f9702e 100644 --- a/tests/integration/expected_test_results/import_csv_file/test/2003004006003.json +++ b/tests/integration/expected_test_results/import_csv_file/test/2003004006003.json @@ -330,6 +330,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -373,7 +374,6 @@ "lc_imported" : "fr", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/test/2003004006004.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006004.json index b71f7f2b061ae..ad887da88a259 100644 --- a/tests/integration/expected_test_results/import_csv_file/test/2003004006004.json +++ b/tests/integration/expected_test_results/import_csv_file/test/2003004006004.json @@ -550,7 +550,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/integration/expected_test_results/import_csv_file/test/2003004006005.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006005.json index 4dd9a3e28a88c..dd78d0e5a5b7d 100644 --- a/tests/integration/expected_test_results/import_csv_file/test/2003004006005.json +++ b/tests/integration/expected_test_results/import_csv_file/test/2003004006005.json @@ -337,6 +337,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -380,7 +381,6 @@ "lc_imported" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/test/2003004006006.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006006.json index dbc79c6b53ab0..5fb55783b18d4 100644 --- a/tests/integration/expected_test_results/import_csv_file/test/2003004006006.json +++ b/tests/integration/expected_test_results/import_csv_file/test/2003004006006.json @@ -336,6 +336,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -380,7 +381,6 @@ "lc_imported" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/import_csv_file/test/2003004006007.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006007.json index 7dfd535fdf202..90b60e7896606 100644 --- a/tests/integration/expected_test_results/import_csv_file/test/2003004006007.json +++ b/tests/integration/expected_test_results/import_csv_file/test/2003004006007.json @@ -333,6 +333,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -376,7 +377,6 @@ "lc_imported" : "en", "main_countries_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/integration/expected_test_results/page_crawler/crawler-access-category-facet-page.html b/tests/integration/expected_test_results/page_crawler/crawler-access-category-facet-page.html index 50ef35d1dc98b..1aad6ac3399ac 100644 --- a/tests/integration/expected_test_results/page_crawler/crawler-access-category-facet-page.html +++ b/tests/integration/expected_test_results/page_crawler/crawler-access-category-facet-page.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -510,6 +523,7 @@

Hazelnut spreads

+
@@ -664,6 +678,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/crawler-access-product-page.html b/tests/integration/expected_test_results/page_crawler/crawler-access-product-page.html index 4cb7697439767..a7dd47c97a852 100644 --- a/tests/integration/expected_test_results/page_crawler/crawler-access-product-page.html +++ b/tests/integration/expected_test_results/page_crawler/crawler-access-product-page.html @@ -75,9 +75,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -356,6 +368,7 @@

Please give to our 2024 Fundraiser

+ @@ -2228,9 +2241,11 @@

Environment

> - Green-Score D - High environmental impact + Green-Score D

+ High environmental impact +
@@ -3596,7 +3611,7 @@

Report a problem

@@ -3701,6 +3716,7 @@

Data sources

+
@@ -3855,6 +3871,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/crawler-does-not-get-facet-knowledge-panels.html b/tests/integration/expected_test_results/page_crawler/crawler-does-not-get-facet-knowledge-panels.html index b61e73eabd34e..82c63dd00149a 100644 --- a/tests/integration/expected_test_results/page_crawler/crawler-does-not-get-facet-knowledge-panels.html +++ b/tests/integration/expected_test_results/page_crawler/crawler-does-not-get-facet-knowledge-panels.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -574,6 +587,7 @@

Cakes

+
@@ -728,6 +742,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/normal-user-access-category-facet-page.html b/tests/integration/expected_test_results/page_crawler/normal-user-access-category-facet-page.html index 6beb2dda2f5f4..3d9ac3ba14a7d 100644 --- a/tests/integration/expected_test_results/page_crawler/normal-user-access-category-facet-page.html +++ b/tests/integration/expected_test_results/page_crawler/normal-user-access-category-facet-page.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -551,6 +564,7 @@

+
@@ -705,6 +719,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/normal-user-access-editor-facet-page.html b/tests/integration/expected_test_results/page_crawler/normal-user-access-editor-facet-page.html index 2690088702f8b..8df59a4488289 100644 --- a/tests/integration/expected_test_results/page_crawler/normal-user-access-editor-facet-page.html +++ b/tests/integration/expected_test_results/page_crawler/normal-user-access-editor-facet-page.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/normal-user-access-list-of-tags.html b/tests/integration/expected_test_results/page_crawler/normal-user-access-list-of-tags.html index 31b47f21af8e4..2329cb83081f1 100644 --- a/tests/integration/expected_test_results/page_crawler/normal-user-access-list-of-tags.html +++ b/tests/integration/expected_test_results/page_crawler/normal-user-access-list-of-tags.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Please give to our 2024 Fundraiser

+
@@ -403,6 +416,7 @@

List of categories - World

+
@@ -557,6 +571,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/normal-user-access-nested-facet-page.html b/tests/integration/expected_test_results/page_crawler/normal-user-access-nested-facet-page.html index 52eb5ea986ce3..0cfc7aa2bf273 100644 --- a/tests/integration/expected_test_results/page_crawler/normal-user-access-nested-facet-page.html +++ b/tests/integration/expected_test_results/page_crawler/normal-user-access-nested-facet-page.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -546,6 +559,7 @@

+
@@ -700,6 +714,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/normal-user-access-product-page.html b/tests/integration/expected_test_results/page_crawler/normal-user-access-product-page.html index 4cb7697439767..a7dd47c97a852 100644 --- a/tests/integration/expected_test_results/page_crawler/normal-user-access-product-page.html +++ b/tests/integration/expected_test_results/page_crawler/normal-user-access-product-page.html @@ -75,9 +75,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -356,6 +368,7 @@

Please give to our 2024 Fundraiser

+ @@ -2228,9 +2241,11 @@

Environment

> - Green-Score D - High environmental impact + Green-Score D

+ High environmental impact +
@@ -3596,7 +3611,7 @@

Report a problem

@@ -3701,6 +3716,7 @@

Data sources

+
@@ -3855,6 +3871,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/normal-user-get-facet-knowledge-panels.html b/tests/integration/expected_test_results/page_crawler/normal-user-get-facet-knowledge-panels.html index c0e1967d87590..109899abf6c9f 100644 --- a/tests/integration/expected_test_results/page_crawler/normal-user-get-facet-knowledge-panels.html +++ b/tests/integration/expected_test_results/page_crawler/normal-user-get-facet-knowledge-panels.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -615,6 +628,7 @@

+
@@ -769,6 +783,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/page_crawler/normal-user-get-non-official-cc-lc.html b/tests/integration/expected_test_results/page_crawler/normal-user-get-non-official-cc-lc.html index 62ede781cc1dd..fadbfb1e110e3 100644 --- a/tests/integration/expected_test_results/page_crawler/normal-user-get-non-official-cc-lc.html +++ b/tests/integration/expected_test_results/page_crawler/normal-user-get-non-official-cc-lc.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -344,6 +356,7 @@

Please give to our 2024 Fundraiser

+ @@ -417,6 +430,7 @@

Contribute

+
@@ -571,6 +585,7 @@

Descubre el proyecto

+
diff --git a/tests/integration/expected_test_results/product_read/get-existing-product.html b/tests/integration/expected_test_results/product_read/get-existing-product.html index 517dc6b14408d..2a76ad866b0b5 100644 --- a/tests/integration/expected_test_results/product_read/get-existing-product.html +++ b/tests/integration/expected_test_results/product_read/get-existing-product.html @@ -73,9 +73,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -354,6 +366,7 @@

Please give to our 2024 Fundraiser

+ @@ -2652,9 +2665,11 @@

Environment

> - Green-Score C - Moderate environmental impact + Green-Score C + Moderate environmental impact +
@@ -4021,6 +4036,7 @@

Packaging

(Wood) +
@@ -4035,6 +4051,7 @@

Packaging

(Steel) +
@@ -4082,6 +4099,7 @@

Packaging

(Plastic) +
@@ -4123,6 +4141,7 @@

Packaging

(Glass) +
@@ -4772,7 +4791,7 @@

Report a problem

@@ -4877,6 +4896,7 @@

Data sources

+
@@ -5031,6 +5051,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/product_read/get-unexisting-product.html b/tests/integration/expected_test_results/product_read/get-unexisting-product.html index 667e5d61317ac..f09094ffe6786 100644 --- a/tests/integration/expected_test_results/product_read/get-unexisting-product.html +++ b/tests/integration/expected_test_results/product_read/get-unexisting-product.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form-moderator.html b/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form-moderator.html index d01dc99a69798..a68585369de77 100644 --- a/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form-moderator.html +++ b/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form-moderator.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -368,6 +380,7 @@

Merci de contribuer à notre collecte de +
@@ -653,6 +666,7 @@

Contribution

+
@@ -807,6 +821,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form.html b/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form.html index 241e6a7a2adcf..0c2761dfd1217 100644 --- a/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form.html +++ b/tests/integration/expected_test_results/protected_product/edit-protected-product-web-form.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -368,6 +380,7 @@

Merci de contribuer à notre collecte de +
@@ -653,6 +666,7 @@

Contribution

+
@@ -807,6 +821,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/protected_product/edit-unprotected-product-web-form.html b/tests/integration/expected_test_results/protected_product/edit-unprotected-product-web-form.html index 7ebffb4c5f049..ea2c905fd1d54 100644 --- a/tests/integration/expected_test_results/protected_product/edit-unprotected-product-web-form.html +++ b/tests/integration/expected_test_results/protected_product/edit-unprotected-product-web-form.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -368,6 +380,7 @@

Merci de contribuer à notre collecte de +
@@ -653,6 +666,7 @@

Contribution

+
@@ -807,6 +821,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2-moderator.json b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2-moderator.json index d4c6f1dc3fcb3..0c6c6ffe0ab91 100644 --- a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2-moderator.json +++ b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2-moderator.json @@ -376,6 +376,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "origins" : 1 @@ -592,7 +593,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", diff --git a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2.json b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2.json index 59df2a39cc1af..243ccf077c616 100644 --- a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2.json +++ b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-api-v2.json @@ -377,6 +377,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "origins" : 1 @@ -592,7 +593,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", diff --git a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form-moderator.json b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form-moderator.json index cac477dfcc150..59b1a98281204 100644 --- a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form-moderator.json +++ b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form-moderator.json @@ -380,6 +380,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "origins" : 1 @@ -596,7 +597,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", diff --git a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form.json b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form.json index a16213b67829a..e64c333e1d3e8 100644 --- a/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form.json +++ b/tests/integration/expected_test_results/protected_product/get-edited-protected-product-web-form.json @@ -381,6 +381,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "origins" : 1 @@ -596,7 +597,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", diff --git a/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-api-v2.json b/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-api-v2.json index cd913ac64adc2..da0a34e74cc49 100644 --- a/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-api-v2.json +++ b/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-api-v2.json @@ -376,6 +376,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "origins" : 1 @@ -590,7 +591,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", diff --git a/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-web-form.json b/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-web-form.json index 330f7ea38ade0..16fd01e8c3bf6 100644 --- a/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-web-form.json +++ b/tests/integration/expected_test_results/protected_product/get-edited-unprotected-product-web-form.json @@ -380,6 +380,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "origins" : 1 @@ -594,7 +595,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", diff --git a/tests/integration/expected_test_results/search_v1/search-no-filter.json b/tests/integration/expected_test_results/search_v1/search-no-filter.json index 37897d79ddaaa..8b2b2a4ede1c3 100644 --- a/tests/integration/expected_test_results/search_v1/search-no-filter.json +++ b/tests/integration/expected_test_results/search_v1/search-no-filter.json @@ -355,6 +355,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -548,7 +549,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", @@ -1291,6 +1291,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -1413,7 +1414,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-nutrition-data", "en:nutriscore-missing-nutrition-data-energy", @@ -1920,6 +1920,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -2089,7 +2090,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:forest-footprint-a", "en:forest-footprint-computed", @@ -2795,6 +2795,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -2945,7 +2946,6 @@ "main_countries_tags" : [], "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-2021-c-2023-c", "en:nutriscore-2021-same-as-2023", @@ -3926,7 +3926,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-no-packagings", @@ -4946,7 +4945,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-no-packagings", diff --git a/tests/integration/expected_test_results/unknown_tags/country-cambodia-exists-but-empty.html b/tests/integration/expected_test_results/unknown_tags/country-cambodia-exists-but-empty.html index 826ff06712e34..e5e0cb96a246f 100644 --- a/tests/integration/expected_test_results/unknown_tags/country-cambodia-exists-but-empty.html +++ b/tests/integration/expected_test_results/unknown_tags/country-cambodia-exists-but-empty.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -496,6 +509,7 @@

+
@@ -650,6 +664,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients-apple.html b/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients-apple.html index 342b09259ad3b..ff15507420e56 100644 --- a/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients-apple.html +++ b/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients-apple.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients.html b/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients.html index c6a580ebc8755..a12f369e49c35 100644 --- a/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients.html +++ b/tests/integration/expected_test_results/unknown_tags/country-doesnotexist-ingredients.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/country-doesnotexist.html b/tests/integration/expected_test_results/unknown_tags/country-doesnotexist.html index 342b09259ad3b..ff15507420e56 100644 --- a/tests/integration/expected_test_results/unknown_tags/country-doesnotexist.html +++ b/tests/integration/expected_test_results/unknown_tags/country-doesnotexist.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/country-france-exists.html b/tests/integration/expected_test_results/unknown_tags/country-france-exists.html index 345a4ee604c22..b069c6870c447 100644 --- a/tests/integration/expected_test_results/unknown_tags/country-france-exists.html +++ b/tests/integration/expected_test_results/unknown_tags/country-france-exists.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -542,6 +555,7 @@

+
@@ -696,6 +710,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/ingredient-apple-exists.html b/tests/integration/expected_test_results/unknown_tags/ingredient-apple-exists.html index ea3349531aa08..3a947b793fa65 100644 --- a/tests/integration/expected_test_results/unknown_tags/ingredient-apple-exists.html +++ b/tests/integration/expected_test_results/unknown_tags/ingredient-apple-exists.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -603,6 +616,7 @@

+
@@ -757,6 +771,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/ingredient-someunknownandemptyingredient-does-not-exist-and-empty.html b/tests/integration/expected_test_results/unknown_tags/ingredient-someunknownandemptyingredient-does-not-exist-and-empty.html index 342b09259ad3b..ff15507420e56 100644 --- a/tests/integration/expected_test_results/unknown_tags/ingredient-someunknownandemptyingredient-does-not-exist-and-empty.html +++ b/tests/integration/expected_test_results/unknown_tags/ingredient-someunknownandemptyingredient-does-not-exist-and-empty.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty-labels.html b/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty-labels.html index 22ba357a85f66..e166da65007c8 100644 --- a/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty-labels.html +++ b/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty-labels.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Please give to our 2024 Fundraiser

+
@@ -434,6 +447,7 @@

+
@@ -588,6 +602,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty.html b/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty.html index 887a71f3b122d..262eb8fbc782d 100644 --- a/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty.html +++ b/tests/integration/expected_test_results/unknown_tags/ingredient-someunknowningredient-does-not-exist-but-not-empty.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -542,6 +555,7 @@

+
@@ -696,6 +710,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/unknown_tags/unknown-product.html b/tests/integration/expected_test_results/unknown_tags/unknown-product.html index b3546e33cabb3..6c987aa7c4fe6 100644 --- a/tests/integration/expected_test_results/unknown_tags/unknown-product.html +++ b/tests/integration/expected_test_results/unknown_tags/unknown-product.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/es-ingredients.html b/tests/integration/expected_test_results/web_html/es-ingredients.html index 3a35f7e299569..8cb56aed3481c 100644 --- a/tests/integration/expected_test_results/web_html/es-ingredients.html +++ b/tests/integration/expected_test_results/web_html/es-ingredients.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Please give to our 2024 Fundraiser

+
@@ -463,6 +476,7 @@

Lista de ingredientes - España

+
@@ -617,6 +631,7 @@

Descubre el proyecto

+
diff --git a/tests/integration/expected_test_results/web_html/fr-brands.html b/tests/integration/expected_test_results/web_html/fr-brands.html index d3bcbc29faa6e..a0fe472ca6537 100644 --- a/tests/integration/expected_test_results/web_html/fr-brands.html +++ b/tests/integration/expected_test_results/web_html/fr-brands.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Merci de contribuer à notre collecte de +
@@ -399,6 +412,7 @@

Liste des marques - France

+
@@ -553,6 +567,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-categories.html b/tests/integration/expected_test_results/web_html/fr-categories.html index 8db641dfeb48a..7f6af19581046 100644 --- a/tests/integration/expected_test_results/web_html/fr-categories.html +++ b/tests/integration/expected_test_results/web_html/fr-categories.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Merci de contribuer à notre collecte de + @@ -636,6 +649,7 @@

+
@@ -790,6 +804,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-countries.html b/tests/integration/expected_test_results/web_html/fr-countries.html index d271fa6431d68..fb316fd2379d9 100644 --- a/tests/integration/expected_test_results/web_html/fr-countries.html +++ b/tests/integration/expected_test_results/web_html/fr-countries.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Merci de contribuer à notre collecte de +
@@ -405,6 +418,7 @@

Liste des pays - France

+
@@ -559,6 +573,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-edit-product.html b/tests/integration/expected_test_results/web_html/fr-edit-product.html index 27a31852d868f..7d765e884c6c6 100644 --- a/tests/integration/expected_test_results/web_html/fr-edit-product.html +++ b/tests/integration/expected_test_results/web_html/fr-edit-product.html @@ -83,9 +83,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -387,6 +399,7 @@

Merci de contribuer à notre collecte de + @@ -3569,6 +3582,7 @@

Historique des modifications

+
@@ -3723,6 +3737,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-index.html b/tests/integration/expected_test_results/web_html/fr-index.html index b796be4970d4f..d4cda9a86261d 100644 --- a/tests/integration/expected_test_results/web_html/fr-index.html +++ b/tests/integration/expected_test_results/web_html/fr-index.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Merci de contribuer à notre collecte de + @@ -626,6 +639,7 @@

Contribute

+
@@ -780,6 +794,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-labels.html b/tests/integration/expected_test_results/web_html/fr-labels.html index e8038771ec844..8e979dc57440c 100644 --- a/tests/integration/expected_test_results/web_html/fr-labels.html +++ b/tests/integration/expected_test_results/web_html/fr-labels.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Merci de contribuer à notre collecte de +
@@ -399,6 +412,7 @@

Liste des labels - France

+
@@ -553,6 +567,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-product-2.html b/tests/integration/expected_test_results/web_html/fr-product-2.html index d91ed1bc6ce76..a904aa55cd50d 100644 --- a/tests/integration/expected_test_results/web_html/fr-product-2.html +++ b/tests/integration/expected_test_results/web_html/fr-product-2.html @@ -75,9 +75,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -356,6 +368,7 @@

Merci de contribuer à notre collecte de + @@ -2834,9 +2847,11 @@

Environnement

> - Green-Score B - Faible impact environnemental + Green-Score B + Faible impact environnemental +
@@ -4300,7 +4315,7 @@

Signaler un problème

@@ -4482,6 +4497,7 @@

Sources de données

+
@@ -4636,6 +4652,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-product.html b/tests/integration/expected_test_results/web_html/fr-product.html index b9fb7632cceb8..cf72f3744e3d0 100644 --- a/tests/integration/expected_test_results/web_html/fr-product.html +++ b/tests/integration/expected_test_results/web_html/fr-product.html @@ -75,9 +75,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -356,6 +368,7 @@

Merci de contribuer à notre collecte de + @@ -2848,9 +2861,11 @@

Environnement

> - Green-Score B - Faible impact environnemental + Green-Score B + Faible impact environnemental +
@@ -4314,7 +4329,7 @@

Signaler un problème

@@ -4496,6 +4511,7 @@

Sources de données

+
@@ -4650,6 +4666,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-search-form.html b/tests/integration/expected_test_results/web_html/fr-search-form.html index 82c3dcc2bf058..2e90b511b3e38 100644 --- a/tests/integration/expected_test_results/web_html/fr-search-form.html +++ b/tests/integration/expected_test_results/web_html/fr-search-form.html @@ -67,9 +67,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -348,6 +360,7 @@

Merci de contribuer à notre collecte de +
@@ -2024,6 +2037,7 @@

Résultats sur un graphique

+
@@ -2178,6 +2192,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-search-results-cached.html b/tests/integration/expected_test_results/web_html/fr-search-results-cached.html index bdf89ce3a198b..8c551d329e958 100644 --- a/tests/integration/expected_test_results/web_html/fr-search-results-cached.html +++ b/tests/integration/expected_test_results/web_html/fr-search-results-cached.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Merci de contribuer à notre collecte de + @@ -488,6 +501,7 @@

Résultats de la recherche - France

+
@@ -642,6 +656,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-search-results-no-cache.html b/tests/integration/expected_test_results/web_html/fr-search-results-no-cache.html index c38fa6057adcb..6f7ebcf18952b 100644 --- a/tests/integration/expected_test_results/web_html/fr-search-results-no-cache.html +++ b/tests/integration/expected_test_results/web_html/fr-search-results-no-cache.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Merci de contribuer à notre collecte de + @@ -488,6 +501,7 @@

Résultats de la recherche - France

+
@@ -642,6 +656,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/fr-search-results.html b/tests/integration/expected_test_results/web_html/fr-search-results.html index bdf89ce3a198b..8c551d329e958 100644 --- a/tests/integration/expected_test_results/web_html/fr-search-results.html +++ b/tests/integration/expected_test_results/web_html/fr-search-results.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Merci de contribuer à notre collecte de + @@ -488,6 +501,7 @@

Résultats de la recherche - France

+
@@ -642,6 +656,7 @@

Découvrez le projet

+
diff --git a/tests/integration/expected_test_results/web_html/user-register.html b/tests/integration/expected_test_results/web_html/user-register.html index b9597dfcf3560..da9cf57685a10 100644 --- a/tests/integration/expected_test_results/web_html/user-register.html +++ b/tests/integration/expected_test_results/web_html/user-register.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -1566,6 +1579,7 @@

Register

+
@@ -1720,6 +1734,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-brands.html b/tests/integration/expected_test_results/web_html/world-brands.html index 1a06faba17c76..8b2b1dce66645 100644 --- a/tests/integration/expected_test_results/web_html/world-brands.html +++ b/tests/integration/expected_test_results/web_html/world-brands.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Please give to our 2024 Fundraiser

+
@@ -407,6 +420,7 @@

List of brands - World

+
@@ -561,6 +575,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-categories.html b/tests/integration/expected_test_results/web_html/world-categories.html index ab27e369b40a9..9e805cf0b35f1 100644 --- a/tests/integration/expected_test_results/web_html/world-categories.html +++ b/tests/integration/expected_test_results/web_html/world-categories.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -762,6 +775,7 @@

+
@@ -916,6 +930,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-countries.html b/tests/integration/expected_test_results/web_html/world-countries.html index ccb12cf9b0fad..3988376c5a1cc 100644 --- a/tests/integration/expected_test_results/web_html/world-countries.html +++ b/tests/integration/expected_test_results/web_html/world-countries.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Please give to our 2024 Fundraiser

+
@@ -417,6 +430,7 @@

List of countries - World

+
@@ -571,6 +585,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-edit-product.html b/tests/integration/expected_test_results/web_html/world-edit-product.html index 044f1929304fe..62a96163274eb 100644 --- a/tests/integration/expected_test_results/web_html/world-edit-product.html +++ b/tests/integration/expected_test_results/web_html/world-edit-product.html @@ -83,9 +83,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -387,6 +399,7 @@

Please give to our 2024 Fundraiser

+ @@ -3567,6 +3580,7 @@

Changes history

+
@@ -3721,6 +3735,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-index-signedin.html b/tests/integration/expected_test_results/web_html/world-index-signedin.html index f3e1914bd6874..d5751498c1151 100644 --- a/tests/integration/expected_test_results/web_html/world-index-signedin.html +++ b/tests/integration/expected_test_results/web_html/world-index-signedin.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -368,6 +380,7 @@

Please give to our 2024 Fundraiser

+ @@ -663,6 +676,7 @@

Contribute

+
@@ -817,6 +831,7 @@

Discover the project

+
@@ -2099,8 +2114,7 @@

Discover the project

{ "attributes":[ { - "description":"Not yet applicable for the category: Sodas", - "description_short":"Not yet applicable for the category", + "description_short":"Not applicable for the category: Sodas", "grade":"unknown", "icon_url":"//static.openfoodfacts.localhost/images/attributes/dist/green-score-not-applicable.svg", "id":"ecoscore", @@ -2108,7 +2122,7 @@

Discover the project

"name":"Green-Score", "panel_id":"environmental_score", "status":"unknown", - "title":"Green-Score not yet applicable" + "title":"Green-Score not applicable" }, { "description":"", diff --git a/tests/integration/expected_test_results/web_html/world-index.html b/tests/integration/expected_test_results/web_html/world-index.html index 2812663154803..3afdea3c7d691 100644 --- a/tests/integration/expected_test_results/web_html/world-index.html +++ b/tests/integration/expected_test_results/web_html/world-index.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -640,6 +653,7 @@

Contribute

+
@@ -794,6 +808,7 @@

Discover the project

+
@@ -2076,8 +2091,7 @@

Discover the project

{ "attributes":[ { - "description":"Not yet applicable for the category: Sodas", - "description_short":"Not yet applicable for the category", + "description_short":"Not applicable for the category: Sodas", "grade":"unknown", "icon_url":"//static.openfoodfacts.localhost/images/attributes/dist/green-score-not-applicable.svg", "id":"ecoscore", @@ -2085,7 +2099,7 @@

Discover the project

"name":"Green-Score", "panel_id":"environmental_score", "status":"unknown", - "title":"Green-Score not yet applicable" + "title":"Green-Score not applicable" }, { "description":"", diff --git a/tests/integration/expected_test_results/web_html/world-label-organic.html b/tests/integration/expected_test_results/web_html/world-label-organic.html index ad46791e46318..fb699b08b501c 100644 --- a/tests/integration/expected_test_results/web_html/world-label-organic.html +++ b/tests/integration/expected_test_results/web_html/world-label-organic.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -752,6 +765,7 @@

+
@@ -906,6 +920,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-labels.html b/tests/integration/expected_test_results/web_html/world-labels.html index 81f6fc978d55b..de7b6c4ce4d1d 100644 --- a/tests/integration/expected_test_results/web_html/world-labels.html +++ b/tests/integration/expected_test_results/web_html/world-labels.html @@ -65,9 +65,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -346,6 +358,7 @@

Please give to our 2024 Fundraiser

+
@@ -403,6 +416,7 @@

List of labels - World

+
@@ -557,6 +571,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-product-content-only.html b/tests/integration/expected_test_results/web_html/world-product-content-only.html new file mode 100644 index 0000000000000..d843268186d98 --- /dev/null +++ b/tests/integration/expected_test_results/web_html/world-product-content-only.html @@ -0,0 +1,4266 @@ + + + + + + + Apple pie - Bob's pies - 100 g + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + arrow_upward + + +
+
+
+
+

Apple pie - Bob's pies - 100 g

+ +
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+ +
+ + + +

Apple pie - Bob's pies - 100 g

+ + + + + + + + + + +
+ This product page is not complete. You can help to complete it by editing it and adding more data from the photos we have, or by taking more photos using the app for Android or iPhone/iPad. Thank you! + × +
+ + + + + + + +
+ +
+

Barcode:
3300000000001(EAN / EAN-13)

+
+ +
+ + +
+
+ +
+ + + + +

+ Common name: + default_name +

+ + + + +

+ Quantity: + 100 g +

+ + + + +

+ Brands: + Bob's pies +

+ + + + +

+ Categories: + Desserts, Pies, Sweet pies, Apple pies +

+ + + + +

+ Labels, certifications, awards: + Fair trade +

+ + + + +

+ Origin of the product and/or its ingredients: + Germany +

+ + + + + + + + + +

+ Countries where sold: + India, Japan, United States +

+ + + + + + +
+
+
+
+ + + + +
+
+ +
+
+

Matching with your preferences

+ +
+ +
+ +
+ + +
+
+ +
+
+ + + +
+
+
+
+ + + + + +
+ + +

Health

+ + + +
+ + +
+ + + + + + +

Nutrition

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Nutri-Score D +

    + + Lower nutritional quality + +
    +
    + + +
    + +
    + +
    + + + + +
    ⚠ + ️Warning: the nutrition facts are not specified. They have been estimated from the list of ingredients. + +
    + + +
    + + +
    +
    + +
    + + + + +
    ⚠ + ️Warning: the amount of fruits, vegetables and nuts is not specified on the label, it was estimated from the list of ingredients: 22 + +
    + + +
    + + +
    + + + + +
      +
    • + + + + + icon + +

      + + Discover the new Nutri-Score! +

      + +
      +
      + + +
      + +
      + +
      + + + + +
      +

      The computation of the Nutri-Score is evolving to provide better recommendations based on the latest scientific evidence.

      Main improvements:

      • Better score for some fatty fish and oils rich in good fats
      • Better score for whole products rich in fiber
      • Worse score for products containing a lot of salt or sugar
      • Worse score for red meat (compared to poultry)
      + +
      + + + +
      + + +
      +
      + + + + +
      +
      + +
    • +
    + + + + + + +
      +
    • + + + + + icon + +

      + + What is the Nutri-Score? +

      + +
      +
      + + +
      + +
      + +
      + + + + +
      +

      The Nutri-Score is a logo on the overall nutritional quality of products.

      +

      +The score from A to E is calculated based on nutrients and foods to favor (proteins, fiber, fruits, vegetables and legumes ...) and nutrients to limit (calories, saturated fat, sugars, salt). +The score is calculated from the data of the nutrition facts table and the composition data (fruits, vegetables and legumes). +

      + + +
      + + + +
      + + +
      +
      + +
      + + + + + + + + +
      + + +
      +
      + +
    • +
    + + + +
    + + + + + icon + + + +

    Negative points: 17/55

    + + + + + + + +
      +
    • + + + + + icon + +

      + + Energy +

      + + 3/10 points (1249.03kJ) + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      + + Energy intakes above energy requirements are associated with increased risks of weight gain, overweight, obesity, and consequently risk of diet-related chronic diseases. +

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + +
      +
    • + + + + + icon + +

      + + Sugar +

      + + 4/15 points (14.28g) + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      + + A high consumption of sugar can cause weight gain and tooth decay. It also augments the risk of type 2 diabetes and cardio-vascular diseases. +

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + icon + + + +

    Positive points: 1/10

    + + + + + + + +
      +
    • + + + + + icon + +

      + + Fiber +

      + + 1/5 points (4.07g) + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      + Consuming foods rich in fiber (especially whole grain foods) reduces the risks of aerodigestive cancers, cardiovascular diseases, obesity and diabetes. + +

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + + + + + + + + +
    + + + + +
      +
    • + + + + + icon + +

      + + Details of the calculation of the Nutri-Score +

      + +
      +
      + + +
      + +
      + +
      + + + + +
      ⚠ + ️Warning: the nutrition facts are not specified. They have been estimated from the list of ingredients. + +
      + + +
      + + +
      +
      + +
      + + + + +
      ⚠ + ️Warning: the amount of fruits, vegetables and nuts is not specified on the label, it was estimated from the list of ingredients: 22 + +
      + + +
      + + +
      +
      + +
      + + + + +
      + + +

      This product is not considered a beverage for the calculation of the Nutri-Score.

      + + + + + +

      Points for proteins are not counted because the negative points greater than or equal to 11.

      + +

      + Nutritional score: 16 + (17 - 1) +

      +

      Nutri-Score: D

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Nutrition facts +

    + +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Nutrition facts + + As sold
    for 100 g / 100 ml +
    + As sold
    per serving (10 g) +
    + + + + + Fat + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Saturated fat + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Carbohydrates + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Sugars + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Fiber + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Proteins + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Salt + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Fruits‚ vegetables‚ nuts and rapeseed‚ walnut and olive oils (estimate from ingredients list analysis) + + + + + + + + 22.222 % + + + + + + + + 22.222 % + + +
    +
    +
    + +
  • +
+ + + + + + + + +
+ + +
+ +
+ +
+ + + + +
+ + Serving size: + 10 g + +
+ + + +
+ + +
+
+ +
+ + + + + + + +
+ +
+ + + + + + +

Ingredients

+ + + + + + + +
    +
  • + + + + + icon + +

    + + 11 ingredients +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Wheat flour, apples, sugar, butter, eggs, salt, palm oil, acidifier: citric acid, raising agent: sodium bicarbonate +
    + + + +
    + + +
    +
    + +
    + + + + +
    + Allergens: + Apple, Eggs, Gluten, Milk + +
    + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

Food processing

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Processed foods +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + + + + +

    Elements that indicate the product is in the 3 - Processed foods group:

    +
      + +
    • Ingredient: Butter
    • + +
    • Ingredient: Salt
    • + +
    • Ingredient: Sugar
    • + +
    + + + + +
    + + + +
    + + +
    +
    + +
    + + + + +
    + +

    Food products are classified into 4 groups according to their degree of processing:

    +
      +
    1. Unprocessed or minimally processed foods
    2. +
    3. Processed culinary ingredients
    4. +
    5. Processed foods
    6. +
    7. Ultra-processed foods
    8. +
    +
    +

    The determination of the group is based on the category of the product and on the ingredients it contains.

    +

    Learn more about the NOVA classification

    + +
    + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

Additives

+ + + + + + + + +
+ + +
+ + + + + +
    +
  • + + + + +

    + + E330 - Citric acid +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Citric acid: Citric acid is a weak organic acid that has the chemical formula C6H8O7. It occurs naturally in citrus fruits. In biochemistry, it is an intermediate in the citric acid cycle, which occurs in the metabolism of all aerobic organisms. More than a million tons of citric acid are manufactured every year. It is used widely as an acidifier, as a flavoring and chelating agent.A citrate is a derivative of citric acid; that is, the salts, esters, and the polyatomic anion found in solution. An example of the former, a salt is trisodium citrate; an ester is triethyl citrate. When part of a salt, the formula of the citrate ion is written as C6H5O3−7 or C3H5O-COO-3−3. +
    + + + + Source: + Wikipedia + + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
    +
  • + + + + +

    + + E500 - Sodium carbonates +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Sodium carbonate: Sodium carbonate, Na2CO3, -also known as washing soda, soda ash and soda crystals, and in the monohydrate form as crystal carbonate- is the water-soluble sodium salt of carbonic acid. It most commonly occurs as a crystalline decahydrate, which readily effloresces to form a white powder, the monohydrate. Pure sodium carbonate is a white, odorless powder that is hygroscopic -absorbs moisture from the air-. It has a strongly alkaline taste, and forms a moderately basic solution in water. Sodium carbonate is well known domestically for its everyday use as a water softener. Historically it was extracted from the ashes of plants growing in sodium-rich soils, such as vegetation from the Middle East, kelp from Scotland and seaweed from Spain. Because the ashes of these sodium-rich plants were noticeably different from ashes of timber -used to create potash-, they became known as "soda ash". It is synthetically produced in large quantities from salt -sodium chloride- and limestone by a method known as the Solvay process. The manufacture of glass is one of the most important uses of sodium carbonate. Sodium carbonate acts as a flux for silica, lowering the melting point of the mixture to something achievable without special materials. This "soda glass" is mildly water-soluble, so some calcium carbonate is added to the melt mixture to make the glass produced insoluble. This type of glass is known as soda lime glass: "soda" for the sodium carbonate and "lime" for the calcium carbonate. Soda lime glass has been the most common form of glass for centuries. Sodium carbonate is also used as a relatively strong base in various settings. For example, it is used as a pH regulator to maintain stable alkaline conditions necessary for the action of the majority of photographic film developing agents. It acts as an alkali because when dissolved in water, it dissociates into the weak acid: carbonic acid and the strong alkali: sodium hydroxide. This gives sodium carbonate in solution the ability to attack metals such as aluminium with the release of hydrogen gas.It is a common additive in swimming pools used to raise the pH which can be lowered by chlorine tablets and other additives which contain acids. In cooking, it is sometimes used in place of sodium hydroxide for lyeing, especially with German pretzels and lye rolls. These dishes are treated with a solution of an alkaline substance to change the pH of the surface of the food and improve browning. In taxidermy, sodium carbonate added to boiling water will remove flesh from the bones of animal carcasses for trophy mounting or educational display. In chemistry, it is often used as an electrolyte. Electrolytes are usually salt-based, and sodium carbonate acts as a very good conductor in the process of electrolysis. In addition, unlike chloride ions, which form chlorine gas, carbonate ions are not corrosive to the anodes. It is also used as a primary standard for acid-base titrations because it is solid and air-stable, making it easy to weigh accurately. +
    + + + + Source: + Wikipedia + + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
    +
  • + + + + +

    + + E500ii - Sodium hydrogen carbonate +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Sodium carbonate: Sodium carbonate, Na2CO3, -also known as washing soda, soda ash and soda crystals, and in the monohydrate form as crystal carbonate- is the water-soluble sodium salt of carbonic acid. It most commonly occurs as a crystalline decahydrate, which readily effloresces to form a white powder, the monohydrate. Pure sodium carbonate is a white, odorless powder that is hygroscopic -absorbs moisture from the air-. It has a strongly alkaline taste, and forms a moderately basic solution in water. Sodium carbonate is well known domestically for its everyday use as a water softener. Historically it was extracted from the ashes of plants growing in sodium-rich soils, such as vegetation from the Middle East, kelp from Scotland and seaweed from Spain. Because the ashes of these sodium-rich plants were noticeably different from ashes of timber -used to create potash-, they became known as "soda ash". It is synthetically produced in large quantities from salt -sodium chloride- and limestone by a method known as the Solvay process. The manufacture of glass is one of the most important uses of sodium carbonate. Sodium carbonate acts as a flux for silica, lowering the melting point of the mixture to something achievable without special materials. This "soda glass" is mildly water-soluble, so some calcium carbonate is added to the melt mixture to make the glass produced insoluble. This type of glass is known as soda lime glass: "soda" for the sodium carbonate and "lime" for the calcium carbonate. Soda lime glass has been the most common form of glass for centuries. Sodium carbonate is also used as a relatively strong base in various settings. For example, it is used as a pH regulator to maintain stable alkaline conditions necessary for the action of the majority of photographic film developing agents. It acts as an alkali because when dissolved in water, it dissociates into the weak acid: carbonic acid and the strong alkali: sodium hydroxide. This gives sodium carbonate in solution the ability to attack metals such as aluminium with the release of hydrogen gas.It is a common additive in swimming pools used to raise the pH which can be lowered by chlorine tablets and other additives which contain acids. In cooking, it is sometimes used in place of sodium hydroxide for lyeing, especially with German pretzels and lye rolls. These dishes are treated with a solution of an alkaline substance to change the pH of the surface of the food and improve browning. In taxidermy, sodium carbonate added to boiling water will remove flesh from the bones of animal carcasses for trophy mounting or educational display. In chemistry, it is often used as an electrolyte. Electrolytes are usually salt-based, and sodium carbonate acts as a very good conductor in the process of electrolysis. In addition, unlike chloride ions, which form chlorine gas, carbonate ions are not corrosive to the anodes. It is also used as a primary standard for acid-base titrations because it is solid and air-stable, making it easy to weigh accurately. +
    + + + + Source: + Wikipedia + + + + +
    + + +
    +
    + +
  • +
+ + +
+ +
+ + + + + + + +
+ +
+ + + + + + +

Ingredients analysis

+ + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ The analysis is based solely on the ingredients listed and does not take into account processing methods. +
+ + + +
+ + +
+
+ +
+ + + + + + + + +
    +
  • + + + + + icon + +

    + + Details of the analysis of the ingredients +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + en: Wheat flour, apples, sugar, butter, eggs, salt, palm oil, acidifier (citric acid), raising agent (sodium bicarbonate) +
    + + + +
    + + +
    +
    + +
    + + + + +
    +
      +
    1. Wheat flour -> en:wheat-flour - vegan: yes - vegetarian: yes - ciqual_proxy_food_code: 9410 - percent_min: 11.1111111111111 - percent_max: 100
    2. +
    3. apples -> en:apple - vegan: yes - vegetarian: yes - ciqual_food_code: 13050 - percent_min: 0 - percent_max: 50
    4. +
    5. sugar -> en:sugar - vegan: yes - vegetarian: yes - ciqual_proxy_food_code: 31016 - percent_min: 0 - percent_max: 33.3333333333333
    6. +
    7. butter -> en:butter - vegan: no - vegetarian: yes - ciqual_proxy_food_code: 16400 - percent_min: 0 - percent_max: 25
    8. +
    9. eggs -> en:egg - vegan: no - vegetarian: yes - ciqual_food_code: 22000 - percent_min: 0 - percent_max: 20
    10. +
    11. salt -> en:salt - vegan: yes - vegetarian: yes - ciqual_food_code: 11058 - percent_min: 0 - percent_max: 16.6666666666667
    12. +
    13. palm oil -> en:palm-oil - vegan: yes - vegetarian: yes - from_palm_oil: yes - ciqual_food_code: 16129 - percent_min: 0 - percent_max: 14.2857142857143
    14. +
    15. acidifier -> en:acid - percent_min: 0 - percent_max: 12.5
        +
      1. citric acid -> en:e330 - vegan: yes - vegetarian: yes - percent_min: 0 - percent_max: 12.5
      2. +
      +
    16. +
    17. raising agent -> en:raising-agent - percent_min: 0 - percent_max: 11.1111111111111
        +
      1. sodium bicarbonate -> en:e500ii - vegan: yes - vegetarian: yes - percent_min: 0 - percent_max: 11.1111111111111
      2. +
      +
    18. +
    + +
    + + + +
    + + +
    +
    + +
    + + + + +
    + +
    + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
+
+ +
+ + + +
+
+
+
+ + +
+
+
+
+ + + + + +
+ + +

Environment

+ + + +
+ + + + + +
    +
  • + + + + + icon + +

    + + Green-Score B +

    + + Low environmental impact + +
    +
    + + +
    + +
    + +
    + + + + +
    ⚠ + ️Select a country in order to include the full impact of transportation. +
    + + +
    + + +
    +
    + +
    + + + + +
    + The Green-Score is an experimental score that summarizes the environmental impacts of food products. +
    + + + +
    + + +
    +
    + +
    + + + + +
    → + + + The Green-Score was initially developped for France and it is being extended to other European countries. The Green-Score formula is subject to change as it is regularly improved to make it more precise and better suited to each country. + + +
    + + +
    + + +
    + +
    + + + + + + +

    Life cycle analysis

    + + + + + + + +
      +
    • + + + + + icon + +

      + + Average impact of products of the same category: A+ (Score: 90/100) +

      + + Category: Apple tart + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      Category: + Apple tart +

      +
        +
      • + PEF environmental score: 0.20 + (the lower the score, the lower the impact) +
      • +
      • + including impact on climate change: 1.69 + kg CO2 eq/kg of product +
      • +
      + +
      + + + +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + Stage + + Impact +
      + + icon + + + + + Agriculture + + + + + + +
      +
      +
      +
      +
      + + 63.8 % + +
      + + icon + + + + + Processing + + + + + + +
      +
      +
      +
      +
      + + 18.5 % + +
      + + icon + + + + + Packaging + + + + + + +
      +
      +
      +
      +
      + + 9.6 % + +
      + + icon + + + + + Transportation + + + + + + +
      +
      +
      +
      +
      + + 5.6 % + +
      + + icon + + + + + Distribution + + + + + + +
      +
      +
      +
      +
      + + 2.4 % + +
      + + icon + + + + + Consumption + + + + + + +
      +
      +
      +
      +
      + + 0.0 % + +
      +
      +
      + +
    • +
    + + + + + + +
    + +
    + + + + + + +

    Bonuses and maluses

    + + + + + + + + + + + + + + + +
      +
    • + + + + + icon + +

      + + Ingredients that threatens species +

      + + Malus: -10 + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      Contains palm oil

      +

      Tropical forests in Asia, Africa and Latin America are destroyed to create and expand oil palm tree plantations. The deforestation contributes to climate change, and it endangers species such as the orangutan, the pigmy elephant and the Sumatran rhino.

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + +

    Green-Score for this product

    + + + + + + + + + + + + + + +
    +
    + +
    + + + + + + + + +
    + + +
    +
    + +
  • +
+ + + +
+ + + + + + +

Carbon footprint

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Equal to driving 0.9 km in a petrol car +

    + + 169 g CO₂e per 100g of product + +
    +
    + + +
    + +
    + +
    + + + + +
    + +

    The carbon emission figure comes from ADEME's Agribalyse database, for the category: + Apple tart + (Source: ADEME Agribalyse Database) +

    + +
    + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Stage + + Impact +
    + + icon + + + + + Agriculture + + + + + + +
    +
    +
    +
    +
    + + 62.4 % + +
    + + icon + + + + + Processing + + + + + + +
    +
    +
    +
    +
    + + 11.3 % + +
    + + icon + + + + + Packaging + + + + + + +
    +
    +
    +
    +
    + + 17.0 % + +
    + + icon + + + + + Transportation + + + + + + +
    +
    +
    +
    +
    + + 8.1 % + +
    + + icon + + + + + Distribution + + + + + + +
    +
    +
    +
    +
    + + 1.1 % + +
    + + icon + + + + + Consumption + + + + + + +
    +
    +
    +
    +
    + + 0.0 % + +
    +
    +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

Packaging

+ + + + + + + + + + + + + + +
+ +
+ + + + + + +

Transportation

+ + + + + + + + + + + + + + +
+ +
+ + + + + + +

Threatened species

+ + + + + + + + + + + + + + +
+
+ +
+ + + +
+
+
+
+ + + + + + + + + +
+
+
+
+ + + + + +
+ + +

Report a problem

+ + + +
+ + + + + + + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + +
+
+
+
+ +

Data sources

+ + + + + + + + + +

+ Product added on by tests
+ Last edit of product page on by tests. + + +

+ +
+ If the data is incomplete or incorrect, you can complete or correct it by editing this page. +
+ + + + +
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+ + + + + +
+
+
+
+ + + + + + + + +
+
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/integration/expected_test_results/web_html/world-product-not-found.html b/tests/integration/expected_test_results/web_html/world-product-not-found.html index 8388d9b771e17..13d843c9b483e 100644 --- a/tests/integration/expected_test_results/web_html/world-product-not-found.html +++ b/tests/integration/expected_test_results/web_html/world-product-not-found.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+
@@ -360,6 +373,7 @@

Error

+
@@ -514,6 +528,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-product-smoothie.html b/tests/integration/expected_test_results/web_html/world-product-smoothie.html new file mode 100644 index 0000000000000..d843268186d98 --- /dev/null +++ b/tests/integration/expected_test_results/web_html/world-product-smoothie.html @@ -0,0 +1,4266 @@ + + + + + + + Apple pie - Bob's pies - 100 g + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + arrow_upward + + +
+
+
+
+

Apple pie - Bob's pies - 100 g

+ +
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+ +
+ + + +

Apple pie - Bob's pies - 100 g

+ + + + + + + + + + +
+ This product page is not complete. You can help to complete it by editing it and adding more data from the photos we have, or by taking more photos using the app for Android or iPhone/iPad. Thank you! + × +
+ + + + + + + +
+ +
+

Barcode:
3300000000001(EAN / EAN-13)

+
+ +
+ + +
+
+ +
+ + + + +

+ Common name: + default_name +

+ + + + +

+ Quantity: + 100 g +

+ + + + +

+ Brands: + Bob's pies +

+ + + + +

+ Categories: + Desserts, Pies, Sweet pies, Apple pies +

+ + + + +

+ Labels, certifications, awards: + Fair trade +

+ + + + +

+ Origin of the product and/or its ingredients: + Germany +

+ + + + + + + + + +

+ Countries where sold: + India, Japan, United States +

+ + + + + + +
+
+
+
+ + + + +
+
+ +
+
+

Matching with your preferences

+ +
+ +
+ +
+ + +
+
+ +
+
+ + + +
+
+
+
+ + + + + +
+ + +

Health

+ + + +
+ + +
+ + + + + + +

Nutrition

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Nutri-Score D +

    + + Lower nutritional quality + +
    +
    + + +
    + +
    + +
    + + + + +
    ⚠ + ️Warning: the nutrition facts are not specified. They have been estimated from the list of ingredients. + +
    + + +
    + + +
    +
    + +
    + + + + +
    ⚠ + ️Warning: the amount of fruits, vegetables and nuts is not specified on the label, it was estimated from the list of ingredients: 22 + +
    + + +
    + + +
    + + + + +
      +
    • + + + + + icon + +

      + + Discover the new Nutri-Score! +

      + +
      +
      + + +
      + +
      + +
      + + + + +
      +

      The computation of the Nutri-Score is evolving to provide better recommendations based on the latest scientific evidence.

      Main improvements:

      • Better score for some fatty fish and oils rich in good fats
      • Better score for whole products rich in fiber
      • Worse score for products containing a lot of salt or sugar
      • Worse score for red meat (compared to poultry)
      + +
      + + + +
      + + +
      +
      + + + + +
      +
      + +
    • +
    + + + + + + +
      +
    • + + + + + icon + +

      + + What is the Nutri-Score? +

      + +
      +
      + + +
      + +
      + +
      + + + + +
      +

      The Nutri-Score is a logo on the overall nutritional quality of products.

      +

      +The score from A to E is calculated based on nutrients and foods to favor (proteins, fiber, fruits, vegetables and legumes ...) and nutrients to limit (calories, saturated fat, sugars, salt). +The score is calculated from the data of the nutrition facts table and the composition data (fruits, vegetables and legumes). +

      + + +
      + + + +
      + + +
      +
      + +
      + + + + + + + + +
      + + +
      +
      + +
    • +
    + + + +
    + + + + + icon + + + +

    Negative points: 17/55

    + + + + + + + +
      +
    • + + + + + icon + +

      + + Energy +

      + + 3/10 points (1249.03kJ) + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      + + Energy intakes above energy requirements are associated with increased risks of weight gain, overweight, obesity, and consequently risk of diet-related chronic diseases. +

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + +
      +
    • + + + + + icon + +

      + + Sugar +

      + + 4/15 points (14.28g) + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      + + A high consumption of sugar can cause weight gain and tooth decay. It also augments the risk of type 2 diabetes and cardio-vascular diseases. +

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + icon + + + +

    Positive points: 1/10

    + + + + + + + +
      +
    • + + + + + icon + +

      + + Fiber +

      + + 1/5 points (4.07g) + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      + Consuming foods rich in fiber (especially whole grain foods) reduces the risks of aerodigestive cancers, cardiovascular diseases, obesity and diabetes. + +

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + + + + + + + + +
    + + + + +
      +
    • + + + + + icon + +

      + + Details of the calculation of the Nutri-Score +

      + +
      +
      + + +
      + +
      + +
      + + + + +
      ⚠ + ️Warning: the nutrition facts are not specified. They have been estimated from the list of ingredients. + +
      + + +
      + + +
      +
      + +
      + + + + +
      ⚠ + ️Warning: the amount of fruits, vegetables and nuts is not specified on the label, it was estimated from the list of ingredients: 22 + +
      + + +
      + + +
      +
      + +
      + + + + +
      + + +

      This product is not considered a beverage for the calculation of the Nutri-Score.

      + + + + + +

      Points for proteins are not counted because the negative points greater than or equal to 11.

      + +

      + Nutritional score: 16 + (17 - 1) +

      +

      Nutri-Score: D

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Nutrition facts +

    + +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Nutrition facts + + As sold
    for 100 g / 100 ml +
    + As sold
    per serving (10 g) +
    + + + + + Fat + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Saturated fat + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Carbohydrates + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Sugars + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Fiber + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Proteins + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Salt + + + + + + + + ? + + + + + + + + ? + + +
    + + + + + Fruits‚ vegetables‚ nuts and rapeseed‚ walnut and olive oils (estimate from ingredients list analysis) + + + + + + + + 22.222 % + + + + + + + + 22.222 % + + +
    +
    +
    + +
  • +
+ + + + + + + + +
+ + +
+ +
+ +
+ + + + +
+ + Serving size: + 10 g + +
+ + + +
+ + +
+
+ +
+ + + + + + + +
+ +
+ + + + + + +

Ingredients

+ + + + + + + +
    +
  • + + + + + icon + +

    + + 11 ingredients +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Wheat flour, apples, sugar, butter, eggs, salt, palm oil, acidifier: citric acid, raising agent: sodium bicarbonate +
    + + + +
    + + +
    +
    + +
    + + + + +
    + Allergens: + Apple, Eggs, Gluten, Milk + +
    + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

Food processing

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Processed foods +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + + + + +

    Elements that indicate the product is in the 3 - Processed foods group:

    +
      + +
    • Ingredient: Butter
    • + +
    • Ingredient: Salt
    • + +
    • Ingredient: Sugar
    • + +
    + + + + +
    + + + +
    + + +
    +
    + +
    + + + + +
    + +

    Food products are classified into 4 groups according to their degree of processing:

    +
      +
    1. Unprocessed or minimally processed foods
    2. +
    3. Processed culinary ingredients
    4. +
    5. Processed foods
    6. +
    7. Ultra-processed foods
    8. +
    +
    +

    The determination of the group is based on the category of the product and on the ingredients it contains.

    +

    Learn more about the NOVA classification

    + +
    + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

Additives

+ + + + + + + + +
+ + +
+ + + + + +
    +
  • + + + + +

    + + E330 - Citric acid +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Citric acid: Citric acid is a weak organic acid that has the chemical formula C6H8O7. It occurs naturally in citrus fruits. In biochemistry, it is an intermediate in the citric acid cycle, which occurs in the metabolism of all aerobic organisms. More than a million tons of citric acid are manufactured every year. It is used widely as an acidifier, as a flavoring and chelating agent.A citrate is a derivative of citric acid; that is, the salts, esters, and the polyatomic anion found in solution. An example of the former, a salt is trisodium citrate; an ester is triethyl citrate. When part of a salt, the formula of the citrate ion is written as C6H5O3−7 or C3H5O-COO-3−3. +
    + + + + Source: + Wikipedia + + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
    +
  • + + + + +

    + + E500 - Sodium carbonates +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Sodium carbonate: Sodium carbonate, Na2CO3, -also known as washing soda, soda ash and soda crystals, and in the monohydrate form as crystal carbonate- is the water-soluble sodium salt of carbonic acid. It most commonly occurs as a crystalline decahydrate, which readily effloresces to form a white powder, the monohydrate. Pure sodium carbonate is a white, odorless powder that is hygroscopic -absorbs moisture from the air-. It has a strongly alkaline taste, and forms a moderately basic solution in water. Sodium carbonate is well known domestically for its everyday use as a water softener. Historically it was extracted from the ashes of plants growing in sodium-rich soils, such as vegetation from the Middle East, kelp from Scotland and seaweed from Spain. Because the ashes of these sodium-rich plants were noticeably different from ashes of timber -used to create potash-, they became known as "soda ash". It is synthetically produced in large quantities from salt -sodium chloride- and limestone by a method known as the Solvay process. The manufacture of glass is one of the most important uses of sodium carbonate. Sodium carbonate acts as a flux for silica, lowering the melting point of the mixture to something achievable without special materials. This "soda glass" is mildly water-soluble, so some calcium carbonate is added to the melt mixture to make the glass produced insoluble. This type of glass is known as soda lime glass: "soda" for the sodium carbonate and "lime" for the calcium carbonate. Soda lime glass has been the most common form of glass for centuries. Sodium carbonate is also used as a relatively strong base in various settings. For example, it is used as a pH regulator to maintain stable alkaline conditions necessary for the action of the majority of photographic film developing agents. It acts as an alkali because when dissolved in water, it dissociates into the weak acid: carbonic acid and the strong alkali: sodium hydroxide. This gives sodium carbonate in solution the ability to attack metals such as aluminium with the release of hydrogen gas.It is a common additive in swimming pools used to raise the pH which can be lowered by chlorine tablets and other additives which contain acids. In cooking, it is sometimes used in place of sodium hydroxide for lyeing, especially with German pretzels and lye rolls. These dishes are treated with a solution of an alkaline substance to change the pH of the surface of the food and improve browning. In taxidermy, sodium carbonate added to boiling water will remove flesh from the bones of animal carcasses for trophy mounting or educational display. In chemistry, it is often used as an electrolyte. Electrolytes are usually salt-based, and sodium carbonate acts as a very good conductor in the process of electrolysis. In addition, unlike chloride ions, which form chlorine gas, carbonate ions are not corrosive to the anodes. It is also used as a primary standard for acid-base titrations because it is solid and air-stable, making it easy to weigh accurately. +
    + + + + Source: + Wikipedia + + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
    +
  • + + + + +

    + + E500ii - Sodium hydrogen carbonate +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + Sodium carbonate: Sodium carbonate, Na2CO3, -also known as washing soda, soda ash and soda crystals, and in the monohydrate form as crystal carbonate- is the water-soluble sodium salt of carbonic acid. It most commonly occurs as a crystalline decahydrate, which readily effloresces to form a white powder, the monohydrate. Pure sodium carbonate is a white, odorless powder that is hygroscopic -absorbs moisture from the air-. It has a strongly alkaline taste, and forms a moderately basic solution in water. Sodium carbonate is well known domestically for its everyday use as a water softener. Historically it was extracted from the ashes of plants growing in sodium-rich soils, such as vegetation from the Middle East, kelp from Scotland and seaweed from Spain. Because the ashes of these sodium-rich plants were noticeably different from ashes of timber -used to create potash-, they became known as "soda ash". It is synthetically produced in large quantities from salt -sodium chloride- and limestone by a method known as the Solvay process. The manufacture of glass is one of the most important uses of sodium carbonate. Sodium carbonate acts as a flux for silica, lowering the melting point of the mixture to something achievable without special materials. This "soda glass" is mildly water-soluble, so some calcium carbonate is added to the melt mixture to make the glass produced insoluble. This type of glass is known as soda lime glass: "soda" for the sodium carbonate and "lime" for the calcium carbonate. Soda lime glass has been the most common form of glass for centuries. Sodium carbonate is also used as a relatively strong base in various settings. For example, it is used as a pH regulator to maintain stable alkaline conditions necessary for the action of the majority of photographic film developing agents. It acts as an alkali because when dissolved in water, it dissociates into the weak acid: carbonic acid and the strong alkali: sodium hydroxide. This gives sodium carbonate in solution the ability to attack metals such as aluminium with the release of hydrogen gas.It is a common additive in swimming pools used to raise the pH which can be lowered by chlorine tablets and other additives which contain acids. In cooking, it is sometimes used in place of sodium hydroxide for lyeing, especially with German pretzels and lye rolls. These dishes are treated with a solution of an alkaline substance to change the pH of the surface of the food and improve browning. In taxidermy, sodium carbonate added to boiling water will remove flesh from the bones of animal carcasses for trophy mounting or educational display. In chemistry, it is often used as an electrolyte. Electrolytes are usually salt-based, and sodium carbonate acts as a very good conductor in the process of electrolysis. In addition, unlike chloride ions, which form chlorine gas, carbonate ions are not corrosive to the anodes. It is also used as a primary standard for acid-base titrations because it is solid and air-stable, making it easy to weigh accurately. +
    + + + + Source: + Wikipedia + + + + +
    + + +
    +
    + +
  • +
+ + +
+ +
+ + + + + + + +
+ +
+ + + + + + +

Ingredients analysis

+ + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ The analysis is based solely on the ingredients listed and does not take into account processing methods. +
+ + + +
+ + +
+
+ +
+ + + + + + + + +
    +
  • + + + + + icon + +

    + + Details of the analysis of the ingredients +

    + +
    +
    + + +
    + +
    + +
    + + + + +
    + en: Wheat flour, apples, sugar, butter, eggs, salt, palm oil, acidifier (citric acid), raising agent (sodium bicarbonate) +
    + + + +
    + + +
    +
    + +
    + + + + +
    +
      +
    1. Wheat flour -> en:wheat-flour - vegan: yes - vegetarian: yes - ciqual_proxy_food_code: 9410 - percent_min: 11.1111111111111 - percent_max: 100
    2. +
    3. apples -> en:apple - vegan: yes - vegetarian: yes - ciqual_food_code: 13050 - percent_min: 0 - percent_max: 50
    4. +
    5. sugar -> en:sugar - vegan: yes - vegetarian: yes - ciqual_proxy_food_code: 31016 - percent_min: 0 - percent_max: 33.3333333333333
    6. +
    7. butter -> en:butter - vegan: no - vegetarian: yes - ciqual_proxy_food_code: 16400 - percent_min: 0 - percent_max: 25
    8. +
    9. eggs -> en:egg - vegan: no - vegetarian: yes - ciqual_food_code: 22000 - percent_min: 0 - percent_max: 20
    10. +
    11. salt -> en:salt - vegan: yes - vegetarian: yes - ciqual_food_code: 11058 - percent_min: 0 - percent_max: 16.6666666666667
    12. +
    13. palm oil -> en:palm-oil - vegan: yes - vegetarian: yes - from_palm_oil: yes - ciqual_food_code: 16129 - percent_min: 0 - percent_max: 14.2857142857143
    14. +
    15. acidifier -> en:acid - percent_min: 0 - percent_max: 12.5
        +
      1. citric acid -> en:e330 - vegan: yes - vegetarian: yes - percent_min: 0 - percent_max: 12.5
      2. +
      +
    16. +
    17. raising agent -> en:raising-agent - percent_min: 0 - percent_max: 11.1111111111111
        +
      1. sodium bicarbonate -> en:e500ii - vegan: yes - vegetarian: yes - percent_min: 0 - percent_max: 11.1111111111111
      2. +
      +
    18. +
    + +
    + + + +
    + + +
    +
    + +
    + + + + +
    + +
    + + + +
    + + +
    +
    + +
  • +
+ + + + + + +
+
+ +
+ + + +
+
+
+
+ + +
+
+
+
+ + + + + +
+ + +

Environment

+ + + +
+ + + + + +
    +
  • + + + + + icon + +

    + + Green-Score B +

    + + Low environmental impact + +
    +
    + + +
    + +
    + +
    + + + + +
    ⚠ + ️Select a country in order to include the full impact of transportation. +
    + + +
    + + +
    +
    + +
    + + + + +
    + The Green-Score is an experimental score that summarizes the environmental impacts of food products. +
    + + + +
    + + +
    +
    + +
    + + + + +
    → + + + The Green-Score was initially developped for France and it is being extended to other European countries. The Green-Score formula is subject to change as it is regularly improved to make it more precise and better suited to each country. + + +
    + + +
    + + +
    + +
    + + + + + + +

    Life cycle analysis

    + + + + + + + +
      +
    • + + + + + icon + +

      + + Average impact of products of the same category: A+ (Score: 90/100) +

      + + Category: Apple tart + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      Category: + Apple tart +

      +
        +
      • + PEF environmental score: 0.20 + (the lower the score, the lower the impact) +
      • +
      • + including impact on climate change: 1.69 + kg CO2 eq/kg of product +
      • +
      + +
      + + + +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + Stage + + Impact +
      + + icon + + + + + Agriculture + + + + + + +
      +
      +
      +
      +
      + + 63.8 % + +
      + + icon + + + + + Processing + + + + + + +
      +
      +
      +
      +
      + + 18.5 % + +
      + + icon + + + + + Packaging + + + + + + +
      +
      +
      +
      +
      + + 9.6 % + +
      + + icon + + + + + Transportation + + + + + + +
      +
      +
      +
      +
      + + 5.6 % + +
      + + icon + + + + + Distribution + + + + + + +
      +
      +
      +
      +
      + + 2.4 % + +
      + + icon + + + + + Consumption + + + + + + +
      +
      +
      +
      +
      + + 0.0 % + +
      +
      +
      + +
    • +
    + + + + + + +
    + +
    + + + + + + +

    Bonuses and maluses

    + + + + + + + + + + + + + + + +
      +
    • + + + + + icon + +

      + + Ingredients that threatens species +

      + + Malus: -10 + +
      +
      + + +
      + +
      + +
      + + + + +
      + +

      Contains palm oil

      +

      Tropical forests in Asia, Africa and Latin America are destroyed to create and expand oil palm tree plantations. The deforestation contributes to climate change, and it endangers species such as the orangutan, the pigmy elephant and the Sumatran rhino.

      + +
      + + + +
      + + +
      +
      + +
    • +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + +

    Green-Score for this product

    + + + + + + + + + + + + + + +
    +
    + +
    + + + + + + + + +
    + + +
    +
    + +
  • +
+ + + +
+ + + + + + +

Carbon footprint

+ + + + + + + +
    +
  • + + + + + icon + +

    + + Equal to driving 0.9 km in a petrol car +

    + + 169 g CO₂e per 100g of product + +
    +
    + + +
    + +
    + +
    + + + + +
    + +

    The carbon emission figure comes from ADEME's Agribalyse database, for the category: + Apple tart + (Source: ADEME Agribalyse Database) +

    + +
    + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Stage + + Impact +
    + + icon + + + + + Agriculture + + + + + + +
    +
    +
    +
    +
    + + 62.4 % + +
    + + icon + + + + + Processing + + + + + + +
    +
    +
    +
    +
    + + 11.3 % + +
    + + icon + + + + + Packaging + + + + + + +
    +
    +
    +
    +
    + + 17.0 % + +
    + + icon + + + + + Transportation + + + + + + +
    +
    +
    +
    +
    + + 8.1 % + +
    + + icon + + + + + Distribution + + + + + + +
    +
    +
    +
    +
    + + 1.1 % + +
    + + icon + + + + + Consumption + + + + + + +
    +
    +
    +
    +
    + + 0.0 % + +
    +
    +
    + +
  • +
+ + + + + + +
+ +
+ + + + + + +

Packaging

+ + + + + + + + + + + + + + +
+ +
+ + + + + + +

Transportation

+ + + + + + + + + + + + + + +
+ +
+ + + + + + +

Threatened species

+ + + + + + + + + + + + + + +
+
+ +
+ + + +
+
+
+
+ + + + + + + + + +
+
+
+
+ + + + + +
+ + +

Report a problem

+ + + +
+ + + + + + + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + +
+
+
+
+ +

Data sources

+ + + + + + + + + +

+ Product added on by tests
+ Last edit of product page on by tests. + + +

+ +
+ If the data is incomplete or incorrect, you can complete or correct it by editing this page. +
+ + + + +
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+ + + + + +
+
+
+
+ + + + + + + + +
+
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/integration/expected_test_results/web_html/world-product.html b/tests/integration/expected_test_results/web_html/world-product.html index 01888f18fbd1b..b859fbc400259 100644 --- a/tests/integration/expected_test_results/web_html/world-product.html +++ b/tests/integration/expected_test_results/web_html/world-product.html @@ -75,9 +75,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -356,6 +368,7 @@

Please give to our 2024 Fundraiser

+ @@ -2845,9 +2858,11 @@

Environment

> - Green-Score B - Low environmental impact + Green-Score B + Low environmental impact +
@@ -4327,7 +4342,7 @@

Report a problem

@@ -4432,6 +4447,7 @@

Data sources

+
@@ -4586,6 +4602,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-products-multiple-codes.html b/tests/integration/expected_test_results/web_html/world-products-multiple-codes.html index 3647f88d7bbcd..519e53049d0b6 100644 --- a/tests/integration/expected_test_results/web_html/world-products-multiple-codes.html +++ b/tests/integration/expected_test_results/web_html/world-products-multiple-codes.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -370,6 +383,7 @@

Search results - World

+
@@ -524,6 +538,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-search-form.html b/tests/integration/expected_test_results/web_html/world-search-form.html index b9d87fc99adb4..70d7241231768 100644 --- a/tests/integration/expected_test_results/web_html/world-search-form.html +++ b/tests/integration/expected_test_results/web_html/world-search-form.html @@ -67,9 +67,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -348,6 +360,7 @@

Please give to our 2024 Fundraiser

+
@@ -2024,6 +2037,7 @@

Results on a graph

+
@@ -2178,6 +2192,7 @@

Discover the project

+
diff --git a/tests/integration/expected_test_results/web_html/world-search-results.html b/tests/integration/expected_test_results/web_html/world-search-results.html index 12974049d287f..5b93b00a75a10 100644 --- a/tests/integration/expected_test_results/web_html/world-search-results.html +++ b/tests/integration/expected_test_results/web_html/world-search-results.html @@ -64,9 +64,12 @@ + +
+
+
- + +
+
+ + + +
+ + @@ -345,6 +357,7 @@

Please give to our 2024 Fundraiser

+ @@ -492,6 +505,7 @@

Search results - World

+ +
diff --git a/tests/integration/web_html.t b/tests/integration/web_html.t index 125f0f105d2b6..36615cce1ab8c 100644 --- a/tests/integration/web_html.t +++ b/tests/integration/web_html.t @@ -558,6 +558,18 @@ my $tests_ref = [ path => '/products/3300000000001,3300000000002', expected_type => 'html', }, + # Request a page with ?content_only=1 to remove the header and footer + { + test_case => 'world-product-content-only', + path => '/product/3300000000001/apple-pie-bob-s-pies?content_only=1', + expected_type => 'html', + }, + # Use ?user_agent=smoothie to test the smoothie user agent + { + test_case => 'world-product-smoothie', + path => '/product/3300000000001/apple-pie-bob-s-pies?user_agent=smoothie', + expected_type => 'html', + }, ]; execute_api_tests(__FILE__, $tests_ref); diff --git a/tests/unit/expected_test_results/attributes/en-attributes.json b/tests/unit/expected_test_results/attributes/en-attributes.json index 4c5d3adc03ff8..13270c9685ef7 100644 --- a/tests/unit/expected_test_results/attributes/en-attributes.json +++ b/tests/unit/expected_test_results/attributes/en-attributes.json @@ -1115,7 +1115,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/attributes/en-environmental_score-score-at-20-threshold.json b/tests/unit/expected_test_results/attributes/en-environmental_score-score-at-20-threshold.json index 28c5bfe32c993..760d2a05d0995 100644 --- a/tests/unit/expected_test_results/attributes/en-environmental_score-score-at-20-threshold.json +++ b/tests/unit/expected_test_results/attributes/en-environmental_score-score-at-20-threshold.json @@ -791,7 +791,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-no-packagings", diff --git a/tests/unit/expected_test_results/attributes/en-maybe-vegan.json b/tests/unit/expected_test_results/attributes/en-maybe-vegan.json index ea5218e0153d8..15f6e96d83cd1 100644 --- a/tests/unit/expected_test_results/attributes/en-maybe-vegan.json +++ b/tests/unit/expected_test_results/attributes/en-maybe-vegan.json @@ -608,6 +608,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -731,7 +732,6 @@ "lc" : "en", "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-nutrition-data", "en:nutriscore-missing-nutrition-data-energy", diff --git a/tests/unit/expected_test_results/attributes/en-no-ingredients.json b/tests/unit/expected_test_results/attributes/en-no-ingredients.json index 7c07412ed4a99..102d1e9eee545 100644 --- a/tests/unit/expected_test_results/attributes/en-no-ingredients.json +++ b/tests/unit/expected_test_results/attributes/en-no-ingredients.json @@ -794,7 +794,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-no-packagings", diff --git a/tests/unit/expected_test_results/attributes/en-nova-groups-markers.json b/tests/unit/expected_test_results/attributes/en-nova-groups-markers.json index db81f7d45e8bf..b26878fbbfd17 100644 --- a/tests/unit/expected_test_results/attributes/en-nova-groups-markers.json +++ b/tests/unit/expected_test_results/attributes/en-nova-groups-markers.json @@ -973,7 +973,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-no-packagings", diff --git a/tests/unit/expected_test_results/attributes/en-nutriscore.json b/tests/unit/expected_test_results/attributes/en-nutriscore.json index 584f2552b7ea3..18fe6cb305c37 100644 --- a/tests/unit/expected_test_results/attributes/en-nutriscore.json +++ b/tests/unit/expected_test_results/attributes/en-nutriscore.json @@ -848,7 +848,6 @@ "en:all-ingredients-with-specified-percent", "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-no-packagings", diff --git a/tests/unit/expected_test_results/attributes/en-unknown-ingredients.json b/tests/unit/expected_test_results/attributes/en-unknown-ingredients.json index 789ff25098143..71c4fa9a18291 100644 --- a/tests/unit/expected_test_results/attributes/en-unknown-ingredients.json +++ b/tests/unit/expected_test_results/attributes/en-unknown-ingredients.json @@ -857,7 +857,6 @@ "misc_tags" : [ "en:environmental-score-changed", "en:environmental-score-computed", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-grade-changed", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-no-packagings", diff --git a/tests/unit/expected_test_results/attributes/fr-palm-kernel-fat.json b/tests/unit/expected_test_results/attributes/fr-palm-kernel-fat.json index 3079dc420ed5b..67655482bc048 100644 --- a/tests/unit/expected_test_results/attributes/fr-palm-kernel-fat.json +++ b/tests/unit/expected_test_results/attributes/fr-palm-kernel-fat.json @@ -608,6 +608,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "labels" : 1, @@ -693,7 +694,6 @@ "lc" : "fr", "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/unit/expected_test_results/attributes/fr-palm-oil-free.json b/tests/unit/expected_test_results/attributes/fr-palm-oil-free.json index fd7a99fbb2f10..978e08d1fb9e2 100644 --- a/tests/unit/expected_test_results/attributes/fr-palm-oil-free.json +++ b/tests/unit/expected_test_results/attributes/fr-palm-oil-free.json @@ -603,6 +603,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "labels" : 1, @@ -730,7 +731,6 @@ "lc" : "fr", "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/unit/expected_test_results/attributes/fr-palm-oil.json b/tests/unit/expected_test_results/attributes/fr-palm-oil.json index ddc8199beac45..d8f4199d2ec20 100644 --- a/tests/unit/expected_test_results/attributes/fr-palm-oil.json +++ b/tests/unit/expected_test_results/attributes/fr-palm-oil.json @@ -606,6 +606,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "labels" : 1, @@ -710,7 +711,6 @@ "lc" : "fr", "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/unit/expected_test_results/attributes/fr-vegetable-oils.json b/tests/unit/expected_test_results/attributes/fr-vegetable-oils.json index 2ddaead9f9988..ba0c9347d3000 100644 --- a/tests/unit/expected_test_results/attributes/fr-vegetable-oils.json +++ b/tests/unit/expected_test_results/attributes/fr-vegetable-oils.json @@ -603,6 +603,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "labels" : 1, @@ -722,7 +723,6 @@ "lc" : "fr", "minerals_tags" : [], "misc_tags" : [ - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed", "en:nutriscore-missing-category", "en:nutriscore-missing-nutrition-data", diff --git a/tests/unit/expected_test_results/environmental_score/agribalyse-updated-category.json b/tests/unit/expected_test_results/environmental_score/agribalyse-updated-category.json index f24902ea8e037..7b71ac3bcd213 100644 --- a/tests/unit/expected_test_results/environmental_score/agribalyse-updated-category.json +++ b/tests/unit/expected_test_results/environmental_score/agribalyse-updated-category.json @@ -408,7 +408,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/calvados-ingredients-no-origins.json b/tests/unit/expected_test_results/environmental_score/calvados-ingredients-no-origins.json index e545e47e892eb..dc077a2ab42b8 100644 --- a/tests/unit/expected_test_results/environmental_score/calvados-ingredients-no-origins.json +++ b/tests/unit/expected_test_results/environmental_score/calvados-ingredients-no-origins.json @@ -232,6 +232,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "labels" : 1, @@ -303,7 +304,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed" ], "nutriments" : { diff --git a/tests/unit/expected_test_results/environmental_score/calvados-no-ingredients-no-origins.json b/tests/unit/expected_test_results/environmental_score/calvados-no-ingredients-no-origins.json index 6761191f8e4a5..a4d00dccde2e9 100644 --- a/tests/unit/expected_test_results/environmental_score/calvados-no-ingredients-no-origins.json +++ b/tests/unit/expected_test_results/environmental_score/calvados-no-ingredients-no-origins.json @@ -234,6 +234,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "ingredients" : 1, @@ -253,7 +254,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed" ], "packaging_materials_tags" : [], diff --git a/tests/unit/expected_test_results/environmental_score/carrots-plastic.json b/tests/unit/expected_test_results/environmental_score/carrots-plastic.json index a4a72e94bf024..24217d308caef 100644 --- a/tests/unit/expected_test_results/environmental_score/carrots-plastic.json +++ b/tests/unit/expected_test_results/environmental_score/carrots-plastic.json @@ -465,7 +465,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-score-above-100", "en:environmental-score-computed", "en:environmental-score-changed", diff --git a/tests/unit/expected_test_results/environmental_score/carrots.json b/tests/unit/expected_test_results/environmental_score/carrots.json index a70c36bcb09ad..f1e6f9f30ab61 100644 --- a/tests/unit/expected_test_results/environmental_score/carrots.json +++ b/tests/unit/expected_test_results/environmental_score/carrots.json @@ -469,7 +469,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-score-above-100", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/category-without-environmental-score-sodas.json b/tests/unit/expected_test_results/environmental_score/category-without-environmental-score-sodas.json index 77e13ff189d39..c7aac2ecc7fa8 100644 --- a/tests/unit/expected_test_results/environmental_score/category-without-environmental-score-sodas.json +++ b/tests/unit/expected_test_results/environmental_score/category-without-environmental-score-sodas.json @@ -231,6 +231,7 @@ "threatened_species" : {} }, "environmental_score_not_applicable_for_category" : "en:sodas", + "grade" : "not-applicable", "missing" : { "labels" : 1, "origins" : 1, @@ -313,7 +314,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-applicable", "en:environmental-score-not-computed" ], diff --git a/tests/unit/expected_test_results/environmental_score/empty-product.json b/tests/unit/expected_test_results/environmental_score/empty-product.json index 9684f9117ee40..2542b3a695c21 100644 --- a/tests/unit/expected_test_results/environmental_score/empty-product.json +++ b/tests/unit/expected_test_results/environmental_score/empty-product.json @@ -232,6 +232,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "categories" : 1, "ingredients" : 1, @@ -252,7 +253,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed" ], "packaging_materials_tags" : [], diff --git a/tests/unit/expected_test_results/environmental_score/energy-drink.json b/tests/unit/expected_test_results/environmental_score/energy-drink.json index 6676c538e5075..df4b37d758ebb 100644 --- a/tests/unit/expected_test_results/environmental_score/energy-drink.json +++ b/tests/unit/expected_test_results/environmental_score/energy-drink.json @@ -252,6 +252,7 @@ "threatened_species" : {} }, "environmental_score_not_applicable_for_category" : "en:energy-drinks", + "grade" : "not-applicable", "missing" : { "labels" : 1, "origins" : 1 @@ -331,7 +332,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-applicable", "en:environmental-score-not-computed" ], diff --git a/tests/unit/expected_test_results/environmental_score/exempted-category-sodas.json b/tests/unit/expected_test_results/environmental_score/exempted-category-sodas.json index 97c452c35022a..e03f0809f6b1b 100644 --- a/tests/unit/expected_test_results/environmental_score/exempted-category-sodas.json +++ b/tests/unit/expected_test_results/environmental_score/exempted-category-sodas.json @@ -233,6 +233,7 @@ } }, "environmental_score_not_applicable_for_category" : "en:sodas", + "grade" : "not-applicable", "missing" : { "ingredients" : 1, "labels" : 1, @@ -251,7 +252,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-applicable", "en:environmental-score-not-computed" ], diff --git a/tests/unit/expected_test_results/environmental_score/foie-gras.json b/tests/unit/expected_test_results/environmental_score/foie-gras.json index b704c263043f8..0b984e02752f1 100644 --- a/tests/unit/expected_test_results/environmental_score/foie-gras.json +++ b/tests/unit/expected_test_results/environmental_score/foie-gras.json @@ -481,7 +481,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/fr-oeufs-de-france.json b/tests/unit/expected_test_results/environmental_score/fr-oeufs-de-france.json index 8ee0c988f65e1..1474fc6de8be5 100644 --- a/tests/unit/expected_test_results/environmental_score/fr-oeufs-de-france.json +++ b/tests/unit/expected_test_results/environmental_score/fr-oeufs-de-france.json @@ -421,7 +421,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/fr-verseur-en-plastique.json b/tests/unit/expected_test_results/environmental_score/fr-verseur-en-plastique.json index 355851a03ea4d..62394b8a3989f 100644 --- a/tests/unit/expected_test_results/environmental_score/fr-verseur-en-plastique.json +++ b/tests/unit/expected_test_results/environmental_score/fr-verseur-en-plastique.json @@ -496,7 +496,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/fr-viande-porcine-francaise.json b/tests/unit/expected_test_results/environmental_score/fr-viande-porcine-francaise.json index f6ade9ce5357d..0654d0da37f5d 100644 --- a/tests/unit/expected_test_results/environmental_score/fr-viande-porcine-francaise.json +++ b/tests/unit/expected_test_results/environmental_score/fr-viande-porcine-francaise.json @@ -546,7 +546,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/fresh-vegetable.json b/tests/unit/expected_test_results/environmental_score/fresh-vegetable.json index 053ecfa23e139..1af594e9ac5f9 100644 --- a/tests/unit/expected_test_results/environmental_score/fresh-vegetable.json +++ b/tests/unit/expected_test_results/environmental_score/fresh-vegetable.json @@ -244,6 +244,7 @@ "threatened_species" : {} }, "environmental_score_not_applicable_for_category" : "en:fresh-vegetables", + "grade" : "not-applicable", "missing" : { "labels" : 1, "origins" : 1 @@ -310,7 +311,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-applicable", "en:environmental-score-not-computed" ], diff --git a/tests/unit/expected_test_results/environmental_score/frozen-vegetable.json b/tests/unit/expected_test_results/environmental_score/frozen-vegetable.json index badda95b402e7..3cd197efccd2f 100644 --- a/tests/unit/expected_test_results/environmental_score/frozen-vegetable.json +++ b/tests/unit/expected_test_results/environmental_score/frozen-vegetable.json @@ -469,7 +469,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/grade-a-with-non-recyclable-label.json b/tests/unit/expected_test_results/environmental_score/grade-a-with-non-recyclable-label.json index 2666616698752..2c205662ec55d 100644 --- a/tests/unit/expected_test_results/environmental_score/grade-a-with-non-recyclable-label.json +++ b/tests/unit/expected_test_results/environmental_score/grade-a-with-non-recyclable-label.json @@ -526,7 +526,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-score-above-100", "en:environmental-score-computed", "en:environmental-score-changed", diff --git a/tests/unit/expected_test_results/environmental_score/grade-a-with-recyclable-label.json b/tests/unit/expected_test_results/environmental_score/grade-a-with-recyclable-label.json index cec3b8dbe2d5d..9ec6038515495 100644 --- a/tests/unit/expected_test_results/environmental_score/grade-a-with-recyclable-label.json +++ b/tests/unit/expected_test_results/environmental_score/grade-a-with-recyclable-label.json @@ -526,7 +526,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-score-above-100", "en:environmental-score-computed", "en:environmental-score-changed", diff --git a/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil-rspo.json b/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil-rspo.json index b63cf952b1f65..accf1e85d9292 100644 --- a/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil-rspo.json +++ b/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil-rspo.json @@ -411,7 +411,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil.json b/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil.json index bbedf3b47bb88..1b35527f2b601 100644 --- a/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil.json +++ b/tests/unit/expected_test_results/environmental_score/ingredient-palm-oil.json @@ -408,7 +408,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/known-category-butters.json b/tests/unit/expected_test_results/environmental_score/known-category-butters.json index 2638a8c0be64b..aae927f0d1d95 100644 --- a/tests/unit/expected_test_results/environmental_score/known-category-butters.json +++ b/tests/unit/expected_test_results/environmental_score/known-category-butters.json @@ -408,7 +408,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/known-category-margarines.json b/tests/unit/expected_test_results/environmental_score/known-category-margarines.json index bbedf3b47bb88..1b35527f2b601 100644 --- a/tests/unit/expected_test_results/environmental_score/known-category-margarines.json +++ b/tests/unit/expected_test_results/environmental_score/known-category-margarines.json @@ -408,7 +408,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/label-ab-hve-msc-asc.json b/tests/unit/expected_test_results/environmental_score/label-ab-hve-msc-asc.json index be0f97b62bdbf..25cc5621ce621 100644 --- a/tests/unit/expected_test_results/environmental_score/label-ab-hve-msc-asc.json +++ b/tests/unit/expected_test_results/environmental_score/label-ab-hve-msc-asc.json @@ -417,7 +417,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-origins", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/label-ab-hve.json b/tests/unit/expected_test_results/environmental_score/label-ab-hve.json index 78b80bee524c4..6a649268ddfd2 100644 --- a/tests/unit/expected_test_results/environmental_score/label-ab-hve.json +++ b/tests/unit/expected_test_results/environmental_score/label-ab-hve.json @@ -413,7 +413,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-origins", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/label-msc-asc.json b/tests/unit/expected_test_results/environmental_score/label-msc-asc.json index 51af0e6757921..1a48637e19cce 100644 --- a/tests/unit/expected_test_results/environmental_score/label-msc-asc.json +++ b/tests/unit/expected_test_results/environmental_score/label-msc-asc.json @@ -413,7 +413,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-origins", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/label-organic.json b/tests/unit/expected_test_results/environmental_score/label-organic.json index 234b6ee014d45..6d5b735786e02 100644 --- a/tests/unit/expected_test_results/environmental_score/label-organic.json +++ b/tests/unit/expected_test_results/environmental_score/label-organic.json @@ -411,7 +411,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-origins", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/lamb-leg.json b/tests/unit/expected_test_results/environmental_score/lamb-leg.json index 885d1b2efb6b3..7f2aac090e9a2 100644 --- a/tests/unit/expected_test_results/environmental_score/lamb-leg.json +++ b/tests/unit/expected_test_results/environmental_score/lamb-leg.json @@ -463,7 +463,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/milk.json b/tests/unit/expected_test_results/environmental_score/milk.json index 3a564abf5c8fc..4ba2d670b1e68 100644 --- a/tests/unit/expected_test_results/environmental_score/milk.json +++ b/tests/unit/expected_test_results/environmental_score/milk.json @@ -476,7 +476,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-computed", "en:environmental-score-changed", "en:environmental-score-grade-changed" diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field-multiple.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field-multiple.json index 81eadb005bdf1..e1db7e23e6ee1 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field-multiple.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field-multiple.json @@ -507,7 +507,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field.json index 5e730d166ebcb..ebdeb710d4ede 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-in-origins-field.json @@ -502,7 +502,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested-2.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested-2.json index b253a4d0a29fa..b141f4ef80538 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested-2.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested-2.json @@ -553,7 +553,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested.json index e16faf27ece84..f4749afaadead 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-nested.json @@ -504,7 +504,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-not-specified.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-not-specified.json index 83b4cb79a1e52..f4992ab482e4b 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-not-specified.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-not-specified.json @@ -499,7 +499,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-partly-specified.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-partly-specified.json index 4aba684b3622c..ed1bfa745d77b 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-partly-specified.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-partly-specified.json @@ -502,7 +502,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified-multiple.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified-multiple.json index 7ee37dd31e460..5611cad26c6c2 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified-multiple.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified-multiple.json @@ -519,7 +519,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified.json index 8225339292674..22b80fbcf5734 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-specified.json @@ -508,7 +508,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unknown-origin.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unknown-origin.json index 316ae97fba5de..46717c2a4c944 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unknown-origin.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unknown-origin.json @@ -458,7 +458,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unspecified-origin.json b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unspecified-origin.json index 8f8fa9ef1e179..0e02184d20673 100644 --- a/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unspecified-origin.json +++ b/tests/unit/expected_test_results/environmental_score/origins-of-ingredients-unspecified-origin.json @@ -455,7 +455,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-bulk.json b/tests/unit/expected_test_results/environmental_score/packaging-en-bulk.json index 83cca6952b322..1a9c70a9b0de2 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-bulk.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-bulk.json @@ -419,7 +419,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-multiple-over-maximum-malus.json b/tests/unit/expected_test_results/environmental_score/packaging-en-multiple-over-maximum-malus.json index f586504809663..e866cb8cdb1a3 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-multiple-over-maximum-malus.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-multiple-over-maximum-malus.json @@ -434,7 +434,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-multiple.json b/tests/unit/expected_test_results/environmental_score/packaging-en-multiple.json index 3e677ac685ae7..f1df281f725bd 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-multiple.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-multiple.json @@ -436,7 +436,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-pet-bottle.json b/tests/unit/expected_test_results/environmental_score/packaging-en-pet-bottle.json index f29911e91cefa..ab2ffacac0f1e 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-pet-bottle.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-pet-bottle.json @@ -419,7 +419,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-plastic-bottle.json b/tests/unit/expected_test_results/environmental_score/packaging-en-plastic-bottle.json index f63f92410d86c..a74d34741f62d 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-plastic-bottle.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-plastic-bottle.json @@ -418,7 +418,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak-brick.json b/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak-brick.json index 3ed2a46dcf165..243024f4aaf9e 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak-brick.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak-brick.json @@ -417,7 +417,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak.json b/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak.json index f5fafd81740bd..1b9fd01ee2e80 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-tetra-pak.json @@ -417,7 +417,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-bottle.json b/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-bottle.json index 3711dc966d22e..9077d7e636514 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-bottle.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-bottle.json @@ -419,7 +419,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-can.json b/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-can.json index 001455689a70a..3c880ad57025b 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-can.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-en-unspecified-material-can.json @@ -419,7 +419,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-fr-new-shapes.json b/tests/unit/expected_test_results/environmental_score/packaging-fr-new-shapes.json index 543529a868d5b..61c181c7b8c38 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-fr-new-shapes.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-fr-new-shapes.json @@ -493,7 +493,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-score-above-100", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-unspecified-no-a-eco-score.json b/tests/unit/expected_test_results/environmental_score/packaging-unspecified-no-a-eco-score.json index e05c433329689..1bd8e93eca3a1 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-unspecified-no-a-eco-score.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-unspecified-no-a-eco-score.json @@ -456,7 +456,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-score-above-100", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-packagings", diff --git a/tests/unit/expected_test_results/environmental_score/packaging-unspecified.json b/tests/unit/expected_test_results/environmental_score/packaging-unspecified.json index 03b0693443825..2ff0821f93e17 100644 --- a/tests/unit/expected_test_results/environmental_score/packaging-unspecified.json +++ b/tests/unit/expected_test_results/environmental_score/packaging-unspecified.json @@ -408,7 +408,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/skyr.json b/tests/unit/expected_test_results/environmental_score/skyr.json index 699157f041d50..072d25fa7402d 100644 --- a/tests/unit/expected_test_results/environmental_score/skyr.json +++ b/tests/unit/expected_test_results/environmental_score/skyr.json @@ -408,7 +408,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/sum-of-bonuses-greater-than-25.json b/tests/unit/expected_test_results/environmental_score/sum-of-bonuses-greater-than-25.json index 87946ff1b0061..900486e2f5cf7 100644 --- a/tests/unit/expected_test_results/environmental_score/sum-of-bonuses-greater-than-25.json +++ b/tests/unit/expected_test_results/environmental_score/sum-of-bonuses-greater-than-25.json @@ -473,7 +473,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-packagings", "en:environmental-score-computed", diff --git a/tests/unit/expected_test_results/environmental_score/track-environmental-score-changes.json b/tests/unit/expected_test_results/environmental_score/track-environmental-score-changes.json index 38f57b51c135c..2c2e49879ca79 100644 --- a/tests/unit/expected_test_results/environmental_score/track-environmental-score-changes.json +++ b/tests/unit/expected_test_results/environmental_score/track-environmental-score-changes.json @@ -488,7 +488,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/track-environmental-score-no-change.json b/tests/unit/expected_test_results/environmental_score/track-environmental-score-no-change.json index 03914dba46f31..d022ed14e662d 100644 --- a/tests/unit/expected_test_results/environmental_score/track-environmental-score-no-change.json +++ b/tests/unit/expected_test_results/environmental_score/track-environmental-score-no-change.json @@ -481,7 +481,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/track-environmental-score-same-grade.json b/tests/unit/expected_test_results/environmental_score/track-environmental-score-same-grade.json index 9cd3bdd27b8c5..4062d92c86f51 100644 --- a/tests/unit/expected_test_results/environmental_score/track-environmental-score-same-grade.json +++ b/tests/unit/expected_test_results/environmental_score/track-environmental-score-same-grade.json @@ -488,7 +488,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/track-environmental-score-tags-retained.json b/tests/unit/expected_test_results/environmental_score/track-environmental-score-tags-retained.json index a9d79769812c3..0ccce9c349175 100644 --- a/tests/unit/expected_test_results/environmental_score/track-environmental-score-tags-retained.json +++ b/tests/unit/expected_test_results/environmental_score/track-environmental-score-tags-retained.json @@ -486,7 +486,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/environmental_score/uk-milk.json b/tests/unit/expected_test_results/environmental_score/uk-milk.json index a74733d63983d..fa5a940729a61 100644 --- a/tests/unit/expected_test_results/environmental_score/uk-milk.json +++ b/tests/unit/expected_test_results/environmental_score/uk-milk.json @@ -476,7 +476,6 @@ "en:packagings-not-complete", "en:packagings-not-empty-but-not-complete", "en:packagings-not-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-computed", diff --git a/tests/unit/expected_test_results/environmental_score/unknown-category.json b/tests/unit/expected_test_results/environmental_score/unknown-category.json index 9135c4e99a925..ce62278b9778a 100644 --- a/tests/unit/expected_test_results/environmental_score/unknown-category.json +++ b/tests/unit/expected_test_results/environmental_score/unknown-category.json @@ -235,6 +235,7 @@ "agribalyse" : { "warning" : "missing_agribalyse_match" }, + "grade" : "unknown", "missing" : { "agb_category" : 1, "ingredients" : 1, @@ -255,7 +256,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-not-computed" ], "packaging_materials_tags" : [], diff --git a/tests/unit/expected_test_results/environmental_score/yogurt.json b/tests/unit/expected_test_results/environmental_score/yogurt.json index b3cdc4ca0cbf7..0c858d1960a62 100644 --- a/tests/unit/expected_test_results/environmental_score/yogurt.json +++ b/tests/unit/expected_test_results/environmental_score/yogurt.json @@ -408,7 +408,6 @@ "en:packagings-number-of-components-0", "en:packagings-not-complete", "en:packagings-empty", - "en:environmental-score-extended-data-not-computed", "en:environmental-score-missing-data-warning", "en:environmental-score-missing-data-labels", "en:environmental-score-missing-data-origins", diff --git a/tests/unit/expected_test_results/ingredients/fi-do-not-match-myanmar.json b/tests/unit/expected_test_results/ingredients/fi-do-not-match-myanmar.json index 69c43f6c63a7a..43ed3f076125d 100644 --- a/tests/unit/expected_test_results/ingredients/fi-do-not-match-myanmar.json +++ b/tests/unit/expected_test_results/ingredients/fi-do-not-match-myanmar.json @@ -155,10 +155,10 @@ "known_ingredients_n" : 14, "lc" : "fi", "nutriments" : { - "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 5.20833333333333, - "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 5.20833333333333, - "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 5.20833333333333, - "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 5.20833333333333 + "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 7.81249999999999, + "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 7.81249999999999, + "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 7.81249999999999, + "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 7.81249999999999 }, "unknown_ingredients_n" : 0 } diff --git a/tests/unit/expected_test_results/ingredients/fr-epices-irradiees.json b/tests/unit/expected_test_results/ingredients/fr-epices-irradiees.json index 38b83687d83d5..5104504b9aee4 100644 --- a/tests/unit/expected_test_results/ingredients/fr-epices-irradiees.json +++ b/tests/unit/expected_test_results/ingredients/fr-epices-irradiees.json @@ -88,10 +88,10 @@ "known_ingredients_n" : 6, "lc" : "fr", "nutriments" : { - "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 0, - "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 0, - "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 0, - "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 0 + "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 16.6666666666667, + "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 16.6666666666667, + "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 16.6666666666667, + "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 16.6666666666667 }, "unknown_ingredients_n" : 0 } diff --git a/tests/unit/expected_test_results/nutriscore/en-dill.json b/tests/unit/expected_test_results/nutriscore/en-dill.json new file mode 100644 index 0000000000000..35173783feae0 --- /dev/null +++ b/tests/unit/expected_test_results/nutriscore/en-dill.json @@ -0,0 +1,427 @@ +{ + "additives_n" : 0, + "additives_original_tags" : [], + "additives_tags" : [], + "allergens" : "", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(en) ", + "allergens_hierarchy" : [], + "allergens_tags" : [], + "amino_acids_tags" : [], + "categories" : "dill", + "categories_hierarchy" : [ + "en:plant-based-foods-and-beverages", + "en:plant-based-foods", + "en:condiments", + "en:culinary-plants", + "en:aromatic-plants", + "en:herbs", + "en:dill" + ], + "categories_lc" : "en", + "categories_properties" : { + "agribalyse_proxy_food_code:en" : "11093", + "ciqual_food_code:en" : "11080" + }, + "categories_properties_tags" : [ + "all-products", + "categories-known", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-11093", + "agribalyse-proxy-food-code-known", + "ciqual-food-code-11080", + "ciqual-food-code-known", + "agribalyse-known", + "agribalyse-11093" + ], + "categories_tags" : [ + "en:plant-based-foods-and-beverages", + "en:plant-based-foods", + "en:condiments", + "en:culinary-plants", + "en:aromatic-plants", + "en:herbs", + "en:dill" + ], + "food_groups_tags" : [], + "ingredients" : [ + { + "ciqual_food_code" : "11093", + "id" : "en:dill", + "is_in_taxonomy" : 1, + "percent_estimate" : 100, + "percent_max" : 100, + "percent_min" : 100, + "text" : "dill", + "vegan" : "yes", + "vegetarian" : "yes" + } + ], + "ingredients_analysis" : {}, + "ingredients_analysis_tags" : [ + "en:palm-oil-free", + "en:vegan", + "en:vegetarian" + ], + "ingredients_hierarchy" : [ + "en:dill", + "en:herb" + ], + "ingredients_lc" : "en", + "ingredients_n" : 1, + "ingredients_n_tags" : [ + "1", + "1-10" + ], + "ingredients_non_nutritive_sweeteners_n" : 0, + "ingredients_original_tags" : [ + "en:dill" + ], + "ingredients_percent_analysis" : 1, + "ingredients_sweeteners_n" : 0, + "ingredients_tags" : [ + "en:dill", + "en:herb" + ], + "ingredients_text" : "dill", + "ingredients_with_specified_percent_n" : 0, + "ingredients_with_specified_percent_sum" : 0, + "ingredients_with_unspecified_percent_n" : 1, + "ingredients_with_unspecified_percent_sum" : 100, + "ingredients_without_ciqual_codes" : [], + "ingredients_without_ciqual_codes_n" : 0, + "ingredients_without_ecobalyse_ids" : [ + "en:dill" + ], + "ingredients_without_ecobalyse_ids_n" : 1, + "known_ingredients_n" : 2, + "lc" : "en", + "minerals_tags" : [], + "misc_tags" : [ + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:nutriscore-using-estimated-nutrition-facts", + "en:nutriscore-computed", + "en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients", + "en:nutrition-all-nutriscore-values-known", + "en:nutrition-fruits-vegetables-legumes-estimate-from-ingredients", + "en:nutriscore-2021-same-as-2023", + "en:nutriscore-2021-a-2023-a" + ], + "nova_group" : 1, + "nova_group_debug" : "", + "nova_groups" : "1", + "nova_groups_markers" : {}, + "nova_groups_tags" : [ + "en:1-unprocessed-or-minimally-processed-foods" + ], + "nucleotides_tags" : [], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : { + "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 100, + "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 100, + "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 100, + "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 100, + "nova-group" : 1, + "nova-group_100g" : 1, + "nova-group_serving" : 1, + "nutrition-score-fr" : -7, + "nutrition-score-fr_100g" : -7 + }, + "nutriments_estimated" : { + "alcohol_100g" : 0, + "beta-carotene_100g" : 0.000696, + "calcium_100g" : 0.202, + "carbohydrates_100g" : 3.9, + "cholesterol_100g" : 0, + "copper_100g" : 0.00022, + "energy-kcal_100g" : 48.2, + "energy-kj_100g" : 202, + "energy_100g" : 202, + "fat_100g" : 1.1, + "fiber_100g" : 3.5, + "fructose_100g" : 0.25, + "galactose_100g" : 0.19, + "glucose_100g" : 0.15, + "iodine_100g" : 3.9e-06, + "iron_100g" : 0.0055, + "lactose_100g" : 0.1, + "magnesium_100g" : 0.028, + "maltose_100g" : 0.1, + "manganese_100g" : 0.0027, + "pantothenic-acid_100g" : 0.0003, + "phosphorus_100g" : 0.0519, + "phylloquinone_100g" : 0.000152, + "polyols_100g" : 0, + "potassium_100g" : 0.647, + "proteins_100g" : 3.93, + "salt_100g" : 0.15, + "saturated-fat_100g" : 0.27, + "selenium_100g" : 2.7e-06, + "sodium_100g" : 0.027, + "starch_100g" : 0.18, + "sucrose_100g" : 0.35, + "sugars_100g" : 1.2, + "vitamin-a_100g" : 0, + "vitamin-b12_100g" : 0, + "vitamin-b1_100g" : 0.00019, + "vitamin-b2_100g" : 0.00043, + "vitamin-b6_100g" : 0.0003, + "vitamin-b9_100g" : 0.000116, + "vitamin-c_100g" : 0.07, + "vitamin-d_100g" : 0, + "vitamin-e_100g" : 0.0017, + "vitamin-pp_100g" : 0.0024, + "water_100g" : 86, + "zinc_100g" : 0.0018 + }, + "nutriscore" : { + "2021" : { + "category_available" : 1, + "data" : { + "energy" : 202, + "energy_points" : 0, + "energy_value" : 202, + "fiber" : 3.5, + "fiber_points" : 3, + "fiber_value" : 3.5, + "fruits_vegetables_nuts_colza_walnut_olive_oils" : 100, + "fruits_vegetables_nuts_colza_walnut_olive_oils_points" : 5, + "fruits_vegetables_nuts_colza_walnut_olive_oils_value" : 100, + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat" : 0, + "is_water" : 0, + "negative_points" : 0, + "positive_points" : 10, + "proteins" : 3.93, + "proteins_points" : 2, + "proteins_value" : 3.93, + "saturated_fat" : 0.27, + "saturated_fat_points" : 0, + "saturated_fat_value" : 0.3, + "sodium" : 27, + "sodium_points" : 0, + "sodium_value" : 27, + "sugars" : 1.2, + "sugars_points" : 0, + "sugars_value" : 1.2 + }, + "grade" : "a", + "nutrients_available" : 1, + "nutriscore_applicable" : 1, + "nutriscore_computed" : 1, + "score" : -10 + }, + "2023" : { + "category_available" : 1, + "data" : { + "components" : { + "negative" : [ + { + "id" : "energy", + "points" : 0, + "points_max" : 10, + "unit" : "kJ", + "value" : 202 + }, + { + "id" : "sugars", + "points" : 0, + "points_max" : 15, + "unit" : "g", + "value" : 1.2 + }, + { + "id" : "saturated_fat", + "points" : 0, + "points_max" : 10, + "unit" : "g", + "value" : 0.27 + }, + { + "id" : "salt", + "points" : 0, + "points_max" : 20, + "unit" : "g", + "value" : 0.15 + } + ], + "positive" : [ + { + "id" : "proteins", + "points" : 1, + "points_max" : 7, + "unit" : "g", + "value" : 3.93 + }, + { + "id" : "fiber", + "points" : 1, + "points_max" : 5, + "unit" : "g", + "value" : 3.5 + }, + { + "id" : "fruits_vegetables_legumes", + "points" : 5, + "points_max" : 5, + "unit" : "%", + "value" : 100 + } + ] + }, + "count_proteins" : 1, + "count_proteins_reason" : "negative_points_less_than_11", + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat_oil_nuts_seeds" : 0, + "is_red_meat_product" : 0, + "is_water" : 0, + "negative_points" : 0, + "negative_points_max" : 55, + "positive_nutrients" : [ + "proteins", + "fiber", + "fruits_vegetables_legumes" + ], + "positive_points" : 7, + "positive_points_max" : 17 + }, + "grade" : "a", + "nutrients_available" : 1, + "nutriscore_applicable" : 1, + "nutriscore_computed" : 1, + "score" : -7 + } + }, + "nutriscore_2021_tags" : [ + "a" + ], + "nutriscore_2023_tags" : [ + "a" + ], + "nutriscore_data" : { + "components" : { + "negative" : [ + { + "id" : "energy", + "points" : 0, + "points_max" : 10, + "unit" : "kJ", + "value" : 202 + }, + { + "id" : "sugars", + "points" : 0, + "points_max" : 15, + "unit" : "g", + "value" : 1.2 + }, + { + "id" : "saturated_fat", + "points" : 0, + "points_max" : 10, + "unit" : "g", + "value" : 0.27 + }, + { + "id" : "salt", + "points" : 0, + "points_max" : 20, + "unit" : "g", + "value" : 0.15 + } + ], + "positive" : [ + { + "id" : "proteins", + "points" : 1, + "points_max" : 7, + "unit" : "g", + "value" : 3.93 + }, + { + "id" : "fiber", + "points" : 1, + "points_max" : 5, + "unit" : "g", + "value" : 3.5 + }, + { + "id" : "fruits_vegetables_legumes", + "points" : 5, + "points_max" : 5, + "unit" : "%", + "value" : 100 + } + ] + }, + "count_proteins" : 1, + "count_proteins_reason" : "negative_points_less_than_11", + "grade" : "a", + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat_oil_nuts_seeds" : 0, + "is_red_meat_product" : 0, + "is_water" : 0, + "negative_points" : 0, + "negative_points_max" : 55, + "positive_nutrients" : [ + "proteins", + "fiber", + "fruits_vegetables_legumes" + ], + "positive_points" : 7, + "positive_points_max" : 17, + "score" : -7 + }, + "nutriscore_grade" : "a", + "nutriscore_score" : -7, + "nutriscore_score_opposite" : 7, + "nutriscore_tags" : [ + "a" + ], + "nutriscore_version" : "2023", + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grade_fr" : "a", + "nutrition_grades" : "a", + "nutrition_grades_tags" : [ + "a" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "missing energy_100g - missing fat_100g - missing saturated-fat_100g - missing sugars_100g - missing sodium_100g - missing proteins_100g", + "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients" : 1, + "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients_value" : 100, + "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients" : 1, + "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value" : 100, + "nutrition_score_warning_nutriments_estimated" : 1, + "other_nutritional_substances_tags" : [], + "pnns_groups_1" : "unknown", + "pnns_groups_1_tags" : [ + "unknown", + "missing-association" + ], + "pnns_groups_2" : "unknown", + "pnns_groups_2_tags" : [ + "unknown", + "missing-association" + ], + "traces" : "", + "traces_from_ingredients" : "", + "traces_from_user" : "(en) ", + "traces_hierarchy" : [], + "traces_tags" : [], + "unknown_ingredients_n" : 0, + "unknown_nutrients_tags" : [], + "vitamins_tags" : [] +} diff --git a/tests/unit/expected_test_results/nutriscore/en-orange.json b/tests/unit/expected_test_results/nutriscore/en-orange.json new file mode 100644 index 0000000000000..86322fbdf32a8 --- /dev/null +++ b/tests/unit/expected_test_results/nutriscore/en-orange.json @@ -0,0 +1,426 @@ +{ + "additives_n" : 0, + "additives_original_tags" : [], + "additives_tags" : [], + "allergens" : "", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(en) ", + "allergens_hierarchy" : [], + "allergens_tags" : [], + "amino_acids_tags" : [], + "categories" : "oranges", + "categories_hierarchy" : [ + "en:plant-based-foods-and-beverages", + "en:plant-based-foods", + "en:fruits-and-vegetables-based-foods", + "en:fruits-based-foods", + "en:fruits", + "en:citrus", + "en:oranges" + ], + "categories_lc" : "en", + "categories_properties" : {}, + "categories_properties_tags" : [ + "all-products", + "categories-known", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-unknown", + "agribalyse-unknown" + ], + "categories_tags" : [ + "en:plant-based-foods-and-beverages", + "en:plant-based-foods", + "en:fruits-and-vegetables-based-foods", + "en:fruits-based-foods", + "en:fruits", + "en:citrus", + "en:oranges" + ], + "food_groups" : "en:fruits", + "food_groups_tags" : [ + "en:fruits-and-vegetables", + "en:fruits" + ], + "ingredients" : [ + { + "ciqual_proxy_food_code" : "13034", + "ecobalyse_code" : "orange-non-eu", + "id" : "en:orange", + "is_in_taxonomy" : 1, + "percent_estimate" : 100, + "percent_max" : 100, + "percent_min" : 100, + "text" : "orange", + "vegan" : "yes", + "vegetarian" : "yes" + } + ], + "ingredients_analysis" : {}, + "ingredients_analysis_tags" : [ + "en:palm-oil-free", + "en:vegan", + "en:vegetarian" + ], + "ingredients_hierarchy" : [ + "en:orange", + "en:fruit", + "en:citrus-fruit" + ], + "ingredients_lc" : "en", + "ingredients_n" : 1, + "ingredients_n_tags" : [ + "1", + "1-10" + ], + "ingredients_non_nutritive_sweeteners_n" : 0, + "ingredients_original_tags" : [ + "en:orange" + ], + "ingredients_percent_analysis" : 1, + "ingredients_sweeteners_n" : 0, + "ingredients_tags" : [ + "en:orange", + "en:fruit", + "en:citrus-fruit" + ], + "ingredients_text" : "orange", + "ingredients_with_specified_percent_n" : 0, + "ingredients_with_specified_percent_sum" : 0, + "ingredients_with_unspecified_percent_n" : 1, + "ingredients_with_unspecified_percent_sum" : 100, + "ingredients_without_ciqual_codes" : [], + "ingredients_without_ciqual_codes_n" : 0, + "ingredients_without_ecobalyse_ids" : [], + "ingredients_without_ecobalyse_ids_n" : 0, + "known_ingredients_n" : 3, + "lc" : "en", + "minerals_tags" : [], + "misc_tags" : [ + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:nutriscore-using-estimated-nutrition-facts", + "en:nutriscore-computed", + "en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients", + "en:nutrition-all-nutriscore-values-known", + "en:nutrition-fruits-vegetables-legumes-estimate-from-ingredients", + "en:nutriscore-2021-same-as-2023", + "en:nutriscore-2021-a-2023-a" + ], + "nova_group" : 1, + "nova_group_debug" : "", + "nova_groups" : "1", + "nova_groups_markers" : {}, + "nova_groups_tags" : [ + "en:1-unprocessed-or-minimally-processed-foods" + ], + "nucleotides_tags" : [], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : { + "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 100, + "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 100, + "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 100, + "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 100, + "nova-group" : 1, + "nova-group_100g" : 1, + "nova-group_serving" : 1, + "nutrition-score-fr" : -3, + "nutrition-score-fr_100g" : -3 + }, + "nutriments_estimated" : { + "alcohol_100g" : 0, + "beta-carotene_100g" : 2.5e-06, + "calcium_100g" : 0.066, + "carbohydrates_100g" : 8.03, + "cholesterol_100g" : 0, + "copper_100g" : 4e-05, + "energy-kcal_100g" : 45.5, + "energy-kj_100g" : 192, + "energy_100g" : 192, + "fat_100g" : 0.25, + "fiber_100g" : 2.7, + "fructose_100g" : 2.1, + "galactose_100g" : 0, + "glucose_100g" : 2, + "iodine_100g" : 1e-05, + "iron_100g" : 0.00057, + "lactose_100g" : 0.1, + "magnesium_100g" : 0.015, + "maltose_100g" : 0.1, + "manganese_100g" : 2e-05, + "pantothenic-acid_100g" : 0.00016, + "phosphorus_100g" : 0.038, + "phylloquinone_100g" : 4e-07, + "polyols_100g" : 0.25, + "potassium_100g" : 0.18, + "proteins_100g" : 0.75, + "salt_100g" : 0.0063, + "saturated-fat_100g" : 0.005, + "selenium_100g" : 1e-05, + "sodium_100g" : 0.0025, + "starch_100g" : 0.18, + "sucrose_100g" : 3.5, + "sugars_100g" : 7.6, + "vitamin-a_100g" : 0, + "vitamin-b12_100g" : 0, + "vitamin-b1_100g" : 4.5e-05, + "vitamin-b2_100g" : 5e-06, + "vitamin-b6_100g" : 5e-06, + "vitamin-b9_100g" : 2.59e-05, + "vitamin-c_100g" : 0.0475, + "vitamin-d_100g" : 0, + "vitamin-e_100g" : 0.00019, + "vitamin-pp_100g" : 0.00037, + "water_100g" : 87.3, + "zinc_100g" : 0.00025 + }, + "nutriscore" : { + "2021" : { + "category_available" : 1, + "data" : { + "energy" : 192, + "energy_points" : 0, + "energy_value" : 192, + "fiber" : 2.7, + "fiber_points" : 2, + "fiber_value" : 2.7, + "fruits_vegetables_nuts_colza_walnut_olive_oils" : 100, + "fruits_vegetables_nuts_colza_walnut_olive_oils_points" : 5, + "fruits_vegetables_nuts_colza_walnut_olive_oils_value" : 100, + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat" : 0, + "is_water" : 0, + "negative_points" : 1, + "positive_points" : 7, + "proteins" : 0.75, + "proteins_points" : 0, + "proteins_value" : 0.75, + "saturated_fat" : 0.005, + "saturated_fat_points" : 0, + "saturated_fat_value" : 0, + "sodium" : 2.5, + "sodium_points" : 0, + "sodium_value" : 2.5, + "sugars" : 7.6, + "sugars_points" : 1, + "sugars_value" : 7.6 + }, + "grade" : "a", + "nutrients_available" : 1, + "nutriscore_applicable" : 1, + "nutriscore_computed" : 1, + "score" : -6 + }, + "2023" : { + "category_available" : 1, + "data" : { + "components" : { + "negative" : [ + { + "id" : "energy", + "points" : 0, + "points_max" : 10, + "unit" : "kJ", + "value" : 192 + }, + { + "id" : "sugars", + "points" : 2, + "points_max" : 15, + "unit" : "g", + "value" : 7.6 + }, + { + "id" : "saturated_fat", + "points" : 0, + "points_max" : 10, + "unit" : "g", + "value" : 0.01 + }, + { + "id" : "salt", + "points" : 0, + "points_max" : 20, + "unit" : "g", + "value" : 0.01 + } + ], + "positive" : [ + { + "id" : "proteins", + "points" : 0, + "points_max" : 7, + "unit" : "g", + "value" : 0.75 + }, + { + "id" : "fiber", + "points" : 0, + "points_max" : 5, + "unit" : "g", + "value" : 2.7 + }, + { + "id" : "fruits_vegetables_legumes", + "points" : 5, + "points_max" : 5, + "unit" : "%", + "value" : 100 + } + ] + }, + "count_proteins" : 1, + "count_proteins_reason" : "negative_points_less_than_11", + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat_oil_nuts_seeds" : 0, + "is_red_meat_product" : 0, + "is_water" : 0, + "negative_points" : 2, + "negative_points_max" : 55, + "positive_nutrients" : [ + "proteins", + "fiber", + "fruits_vegetables_legumes" + ], + "positive_points" : 5, + "positive_points_max" : 17 + }, + "grade" : "a", + "nutrients_available" : 1, + "nutriscore_applicable" : 1, + "nutriscore_computed" : 1, + "score" : -3 + } + }, + "nutriscore_2021_tags" : [ + "a" + ], + "nutriscore_2023_tags" : [ + "a" + ], + "nutriscore_data" : { + "components" : { + "negative" : [ + { + "id" : "energy", + "points" : 0, + "points_max" : 10, + "unit" : "kJ", + "value" : 192 + }, + { + "id" : "sugars", + "points" : 2, + "points_max" : 15, + "unit" : "g", + "value" : 7.6 + }, + { + "id" : "saturated_fat", + "points" : 0, + "points_max" : 10, + "unit" : "g", + "value" : 0.01 + }, + { + "id" : "salt", + "points" : 0, + "points_max" : 20, + "unit" : "g", + "value" : 0.01 + } + ], + "positive" : [ + { + "id" : "proteins", + "points" : 0, + "points_max" : 7, + "unit" : "g", + "value" : 0.75 + }, + { + "id" : "fiber", + "points" : 0, + "points_max" : 5, + "unit" : "g", + "value" : 2.7 + }, + { + "id" : "fruits_vegetables_legumes", + "points" : 5, + "points_max" : 5, + "unit" : "%", + "value" : 100 + } + ] + }, + "count_proteins" : 1, + "count_proteins_reason" : "negative_points_less_than_11", + "grade" : "a", + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat_oil_nuts_seeds" : 0, + "is_red_meat_product" : 0, + "is_water" : 0, + "negative_points" : 2, + "negative_points_max" : 55, + "positive_nutrients" : [ + "proteins", + "fiber", + "fruits_vegetables_legumes" + ], + "positive_points" : 5, + "positive_points_max" : 17, + "score" : -3 + }, + "nutriscore_grade" : "a", + "nutriscore_score" : -3, + "nutriscore_score_opposite" : 3, + "nutriscore_tags" : [ + "a" + ], + "nutriscore_version" : "2023", + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grade_fr" : "a", + "nutrition_grades" : "a", + "nutrition_grades_tags" : [ + "a" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "missing energy_100g - missing fat_100g - missing saturated-fat_100g - missing sugars_100g - missing sodium_100g - missing proteins_100g", + "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients" : 1, + "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients_value" : 100, + "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients" : 1, + "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value" : 100, + "nutrition_score_warning_nutriments_estimated" : 1, + "other_nutritional_substances_tags" : [], + "pnns_groups_1" : "Fruits and vegetables", + "pnns_groups_1_tags" : [ + "fruits-and-vegetables", + "known" + ], + "pnns_groups_2" : "Fruits", + "pnns_groups_2_tags" : [ + "fruits", + "known" + ], + "traces" : "", + "traces_from_ingredients" : "", + "traces_from_user" : "(en) ", + "traces_hierarchy" : [], + "traces_tags" : [], + "unknown_ingredients_n" : 0, + "unknown_nutrients_tags" : [], + "vitamins_tags" : [] +} diff --git a/tests/unit/expected_test_results/nutriscore/honey.json b/tests/unit/expected_test_results/nutriscore/honey.json deleted file mode 100644 index 81d11f1593c45..0000000000000 --- a/tests/unit/expected_test_results/nutriscore/honey.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "categories" : "honeys", - "categories_hierarchy" : [ - "en:spreads", - "en:breakfasts", - "en:bee-products", - "en:farming-products", - "en:sweet-spreads", - "en:sweeteners", - "en:honeys" - ], - "categories_lc" : "fr", - "categories_properties" : { - "agribalyse_food_code:en" : "31008", - "ciqual_food_code:en" : "31008" - }, - "categories_properties_tags" : [ - "all-products", - "categories-known", - "agribalyse-food-code-31008", - "agribalyse-food-code-known", - "agribalyse-proxy-food-code-unknown", - "ciqual-food-code-31008", - "ciqual-food-code-known", - "agribalyse-known", - "agribalyse-31008" - ], - "categories_tags" : [ - "en:spreads", - "en:breakfasts", - "en:bee-products", - "en:farming-products", - "en:sweet-spreads", - "en:sweeteners", - "en:honeys" - ], - "ingredients" : [ - { - "id" : "fr:honey", - "percent_estimate" : 100, - "percent_max" : 100, - "percent_min" : 100, - "text" : "honey" - } - ], - "ingredients_analysis_tags" : [ - "en:palm-oil-content-unknown", - "en:vegan-status-unknown", - "en:vegetarian-status-unknown" - ], - "ingredients_hierarchy" : [ - "fr:honey" - ], - "ingredients_n" : 1, - "ingredients_n_tags" : [ - "1", - "1-10" - ], - "ingredients_original_tags" : [ - "fr:honey" - ], - "ingredients_percent_analysis" : 1, - "ingredients_tags" : [ - "fr:honey" - ], - "ingredients_text" : "honey", - "known_ingredients_n" : 0, - "lc" : "fr", - "misc_tags" : [ - "en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients", - "en:nutrition-all-nutriscore-values-known", - "en:nutriscore-computed" - ], - "nutriments" : { - "energy_100g" : 1370, - "fat_100g" : 8.4, - "fiber_100g" : 0, - "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 0, - "nutrition-score-fr" : 14, - "nutrition-score-fr_100g" : 14, - "proteins_100g" : 0.3, - "saturated-fat_100g" : 0.04, - "sodium_100g" : 0.001, - "sugars_100g" : 69.5 - }, - "nutriscore_data" : { - "energy" : 1370, - "energy_points" : 4, - "energy_value" : 1370, - "fiber" : 0, - "fiber_points" : 0, - "fiber_value" : 0, - "fruits_vegetables_nuts_colza_walnut_olive_oils" : 0, - "fruits_vegetables_nuts_colza_walnut_olive_oils_points" : 0, - "fruits_vegetables_nuts_colza_walnut_olive_oils_value" : 0, - "grade" : "d", - "is_beverage" : 0, - "is_cheese" : 0, - "is_fat" : 0, - "is_water" : 0, - "negative_points" : 14, - "positive_points" : 0, - "proteins" : 0.3, - "proteins_points" : 0, - "proteins_value" : 0.3, - "saturated_fat" : 0.04, - "saturated_fat_points" : 0, - "saturated_fat_ratio" : 0.476190476190476, - "saturated_fat_ratio_points" : 0, - "saturated_fat_ratio_value" : 0.5, - "saturated_fat_value" : 0, - "score" : 14, - "sodium" : 1, - "sodium_points" : 0, - "sodium_value" : 1, - "sugars" : 69.5, - "sugars_points" : 10, - "sugars_value" : 69.5 - }, - "nutriscore_grade" : "d", - "nutriscore_score" : 14, - "nutriscore_score_opposite" : -14, - "nutrition_grade_fr" : "d", - "nutrition_grades" : "d", - "nutrition_grades_tags" : [ - "d" - ], - "nutrition_score_beverage" : 0, - "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients" : 1, - "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value" : 0, - "pnns_groups_1" : "Sugary snacks", - "pnns_groups_1_tags" : [ - "sugary-snacks", - "known" - ], - "pnns_groups_2" : "Sweets", - "pnns_groups_2_tags" : [ - "sweets", - "known" - ], - "unknown_ingredients_n" : 1 -} diff --git a/tests/unit/expected_test_results/nutriscore/pl-pickled-vegetables.json b/tests/unit/expected_test_results/nutriscore/pl-pickled-vegetables.json new file mode 100644 index 0000000000000..75d157950cbb2 --- /dev/null +++ b/tests/unit/expected_test_results/nutriscore/pl-pickled-vegetables.json @@ -0,0 +1,530 @@ +{ + "additives_n" : 0, + "additives_original_tags" : [], + "additives_tags" : [], + "allergens" : "", + "allergens_from_ingredients" : "en:mustard", + "allergens_from_user" : "(pl) ", + "allergens_hierarchy" : [ + "en:mustard" + ], + "allergens_tags" : [ + "en:mustard" + ], + "amino_acids_tags" : [], + "categories" : "pickled vegetables", + "categories_hierarchy" : [ + "en:plant-based-foods-and-beverages", + "en:plant-based-foods", + "en:fruits-and-vegetables-based-foods", + "en:canned-foods", + "en:vegetables-based-foods", + "en:canned-plant-based-foods", + "en:pickles", + "en:canned-vegetables", + "en:plant-based-pickles", + "en:pickled-vegetables" + ], + "categories_lc" : "pl", + "categories_properties" : {}, + "categories_properties_tags" : [ + "all-products", + "categories-known", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-unknown", + "agribalyse-unknown" + ], + "categories_tags" : [ + "en:plant-based-foods-and-beverages", + "en:plant-based-foods", + "en:fruits-and-vegetables-based-foods", + "en:canned-foods", + "en:vegetables-based-foods", + "en:canned-plant-based-foods", + "en:pickles", + "en:canned-vegetables", + "en:plant-based-pickles", + "en:pickled-vegetables" + ], + "food_groups" : "en:salty-and-fatty-products", + "food_groups_tags" : [ + "en:salty-snacks", + "en:salty-and-fatty-products" + ], + "ingredients" : [ + { + "ciqual_food_code" : "20045", + "ecobalyse_code" : "radish-organic", + "id" : "en:daikon", + "is_in_taxonomy" : 1, + "percent" : 52, + "percent_estimate" : 52, + "percent_max" : 52, + "percent_min" : 52, + "text" : "rzodkiew biała", + "vegan" : "yes", + "vegetarian" : "yes" + }, + { + "ciqual_food_code" : "18066", + "ecobalyse_code" : "tap-water", + "id" : "en:water", + "is_in_taxonomy" : 1, + "percent_estimate" : 29.9333333333333, + "percent_max" : 46.8, + "percent_min" : 13.0666666666667, + "text" : "woda", + "vegan" : "yes", + "vegetarian" : "yes" + }, + { + "ciqual_food_code" : "11093", + "id" : "en:dill", + "is_in_taxonomy" : 1, + "percent_estimate" : 9.33333333333333, + "percent_max" : 33.1333333333333, + "percent_min" : 0.6, + "text" : "koper", + "vegan" : "yes", + "vegetarian" : "yes" + }, + { + "ciqual_food_code" : "11000", + "id" : "en:garlic", + "is_in_taxonomy" : 1, + "percent" : 0.6, + "percent_estimate" : 0.6, + "percent_max" : 0.6, + "percent_min" : 0.6, + "text" : "czosnek", + "vegan" : "yes", + "vegetarian" : "yes" + }, + { + "ciqual_food_code" : "11058", + "id" : "en:salt", + "is_in_taxonomy" : 1, + "percent_estimate" : 0.3, + "percent_max" : 0.6, + "percent_min" : 0, + "text" : "sól", + "vegan" : "yes", + "vegetarian" : "yes" + }, + { + "ciqual_food_code" : "11016", + "id" : "en:horseradish", + "is_in_taxonomy" : 1, + "percent_estimate" : 7.83333333333334, + "percent_max" : 0.6, + "percent_min" : 0, + "text" : "chrzan", + "vegan" : "yes", + "vegetarian" : "yes" + } + ], + "ingredients_analysis" : {}, + "ingredients_analysis_tags" : [ + "en:palm-oil-free", + "en:vegan", + "en:vegetarian" + ], + "ingredients_hierarchy" : [ + "en:daikon", + "en:vegetable", + "en:root-vegetable", + "en:taproot-vegetable", + "en:radish", + "en:water", + "en:dill", + "en:herb", + "en:garlic", + "en:onion-family-vegetable", + "en:salt", + "en:horseradish" + ], + "ingredients_lc" : "pl", + "ingredients_n" : 6, + "ingredients_n_tags" : [ + "6", + "1-10" + ], + "ingredients_non_nutritive_sweeteners_n" : 0, + "ingredients_original_tags" : [ + "en:daikon", + "en:water", + "en:dill", + "en:garlic", + "en:salt", + "en:horseradish" + ], + "ingredients_percent_analysis" : 1, + "ingredients_sweeteners_n" : 0, + "ingredients_tags" : [ + "en:daikon", + "en:vegetable", + "en:root-vegetable", + "en:taproot-vegetable", + "en:radish", + "en:water", + "en:dill", + "en:herb", + "en:garlic", + "en:onion-family-vegetable", + "en:salt", + "en:horseradish" + ], + "ingredients_text" : "52% rzodkiew biała, woda, koper, 0,6% czosnek, sól, chrzan", + "ingredients_with_specified_percent_n" : 2, + "ingredients_with_specified_percent_sum" : 52.6, + "ingredients_with_unspecified_percent_n" : 4, + "ingredients_with_unspecified_percent_sum" : 47.4, + "ingredients_without_ciqual_codes" : [], + "ingredients_without_ciqual_codes_n" : 0, + "ingredients_without_ecobalyse_ids" : [ + "en:dill", + "en:garlic", + "en:horseradish", + "en:salt" + ], + "ingredients_without_ecobalyse_ids_n" : 4, + "known_ingredients_n" : 12, + "lc" : "pl", + "minerals_tags" : [], + "misc_tags" : [ + "en:some-ingredients-with-specified-percent", + "en:nutrition-no-fiber", + "en:nutriscore-computed", + "en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients", + "en:nutrition-no-fiber-or-fruits-vegetables-nuts", + "en:nutrition-fruits-vegetables-legumes-estimate-from-ingredients", + "en:nutriscore-2021-different-from-2023", + "en:nutriscore-2021-better-than-2023", + "en:nutriscore-2021-c-2023-d" + ], + "nova_group" : 3, + "nova_group_debug" : "", + "nova_groups" : "3", + "nova_groups_markers" : { + "3" : [ + [ + "ingredients", + "en:salt" + ] + ] + }, + "nova_groups_tags" : [ + "en:3-processed-foods" + ], + "nucleotides_tags" : [], + "nutrient_levels" : { + "fat" : "low", + "salt" : "high", + "saturated-fat" : "low", + "sugars" : "low" + }, + "nutrient_levels_tags" : [ + "en:fat-in-low-quantity", + "en:saturated-fat-in-low-quantity", + "en:sugars-in-low-quantity", + "en:salt-in-high-quantity" + ], + "nutriments" : { + "energy_100g" : 53, + "fat_100g" : 0.1, + "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 88.3920076117983, + "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 88.3920076117983, + "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 99.5718363463368, + "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 99.5718363463368, + "nova-group" : 3, + "nova-group_100g" : 3, + "nova-group_serving" : 3, + "nutrition-score-fr" : 15, + "nutrition-score-fr_100g" : 15, + "proteins_100g" : 0.7, + "salt" : 5, + "salt_100g" : "5", + "salt_unit" : "g", + "salt_value" : "5", + "saturated-fat_100g" : "0", + "sodium_100g" : 2, + "sodium_value" : "2", + "sugars_100g" : "0" + }, + "nutriments_estimated" : { + "alcohol_100g" : 0, + "beta-carotene_100g" : 6.71366666666667e-05, + "calcium_100g" : 0.0362333133333333, + "carbohydrates_100g" : 2.28953333333333, + "cholesterol_100g" : 0, + "copper_100g" : 4.78286666666667e-05, + "energy-kcal_100g" : 20.8513333333333, + "energy-kj_100g" : 87.469, + "energy_100g" : 87.469, + "fat_100g" : 0.289, + "fiber_100g" : 1.67696666666667, + "fructose_100g" : 0.251933333333333, + "galactose_100g" : 0.0318333333333334, + "glucose_100g" : 0.39095, + "iodine_100g" : 1.12745e-05, + "iron_100g" : 0.000836796666666667, + "lactose_100g" : 0.0695316666666667, + "magnesium_100g" : 0.00822145666666667, + "maltose_100g" : 0.0695316666666667, + "manganese_100g" : 0.000310638786666667, + "pantothenic-acid_100g" : 0.000103593333333333, + "phosphorus_100g" : 0.0223538333333333, + "phylloquinone_100g" : 2.63037333333334e-05, + "polyols_100g" : 0.1315, + "potassium_100g" : 0.239817546666667, + "proteins_100g" : 1.47496, + "salt_100g" : 0.331787933333333, + "saturated-fat_100g" : 0.0364466666666667, + "selenium_100g" : 5.67883333333333e-06, + "sodium_100g" : 0.1293824, + "starch_100g" : 0.12558, + "sucrose_100g" : 0.1155, + "sugars_100g" : 0.777366666666667, + "vitamin-a_100g" : 0, + "vitamin-b12_100g" : 0, + "vitamin-b1_100g" : 3.38e-05, + "vitamin-b2_100g" : 5.138e-05, + "vitamin-b6_100g" : 8.146e-05, + "vitamin-b9_100g" : 6.62391e-05, + "vitamin-c_100g" : 0.0247855, + "vitamin-d_100g" : 7.8e-10, + "vitamin-e_100g" : 0.000179706666666667, + "vitamin-pp_100g" : 0.0002973, + "water_100g" : 93.455381, + "zinc_100g" : 0.000327323333333334 + }, + "nutriscore" : { + "2021" : { + "category_available" : 1, + "data" : { + "energy" : 53, + "energy_points" : 0, + "energy_value" : 53, + "fiber" : 0, + "fiber_points" : 0, + "fiber_value" : 0, + "fruits_vegetables_nuts_colza_walnut_olive_oils" : 99.5718363463368, + "fruits_vegetables_nuts_colza_walnut_olive_oils_points" : 5, + "fruits_vegetables_nuts_colza_walnut_olive_oils_value" : 99.6, + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat" : 0, + "is_water" : 0, + "negative_points" : 10, + "positive_points" : 5, + "proteins" : 0.7, + "proteins_points" : 0, + "proteins_value" : 0.7, + "saturated_fat" : 0, + "saturated_fat_points" : 0, + "saturated_fat_value" : 0, + "sodium" : 2000, + "sodium_points" : 10, + "sodium_value" : 2000, + "sugars" : 0, + "sugars_points" : 0, + "sugars_value" : 0 + }, + "grade" : "c", + "nutrients_available" : 1, + "nutriscore_applicable" : 1, + "nutriscore_computed" : 1, + "score" : 5 + }, + "2023" : { + "category_available" : 1, + "data" : { + "components" : { + "negative" : [ + { + "id" : "energy", + "points" : 0, + "points_max" : 10, + "unit" : "kJ", + "value" : 53 + }, + { + "id" : "sugars", + "points" : 0, + "points_max" : 15, + "unit" : "g", + "value" : 0 + }, + { + "id" : "saturated_fat", + "points" : 0, + "points_max" : 10, + "unit" : "g", + "value" : 0 + }, + { + "id" : "salt", + "new_grade" : "d", + "new_score" : 14, + "new_value" : 4, + "points" : 20, + "points_max" : 20, + "unit" : "g", + "value" : 5 + } + ], + "positive" : [ + { + "id" : "fiber", + "points" : 0, + "points_max" : 5, + "unit" : "g", + "value" : null + }, + { + "id" : "fruits_vegetables_legumes", + "points" : 5, + "points_max" : 5, + "unit" : "%", + "value" : 88.4 + } + ] + }, + "count_proteins" : 0, + "count_proteins_reason" : "negative_points_greater_than_or_equal_to_11", + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat_oil_nuts_seeds" : 0, + "is_red_meat_product" : 0, + "is_water" : 0, + "negative_points" : 20, + "negative_points_max" : 55, + "positive_nutrients" : [ + "fiber", + "fruits_vegetables_legumes" + ], + "positive_points" : 5, + "positive_points_max" : 10 + }, + "grade" : "d", + "nutrients_available" : 1, + "nutriscore_applicable" : 1, + "nutriscore_computed" : 1, + "score" : 15 + } + }, + "nutriscore_2021_tags" : [ + "c" + ], + "nutriscore_2023_tags" : [ + "d" + ], + "nutriscore_data" : { + "components" : { + "negative" : [ + { + "id" : "energy", + "points" : 0, + "points_max" : 10, + "unit" : "kJ", + "value" : 53 + }, + { + "id" : "sugars", + "points" : 0, + "points_max" : 15, + "unit" : "g", + "value" : 0 + }, + { + "id" : "saturated_fat", + "points" : 0, + "points_max" : 10, + "unit" : "g", + "value" : 0 + }, + { + "id" : "salt", + "points" : 20, + "points_max" : 20, + "unit" : "g", + "value" : 5 + } + ], + "positive" : [ + { + "id" : "fiber", + "points" : 0, + "points_max" : 5, + "unit" : "g", + "value" : null + }, + { + "id" : "fruits_vegetables_legumes", + "points" : 5, + "points_max" : 5, + "unit" : "%", + "value" : 88.4 + } + ] + }, + "count_proteins" : 0, + "count_proteins_reason" : "negative_points_greater_than_or_equal_to_11", + "grade" : "d", + "is_beverage" : 0, + "is_cheese" : 0, + "is_fat_oil_nuts_seeds" : 0, + "is_red_meat_product" : 0, + "is_water" : 0, + "negative_points" : 20, + "negative_points_max" : 55, + "positive_nutrients" : [ + "fiber", + "fruits_vegetables_legumes" + ], + "positive_points" : 5, + "positive_points_max" : 10, + "score" : 15 + }, + "nutriscore_grade" : "d", + "nutriscore_score" : 15, + "nutriscore_score_opposite" : -15, + "nutriscore_tags" : [ + "d" + ], + "nutriscore_version" : "2023", + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grade_fr" : "d", + "nutrition_grades" : "d", + "nutrition_grades_tags" : [ + "d" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "", + "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients" : 1, + "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients_value" : 88.3920076117983, + "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients" : 1, + "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value" : 99.5718363463368, + "nutrition_score_warning_no_fiber" : 1, + "other_nutritional_substances_tags" : [], + "pnns_groups_1" : "Salty snacks", + "pnns_groups_1_tags" : [ + "salty-snacks", + "known" + ], + "pnns_groups_2" : "Salty and fatty products", + "pnns_groups_2_tags" : [ + "salty-and-fatty-products", + "known" + ], + "traces" : "", + "traces_from_ingredients" : "", + "traces_from_user" : "(pl) ", + "traces_hierarchy" : [], + "traces_tags" : [], + "unknown_ingredients_n" : 0, + "unknown_nutrients_tags" : [], + "vitamins_tags" : [] +} diff --git a/tests/unit/expected_test_results/packaging_food_contact/canned_tomatoes.json b/tests/unit/expected_test_results/packaging_food_contact/canned_tomatoes.json new file mode 100644 index 0000000000000..931eaee31ec74 --- /dev/null +++ b/tests/unit/expected_test_results/packaging_food_contact/canned_tomatoes.json @@ -0,0 +1,37 @@ +{ + "lc" : "en", + "misc_tags" : [ + "en:packagings-number-of-components-2", + "en:packagings-not-complete", + "en:packagings-not-empty-but-not-complete", + "en:packagings-not-empty" + ], + "packaging_materials_tags" : [ + "en:metal", + "en:paper" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:can", + "en:label" + ], + "packaging_text" : "can, paper label", + "packagings" : [ + { + "food_contact" : 1, + "material" : "en:metal", + "shape" : "en:can" + }, + { + "food_contact" : 0, + "material" : "en:paper", + "shape" : "en:label" + } + ], + "packagings_materials" : { + "all" : {}, + "en:metal" : {}, + "en:paper-or-cardboard" : {} + }, + "packagings_n" : 2 +} diff --git a/tests/unit/expected_test_results/packaging_food_contact/coffee_capsule.json b/tests/unit/expected_test_results/packaging_food_contact/coffee_capsule.json new file mode 100644 index 0000000000000..45c7f89a3b4d1 --- /dev/null +++ b/tests/unit/expected_test_results/packaging_food_contact/coffee_capsule.json @@ -0,0 +1,38 @@ +{ + "lc" : "en", + "misc_tags" : [ + "en:packagings-number-of-components-3", + "en:packagings-not-complete", + "en:packagings-not-empty-but-not-complete", + "en:packagings-not-empty" + ], + "packaging_materials_tags" : [ + "en:plastic" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:box", + "en:capsule", + "en:film" + ], + "packaging_text" : "carboard box, plastic capsule, plastic film", + "packagings" : [ + { + "shape" : "en:box" + }, + { + "material" : "en:plastic", + "shape" : "en:capsule" + }, + { + "material" : "en:plastic", + "shape" : "en:film" + } + ], + "packagings_materials" : { + "all" : {}, + "en:plastic" : {}, + "en:unknown" : {} + }, + "packagings_n" : 3 +} diff --git a/tests/unit/expected_test_results/packaging_food_contact/empty_packagings.json b/tests/unit/expected_test_results/packaging_food_contact/empty_packagings.json new file mode 100644 index 0000000000000..b8143031e6d5d --- /dev/null +++ b/tests/unit/expected_test_results/packaging_food_contact/empty_packagings.json @@ -0,0 +1,14 @@ +{ + "lc" : "en", + "misc_tags" : [ + "en:packagings-number-of-components-0", + "en:packagings-not-complete", + "en:packagings-empty" + ], + "packaging_materials_tags" : [], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [], + "packaging_text" : "", + "packagings" : [], + "packagings_materials" : {} +} diff --git a/tests/unit/expected_test_results/packaging_food_contact/hazelnut_paste_glass_jar.json b/tests/unit/expected_test_results/packaging_food_contact/hazelnut_paste_glass_jar.json new file mode 100644 index 0000000000000..c53ff616ae277 --- /dev/null +++ b/tests/unit/expected_test_results/packaging_food_contact/hazelnut_paste_glass_jar.json @@ -0,0 +1,58 @@ +{ + "lc" : "en", + "misc_tags" : [ + "en:packagings-number-of-components-5", + "en:packagings-not-complete", + "en:packagings-not-empty-but-not-complete", + "en:packagings-not-empty" + ], + "packaging_materials_tags" : [ + "en:cardboard", + "en:glass", + "en:paper", + "en:plastic" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:box", + "en:jar", + "en:label", + "en:lid", + "en:seal" + ], + "packaging_text" : "glass jar, plastic lid, paper label, paper seal, cardboard box", + "packagings" : [ + { + "food_contact" : 1, + "material" : "en:glass", + "shape" : "en:jar" + }, + { + "food_contact" : 0, + "material" : "en:plastic", + "shape" : "en:lid" + }, + { + "food_contact" : 0, + "material" : "en:paper", + "shape" : "en:label" + }, + { + "food_contact" : 1, + "material" : "en:paper", + "shape" : "en:seal" + }, + { + "food_contact" : 0, + "material" : "en:cardboard", + "shape" : "en:box" + } + ], + "packagings_materials" : { + "all" : {}, + "en:glass" : {}, + "en:paper-or-cardboard" : {}, + "en:plastic" : {} + }, + "packagings_n" : 5 +} diff --git a/tests/unit/expected_test_results/packaging_food_contact/meat_tray.json b/tests/unit/expected_test_results/packaging_food_contact/meat_tray.json new file mode 100644 index 0000000000000..24e9c0608c8e2 --- /dev/null +++ b/tests/unit/expected_test_results/packaging_food_contact/meat_tray.json @@ -0,0 +1,43 @@ +{ + "lc" : "en", + "misc_tags" : [ + "en:packagings-number-of-components-3", + "en:packagings-not-complete", + "en:packagings-not-empty-but-not-complete", + "en:packagings-not-empty" + ], + "packaging_materials_tags" : [ + "en:paper", + "en:plastic" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:film", + "en:label", + "en:tray" + ], + "packaging_text" : "plastic tray, plastic film, paper label", + "packagings" : [ + { + "food_contact" : 1, + "material" : "en:plastic", + "shape" : "en:tray" + }, + { + "food_contact" : 1, + "material" : "en:plastic", + "shape" : "en:film" + }, + { + "food_contact" : 0, + "material" : "en:paper", + "shape" : "en:label" + } + ], + "packagings_materials" : { + "all" : {}, + "en:paper-or-cardboard" : {}, + "en:plastic" : {} + }, + "packagings_n" : 3 +} diff --git a/tests/unit/expected_test_results/packaging_food_contact/wine_bottle.json b/tests/unit/expected_test_results/packaging_food_contact/wine_bottle.json new file mode 100644 index 0000000000000..9366aa431eb99 --- /dev/null +++ b/tests/unit/expected_test_results/packaging_food_contact/wine_bottle.json @@ -0,0 +1,48 @@ +{ + "lc" : "en", + "misc_tags" : [ + "en:packagings-number-of-components-3", + "en:packagings-not-complete", + "en:packagings-not-empty-but-not-complete", + "en:packagings-not-empty" + ], + "packaging_materials_tags" : [ + "en:cork", + "en:glass", + "en:paper" + ], + "packaging_recycling_tags" : [ + "en:recycle" + ], + "packaging_shapes_tags" : [ + "en:bottle", + "en:label", + "en:unknown" + ], + "packaging_text" : "glass bottle, cork, paper label", + "packagings" : [ + { + "food_contact" : 1, + "material" : "en:glass", + "recycling" : "en:recycle", + "shape" : "en:bottle" + }, + { + "food_contact" : 0, + "material" : "en:cork", + "shape" : "en:unknown" + }, + { + "food_contact" : 0, + "material" : "en:paper", + "shape" : "en:label" + } + ], + "packagings_materials" : { + "all" : {}, + "en:glass" : {}, + "en:paper-or-cardboard" : {}, + "en:unknown" : {} + }, + "packagings_n" : 3 +} diff --git a/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-1.json b/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-1.json index c74c74163259e..f6486f69596d3 100644 --- a/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-1.json +++ b/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-1.json @@ -215,10 +215,10 @@ "en:some-ingredients-with-specified-percent" ], "nutriments" : { - "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 26, - "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 26, - "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 26, - "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 26 + "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 26.15625, + "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 26.15625, + "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 26.15625, + "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 26.15625 }, "recipe" : { "en:cheese" : 17, diff --git a/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-2-compound-ingredients.json b/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-2-compound-ingredients.json index 88286ede2e015..de12aeabbbef8 100644 --- a/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-2-compound-ingredients.json +++ b/tests/unit/expected_test_results/recipes/fr-margherita-pizzas.fr-margherita-pizza-2-compound-ingredients.json @@ -194,10 +194,10 @@ "en:some-ingredients-with-specified-percent" ], "nutriments" : { - "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 46.6666666666667, - "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 46.6666666666667, - "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 46.6666666666667, - "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 46.6666666666667 + "fruits-vegetables-legumes-estimate-from-ingredients_100g" : 58.3333333333333, + "fruits-vegetables-legumes-estimate-from-ingredients_serving" : 58.3333333333333, + "fruits-vegetables-nuts-estimate-from-ingredients_100g" : 58.3333333333333, + "fruits-vegetables-nuts-estimate-from-ingredients_serving" : 58.3333333333333 }, "recipe" : { "en:cheese" : 11.6666666666667, diff --git a/tests/unit/expected_test_results/taxonomies/eurocodes.csv b/tests/unit/expected_test_results/taxonomies/eurocodes.csv index 30eb77a37bafc..d543dddd52597 100644 --- a/tests/unit/expected_test_results/taxonomies/eurocodes.csv +++ b/tests/unit/expected_test_results/taxonomies/eurocodes.csv @@ -1,4 +1,29 @@ eurocode_2_group_2 eurocode_2_group_3 ingredient +12.20 12.20.10 en:angelica +12.20 12.20.12 en:basil +12.20 12.20.14 en:bay-leaf +12.20 12.20.16 en:bergamot-flower +12.20 12.20.16 en:bergamot-leaf +12.20 12.20.20 en:borage +12.20 12.20.22 en:chervil +12.20 12.20.24 en:camomile +12.20 12.20.32 en:dill +12.20 12.20.34 en:fennel +12.20 12.20.36 en:fenugreek +12.20 12.20.38 en:coriander-leaf +12.20 12.20.38 en:hops +12.20 12.20.42 en:lemon-balm +12.20 12.20.44 en:lemongrass +12.20 12.20.46 en:lemon-verbena +12.20 12.20.48 en:lovage +12.20 12.20.52 en:marjoram +12.20 12.20.54 en:mint +12.20 12.20.58 en:oregano +12.20 12.20.60 en:rosemary +12.20 12.20.62 en:sage +12.20 12.20.68 en:tarragon +12.20 12.20.70 en:thyme +12.20 12.20.72 en:sweet-woodruff 7.10 7.10.10 en:split-pea 7.10 7.10.15 en:chickpea 7.10 7.10.20 en:dried-broad-bean @@ -48,7 +73,6 @@ eurocode_2_group_2 eurocode_2_group_3 ingredient 8.15 8.15.50 en:kohlrabi 8.15 8.15.55 en:kale 8.20 8.20.10 en:celery -8.20 8.20.20 en:fennel 8.20 8.20.30 en:sea-kale 8.20 8.20.50 en:rhubarb 8.25 8.25.10 en:asparagus diff --git a/tests/unit/ingredients_nutriscore.t b/tests/unit/ingredients_nutriscore.t index dbef924244149..93078773a91db 100644 --- a/tests/unit/ingredients_nutriscore.t +++ b/tests/unit/ingredients_nutriscore.t @@ -61,13 +61,15 @@ my @ingredients_text_tests = ( [ { lc => "fr", - ingredients_text => - "Courgette grillée 37,5%, tomate pelée 20%, poivron jaune 17%, oignon rouge grillé 8%, eau, huile d'olive vierge extra 3,9%, oignon, olive noire entière dénoyautée saumurée 2,5% (olive, eau, sel, correcteurs d'acidité : acide citrique, acide lactique), ail, basilic 0,9%, amidon de riz, sel" + ingredients_text => "Courgette grillée 37,5%, tomate pelée 20%, poivron jaune 17%, oignon rouge grillé 8%, + eau, huile d'olive vierge extra 3,9%, oignon, + olive noire entière dénoyautée saumurée 2,5% (olive, eau, sel, correcteurs d'acidité : acide citrique, acide lactique), + ail, basilic 0,9%, amidon de riz, sel" }, # add_fruit() currently matches "olive noire entière dénoyautée saumurée 2,5% (..)" to 2.5% fruit, even though it has sub-ingredients that are not fruits # TODO: investigate on actual product data to see if trying to fix this would have more true positives than false positives - 93.8, - 89.9 + 94.7, + 90.8 ], # Soy beans [ diff --git a/tests/unit/nutriscore.t b/tests/unit/nutriscore.t index 75a49ec39d08c..0386f686a8c57 100644 --- a/tests/unit/nutriscore.t +++ b/tests/unit/nutriscore.t @@ -880,6 +880,45 @@ my @tests = ( }, } ], + + # orange + [ + "en-orange", + { + lc => "en", + categories => "oranges", + ingredients_text => "orange", + } + ], + + # pickled vegetable with water and dill: water should not be counted in fruits/vegetables + # dill should be counted + [ + "pl-pickled-vegetables", + { + lc => "pl", + categories => "pickled vegetables", + ingredients_text => "52% rzodkiew biała, woda, koper, 0,6% czosnek, sól, chrzan", + nutriments => { + energy_100g => 53, + fat_100g => 0.1, + "saturated-fat_100g" => 0, + sugars_100g => 0, + sodium_100g => 2, + proteins_100g => 0.7, + }, + } + ], + + # dill + [ + "en-dill", + { + lc => "en", + categories => "dill", + ingredients_text => "dill", + } + ], ); my $json = JSON->new->allow_nonref->canonical; diff --git a/tests/unit/packaging_food_contact.t b/tests/unit/packaging_food_contact.t new file mode 100644 index 0000000000000..074364373d3b3 --- /dev/null +++ b/tests/unit/packaging_food_contact.t @@ -0,0 +1,92 @@ +#!/usr/bin/perl -w + +use Modern::Perl '2017'; +use utf8; + +use Test2::V0; +use Data::Dumper; +$Data::Dumper::Terse = 1; +use Log::Any::Adapter 'TAP'; + +use JSON; + +use ProductOpener::Config qw/:all/; +use ProductOpener::Packaging qw/init_packaging_taxonomies_regexps analyze_and_combine_packaging_data/; +use ProductOpener::PackagingFoodContact qw/determine_food_contact_of_packaging_components/; +use ProductOpener::Test qw/compare_to_expected_results init_expected_results/; +use ProductOpener::API qw/get_initialized_response/; + +my ($test_id, $test_dir, $expected_result_dir, $update_expected_results) = (init_expected_results(__FILE__)); + +init_packaging_taxonomies_regexps(); + +# Tests for determine_food_contact_of_packaging_components() + +my @tests = ( + + [ + 'empty_packagings', + { + lc => "en", + packaging_text => "", + } + ], + [ + 'hazelnut_paste_glass_jar', + { + lc => "en", + packaging_text => "glass jar, plastic lid, paper label, paper seal, cardboard box", + } + ], + [ + 'canned_tomatoes', + { + lc => "en", + packaging_text => "can, paper label", + } + ], + [ + 'coffee_capsule', + { + lc => "en", + packaging_text => "carboard box, plastic capsule, plastic film", + } + ], + [ + 'meat_tray', + { + lc => "en", + packaging_text => "plastic tray, plastic film, paper label", + } + ], + [ + 'wine_bottle', + { + lc => "en", + packaging_text => "glass bottle, cork, paper label", + } + ], + +); + +my $json = JSON->new->allow_nonref->canonical; + +foreach my $test_ref (@tests) { + + my $testid = $test_ref->[0]; + my $product_ref = $test_ref->[1]; + + # Run the test + + # Response structure to keep track of warnings and errors + # Note: currently some warnings and errors are added, + # but we do not yet do anything with them + my $response_ref = get_initialized_response(); + + analyze_and_combine_packaging_data($product_ref, $response_ref); + determine_food_contact_of_packaging_components($product_ref->{packagings}); + + compare_to_expected_results($product_ref, "$expected_result_dir/$testid.json", $update_expected_results); +} + +done_testing(); diff --git a/tests/unit/products.t b/tests/unit/products.t index 51fded8755da5..01199676f1fde 100644 --- a/tests/unit/products.t +++ b/tests/unit/products.t @@ -41,75 +41,87 @@ is(normalize_code('0100360505082919'), '0360505082919', 'should reduce GS1 AI unbracketed string to GTIN (13 digits, padded with 0)'); # code normalization with GS1 AI -is(normalize_code_with_gs1_ai('036000291452'), ('0036000291452', undef), 'GS1: should add leading 0 to valid UPC12'); -is( - normalize_code_with_gs1_ai('036000291455'), - ('036000291455', undef), - 'GS1: should not add 0 to invalid UPC12, just return as-is' -); -is(normalize_code_with_gs1_ai('4015533014963'), ('4015533014963', undef), 'GS1: should just return invalid EAN13'); -ok(!(defined normalize_code_with_gs1_ai(undef)), 'GS1: undef should stay undef'); -is( - normalize_code_with_gs1_ai(' just a simple test 4015533014963 here we go '), - ('4015533014963', undef), - 'GS1: barcode should always be cleaned from anything but digits' -); -is( - normalize_code_with_gs1_ai(' just a simple test 036000291452 here we go '), - ('0036000291452', undef), - 'GS1: should add leading 0 to cleaned valid UPC12' -); -is( - normalize_code_with_gs1_ai(' just a simple test 036000291455 here we go '), - ('036000291455', undef), - 'GS1: should not add leading 0 to cleaned invalid UPC12' -); -is( - normalize_code_with_gs1_ai('0104044782317112'), - ('4044782317112', '(01)04044782317112'), - 'GS1: should reduce GS1 AI unbracketed string to GTIN' -); -is( - normalize_code_with_gs1_ai('(01)04044782317112(17)270101'), - ('4044782317112', '(01)04044782317112(17)270101'), - 'GS1: should reduce GS1 AI bracketed string to GTIN' -); -is( - normalize_code_with_gs1_ai('^010404478231711217270101'), - ('4044782317112', '(01)04044782317112(17)270101'), - 'GS1: should reduce GS1 AI unbracketed string with ^ as FNC1 to GTIN' -); -is( - normalize_code_with_gs1_ai("\x{001d}010404478231711217270101"), - ('4044782317112', '(01)04044782317112(17)270101'), - 'GS1: should reduce GS1 AI unbracketed string with original FNC1 to GTIN' -); -is( - normalize_code_with_gs1_ai("\x{241d}010404478231711217270101"), - ('4044782317112', '(01)04044782317112(17)270101'), - 'GS1: should reduce GS1 AI unbracketed string with GS as FNC1 to GTIN' -); +my $returned_code; +my $returned_ai_data_str; +($returned_code, undef) = normalize_code_with_gs1_ai('036000291452'); +is($returned_code, '0036000291452', 'GS1: should add leading 0 to valid UPC12'); + +($returned_code, undef) = normalize_code_with_gs1_ai('036000291455'); +is($returned_code, '036000291455', 'GS1: should not add 0 to invalid UPC12, just return as-is'); + +($returned_code, undef) = normalize_code_with_gs1_ai('4015533014963'); +is($returned_code, '4015533014963', 'GS1: should just return invalid EAN13'); + +($returned_code, undef) = normalize_code_with_gs1_ai(undef); +ok(!$returned_code, 'GS1: undef should stay undef'); + +($returned_code, undef) = normalize_code_with_gs1_ai(' just a simple test 4015533014963 here we go '); +is($returned_code, '4015533014963', 'GS1: barcode should always be cleaned from anything but digits'); + +($returned_code, undef) = normalize_code_with_gs1_ai(' just a simple test 036000291452 here we go '); +is($returned_code, '0036000291452', 'GS1: should add leading 0 to cleaned valid UPC12'); + +($returned_code, undef) = normalize_code_with_gs1_ai(' just a simple test 036000291455 here we go '); +is($returned_code, '036000291455', 'GS1: should not add leading 0 to cleaned invalid UPC12'); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai('0104044782317112'); +is($returned_code, '4044782317112', 'GS1: should reduce GS1 AI unbracketed string to GTIN - code'); +is($returned_ai_data_str, '(01)04044782317112', 'GS1: should reduce GS1 AI unbracketed string to GTIN - ai'); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai('(01)04044782317112(17)270101'); +is($returned_code, '4044782317112', 'GS1: should reduce GS1 AI bracketed string to GTIN - code'); +is($returned_ai_data_str, '(01)04044782317112(17)270101', 'GS1: should reduce GS1 AI bracketed string to GTIN - ai'); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai('^010404478231711217270101'); +is($returned_code, '4044782317112', 'GS1: should reduce GS1 AI unbracketed string with ^ as FNC1 to GTIN - code'); is( - normalize_code_with_gs1_ai('https://id.gs1.org/01/04044782317112/22/2A'), - ('4044782317112', '(01)04044782317112(22)2A'), - 'GS1: should reduce GS1 Digital Link URI string with ^ as FNC1 to GTIN' + $returned_ai_data_str, + '(01)04044782317112(17)270101', + 'GS1: should reduce GS1 AI unbracketed string with ^ as FNC1 to GTIN - ai' ); + +# switch to double quote to interpret escape sequences +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai("\x{001d}010404478231711217270101"); +is($returned_code, '4044782317112', 'GS1: should reduce GS1 AI unbracketed string with original FNC1 to GTIN - code'); is( - normalize_code_with_gs1_ai('https://dalgiardino.com/01/09506000134376/10/ABC/21/123456?17=211200'), - ('9506000134376', '(01)09506000134376(10)ABC(21)123456(17)211200'), - 'GS1: should reduce GS1 Digital Link URI to GTIN' + $returned_ai_data_str, + '(01)04044782317112(17)270101', + 'GS1: should reduce GS1 AI unbracketed string with original FNC1 to GTIN - ai' ); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai("\x{241d}010404478231711217270101"); +is($returned_code, '4044782317112', 'GS1: should reduce GS1 AI unbracketed string with GS as FNC1 to GTIN - code'); is( - normalize_code_with_gs1_ai('https://example.com/01/00012345000058?17=271200'), - ('0012345000058', '(01)00012345000058(17)271200'), - 'GS1: should reduce GS1 Digital Link URI to GTIN' + $returned_ai_data_str, + '(01)04044782317112(17)270101', + 'GS1: should reduce GS1 AI unbracketed string with GS as FNC1 to GTIN - ai' ); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai('https://id.gs1.org/01/04044782317112/22/2A'); +is($returned_code, '4044782317112', 'GS1: should reduce GS1 Digital Link URI string with ^ as FNC1 to GTIN - code'); +is($returned_ai_data_str, '(01)04044782317112(22)2A', + 'GS1: should reduce GS1 Digital Link URI string with ^ as FNC1 to GTIN - ai'); + +($returned_code, $returned_ai_data_str) + = normalize_code_with_gs1_ai('https://dalgiardino.com/01/09506000134376/10/ABC/21/123456?17=211200'); +is($returned_code, '9506000134376', 'GS1: should reduce GS1 Digital Link URI to GTIN 1 - code'); is( - normalize_code_with_gs1_ai('https://world.openfoodfacts.org/'), - ('', undef), - 'GS1: non-GS1 URIs should return an empty string' + $returned_ai_data_str, + '(01)09506000134376(10)ABC(21)123456(17)211200', + 'GS1: should reduce GS1 Digital Link URI to GTIN 1 - ai' ); -is(normalize_code_with_gs1_ai('http://spam.zip/'), ('', undef), 'GS1: non-GS1 URIs should return an empty string'); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai('https://example.com/01/00012345000058?17=271200'); +is($returned_code, '0012345000058', 'GS1: should reduce GS1 Digital Link URI to GTIN 2 - code'); +is($returned_ai_data_str, '(01)00012345000058(17)271200', 'GS1: should reduce GS1 Digital Link URI to GTIN 2 - ai'); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai('https://world.openfoodfacts.org/'); +is($returned_code, '', 'GS1: non-GS1 URIs should return an empty string 1 - code'); +ok(!$returned_ai_data_str, 'GS1: non-GS1 URIs should return an empty string 1 - ai'); + +($returned_code, $returned_ai_data_str) = normalize_code_with_gs1_ai('http://spam.zip/'); +is($returned_code, '', 'GS1: should reduce GS1 Digital Link URI to GTIN 2 - code'); +ok(!$returned_ai_data_str, 'GS1: non-GS1 URIs should return an empty string 2 - ai'); # product storage path is(product_path_from_id('not a real code'), 'invalid', 'non digit code should return "invalid"'); diff --git a/version.txt b/version.txt index 261d95596f393..c2576f1624838 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2.53.0 +2.55.0