Compare commits
57 commits
postProdFi
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
107bb774f6 | ||
|
|
24d473ddab | ||
|
|
94435d9820 | ||
|
|
e5fdd3d345 | ||
|
|
e5dc2b82b5 | ||
|
|
7efde8651f | ||
|
|
3255a089c4 | ||
|
|
3f82a92221 | ||
|
|
af8a18bb8f | ||
|
|
6aca5dd3d7 | ||
|
|
64c8583dfc | ||
|
|
1c292023ea | ||
|
|
cfe7e1a778 | ||
|
|
e07780af67 | ||
|
|
729127fa28 | ||
|
|
ede3aa889c | ||
|
|
d640238082 | ||
|
|
3a49f0543c | ||
|
|
43a89a03a0 | ||
|
|
9e3cde59dd | ||
|
|
a549f5a8a5 | ||
|
|
ddb9c3fd59 | ||
|
|
c2d70b841a | ||
|
|
f5e5bc2362 | ||
|
|
c43f5220e1 | ||
|
|
608d420062 | ||
|
|
bebb0b5026 | ||
|
|
c56aed023d | ||
|
|
ccf2fde716 | ||
|
|
55012e8985 | ||
|
|
714df38f4b | ||
|
|
f58b55efbf | ||
|
|
7fd2068e77 | ||
|
|
61acab1cb1 | ||
|
|
7d60149a45 | ||
|
|
47d2f3e5a7 | ||
|
|
4affcef601 | ||
|
|
bd8da4cbe7 | ||
|
|
db03f10b97 | ||
|
|
e38c3b4e4c | ||
|
|
c79d0d5137 | ||
|
|
9cba6891ef | ||
|
|
20e4084361 | ||
|
|
21aeaa34c0 | ||
|
|
cd0f1fdd76 | ||
|
|
ba4aa3e001 | ||
|
|
e0aefec165 | ||
|
|
746cc4d8eb | ||
|
|
c9c7752d2f | ||
|
|
1266665702 | ||
|
|
60159fdfb9 | ||
|
|
df4f4d360e | ||
|
|
0c96300587 | ||
|
|
8a56fa108e | ||
|
|
3f08a381ff | ||
|
|
2a1d095e71 | ||
|
|
c13ef55eee |
33 changed files with 5150 additions and 3631 deletions
|
|
@ -3,6 +3,7 @@ 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
|
||||||
|
|
||||||
|
|
@ -37,7 +38,6 @@ 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,6 +45,9 @@ 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=
|
||||||
|
|
|
||||||
|
|
@ -1,75 +1,12 @@
|
||||||
|
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:
|
||||||
- Security
|
- lint
|
||||||
- CodingStandards
|
- security
|
||||||
- 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
|
|
||||||
|
|
||||||
|
|
|
||||||
11
.gitlab/issue_templates/bug.md
Normal file
11
.gitlab/issue_templates/bug.md
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
## Comportement constaté
|
||||||
|
|
||||||
|
|
||||||
|
## Comportement attendu
|
||||||
|
|
||||||
|
|
||||||
|
## Solution envisagée
|
||||||
|
|
||||||
|
|
||||||
|
## Étapes pour la reproduction du bug
|
||||||
|
*
|
||||||
7
.gitlab/issue_templates/feature.md
Normal file
7
.gitlab/issue_templates/feature.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
## Présentation du besoin
|
||||||
|
|
||||||
|
|
||||||
|
## Implémentation
|
||||||
|
|
||||||
|
|
||||||
|
## Maquettes, documentations...
|
||||||
|
|
@ -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()->everySixHours();
|
$schedule->job(CafelFoodJob::class, 'cafel')->onOneServer()->dailyAt('22h30');
|
||||||
$schedule->job(CafelBeaVolJob::class, 'cafel')->onOneServer()->everySixHours();
|
$schedule->job(CafelBeaVolJob::class, 'cafel')->onOneServer()->dailyAt('22h45');
|
||||||
$schedule->job(CafelMepEggJob::class, 'cafel')->onOneServer()->everySixHours();
|
$schedule->job(CafelMepEggJob::class, 'cafel')->onOneServer()->dailyAt('23h00');
|
||||||
$schedule->job(CafelEggBreederJob::class, 'cafel')->onOneServer()->everySixHours();
|
$schedule->job(CafelEggBreederJob::class, 'cafel')->onOneServer()->dailyAt('23h15');
|
||||||
$schedule->job(CafelPoultryBreederJob::class, 'cafel')->onOneServer()->everySixHours();
|
$schedule->job(CafelPoultryBreederJob::class, 'cafel')->onOneServer()->dailyAt('23h30');
|
||||||
|
|
||||||
$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');
|
||||||
|
|
|
||||||
|
|
@ -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 Throwable;
|
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||||
use Kwaadpepper\ExceptionHandler\Exceptions\ExceptionHandler;
|
use Sentry\Laravel\Integration;
|
||||||
|
|
||||||
class Handler extends ExceptionHandler
|
class Handler extends ExceptionHandler
|
||||||
{
|
{
|
||||||
|
|
@ -27,18 +27,19 @@ class Handler extends ExceptionHandler
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Report or log an exception.
|
* Register the exception handling callbacks for the application.
|
||||||
*
|
*
|
||||||
* @param \Throwable $exception
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function report(Throwable $exception)
|
public function register()
|
||||||
{
|
{
|
||||||
if ($exception instanceof CafelApiImageFetchException) {
|
$this->reportable(function (\Throwable $e) {
|
||||||
$this->reportCafelApiImageErrorException($exception);
|
if ($e instanceof CafelApiImageFetchException) {
|
||||||
|
$this->reportCafelApiImageErrorException($e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parent::report($exception);
|
Integration::captureUnhandledException($e);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
190
app/Lib/ExceptionsHelper.php
Normal file
190
app/Lib/ExceptionsHelper.php
Normal file
|
|
@ -0,0 +1,190 @@
|
||||||
|
<?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;
|
||||||
|
}
|
||||||
|
}
|
||||||
26
app/Providers/ViewServiceProvider.php
Normal file
26
app/Providers/ViewServiceProvider.php
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?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')));
|
||||||
|
})());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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.1",
|
"ldc/web-admin-secure-laravel": "^1.0",
|
||||||
"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,7 +45,10 @@
|
||||||
"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": {
|
||||||
|
|
@ -79,9 +82,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"repositories": {
|
"repositories": {
|
||||||
"gitlab.com/16669037": {
|
"lab.s-web.fr": {
|
||||||
"type": "composer",
|
"type": "composer",
|
||||||
"url": "https://gitlab.com/api/v4/group/16669037/-/packages/composer/packages.json"
|
"url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2197
composer.lock
generated
2197
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -177,6 +177,7 @@ 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,
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
<?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')),
|
|
||||||
];
|
|
||||||
6
config/modal.php
Normal file
6
config/modal.php
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'terreActionStartDate' => env('TERRE_ACTION_START_DATE'),
|
||||||
|
'terreActionEndDate' => env('TERRE_ACTION_END_DATE')
|
||||||
|
];
|
||||||
62
config/sentry.php
Normal file
62
config/sentry.php
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
<?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'],
|
||||||
|
|
||||||
|
];
|
||||||
5134
package-lock.json
generated
5134
package-lock.json
generated
File diff suppressed because it is too large
Load diff
2
resources/js/alert.js
vendored
2
resources/js/alert.js
vendored
|
|
@ -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://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>',
|
confirmButtonText: '<a href="https://action-reboisement.loue.fr" target="_blank">Je valide mon achat</a>',
|
||||||
confirmButtonColor: '#005621',
|
confirmButtonColor: '#005621',
|
||||||
showCloseButton: true,
|
showCloseButton: true,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
21
resources/sass/front.scss
vendored
21
resources/sass/front.scss
vendored
|
|
@ -1,19 +1,19 @@
|
||||||
// Variables
|
// 1. Include new custom variables
|
||||||
@import 'variables';
|
@import 'variables';
|
||||||
|
|
||||||
|
|
||||||
// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
|
// 2. 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";
|
||||||
|
|
||||||
// 4. Include any optional Bootstrap components as you like
|
// 5. Optionally include any other parts as needed
|
||||||
@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,6 +27,9 @@
|
||||||
@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;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,15 +18,17 @@
|
||||||
<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 src="{{ asset('assets/images/parts/alimentation-lr.jpg') }}" alt="Alimentation Label Rouge" class="type active">
|
<img class="type active" src="{{ asset('assets/images/parts/alimentation-lr.jpg') }}" alt="Alimentation Label Rouge">
|
||||||
@else
|
@else
|
||||||
<img src="{{ asset('assets/images/parts/alimentation-bio.jpg') }}" alt="Alimentation Bio" class="type active">
|
<img class="type active" src="{{ asset('assets/images/parts/alimentation-bio.jpg') }}" alt="Alimentation Bio">
|
||||||
@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 Fermiers de Loué, ALIFEL, pour les transformer en alimentation pour poules, qui sera ensuite retournée à l’éleveur.</p>
|
<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
|
||||||
<img src="{{ asset('assets/images/parts/circuit_alimentation.png') }}" alt="Circuit Alimentation" class="circuit">
|
Fermiers de Loué, ALIFEL, pour les transformer en alimentation pour poules, qui sera ensuite retournée à l’éleveur.
|
||||||
|
</p>
|
||||||
|
<img class="circuit" src="{{ asset('assets/images/parts/circuit_alimentation.png') }}" alt="Circuit Alimentation">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,8 +16,10 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="details-alimentation">
|
<div class="details-alimentation">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<img src="{{ asset('assets/images/egg/LOGO_LOEUF.png') }}" alt="Logo l'oeuf" class="oeuf">
|
<img class="oeuf" src="{{ asset('assets/images/egg/LOGO_LOEUF.png') }}" alt="Logo l'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 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>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,7 +18,9 @@
|
||||||
<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 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>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,15 +35,19 @@
|
||||||
@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
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,7 +17,8 @@
|
||||||
<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 d’identification (code 1), de grandes différences existent :</p>
|
<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>
|
||||||
<div class="tables">
|
<div class="tables">
|
||||||
<div class="table">
|
<div class="table">
|
||||||
<table>
|
<table>
|
||||||
|
|
@ -38,7 +39,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 minimu, sans OGM (< 0,9%) </td>
|
<td>65 % de céréales locales minimum</td>
|
||||||
<td>Aucune garantie sur l’alimentation des poules</td>
|
<td>Aucune garantie sur l’alimentation des poules</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<div class="block {{ Session::get('subColor') }}">
|
<div class="{{ Session::get('subColor') }} block">
|
||||||
<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 src="{{ asset($dataVisuel->path) }}" alt="œufs" class="box_img">
|
<img class="box_img" src="{{ asset($dataVisuel->path) }}" alt="œufs">
|
||||||
@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,16 +25,18 @@
|
||||||
<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 doivent plus être consommés.</p>
|
<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 blue"><span>BONNE NOUVELLE !</span><br>Vous pouvez toujours connaître toute l'origine de vos œufs en parcourant cette page.</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>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<div class="labels">
|
<div class="labels">
|
||||||
<a href="{{route('egg.labelRouge', ['id' => request()->id])}}" class="lr">
|
<a class="lr" href="{{ route('egg.labelRouge', ['id' => request()->id]) }}">
|
||||||
<img src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge" class="lr">
|
<img class="lr" src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge">
|
||||||
</a>
|
</a>
|
||||||
<a href="{{route('egg.labelBio', ['id' => request()->id])}}" class="bio">
|
<a class="bio" href="{{ route('egg.labelBio', ['id' => request()->id]) }}">
|
||||||
<img src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique" class="bio">
|
<img class="bio" src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique">
|
||||||
</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">
|
||||||
|
|
@ -52,7 +54,7 @@
|
||||||
<p>Les Labels et les Certifications</p>
|
<p>Les Labels et les Certifications</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="#content" class="btn-discover"><b><i>Tout connaître de <br> l’origine de mes œufs</i></b></a>
|
<a class="btn-discover" href="#content"><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">
|
||||||
|
|
@ -66,21 +68,23 @@
|
||||||
@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 src="{{ asset('assets/images/egg/picto_info_elevage.png') }}" alt="Info"></a>
|
<a href="{{ route('egg.infoElevage', ['id' => $id]) }}"><img
|
||||||
|
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_photo1) && $eleveurs[0]->path_photo1 != '')
|
@if (isset($eleveurs[0]->path_picture_1) && $eleveurs[0]->path_picture_1 != '')
|
||||||
<img class="img-fluid" src="{{ asset($eleveurs[0]->path_photo1) }}" alt="Élevage">
|
<img class="img-fluid" src="{{ asset($eleveurs[0]->path_picture_1) }}" 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 + sur</a>
|
<a href="{{ route('egg.portraitEleveur', ['id' => $id, 'eleveurId' => $eleveurs[0]->cafel_code]) }}">en savoir
|
||||||
|
+ sur</a>
|
||||||
@endif
|
@endif
|
||||||
<p>{{ $eleveurs[0]->firstname }} {{ $eleveurs[0]->lastname }}</p>
|
<p>{{ $eleveurs[0]->firstname }} {{ $eleveurs[0]->lastname }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -100,7 +104,8 @@
|
||||||
|
|
||||||
<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 src="{{ asset('assets/images/egg/picto_info_elevage.png') }}" alt="Info"></a>
|
<a href="{{ route('egg.infoElevage', ['id' => $id]) }}"><img
|
||||||
|
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">
|
||||||
|
|
@ -114,9 +119,12 @@
|
||||||
<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 }} {{$eleveur->lastname}} <br> <span class="light">{{$eleveur->city}} ({{$eleveur->postcode}})</span></a>
|
<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>
|
||||||
@else
|
@else
|
||||||
<div class="disabled">{{$eleveur->firstname}} {{$eleveur->lastname}} <br> <span class="light">{{$eleveur->city}} ({{$eleveur->postcode}})</span></div>
|
<div class="disabled">{{ $eleveur->firstname }} {{ $eleveur->lastname }} <br> <span
|
||||||
|
class="light">{{ $eleveur->city }} ({{ $eleveur->postcode }})</span></div>
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -128,13 +136,14 @@
|
||||||
<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) garanties sans OGM (<0,9%)</p>
|
<p>Poules nourries à base de céréales locales (65% minimum)< /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 : </span><br>{{ Carbon\Carbon::parse($aliment->date_livraison)->format('d/m/Y') }}</p>
|
<p class="infos"><span class="yellow">Dernière livraison :
|
||||||
|
</span><br>{{ Carbon\Carbon::parse($aliment->date_livraison)->format('d/m/Y') }}</p>
|
||||||
@endif
|
@endif
|
||||||
<img src="{{ asset('assets/images/parts/ALIFEL.jpg') }}" alt="Alifel" class="alifel img-fluid">
|
<img class="alifel img-fluid" src="{{ asset('assets/images/parts/ALIFEL.jpg') }}" alt="Alifel">
|
||||||
<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>
|
||||||
|
|
@ -145,7 +154,8 @@
|
||||||
<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>
|
<p class="description">Chaque œuf est vérifié et trié individuellement, puis emballé dans des boîtes recyclées et recyclables.
|
||||||
|
</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>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,17 +18,19 @@
|
||||||
<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 src="{{ asset('assets/images/egg/infos-elevages-1.jpg') }}" alt="Élevage en liberté" class="top-img">
|
<img class="top-img" src="{{ asset('assets/images/egg/infos-elevages-1.jpg') }}" alt="Élevage en liberté">
|
||||||
<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 src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
|
<a href="{{ route('egg.infoElevageLib', ['id' => request()->id]) }}"><img
|
||||||
|
src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<img src="{{ asset('assets/images/egg/infos-elevages-2.jpg') }}" alt="Différence entre les œufs" class="top-img">
|
<img class="top-img" src="{{ asset('assets/images/egg/infos-elevages-2.jpg') }}" alt="Différence entre les œufs">
|
||||||
<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 src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
|
<a href="{{ route('egg.infoDiffOeufs', ['id' => request()->id]) }}"><img
|
||||||
|
src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +"></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,11 +17,12 @@
|
||||||
<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 src="{{ asset('assets/images/labels/fermiers.png') }}" alt="Fermiers" class="logo">
|
<img class="logo" src="{{ asset('assets/images/labels/fermiers.png') }}" alt="Fermiers">
|
||||||
</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 à un cahier des charges bien précis. Pour en bénéficier, 5 critères sont à respecter :</p>
|
<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>
|
||||||
<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">
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,13 +17,15 @@
|
||||||
<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 src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée" class="logo">
|
<img class="logo" src="{{ asset('assets/images/labels/IGP.png') }}" alt="Indication Géographique Protégée">
|
||||||
</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 zone d’élevage délimitée.
|
<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.
|
||||||
<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é situé en Sarthe (72).
|
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).
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,23 @@
|
||||||
<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 src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique" class="logo">
|
<img class="logo" src="{{ asset('assets/images/labels/AB.png') }}" alt="Agriculture Biologique">
|
||||||
</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 Biologique garantit un mode de production fondé sur la non-utilisation de produits chimiques de synthèse et d’OGM.
|
<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.
|
||||||
<br>
|
<br>
|
||||||
Ce Label permet aux Fermiers de Loué d’aller encore plus loin dans le respect de l’environnement et du bien-être animal.
|
Ce Label permet aux Fermiers de Loué d’aller encore plus loin dans le respect de l’environnement et du bien-être
|
||||||
|
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 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>
|
<iframe data-src="https://www.youtube.com/embed/IeTVms72rJw?controls=0" src="/frame/youtube" width="100%"
|
||||||
|
height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,16 +17,20 @@
|
||||||
<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 src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge" class="logo">
|
<img class="logo" src="{{ asset('assets/images/labels/LR.png') }}" alt="Label Rouge">
|
||||||
</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é supérieur. Pour y prétendre, un organisme certificateur indépendant se rend chez les éleveurs pour les auditer.</p>
|
<p>Les produits certifiés Label Rouge répondent à un cahier des charges strict, garantissant un niveau de qualité
|
||||||
<p>Les œufs de Loué sont exclusivement des œufs de poules élevées en liberté, Label Rouge (code 1) ou Bio (code 0).</p>
|
supérieur. Pour y prétendre, un organisme certificateur indépendant se rend chez les éleveurs pour les auditer.
|
||||||
|
</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 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>
|
<iframe data-src="https://www.youtube.com/embed/eXyg-eRPpSw?controls=0" src="/frame/youtube" width="100%"
|
||||||
|
height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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,19 @@
|
||||||
<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 src="{{ asset('assets/images/labels/nutriscore.png') }}" alt="Nutriscore" class="logo">
|
<img class="logo" src="{{ asset('assets/images/labels/nutriscore.png') }}" alt="Nutriscore">
|
||||||
</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 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>
|
<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>
|
||||||
</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 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>
|
<iframe data-src="https://www.youtube.com/embed/D9rFCgZa9zs?controls=0" src="/frame/youtube" width="100%"
|
||||||
|
height="100%" frameborder="0" allow="fullscreen picture-in-picture"></iframe>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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 href="{{ route('egg.labelBio', ['id' => request()->id]) }}" class="item bio">
|
<a class="item bio" href="{{ route('egg.labelBio', ['id' => request()->id]) }}">
|
||||||
<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 src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
|
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +">
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('egg.labelRouge', ['id' => request()->id]) }}" class="item lr">
|
<a class="item lr" href="{{ route('egg.labelRouge', ['id' => request()->id]) }}">
|
||||||
<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 src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
|
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +">
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('egg.labelIGP', ['id' => request()->id]) }}" class="item">
|
<a class="item" 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">
|
||||||
<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 src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
|
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +">
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('egg.labelNutriscore', ['id' => request()->id]) }}" class="item">
|
<a class="item" href="{{ route('egg.labelNutriscore', ['id' => request()->id]) }}">
|
||||||
<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 src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
|
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +">
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('egg.labelFermiers', ['id' => request()->id]) }}" class="item">
|
<a class="item" href="{{ route('egg.labelFermiers', ['id' => request()->id]) }}">
|
||||||
<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 src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +" class="loupe">
|
<img class="loupe" src="{{ asset('assets/images/egg/loupe.png') }}" alt="En savoir +">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<div class="block blue">
|
<div class="blue block">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<p></p>
|
<p></p>
|
||||||
<p>Erreur</p>
|
<p>Erreur</p>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
@section('breadcrumb', request()->route()->getName())
|
@section('breadcrumb', request()->route()->getName())
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container oldEgg">
|
<div @class(['container', 'oldEgg' => $isDisplayedTAModal])>
|
||||||
<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 type="text" name="code" placeholder="Ex. 1FRJBB01" required>
|
<input name="code" type="text" 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 type="text" name="date" placeholder="JJ/MM" pattern="[0-9]{2}/[0-9]{2}" required>
|
<input name="date" type="text" placeholder="JJ/MM" pattern="[0-9]{2}/[0-9]{2}" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input type="submit" value="Valider">
|
<input type="submit" value="Valider">
|
||||||
|
|
|
||||||
|
|
@ -104,4 +104,5 @@ 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);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue