Compare commits

..

No commits in common. "master" and "postProdFixes" have entirely different histories.

33 changed files with 3628 additions and 5147 deletions

View file

@ -3,7 +3,6 @@ APP_ENV=local
APP_KEY= APP_KEY=
APP_DEBUG=true APP_DEBUG=true
APP_URL=http://localhost APP_URL=http://localhost
APP_DOMAIN=
LOG_CHANNEL=stack LOG_CHANNEL=stack
@ -38,6 +37,7 @@ CAFEL_PASSWORD=
MAIL_INVALID_CAFEL_DATA=equipe.web@ldc.fr MAIL_INVALID_CAFEL_DATA=equipe.web@ldc.fr
MAIL_INVALID_CAFEL_DATA_IMAGE=equipe.web@ldc.fr MAIL_INVALID_CAFEL_DATA_IMAGE=equipe.web@ldc.fr
MAIL_INVALID_XML=equipe.web@ldc.fr MAIL_INVALID_XML=equipe.web@ldc.fr
MAIL_LIST_SERVICEWEB=equipe.web@ldc.fr
## LDC WEB STATUS CHECKER ## LDC WEB STATUS CHECKER
LDC_STATUS_CHECKER_API_KEY="MY_KEY" LDC_STATUS_CHECKER_API_KEY="MY_KEY"
@ -45,9 +45,6 @@ LDC_STATUS_CHECKER_UUID="UUID_PROJECT"
## LDC WEB ADMIN SECURE ## LDC WEB ADMIN SECURE
LDC_WEB_API_KEY="MY_KEY" LDC_WEB_API_KEY="MY_KEY"
## GOOGLE ## GOOGLE
ANALYTICS_GOOGLE_ID= ANALYTICS_GOOGLE_ID=
# TERRE D'ACTION MODAL (YYYY-MM-DD)
TERRE_ACTION_START_DATE=
TERRE_ACTION_END_DATE=

View file

@ -1,12 +1,75 @@
include:
- project: 'ldc-web/shared-ci'
ref: 'main'
file: 'lint/lint7.3.yml'
- project: 'ldc-web/shared-ci'
ref: 'main'
file: 'security/security7.3.yml'
stages: stages:
- lint - Security
- security - CodingStandards
- Builds
composer-security:
stage: Security
image: $CI_REGISTRY/service-web-lab/ldc-web-images-docker/ldcweb-qa:php7.3-1.0
script:
- local-php-security-checker --format=json --path=./composer.lock > composer-security-checker-report.json
artifacts:
when: on_failure
expose_as: 'composer-security-checker'
paths:
- composer-security-checker-report.json
allow_failure: true
needs: []
npm-security:
stage: Security
image: node:17.9.1
before_script:
- npm install --location=global audit-ci@^6
script:
- audit-ci -p npm -o json > npm-security-checker-report.json
artifacts:
when: on_failure
expose_as: 'npm-security-checker'
paths:
- npm-security-checker-report.json
allow_failure: true
needs: []
phpcs:
stage: CodingStandards
image: $CI_REGISTRY/service-web-lab/ldc-web-images-docker/ldcweb-qa:php7.3-1.0
before_script:
- composer config gitlab-token.gitlab.com $CI_DEPLOY_USER $CI_DEPLOY_PASSWORD
- composer install
cache:
paths:
- vendor/
script:
- vendor/bin/phpcs --report=junit --report-file=phpcs-report.xml
artifacts:
when: on_failure
expose_as: 'phpcs'
paths:
- phpcs-report.xml
reports:
junit: phpcs-report.xml
allow_failure: false
needs:
- composer-security
- npm-security
front-build:
stage: Builds
image: node:17.9.1
before_script:
- npm install
cache:
paths:
- node_modules/
script:
- npm run prod > front-build-report.json
artifacts:
when: on_failure
expose_as: 'front-build-report'
paths:
- front-build-report.json
allow_failure: false
needs:
- phpcs

View file

@ -1,11 +0,0 @@
## Comportement constaté
## Comportement attendu
## Solution envisagée
## Étapes pour la reproduction du bug
*

View file

@ -1,7 +0,0 @@
## Présentation du besoin
## Implémentation
## Maquettes, documentations...

View file

@ -30,11 +30,11 @@ class Kernel extends ConsoleKernel
protected function schedule(Schedule $schedule) protected function schedule(Schedule $schedule)
{ {
// * Jobs cafel sur queue cafel // * Jobs cafel sur queue cafel
$schedule->job(CafelFoodJob::class, 'cafel')->onOneServer()->dailyAt('22h30'); $schedule->job(CafelFoodJob::class, 'cafel')->onOneServer()->everySixHours();
$schedule->job(CafelBeaVolJob::class, 'cafel')->onOneServer()->dailyAt('22h45'); $schedule->job(CafelBeaVolJob::class, 'cafel')->onOneServer()->everySixHours();
$schedule->job(CafelMepEggJob::class, 'cafel')->onOneServer()->dailyAt('23h00'); $schedule->job(CafelMepEggJob::class, 'cafel')->onOneServer()->everySixHours();
$schedule->job(CafelEggBreederJob::class, 'cafel')->onOneServer()->dailyAt('23h15'); $schedule->job(CafelEggBreederJob::class, 'cafel')->onOneServer()->everySixHours();
$schedule->job(CafelPoultryBreederJob::class, 'cafel')->onOneServer()->dailyAt('23h30'); $schedule->job(CafelPoultryBreederJob::class, 'cafel')->onOneServer()->everySixHours();
$schedule->job(XmlFluxEggJob::class, 'tracea')->onOneServer()->dailyAt('02:00'); $schedule->job(XmlFluxEggJob::class, 'tracea')->onOneServer()->dailyAt('02:00');
$schedule->job(XmlFluxPoultryJob::class, 'tracea')->onOneServer()->dailyAt('22:00'); $schedule->job(XmlFluxPoultryJob::class, 'tracea')->onOneServer()->dailyAt('22:00');

View file

@ -4,8 +4,8 @@ namespace App\Exceptions;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Throwable;
use Sentry\Laravel\Integration; use Kwaadpepper\ExceptionHandler\Exceptions\ExceptionHandler;
class Handler extends ExceptionHandler class Handler extends ExceptionHandler
{ {
@ -27,19 +27,18 @@ class Handler extends ExceptionHandler
]; ];
/** /**
* Register the exception handling callbacks for the application. * Report or log an exception.
* *
* @param \Throwable $exception
* @return void * @return void
*/ */
public function register() public function report(Throwable $exception)
{ {
$this->reportable(function (\Throwable $e) { if ($exception instanceof CafelApiImageFetchException) {
if ($e instanceof CafelApiImageFetchException) { $this->reportCafelApiImageErrorException($exception);
$this->reportCafelApiImageErrorException($e);
return; return;
} }
Integration::captureUnhandledException($e); parent::report($exception);
});
} }
/** /**

View file

@ -1,190 +0,0 @@
<?php
namespace App\Lib;
class ExceptionsHelper
{
/**
* Handle sentry event
*
* @param \Sentry\Event $event
* @return null|\Sentry\Event
*/
public static function sentryEventHandler(\Sentry\Event $event): ?\Sentry\Event
{
// Remove unwanted reports.
$event->setModules([]);
$event->setOsContext(null);
/** @var \Sentry\ExceptionDataBag[] */
$exceptionBag = [];
foreach ($event->getExceptions() as $exceptionDataBag) {
$exceptionBag[] = self::getAnonymizedSentryException($exceptionDataBag);
}
$event->setExceptions($exceptionBag);
return $event;
}
/**
* Anonimize Sentry Exception bag
*
* @param \Sentry\ExceptionDataBag $exceptionDataBag
* @return \Sentry\ExceptionDataBag
*/
private static function getAnonymizedSentryException(
\Sentry\ExceptionDataBag $exceptionDataBag
): \Sentry\ExceptionDataBag {
$exceptionDataBag->setValue(self::getAnonymizedMessage($exceptionDataBag->getValue()));
if ($stackTrace = $exceptionDataBag->getStacktrace()) {
$exceptionDataBag->setStacktrace(self::getAnonymizedSentryStackTrace($stackTrace));
}
return $exceptionDataBag;
}
/**
* Anonymise sentry stacktrace
*
* @param \Sentry\Stacktrace $stackTrace
* @return \Sentry\Stacktrace
*/
private static function getAnonymizedSentryStackTrace(\Sentry\Stacktrace $stackTrace): \Sentry\Stacktrace
{
/** @var \Sentry\Frame[] */
$frames = \array_reverse($stackTrace->getFrames(), true);
$i = \count($frames) - 1;
// * Remove all but keep first (index.php).
while ($i-- > 0) {
$stackTrace->removeFrame(count($stackTrace->getFrames()) - 1);
}
foreach ($frames as $index => $frame) {
$frame->setPostContext([]);
$frame->setPreContext([]);
$frame->setContextLine('');
$frame->setVars(self::getAnonymizedSentryParams($frame->getVars()));
$stackTrace->addFrame($frame);
if ($index === 0) {
$stackTrace->removeFrame(count($stackTrace->getFrames()) - 1);
}
}
return $stackTrace;
}
/**
* Get anonymized sentry params
*
* @param mixed[] $params
* @return string[]
*/
private static function getAnonymizedSentryParams(array $params): array
{
foreach ($params as &$param) {
$type = \strtolower(\gettype($param));
if (\is_string($param)) {
$type = \explode(' ', \trim($param))[0] ?? null;
}
switch ($type) {
case 'Lambda':
case 'Object':
continue 2;
case 'array':
$param = sprintf('Array(%d)', \count($param));
continue 2;
default:
if (\is_numeric($param)) {
$param = \ucfirst($type);
continue 2;
}
if (\is_string($param)) {
$param = sprintf('String(%d)', \strlen($param));
continue 2;
}
} //end switch
} //end foreach
return $params;
}
/**
* Anonymize at least Sql queries
*
* @param string $message
* @return string
*/
public static function getAnonymizedMessage(string $message): string
{
$message = \preg_replace('/^(.*)( \(SQL:.*\))$/', '$1', $message) ?? $message;
if ($sqlPos = \strpos($message, 'to use near')) {
$message = \mb_strcut($message, 0, $sqlPos);
}
return $message;
}
/**
* Anonymize stack trace
*
* @param \Throwable $e
* @return string
*/
public static function getAnonymizedStackTrace(\Throwable $e): string
{
$projectPath = \realpath(\sprintf('%s/../', \app_path()));
$traceStack = $e->getTrace();
$traceStr = '';
$maxStackStage = 0;
foreach ($traceStack as $stackStage => $stack) {
$maxStackStage = $stackStage;
$traceStr .= \sprintf(
'#%s %s(%d): ',
$stackStage,
str_replace($projectPath, '', $stack['file'] ?? ''),
$stack['line'] ?? ''
);
if (isset($stack['class'])) {
$traceStr .= "{$stack['class']}->{$stack['function']}(";
if (isset($stack['args'])) {
$traceStr .= self::handleArgs($stack);
}
$traceStr .= ")\n";
} elseif (isset($stack['function'])) {
$traceStr .= "{$stack['function']}(";
if (isset($stack['args'])) {
$traceStr .= self::handleArgs($stack);
}
$traceStr .= ")\n";
}
} //end foreach
$maxStackStage++;
$traceStr .= "#$maxStackStage {main}";
return $traceStr;
}
/**
* Handle Args
*
* @param array $stack
* @return string
*/
public static function handleArgs(array $stack): string
{
$traceArgs = '';
$argsCount = count($stack['args']);
for ($i = 0; $i < $argsCount; $i++) {
$type = \gettype($stack['args'][$i]);
switch ($type) {
case 'object':
$traceArgs .= sprintf('Object(%s)', \get_class($stack['args'][$i]));
break;
case 'array':
$traceArgs .= sprintf('Array(%d)', \count($stack['args'][$i]));
break;
case 'string':
$traceArgs .= sprintf('String(%d)', \strlen($stack['args'][$i]));
break;
default:
$traceArgs .= \gettype($stack['args'][$i]);
}
$traceArgs .= ($i !== ($argsCount - 1) ? ',' : '');
}
return $traceArgs;
}
}

View file

@ -1,26 +0,0 @@
<?php
namespace App\Providers;
use Carbon\Carbon;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ViewServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot(): void
{
if (!app()->runningInConsole()) {
View::share('isDisplayedTAModal', (function () {
$now = now();
return $now->greaterThanOrEqualTo(new Carbon(config('modal.terreActionStartDate'))) &&
$now->lessThanOrEqualTo(new Carbon(config('modal.terreActionEndDate')));
})());
}
}
}

View file

@ -17,16 +17,16 @@
"fideloper/proxy": "^4.0", "fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^7.4", "guzzlehttp/guzzle": "^7.4",
"kwaadpepper/enum": "^2.1", "kwaadpepper/enum": "^2.1",
"kwaadpepper/exception-handler": "^0.0.6",
"kwaadpepper/refresh-sitemap": "^1.0", "kwaadpepper/refresh-sitemap": "^1.0",
"laravel/framework": "^8.0", "laravel/framework": "^8.0",
"laravel/tinker": "^2.0", "laravel/tinker": "^2.0",
"laravel/ui": "^3.0", "laravel/ui": "^3.0",
"laravelcollective/html": "^6.0", "laravelcollective/html": "^6.0",
"ldc/web-admin-secure-laravel": "^1.0", "ldc/web-admin-secure-laravel": "1.0.1",
"ldc/web-status-checker-laravel": "^1.0", "ldc/web-status-checker-laravel": "^1.0",
"mews/purifier": "^3.3", "mews/purifier": "^3.3",
"nesbot/carbon": "^2.29", "nesbot/carbon": "^2.29",
"sentry/sentry-laravel": "^3.1",
"spatie/laravel-mix-preload": "^1.3" "spatie/laravel-mix-preload": "^1.3"
}, },
"require-dev": { "require-dev": {
@ -45,10 +45,7 @@
"sort-packages": true, "sort-packages": true,
"allow-plugins": { "allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true "dealerdirect/phpcodesniffer-composer-installer": true
}, }
"gitlab-domains": [
"lab.s-web.fr"
]
}, },
"extra": { "extra": {
"laravel": { "laravel": {
@ -82,9 +79,9 @@
] ]
}, },
"repositories": { "repositories": {
"lab.s-web.fr": { "gitlab.com/16669037": {
"type": "composer", "type": "composer",
"url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json" "url": "https://gitlab.com/api/v4/group/16669037/-/packages/composer/packages.json"
} }
} }
} }

2185
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -177,7 +177,6 @@ return [
App\Providers\AuthServiceProvider::class, App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class, App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class, App\Providers\RouteServiceProvider::class,
App\Providers\ViewServiceProvider::class,
], ],

View file

@ -0,0 +1,15 @@
<?php
return [
/**
* Send mail when app debug is turn off
* so you can be warned if an unhandled exception occurs
*/
'enableMaiLog' => !config('app.debug'),
/**
* Put a developper secured mailbox in here
* so you can receive email if things go mad
*/
'contactsList' => explode(',', env('MAIL_LIST_SERVICEWEB', 'equipe.web@ldc.fr')),
];

View file

@ -1,6 +0,0 @@
<?php
return [
'terreActionStartDate' => env('TERRE_ACTION_START_DATE'),
'terreActionEndDate' => env('TERRE_ACTION_END_DATE')
];

View file

@ -1,62 +0,0 @@
<?php
return [
'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),
// The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')).
'release' => env('SENTRY_RELEASE'),
// When left empty or `null` the Laravel environment will be used.
'environment' => env('SENTRY_ENVIRONMENT'),
'breadcrumbs' => [
// Capture Laravel logs in breadcrumbs.
'logs' => true,
// Capture SQL queries in breadcrumbs.
'sql_queries' => true,
// Capture bindings on SQL queries logged in breadcrumbs.
'sql_bindings' => true,
// Capture queue job information in breadcrumbs.
'queue_info' => true,
// Capture command information in breadcrumbs.
'command_info' => true,
],
'tracing' => [
// Trace queue jobs as their own transactions.
'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false),
// Capture queue jobs as spans when executed on the sync driver.
'queue_jobs' => true,
// Capture SQL queries as spans.
'sql_queries' => true,
// Try to find out where the SQL query originated from and add it to the query spans.
'sql_origin' => true,
// Capture views as spans.
'views' => true,
// Indicates if the tracing integrations supplied by Sentry should be loaded.
'default_integrations' => true,
// Indicates that requests without a matching route should be traced.
'missing_routes' => false,
],
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii
'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false),
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate
'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float)env('SENTRY_TRACES_SAMPLE_RATE'),
'before_send' => [\App\Lib\ExceptionsHelper::class, 'sentryEventHandler'],
];

5140
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -10,7 +10,7 @@ document.addEventListener('DOMContentLoaded', () => {
imageHeight: 200, imageHeight: 200,
imageAlt: 'Logo Loué terre d\'action', imageAlt: 'Logo Loué terre d\'action',
background: '#4b8764', background: '#4b8764',
confirmButtonText: '<a href="https://action-reboisement.loue.fr" target="_blank">Je valide mon achat</a>', confirmButtonText: '<a href="https://www.loue.fr/article/Des-arbres-et-des-haies-pour-les-volailles-fermières-de-Loué/a3.aspx" target="_blank">Je valide mon achat</a>',
confirmButtonColor: '#005621', confirmButtonColor: '#005621',
showCloseButton: true, showCloseButton: true,
}) })

View file

@ -1,19 +1,19 @@
// 1. Include new custom variables // Variables
@import 'variables'; @import 'variables';
// 2. Include functions first (so you can manipulate colors, SVGs, calc, etc) // 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
@import "~bootstrap/scss/functions"; @import '~bootstrap/scss/functions';
// 2. Include any default variable overrides here
// 3. Include remainder of required Bootstrap stylesheets // 3. Include remainder of required Bootstrap stylesheets
@import "~bootstrap/scss/variables"; @import '~bootstrap/scss/variables';
@import '~bootstrap/scss/mixins';
// 4. Include remainder of required parts
@import "~bootstrap/scss/maps";
@import "~bootstrap/scss/mixins";
@import "~bootstrap/scss/root";
// 5. Optionally include any other parts as needed // 4. Include any optional Bootstrap components as you like
@import '~bootstrap/scss/root';
@import '~bootstrap/scss/reboot'; @import '~bootstrap/scss/reboot';
@import '~bootstrap/scss/type'; @import '~bootstrap/scss/type';
@import '~bootstrap/scss/images'; @import '~bootstrap/scss/images';
@ -27,9 +27,6 @@
@import '~bootstrap/scss/alert'; @import '~bootstrap/scss/alert';
@import '~bootstrap/scss/close'; @import '~bootstrap/scss/close';
// 6. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`
@import "~bootstrap/scss/utilities/api";
// Fix for bootstrap // Fix for bootstrap
.text-break { .text-break {
overflow-wrap: break-word !important; overflow-wrap: break-word !important;

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page yellow"> <div class="sub-page yellow">
<header> <header>
<a href="{{route('egg.FrontPage', ['id' => request()->id])}}"> <a href="{{route('egg.FrontPage', ['id' => request()->id])}}">
@ -18,17 +18,15 @@
<p class="title">De quoi est composée l'alimentation des poules ?</p> <p class="title">De quoi est composée l'alimentation des poules ?</p>
<div class="box"> <div class="box">
@if (Session::get('subColor') == 'blue') @if (Session::get('subColor') == 'blue')
<img class="type active" src="{{ asset('assets/images/parts/alimentation-lr.jpg') }}" alt="Alimentation Label Rouge"> <img src="{{ asset('assets/images/parts/alimentation-lr.jpg') }}" alt="Alimentation Label Rouge" class="type active">
@else @else
<img class="type active" src="{{ asset('assets/images/parts/alimentation-bio.jpg') }}" alt="Alimentation Bio"> <img src="{{ asset('assets/images/parts/alimentation-bio.jpg') }}" alt="Alimentation Bio" class="type active">
@endif @endif
</div> </div>
<p class="title">D'où proviennent les céréales ?</p> <p class="title">D'où proviennent les céréales ?</p>
<div class="box"> <div class="box">
<p>De l’éleveur lui-même. Il cultive les céréales qui seront ensuite envoyées à l’usine d’aliments de la coopérative des <p>De l’éleveur lui-même. Il cultive les céréales qui seront ensuite envoyées à l’usine d’aliments de la coopérative des Fermiers de Loué, ALIFEL, pour les transformer en alimentation pour poules, qui sera ensuite retournée à l’éleveur.</p>
Fermiers de Loué, ALIFEL, pour les transformer en alimentation pour poules, qui sera ensuite retournée à l’éleveur. <img src="{{ asset('assets/images/parts/circuit_alimentation.png') }}" alt="Circuit Alimentation" class="circuit">
</p>
<img class="circuit" src="{{ asset('assets/images/parts/circuit_alimentation.png') }}" alt="Circuit Alimentation">
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page emballage"> <div class="sub-page emballage">
<header> <header>
<a href="{{route('egg.FrontPage', ['id' => request()->id])}}"> <a href="{{route('egg.FrontPage', ['id' => request()->id])}}">
@ -16,10 +16,8 @@
<div class="container"> <div class="container">
<div class="details-alimentation"> <div class="details-alimentation">
<div class="box"> <div class="box">
<img class="oeuf" src="{{ asset('assets/images/egg/LOGO_LOEUF.png') }}" alt="Logo l'oeuf"> <img src="{{ asset('assets/images/egg/LOGO_LOEUF.png') }}" alt="Logo l'oeuf" class="oeuf">
<p>Une fois les œufs triés à la main par nos éleveurs, un camion passe 4 fois par semaine dans les fermes pour les <p>Une fois les œufs triés à la main par nos éleveurs, un camion passe 4 fois par semaine dans les fermes pour les récupérer et les emmener au centre d’emballage : LOEUF (72). Les œufs pourront y être contrôlés, triés, calibrés et emballés dans les boîtes prêts à être livrés dans vos magasins.</p>
récupérer et les emmener au centre d’emballage : LOEUF (72). Les œufs pourront y être contrôlés, triés, calibrés et
emballés dans les boîtes prêts à être livrés dans vos magasins.</p>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page elevage"> <div class="sub-page elevage">
<header> <header>
<a href="{{route('egg.infoElevage', ['id' => request()->id])}}"> <a href="{{route('egg.infoElevage', ['id' => request()->id])}}">
@ -18,9 +18,7 @@
<p class="title">Un mode d'élevage en liberté,<br>qu'est-ce que cela signifie ?</p> <p class="title">Un mode d'élevage en liberté,<br>qu'est-ce que cela signifie ?</p>
<img class="img img-fluid" src="{{ asset('assets/images/egg/generique.jpg') }}" alt="Loué"> <img class="img img-fluid" src="{{ asset('assets/images/egg/generique.jpg') }}" alt="Loué">
<div class="items"> <div class="items">
<p class="description">Nos poules gambadent librement, du matin au crépuscule, en profitant en moyenne de 50 000 m2 (5 <p class="description">Nos poules gambadent librement, du matin au crépuscule, en profitant en moyenne de 50 000 m2 (5 hectares) de prairies arborées. Toutes les fermes disposent d’un parcours boisé sur lequel elles peuvent compléter leur alimentation et laisser libre cours à leur comportement naturel : gratter, picorer, fouiller, courir !</p>
hectares) de prairies arborées. Toutes les fermes disposent d’un parcours boisé sur lequel elles peuvent compléter
leur alimentation et laisser libre cours à leur comportement naturel : gratter, picorer, fouiller, courir !</p>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page elevage"> <div class="sub-page elevage">
<header> <header>
<a href="{{route('egg.FrontPage', ['id' => request()->id])}}"> <a href="{{route('egg.FrontPage', ['id' => request()->id])}}">
@ -16,7 +16,7 @@
<div class="container"> <div class="container">
<div class="portrait-eleveur"> <div class="portrait-eleveur">
<div class="top"> <div class="top">
@if ($eleveur->path_picture_2 != null && $eleveur->path_picture_2 != '') @if ($eleveur->path_picture_2 != null && $eleveur->path_picture_2 != "")
<img src="{{ asset($eleveur->path_picture_2) }}" alt="Éleveur"> <img src="{{ asset($eleveur->path_picture_2) }}" alt="Éleveur">
@else @else
<img src="{{ asset('assets/images/parts/generique_portrait.jpg') }}" alt="Éleveur"> <img src="{{ asset('assets/images/parts/generique_portrait.jpg') }}" alt="Éleveur">
@ -35,19 +35,15 @@
@case(App\Enums\BreederCivilty::elle()) @case(App\Enums\BreederCivilty::elle())
<p>Éleveuse de poules de Loué depuis {{$ageElevage}} ans</p> <p>Éleveuse de poules de Loué depuis {{$ageElevage}} ans</p>
@break @break
@case(App\Enums\BreederCivilty::il()) @case(App\Enums\BreederCivilty::il())
<p>Éleveur de poules de Loué depuis {{$ageElevage}} ans</p> <p>Éleveur de poules de Loué depuis {{$ageElevage}} ans</p>
@break @break
@case(App\Enums\BreederCivilty::elles()) @case(App\Enums\BreederCivilty::elles())
<p>Éleveuses de poules de Loué depuis {{$ageElevage}} ans</p> <p>Éleveuses de poules de Loué depuis {{$ageElevage}} ans</p>
@break @break
@case(App\Enums\BreederCivilty::ils()) @case(App\Enums\BreederCivilty::ils())
<p>Éleveurs de poules de Loué depuis {{$ageElevage}} ans</p> <p>Éleveurs de poules de Loué depuis {{$ageElevage}} ans</p>
@break @break
@default @default
<p>Éleveur(se) de poules de Loué depuis {{$ageElevage}} ans</p> <p>Éleveur(se) de poules de Loué depuis {{$ageElevage}} ans</p>
@endswitch @endswitch

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page elevage"> <div class="sub-page elevage">
<header> <header>
<a href="{{route('egg.infoElevage', ['id' => request()->id])}}"> <a href="{{route('egg.infoElevage', ['id' => request()->id])}}">
@ -17,8 +17,7 @@
<div class="vs-oeufs"> <div class="vs-oeufs">
<p class="title">Quelle différence entre un œuf<br>plein air et un œuf fermier IGP<br>Label Rouge de Loué ?</p> <p class="title">Quelle différence entre un œuf<br>plein air et un œuf fermier IGP<br>Label Rouge de Loué ?</p>
<div class="items"> <div class="items">
<p class="description">Même si les œufs Plein Air et les œufs Label Rouge de Loué bénéficient du même code <p class="description">Même si les œufs Plein Air et les œufs Label Rouge de Loué bénéficient du même code d’identification (code 1), de grandes différences existent :</p>
d’identification (code 1), de grandes différences existent :</p>
<div class="tables"> <div class="tables">
<div class="table"> <div class="table">
<table> <table>
@ -39,7 +38,7 @@
</tr> </tr>
<tr> <tr>
<td><img src="{{ asset('assets/images/egg/ble.png') }}" alt="Céréales"></td> <td><img src="{{ asset('assets/images/egg/ble.png') }}" alt="Céréales"></td>
<td>65 % de céréales locales minimum</td> <td>65 % de céréales locales minimu, sans OGM (< 0,9%) </td>
<td>Aucune garantie sur l’alimentation des poules</td> <td>Aucune garantie sur l’alimentation des poules</td>
</tr> </tr>
<tr> <tr>

View file

@ -5,8 +5,8 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="{{ Session::get('subColor') }} block"> <div class="block {{ Session::get('subColor') }}">
<div class="header"> <div class="header">
<p>Vous venez de scanner :</p> <p>Vous venez de scanner :</p>
<p>Œufs fermiers de Loué de <br> poules élevées en liberté</p> <p>Œufs fermiers de Loué de <br> poules élevées en liberté</p>
@ -14,7 +14,7 @@
</div> </div>
<div class="body"> <div class="body">
@if($dataVisuel) @if($dataVisuel)
<img class="box_img" src="{{ asset($dataVisuel->path) }}" alt="œufs"> <img src="{{ asset($dataVisuel->path) }}" alt="œufs" class="box_img">
@endif @endif
<div class="date"> <div class="date">
<p>Ces œufs ont été pondus le :</p> <p>Ces œufs ont été pondus le :</p>
@ -25,18 +25,16 @@
<p>{{ Carbon\Carbon::parse($dcr)->format('d/m/Y') }}</p> <p>{{ Carbon\Carbon::parse($dcr)->format('d/m/Y') }}</p>
</div> </div>
@if (!$dcrGood) @if (!$dcrGood)
<p class="message red"><span>ATTENTION !</span><br>La date de consommation recommandée (DCR) est dépassée. Vos œufs ne <p class="message red"><span>ATTENTION !</span><br>La date de consommation recommandée (DCR) est dépassée. Vos œufs ne doivent plus être consommés.</p>
doivent plus être consommés.</p> <p class="message blue"><span>BONNE NOUVELLE !</span><br>Vous pouvez toujours connaître toute l'origine de vos œufs en parcourant cette page.</p>
<p class="message blue"><span>BONNE NOUVELLE !</span><br>Vous pouvez toujours connaître toute l'origine de vos œufs en
parcourant cette page.</p>
@endif @endif
<div class="labels"> <div class="labels">
<a class="lr" href="{{ route('egg.labelRouge', ['id' => request()->id]) }}"> <a href="{{route('egg.labelRouge', ['id' => request()->id])}}" class="lr">
<img class="lr" src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge"> <img src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge" class="lr">
</a> </a>
<a class="bio" href="{{ route('egg.labelBio', ['id' => request()->id]) }}"> <a href="{{route('egg.labelBio', ['id' => request()->id])}}" class="bio">
<img class="bio" src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique"> <img src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique" class="bio">
</a> </a>
<a href="{{route('egg.labelIGP', ['id' => request()->id])}}"> <a href="{{route('egg.labelIGP', ['id' => request()->id])}}">
<img src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée"> <img src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée">
@ -54,7 +52,7 @@
<p>Les Labels et les Certifications</p> <p>Les Labels et les Certifications</p>
</div> </div>
</div> </div>
<a class="btn-discover" href="#content"><b><i>Tout connaître de <br> l’origine de mes œufs</i></b></a> <a href="#content" class="btn-discover"><b><i>Tout connaître de <br> l’origine de mes œufs</i></b></a>
@if (!$multiple) @if (!$multiple)
<div class="elevage" id="content"> <div class="elevage" id="content">
@ -68,23 +66,21 @@
@endif @endif
<div class="title"> <div class="title">
<p>Ces poules ont été élevées en liberté</p> <p>Ces poules ont été élevées en liberté</p>
<a href="{{ route('egg.infoElevage', ['id' => $id]) }}"><img <a href="{{route('egg.infoElevage', ['id' => $id])}}"><img src="{{ asset('assets/images/egg/picto_info_elevage.png') }}" alt="Info"></a>
src="{{ asset('assets/images/egg/picto_info_elevage.png') }}" alt="Info"></a>
</div> </div>
<div class="details"> <div class="details">
<p class="by"> <p class="by">
<span class="green">PAR : </span> {{$eleveurs[0]->firstname}} {{$eleveurs[0]->lastname}} <br> <span class="green">PAR : </span> {{$eleveurs[0]->firstname}} {{$eleveurs[0]->lastname}} <br>
<span class="green">À : </span> {{$eleveurs[0]->city}} ({{$eleveurs[0]->postcode}}) <span class="green">À : </span> {{$eleveurs[0]->city}} ({{$eleveurs[0]->postcode}})
</p> </p>
@if (isset($eleveurs[0]->path_picture_1) && $eleveurs[0]->path_picture_1 != '') @if (isset($eleveurs[0]->path_photo1) && $eleveurs[0]->path_photo1 != '')
<img class="img-fluid" src="{{ asset($eleveurs[0]->path_picture_1) }}" alt="Élevage"> <img class="img-fluid" src="{{ asset($eleveurs[0]->path_photo1) }}" alt="Élevage">
@else @else
<img class="img-fluid" src="{{ asset('assets/images/egg/generique.jpg') }}" alt="Élevage"> <img class="img-fluid" src="{{ asset('assets/images/egg/generique.jpg') }}" alt="Élevage">
@endif @endif
<div class="bottom one"> <div class="bottom one">
@if ($eleveurs[0]->questions) @if ($eleveurs[0]->questions)
<a href="{{ route('egg.portraitEleveur', ['id' => $id, 'eleveurId' => $eleveurs[0]->cafel_code]) }}">en savoir <a href="{{route('egg.portraitEleveur', ['id' => $id, 'eleveurId' => $eleveurs[0]->cafel_code])}}">en savoir + sur</a>
+ sur</a>
@endif @endif
<p>{{$eleveurs[0]->firstname}} {{$eleveurs[0]->lastname}}</p> <p>{{$eleveurs[0]->firstname}} {{$eleveurs[0]->lastname}}</p>
</div> </div>
@ -104,8 +100,7 @@
<div class="title"> <div class="title">
<p>Ces poules ont été élevées en liberté</p> <p>Ces poules ont été élevées en liberté</p>
<a href="{{ route('egg.infoElevage', ['id' => $id]) }}"><img <a href="{{ route('egg.infoElevage', ['id' => $id]) }}"><img src="{{ asset('assets/images/egg/picto_info_elevage.png') }}" alt="Info"></a>
src="{{ asset('assets/images/egg/picto_info_elevage.png') }}" alt="Info"></a>
</div> </div>
<div class="details"> <div class="details">
<p class="by"> <p class="by">
@ -119,12 +114,9 @@
<div class="bottom multiple"> <div class="bottom multiple">
@foreach ($eleveurs as $eleveur) @foreach ($eleveurs as $eleveur)
@if ($eleveur->questions) @if ($eleveur->questions)
<a href="{{ route('egg.portraitEleveur', ['id' => $id, 'eleveurId' => $eleveur->cafel_code]) }}">{{ $eleveur->firstname }} <a href="{{ route('egg.portraitEleveur', ['id' => $id, 'eleveurId' => $eleveur->cafel_code]) }}">{{ $eleveur->firstname }} {{$eleveur->lastname}} <br> <span class="light">{{$eleveur->city}} ({{$eleveur->postcode}})</span></a>
{{ $eleveur->lastname }} <br> <span class="light">{{ $eleveur->city }}
({{ $eleveur->postcode }})</span></a>
@else @else
<div class="disabled">{{ $eleveur->firstname }} {{ $eleveur->lastname }} <br> <span <div class="disabled">{{$eleveur->firstname}} {{$eleveur->lastname}} <br> <span class="light">{{$eleveur->city}} ({{$eleveur->postcode}})</span></div>
class="light">{{ $eleveur->city }} ({{ $eleveur->postcode }})</span></div>
@endif @endif
@endforeach @endforeach
</div> </div>
@ -136,14 +128,13 @@
<p class="title">Alimentation</p> <p class="title">Alimentation</p>
<div class="box"> <div class="box">
<div class="title"> <div class="title">
<p>Poules nourries à base de céréales locales (65% minimum)< /p> <p>Poules nourries à base de céréales locales (65% minimum) garanties sans OGM (<0,9%)</p>
</div> </div>
<p class="infos"><span class="yellow">Usine d'aliment : </span><br>ALIFEL, 72540 Loué</p> <p class="infos"><span class="yellow">Usine d'aliment : </span><br>ALIFEL, 72540 Loué</p>
@if (isset($aliment) && !empty($aliment)) @if (isset($aliment) && !empty($aliment))
<p class="infos"><span class="yellow">Dernière livraison : <p class="infos"><span class="yellow">Dernière livraison : </span><br>{{ Carbon\Carbon::parse($aliment->date_livraison)->format('d/m/Y') }}</p>
</span><br>{{ Carbon\Carbon::parse($aliment->date_livraison)->format('d/m/Y') }}</p>
@endif @endif
<img class="alifel img-fluid" src="{{ asset('assets/images/parts/ALIFEL.jpg') }}" alt="Alifel"> <img src="{{ asset('assets/images/parts/ALIFEL.jpg') }}" alt="Alifel" class="alifel img-fluid">
<div class="bottom"> <div class="bottom">
<a href="{{route('egg.infoAlim', ['id' => $id])}}">en savoir +</a> <a href="{{route('egg.infoAlim', ['id' => $id])}}">en savoir +</a>
</div> </div>
@ -154,8 +145,7 @@
<div class="box"> <div class="box">
<p class="date">{{ Carbon\Carbon::parse($date_emballage)->format('d/m/Y') }}</p> <p class="date">{{ Carbon\Carbon::parse($date_emballage)->format('d/m/Y') }}</p>
<p class="lieu"><span class="title">LIEU : </span>LA BAZOGE (72650)</p> <p class="lieu"><span class="title">LIEU : </span>LA BAZOGE (72650)</p>
<p class="description">Chaque œuf est vérifié et trié individuellement, puis emballé dans des boîtes recyclées et recyclables. <p class="description">Chaque œuf est vérifié et trié individuellement, puis emballé dans des boîtes recyclées et recyclables.</p>
</p>
<img src="{{ asset('assets/images/egg/Photo-LOEUF.jpg') }}" alt="Logo"> <img src="{{ asset('assets/images/egg/Photo-LOEUF.jpg') }}" alt="Logo">
<div class="bottom"> <div class="bottom">
<a href="{{route('egg.infoEmballage', ['id' => $id])}}">en savoir + sur</a> <a href="{{route('egg.infoEmballage', ['id' => $id])}}">en savoir + sur</a>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page elevage"> <div class="sub-page elevage">
<header> <header>
<a href="{{route('egg.FrontPage', ['id' => request()->id])}}"> <a href="{{route('egg.FrontPage', ['id' => request()->id])}}">
@ -18,19 +18,17 @@
<p class="title">Infos pratiques</p> <p class="title">Infos pratiques</p>
<div class="items"> <div class="items">
<div class="item"> <div class="item">
<img class="top-img" src="{{ asset('assets/images/egg/infos-elevages-1.jpg') }}" alt="Élevage en liberté"> <img src="{{ asset('assets/images/egg/infos-elevages-1.jpg') }}" alt="Élevage en liberté" class="top-img">
<div class="text"> <div class="text">
<p>Un mode d'élevage en liberté, qu'est-ce que cela signifie ?</p> <p>Un mode d'élevage en liberté, qu'est-ce que cela signifie ?</p>
<a href="{{ route('egg.infoElevageLib', ['id' => request()->id]) }}"><img <a href="{{ route('egg.infoElevageLib', ['id' => request()->id]) }}"><img src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<img class="top-img" src="{{ asset('assets/images/egg/infos-elevages-2.jpg') }}" alt="Différence entre les œufs"> <img src="{{ asset('assets/images/egg/infos-elevages-2.jpg') }}" alt="Différence entre les œufs" class="top-img">
<div class="text"> <div class="text">
<p>Quelle différence entre un œuf plein air et un œuf fermier IGP Label Rouge de Loué ?</p> <p>Quelle différence entre un œuf plein air et un œuf fermier IGP Label Rouge de Loué ?</p>
<a href="{{ route('egg.infoDiffOeufs', ['id' => request()->id]) }}"><img <a href="{{ route('egg.infoDiffOeufs', ['id' => request()->id]) }}"><img src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page {{ Session::get('subColor') }}"> <div class="sub-page {{ Session::get('subColor') }}">
<header> <header>
<a href="{{route('egg.labelCertif', ['id' => request()->id])}}"> <a href="{{route('egg.labelCertif', ['id' => request()->id])}}">
@ -17,12 +17,11 @@
<div class="labels-and-certifs"> <div class="labels-and-certifs">
<div class="label-fermiers"> <div class="label-fermiers">
<div class="text-center"> <div class="text-center">
<img class="logo" src="{{ asset('assets/images/labels/fermiers.png') }}" alt="Fermiers"> <img src="{{ asset('assets/images/labels/fermiers.png') }}" alt="Fermiers" class="logo">
</div> </div>
<p class="title">Qu’est-ce-qu’un œuf «fermier» ?</p> <p class="title">Qu’est-ce-qu’un œuf «fermier» ?</p>
<div class="box"> <div class="box">
<p>Le terme « fermier » va bien au-delà d’un mot inscrit sur une boîte. C’est un décret délibéré qui doit répondre à <p>Le terme « fermier » va bien au-delà d’un mot inscrit sur une boîte. C’est un décret délibéré qui doit répondre à un cahier des charges bien précis. Pour en bénéficier, 5 critères sont à respecter :</p>
un cahier des charges bien précis. Pour en bénéficier, 5 critères sont à respecter :</p>
<div class="items"> <div class="items">
<div class="item"> <div class="item">
<img src="{{ asset('assets/images/egg/poule.png') }}" alt="Poule"> <img src="{{ asset('assets/images/egg/poule.png') }}" alt="Poule">

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page {{ Session::get('subColor') }}"> <div class="sub-page {{ Session::get('subColor') }}">
<header> <header>
<a href="{{route('egg.labelCertif', ['id' => request()->id])}}"> <a href="{{route('egg.labelCertif', ['id' => request()->id])}}">
@ -17,15 +17,13 @@
<div class="labels-and-certifs"> <div class="labels-and-certifs">
<div class="label-igp"> <div class="label-igp">
<div class="text-center"> <div class="text-center">
<img class="logo" src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée"> <img src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée" class="logo">
</div> </div>
<p class="title">Une filière locale encadrée par l’Indication Géographique Protégée (IGP)</p> <p class="title">Une filière locale encadrée par l’Indication Géographique Protégée (IGP)</p>
<div class="box"> <div class="box">
<p>Les œufs de Loué sont les seuls à bénéficier d’une Indication Géographique Protégée (IGP). Celle-ci détermine une <p>Les œufs de Loué sont les seuls à bénéficier d’une Indication Géographique Protégée (IGP). Celle-ci détermine une zone d’élevage délimitée.
zone d’élevage délimitée.
<br><br> <br><br>
Pour les œufs et les volailles de Loué, l’IGP se concentre dans un périmètre de 150 km autour du village de Loué Pour les œufs et les volailles de Loué, l’IGP se concentre dans un périmètre de 150 km autour du village de Loué situé en Sarthe (72).
situé en Sarthe (72).
</p> </p>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page {{ Session::get('subColor') }}"> <div class="sub-page {{ Session::get('subColor') }}">
<header> <header>
<a href="{{route('egg.labelCertif', ['id' => request()->id ])}}"> <a href="{{route('egg.labelCertif', ['id' => request()->id ])}}">
@ -17,23 +17,19 @@
<div class="labels-and-certifs"> <div class="labels-and-certifs">
<div class="label-bio"> <div class="label-bio">
<div class="text-center"> <div class="text-center">
<img class="logo" src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique"> <img src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique" class="logo">
</div> </div>
<p class="title">Qu'est-ce qu'un œuf BIO ?</p> <p class="title">Qu'est-ce qu'un œuf BIO ?</p>
<div class="box"> <div class="box">
<p>Depuis 1994, les Fermiers de Loué ont décidé de s’engager dans l’élevage biologique. Le Label Agriculture <p>Depuis 1994, les Fermiers de Loué ont décidé de s’engager dans l’élevage biologique. Le Label Agriculture Biologique garantit un mode de production fondé sur la non-utilisation de produits chimiques de synthèse et d’OGM.
Biologique garantit un mode de production fondé sur la non-utilisation de produits chimiques de synthèse.
<br> <br>
Ce Label permet aux Fermiers de Loué d’aller encore plus loin dans le respect de l’environnement et du bien-être Ce Label permet aux Fermiers de Loué d’aller encore plus loin dans le respect de l’environnement et du bien-être animal.
animal.
</p>
<p>Les œufs de Loué sont exclusivement des œufs de poules élevées en liberté, Label Rouge (code 1) ou Bio (code 0).
</p> </p>
<p>Les œufs de Loué sont exclusivement des œufs de poules élevées en liberté, Label Rouge (code 1) ou Bio (code 0).</p>
</div> </div>
<div class="mt-5"> <div class="mt-5">
<div class="video youtube ratio ratio-16x9" data-authorize="0"> <div class="video youtube ratio ratio-16x9" data-authorize="0">
<iframe data-src="https://www.youtube.com/embed/IeTVms72rJw?controls=0" src="/frame/youtube" width="100%" <iframe src="/frame/youtube" data-src="https://www.youtube.com/embed/IeTVms72rJw?controls=0" width="100%" height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page {{ Session::get('subColor') }}"> <div class="sub-page {{ Session::get('subColor') }}">
<header> <header>
<a href="{{route('egg.labelCertif', ['id' => request()->id ])}}"> <a href="{{route('egg.labelCertif', ['id' => request()->id ])}}">
@ -17,20 +17,16 @@
<div class="labels-and-certifs"> <div class="labels-and-certifs">
<div class="label-rouge"> <div class="label-rouge">
<div class="text-center"> <div class="text-center">
<img class="logo" src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge"> <img src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge" class="logo">
</div> </div>
<p class="title">Le Label Rouge, un Label de qualité</p> <p class="title">Le Label Rouge, un Label de qualité</p>
<div class="box"> <div class="box">
<p>Les produits certifiés Label Rouge répondent à un cahier des charges strict, garantissant un niveau de qualité <p>Les produits certifiés Label Rouge répondent à un cahier des charges strict, garantissant un niveau de qualité supérieur. Pour y prétendre, un organisme certificateur indépendant se rend chez les éleveurs pour les auditer.</p>
supérieur. Pour y prétendre, un organisme certificateur indépendant se rend chez les éleveurs pour les auditer. <p>Les œufs de Loué sont exclusivement des œufs de poules élevées en liberté, Label Rouge (code 1) ou Bio (code 0).</p>
</p>
<p>Les œufs de Loué sont exclusivement des œufs de poules élevées en liberté, Label Rouge (code 1) ou Bio (code 0).
</p>
</div> </div>
<div class="mt-5"> <div class="mt-5">
<div class="video youtube ratio ratio-16x9" data-authorize="0"> <div class="video youtube ratio ratio-16x9" data-authorize="0">
<iframe data-src="https://www.youtube.com/embed/eXyg-eRPpSw?controls=0" src="/frame/youtube" width="100%" <iframe src="/frame/youtube" data-src="https://www.youtube.com/embed/eXyg-eRPpSw?controls=0" width="100%" height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page {{ Session::get('subColor') }}"> <div class="sub-page {{ Session::get('subColor') }}">
<header> <header>
<a href="{{route('egg.labelCertif', ['id' => request()->id])}}"> <a href="{{route('egg.labelCertif', ['id' => request()->id])}}">
@ -17,19 +17,15 @@
<div class="labels-and-certifs"> <div class="labels-and-certifs">
<div class="label-nutriscore"> <div class="label-nutriscore">
<div class="text-center"> <div class="text-center">
<img class="logo" src="{{ asset('assets/images/labels/nutriscore.png') }}" alt="Nutriscore"> <img src="{{ asset('assets/images/labels/nutriscore.png') }}" alt="Nutriscore" class="logo">
</div> </div>
<p class="title">Les œufs de Loué sont notés A au Nutri-Score</p> <p class="title">Les œufs de Loué sont notés A au Nutri-Score</p>
<div class="box"> <div class="box">
<p>Conçu dans le cadre du Programme National Nutrition santé, le logo Nutri-Score est le logo officiel de <p>Conçu dans le cadre du Programme National Nutrition santé, le logo Nutri-Score est le logo officiel de l’étiquetage nutritionnel en France. Diététiques, riches en bons nutriments et reconnus meilleure source naturelle de protéines, les œufs fermiers de Loué (Label rouge ou Bio) obtiennent la lettre A : la notation la plus favorable sur le plan nutritionnel.</p>
l’étiquetage nutritionnel en France. Diététiques, riches en bons nutriments et reconnus meilleure source
naturelle de protéines, les œufs fermiers de Loué (Label rouge ou Bio) obtiennent la lettre A : la notation la
plus favorable sur le plan nutritionnel.</p>
</div> </div>
<div class="mt-5"> <div class="mt-5">
<div class="video youtube ratio ratio-16x9" data-authorize="0"> <div class="video youtube ratio ratio-16x9" data-authorize="0">
<iframe data-src="https://www.youtube.com/embed/D9rFCgZa9zs?controls=0" src="/frame/youtube" width="100%" <iframe src="/frame/youtube" data-src="https://www.youtube.com/embed/D9rFCgZa9zs?controls=0" width="100%" height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="sub-page {{ Session::get('subColor') }}"> <div class="sub-page {{ Session::get('subColor') }}">
<header> <header>
<a href="{{route('egg.FrontPage', ['id' => request()->id])}}"> <a href="{{route('egg.FrontPage', ['id' => request()->id])}}">
@ -17,30 +17,30 @@
<div class="labels-and-certifs"> <div class="labels-and-certifs">
<div class="menu"> <div class="menu">
<p class="title">Mieux comprendre les Labels et les mentions présentes sur les boites</p> <p class="title">Mieux comprendre les Labels et les mentions présentes sur les boites</p>
<a class="item bio" href="{{ route('egg.labelBio', ['id' => request()->id]) }}"> <a href="{{ route('egg.labelBio', ['id' => request()->id]) }}" class="item bio">
<img src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique"> <img src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique">
<p class="text-center">Qu'est-ce qu'un œuf BIO ?</p> <p class="text-center">Qu'est-ce qu'un œuf BIO ?</p>
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"> <img src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
</a> </a>
<a class="item lr" href="{{ route('egg.labelRouge', ['id' => request()->id]) }}"> <a href="{{ route('egg.labelRouge', ['id' => request()->id]) }}" class="item lr">
<img src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge"> <img src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge">
<p class="text-center">Le Label Rouge, un<br>Label de qualité</p> <p class="text-center">Le Label Rouge, un<br>Label de qualité</p>
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"> <img src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
</a> </a>
<a class="item" href="{{ route('egg.labelIGP', ['id' => request()->id]) }}"> <a href="{{ route('egg.labelIGP', ['id' => request()->id]) }}" class="item">
<img src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée"> <img src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée">
<p class="text-center">Une fillière locale<br>encadrée par l'Indication<br>Géographique Protégée<br>(IGP)</p> <p class="text-center">Une fillière locale<br>encadrée par l'Indication<br>Géographique Protégée<br>(IGP)</p>
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"> <img src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
</a> </a>
<a class="item" href="{{ route('egg.labelNutriscore', ['id' => request()->id]) }}"> <a href="{{ route('egg.labelNutriscore', ['id' => request()->id]) }}" class="item">
<img src="{{ asset('assets/images/labels/nutriscore.png') }}" alt="Nutriscore"> <img src="{{ asset('assets/images/labels/nutriscore.png') }}" alt="Nutriscore">
<p class="text-center">Les œufs de Loué sont<br>notés A au Nutri-Score</p> <p class="text-center">Les œufs de Loué sont<br>notés A au Nutri-Score</p>
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"> <img src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
</a> </a>
<a class="item" href="{{ route('egg.labelFermiers', ['id' => request()->id]) }}"> <a href="{{ route('egg.labelFermiers', ['id' => request()->id]) }}" class="item">
<img src="{{ asset('assets/images/labels/fermiers.png') }}" alt="Fermiers"> <img src="{{ asset('assets/images/labels/fermiers.png') }}" alt="Fermiers">
<p class="text-center">Qu'est-ce-qu'un œuf<br>"fermier" ?</p> <p class="text-center">Qu'est-ce-qu'un œuf<br>"fermier" ?</p>
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"> <img src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
</a> </a>
</div> </div>
</div> </div>

View file

@ -5,8 +5,8 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="blue block"> <div class="block blue">
<div class="header"> <div class="header">
<p></p> <p></p>
<p>Erreur</p> <p>Erreur</p>

View file

@ -5,7 +5,7 @@
@section('breadcrumb', request()->route()->getName()) @section('breadcrumb', request()->route()->getName())
@section('content') @section('content')
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])> <div class="container oldEgg">
<div class="block-fill"> <div class="block-fill">
<div class="header"> <div class="header">
<p><span>Tout connaître</span><br>de l’origine de mes œufs</p> <p><span>Tout connaître</span><br>de l’origine de mes œufs</p>
@ -16,11 +16,11 @@
@csrf @csrf
<div class="item"> <div class="item">
<label>Code du producteur <span>A</span> :</label> <label>Code du producteur <span>A</span> :</label>
<input name="code" type="text" placeholder="Ex. 1FRJBB01" required> <input type="text" name="code" placeholder="Ex. 1FRJBB01" required>
</div> </div>
<div class="item"> <div class="item">
<label>Date de consommation<br>recommandée (DCR) <span>B</span> :</label> <label>Date de consommation<br>recommandée (DCR) <span>B</span> :</label>
<input name="date" type="text" placeholder="JJ/MM" pattern="[0-9]{2}/[0-9]{2}" required> <input type="text" name="date" placeholder="JJ/MM" pattern="[0-9]{2}/[0-9]{2}" required>
</div> </div>
<input type="submit" value="Valider"> <input type="submit" value="Valider">

View file

@ -104,5 +104,4 @@ Route::fallback(function () {
if (request()->getHost() === config('app.egg_domain')) { if (request()->getHost() === config('app.egg_domain')) {
return redirect(config('app.url')); return redirect(config('app.url'));
} }
abort(404);
}); });