Skip to content

Commit

Permalink
Merge branch 'main' into keycloak
Browse files Browse the repository at this point in the history
  • Loading branch information
hangy authored Feb 15, 2025
2 parents ecb5489 + cb00a1c commit 3788db6
Show file tree
Hide file tree
Showing 958 changed files with 14,122 additions and 70,811 deletions.
7 changes: 4 additions & 3 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -689,7 +689,7 @@ Numbers:
- any-glob-to-any-file: 'tests/unit/ingredients_nutriscore.t'
- any-glob-to-any-file: 'tests/unit/ingredients_nutriscore.t'
- any-glob-to-any-file: 'scripts/add_nutriscore_to_scanbot_csv.pl'
- any-glob-to-any-file: 'docs/introduction/get-the-nutriscore.md'
- any-glob-to-any-file: 'docs/api/api-tutorials/get-the-nutriscore.md'
- any-glob-to-any-file: 'docs/​api/​ref/​schemas/​product_nutriscore.yaml'

Nutrients:
Expand Down Expand Up @@ -1161,8 +1161,9 @@ OCR:
Scanbot:
- changed-files:
- any-glob-to-any-file: 'scripts/scanbot.pl'


- any-glob-to-any-file: 'scripts/export_scans_to_query.pl'
- any-glob-to-any-file: 'scripts/add_nutriscore_to_scanbot_csv.pl'

# We used to have a nice missions system with badges you'd earn by doing certain contribution tasks. It was disabled when we made Open Food Facts multilingual, and we never got to refactor it.
# Tracking issue: https://github.com/openfoodfacts/openfoodfacts-server/issues/5516
# https://openfoodfacts.github.io/openfoodfacts-server/dev/ref-perl-pod/ProductOpener/Missions.html
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/container-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ jobs:
cd ${{ matrix.env }} && \
make init_backend
# NOTE: the mongodb and redis containers are deployed by openfoodfacts-shared-services
- name: Start services
uses: appleboy/ssh-action@master
with:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ tests/integration/outputs/


# Local files
.DS_Store?
.DS_Store
._*
.Spotlight-V100
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Changelog

## [2.58.0](https://github.com/openfoodfacts/openfoodfacts-server/compare/v2.57.0...v2.58.0) (2025-02-12)


### Features

* petfood-nutrition-facts ([#11188](https://github.com/openfoodfacts/openfoodfacts-server/issues/11188)) ([f101551](https://github.com/openfoodfacts/openfoodfacts-server/commit/f1015516f3a9b518c1370cf90d914c2a57f7f05e))


### Bug Fixes

* disable rate limiting for internal trafic ([#11327](https://github.com/openfoodfacts/openfoodfacts-server/issues/11327)) ([17b9a54](https://github.com/openfoodfacts/openfoodfacts-server/commit/17b9a5479115384fdc2ef22294017ffca15e5270))
* food contact packagings for chocolate bars ([#11343](https://github.com/openfoodfacts/openfoodfacts-server/issues/11343)) ([c485494](https://github.com/openfoodfacts/openfoodfacts-server/commit/c485494e2c854a1391c1452ac95c1e514badfa5e))
* remove %options ([#11345](https://github.com/openfoodfacts/openfoodfacts-server/issues/11345)) ([3491318](https://github.com/openfoodfacts/openfoodfacts-server/commit/34913185a340dbd221a4ae7948208bd1452fab2e))

## [2.57.0](https://github.com/openfoodfacts/openfoodfacts-server/compare/v2.56.0...v2.57.0) (2025-02-04)


Expand Down
8 changes: 7 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt \
libapache2-mod-perl2-dev \
# OpenSSL dev needed by OIDC::Lite
libssl-dev \
# needed for Imager::File::WEBP
libwebpmux3 \
# Imager::zxing - build deps
cmake \
pkg-config \
Expand Down Expand Up @@ -205,7 +207,11 @@ WORKDIR /tmp
# Install Product Opener from the workdir.
COPY ./cpanfile* /tmp/
# Add ProductOpener runtime dependencies from cpan
RUN --mount=type=cache,id=cpanm-cache,target=/root/.cpanm \
# we also add apt cache as some libraries might be installed from apt
RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt \
--mount=type=cache,id=lib-apt-cache,target=/var/lib/apt \
--mount=type=cache,id=cpanm-cache,target=/root/.cpanm \
set -x && \
# first install some dependencies that are not well handled
cpanm --notest --quiet --skip-satisfied --local-lib /tmp/local/ "Apache::Bootstrap" && \
cpanm $CPANMOPTS --notest --quiet --skip-satisfied --local-lib /tmp/local/ --installdeps . \
Expand Down
7 changes: 4 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -161,17 +161,18 @@ _up: run_deps
up: build create_folders _up

# Used by staging so that shared services are not created
# Shared services are started by the github workflow of openfoodfacts-shared-services
prod_up: build create_folders
@echo "🥫 Starting containers …"
${DOCKER_COMPOSE_BUILD} up -d 2>&1
${DOCKER_COMPOSE} up -d 2>&1

down:
@echo "🥫 Bringing down containers …"
${DOCKER_COMPOSE_BUILD} down --remove-orphans
${DOCKER_COMPOSE} down --remove-orphans

hdown:
@echo "🥫 Bringing down containers and associated volumes …"
${DOCKER_COMPOSE_BUILD} down -v
${DOCKER_COMPOSE} down -v --remove-orphans

reset: hdown up

Expand Down
106 changes: 66 additions & 40 deletions cgi/product_multilingual.pl
Original file line number Diff line number Diff line change
Expand Up @@ -1070,8 +1070,12 @@ ($product_ref, $field, $language, $request_ref)
$template_data_ref_display->{display_tab_nutrition_image}
= display_input_tabs($product_ref, "nutrition_image", $product_ref->{sorted_langs},
\%Langs, ["nutrition_image"], $request_ref);
$template_data_ref_display->{display_field_serving_size}
= display_input_field($product_ref, "serving_size", undef, $request_ref);

# only food products can have serving_size on the product
if ($options{product_type} eq "food") {
$template_data_ref_display->{display_field_serving_size}
= display_input_field($product_ref, "serving_size", undef, $request_ref);
}

$request_ref->{initjs} .= display_select_crop_init($product_ref);

Expand Down Expand Up @@ -1259,7 +1263,7 @@ ($product_ref, $field, $language, $request_ref)
}

if (($nid eq 'alcohol') or ($nid eq 'energy-kj') or ($nid eq 'energy-kcal')) {
my $unit = '';
$unit = '';

if (($nid eq 'alcohol')) {$unit = '% vol / °';} # alcohol in % vol / °
elsif (($nid eq 'energy-kj')) {$unit = 'kJ';}
Expand All @@ -1268,6 +1272,15 @@ ($product_ref, $field, $language, $request_ref)
$nutriment_ref->{nutriment_unit} = $unit;

}
# make sure pet nutrients (analytical_constituents) are always in percent
elsif (($nid eq 'crude-fat')
or ($nid eq 'crude-protein')
or ($nid eq 'crude-ash')
or ($nid eq 'crude-fibre')
or ($nid eq 'moisture'))
{
$nutriment_ref->{nutriment_unit} = '%';
}
else {

my @units = ('g', 'mg', 'µg');
Expand Down Expand Up @@ -1388,7 +1401,10 @@ ($product_ref, $field, $language, $request_ref)
$product_ref->{nutrition_data} = "on";
}

if ($nutrition_data_exists{"_prepared"}) {
# only food products can have prepared product (dehydrated for example)
if ( ($options{product_type} eq "food")
and ($nutrition_data_exists{"_prepared"}))
{
$product_ref->{nutrition_data_prepared} = "on";
}

Expand Down Expand Up @@ -1417,61 +1433,71 @@ ($product_ref, $field, $language, $request_ref)
}

my $checked_per_serving = '';
my $checked_per_100g = 'checked="checked"';
my $checked_per_xxg = 'checked="checked"';
$nutrition_data_per_display_style{$nutrition_data . "_serving"} = ' style="display:none"';
$nutrition_data_per_display_style{$nutrition_data . "_100g"} = '';
$nutrition_data_per_display_style{$nutrition_data . "_xxg"} = '';

my $nutrition_data_per = "nutrition_data" . $product_type . "_per";

if (
($product_ref->{$nutrition_data_per} eq 'serving')
# display by serving by default for the prepared product
or (($product_type eq '_prepared') and (not defined $product_ref->{nutrition_data_prepared_per}))
# petfood products are always "as sold" (not per a given quantity)
$options{product_type} eq "food"
)
{
$checked_per_serving = 'checked="checked"';
$checked_per_100g = '';
$nutrition_data_per_display_style{$nutrition_data . "_serving"} = '';
$nutrition_data_per_display_style{$nutrition_data . "_100g"} = ' style="display:none"';
}

my $nutriment_col_class = "nutriment_col" . $product_type;
if (
(
($product_ref->{$nutrition_data_per} eq 'serving')
# display by serving by default for the prepared product
or (($product_type eq '_prepared') and (not defined $product_ref->{nutrition_data_prepared_per}))
)
)
{
$checked_per_serving = 'checked="checked"';
$checked_per_xxg = '';
$nutrition_data_per_display_style{$nutrition_data . "_serving"} = '';
$nutrition_data_per_display_style{$nutrition_data . "_xxg"} = ' style="display:none"';
}

my $product_type_as_sold_or_prepared = "as_sold";
if ($product_type eq "_prepared") {
$product_type_as_sold_or_prepared = "prepared";
}
my $nutriment_col_class = "nutriment_col" . $product_type;

push(
@nutrition_product_types,
{
checked => $checked,
nutrition_data => $nutrition_data,
nutrition_data_exists => $Lang{$nutrition_data_exists}{$lc},
nutrition_data_per => $nutrition_data_per,
checked_per_100g => $checked_per_100g,
checked_per_serving => $checked_per_serving,
nutrition_data_instructions => $nutrition_data_instructions,
nutrition_data_instructions_check => $Lang{$nutrition_data_instructions},
nutrition_data_instructions_lang => $Lang{$nutrition_data_instructions}{$lc},
hidden => $hidden,
nutriment_col_class => $nutriment_col_class,
product_type_as_sold_or_prepared => $product_type_as_sold_or_prepared,
checkmate => $product_ref->{$nutrition_data_per},
my $product_type_as_sold_or_prepared = "as_sold";
if ($product_type eq "_prepared") {
$product_type_as_sold_or_prepared = "prepared";
}
);

push(
@nutrition_product_types,
{
checked => $checked,
nutrition_data => $nutrition_data,
nutrition_data_exists => $Lang{$nutrition_data_exists}{$lc},
nutrition_data_per => $nutrition_data_per,
checked_per_xxg => $checked_per_xxg,
checked_per_serving => $checked_per_serving,
nutrition_data_instructions => $nutrition_data_instructions,
nutrition_data_instructions_check => $Lang{$nutrition_data_instructions},
nutrition_data_instructions_lang => $Lang{$nutrition_data_instructions}{$lc},
hidden => $hidden,
nutriment_col_class => $nutriment_col_class,
product_type_as_sold_or_prepared => $product_type_as_sold_or_prepared,
checkmate => $product_ref->{$nutrition_data_per},
}
);
}
}

# nutrition table differs between flavors (food and petfood)

$template_data_ref_display->{nutrition_product_types} = \@nutrition_product_types;

$template_data_ref_display->{column_display_style_nutrition_data} = $column_display_style{"nutrition_data"};
$template_data_ref_display->{column_display_style_nutrition_data_prepared}
= $column_display_style{"nutrition_data_prepared"};
$template_data_ref_display->{nutrition_data_100g_style} = $nutrition_data_per_display_style{"nutrition_data_100g"};
$template_data_ref_display->{nutrition_data_xxg_style} = $nutrition_data_per_display_style{"nutrition_data_xxg"};
$template_data_ref_display->{nutrition_data_serving_style}
= $nutrition_data_per_display_style{"nutrition_data_serving"};
$template_data_ref_display->{nutrition_data_prepared_100g_style}
= $nutrition_data_per_display_style{"nutrition_data_prepared_100g"};
$template_data_ref_display->{nutrition_data_prepared_xxg_style}
= $nutrition_data_per_display_style{"nutrition_data_prepared_xxg"};
$template_data_ref_display->{nutrition_data_prepared_serving_style}
= $nutrition_data_per_display_style{"nutrition_data_prepared_serving"};

Expand Down
2 changes: 1 addition & 1 deletion conf/nginx/sites-available/off-pro
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ server {
listen [::]:80;

# Product Opener needs a root domain + a wildcard for all subdomains
server_name *.pro.openfoodfacts.org;
server_name pro.openfoodfacts.org *.pro.openfoodfacts.org;

root /srv/off-pro/html;

Expand Down
76 changes: 0 additions & 76 deletions crowdin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,82 +22,6 @@ files:
sr: sr_RS
ku : kmr_TR
kmr: kmr
- source: /po/openbeautyfacts/openbeautyfacts.pot
translation: /po/openbeautyfacts/%two_letters_code%.po
ignore: ["/po/openbeautyfacts/nl.po"]
languages_mapping:
two_letters_code:
en-GB: en_GB
pt-BR: pt_BR
pt-PT: pt_PT
en-AU: en_AU
en-US: en_US
zh-CN: zh_CN
zh-HK: zh_HK
nl-BE: nl_BE
nl: nl_NL
zh-TW: zh_TW
sr-CS: sr_CS
sr: sr_RS
ku : kmr_TR
kmr: kmr
- source: /po/openfoodfacts/openfoodfacts.pot
translation: /po/openfoodfacts/%two_letters_code%.po
ignore: ["/po/openfoodfacts/nl.po"]
languages_mapping:
two_letters_code:
zh-HK: zh_HK
zh-CN: zh_CN
en-AU: en_AU
en-GB: en_GB
en-US: en_US
nl-BE: nl_BE
nl: nl_NL
pt-BR: pt_BR
pt-PT: pt_PT
zh-TW: zh_TW
sr-CS: sr_CS
sr: sr_RS
ku : kmr_TR
kmr: kmr
- source: /po/openproductsfacts/openproductsfacts.pot
translation: /po/openproductsfacts/%two_letters_code%.po
ignore: ["/po/openproductsfacts/nl.po"]
languages_mapping:
two_letters_code:
zh-HK: zh_HK
zh-CN: zh_CN
en-AU: en_AU
en-GB: en_GB
en-US: en_US
nl-BE: nl_BE
nl: nl_NL
pt-BR: pt_BR
pt-PT: pt_PT
zh-TW: zh_TW
sr-CS: sr_CS
sr: sr_RS
ku : kmr_TR
kmr: kmr
- source: /po/openpetfoodfacts/openpetfoodfacts.pot
translation: /po/openpetfoodfacts/%two_letters_code%.po
ignore: ["/po/openpetfoodfacts/nl.po"]
languages_mapping:
two_letters_code:
zh-HK: zh_HK
zh-CN: zh_CN
en-AU: en_AU
en-GB: en_GB
en-US: en_US
pt-BR: pt_BR
pt-PT: pt_PT
nl-BE: nl_BE
nl: nl_NL
zh-TW: zh_TW
sr-CS: sr_CS
sr: sr_RS
ku : kmr_TR
kmr: kmr
- source: /html/donate/en.html
translation: /html/donate/%two_letters_code%.html
languages_mapping:
Expand Down
Loading

0 comments on commit 3788db6

Please sign in to comment.