Compare commits
54 commits
add-CICD-f
...
16-rgpd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a33655a1ab | ||
|
|
df35236220 | ||
|
|
bb85ddc390 | ||
|
|
8c48a0ea05 | ||
|
|
26a907bba6 | ||
|
|
5fe6cd458e | ||
|
|
54a913978f | ||
|
|
3b8a6f0454 | ||
|
|
4187db1ac8 | ||
|
|
e7e22e32cd | ||
|
|
9f92bfb761 | ||
|
|
2418746316 | ||
|
|
83d8753285 | ||
|
|
98343c979f | ||
|
|
e9331bd63d | ||
|
|
a7c5d2d9b2 | ||
|
|
fe0d3c1c3c | ||
|
|
1aa6efaac5 | ||
|
|
368f43e73f | ||
|
|
07c3ca5c1a | ||
|
|
5e1ad00212 | ||
|
|
8e406ea218 | ||
|
|
e67f0d1195 | ||
|
|
1aca07c81f | ||
|
|
1ae4b39f74 | ||
|
|
4acecd2079 | ||
|
|
9c1c0cd75b | ||
|
|
79bb207636 | ||
|
|
fd6c3b7808 | ||
|
|
61966e5a61 | ||
|
|
fb84c17f87 | ||
|
|
4d887639c0 | ||
|
|
35f4ad8a17 | ||
|
|
af3eb871b6 | ||
|
|
20c863d478 | ||
|
|
a4514fa3e6 | ||
|
|
23f53c80b9 | ||
|
|
3c7e3b0a61 | ||
|
|
d63888cabf | ||
|
|
82ef4f8845 | ||
|
|
c7e7198e81 | ||
|
|
f12aa32d8f | ||
|
|
a482e294e4 | ||
|
|
88e3e7d47b | ||
|
|
ad7bdbdd2a | ||
|
|
d7af219cd7 | ||
|
|
086fd74fe0 | ||
|
|
434de3adc5 | ||
|
|
b202ea86f9 | ||
|
|
997aa67ae7 | ||
|
|
3cb9a29afb | ||
|
|
2781f2f5f4 | ||
|
|
ba015c81ea | ||
|
|
fcf045e17d |
68 changed files with 4689 additions and 3847 deletions
10
.env.example
10
.env.example
|
|
@ -33,15 +33,19 @@ MAIL_FROM_NAME="${APP_NAME}"
|
|||
|
||||
MAIL_LIST_CONTACTFORM=
|
||||
|
||||
ANALYTICS_GOOGLE_ID=
|
||||
# Matomo
|
||||
MATOMO_SITE_ID=
|
||||
|
||||
# Google Recaptcha
|
||||
GOOGLE_RECAPTCHA_PUBLIC=
|
||||
GOOGLE_RECAPTCHA_PRIVATE=
|
||||
GOOGLE_RECAPTCHA_VERSION=
|
||||
# UWIL ADMIN SECURE
|
||||
# - LIST SEPARATED WITH ',' (Required)
|
||||
UWIL_ADMIN_SECURE_CIDR_LIST=""
|
||||
# - LIST SEPARATED WITH ',' (Optional)
|
||||
UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST=""
|
||||
|
||||
## LDCWEB ADMIN SECURE
|
||||
LDC_WEB_API_KEY=
|
||||
|
||||
# Sentry
|
||||
SENTRY_LARAVEL_DSN=
|
||||
|
|
|
|||
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -1,7 +1,8 @@
|
|||
/node_modules
|
||||
/public/hot
|
||||
/public/storage
|
||||
/public
|
||||
/public/
|
||||
!/public/sitemap.xml
|
||||
/storage/*.key
|
||||
/vendor
|
||||
.env
|
||||
|
|
@ -14,3 +15,4 @@ npm-debug.log
|
|||
yarn-error.log
|
||||
/.idea
|
||||
auth.json
|
||||
.npmrc
|
||||
|
|
|
|||
33
RGPD.md
Normal file
33
RGPD.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# RGPD
|
||||
|
||||
## Site
|
||||
|
||||
### En base de données
|
||||
|
||||
| Table | Colonne | Contenu | Utilisation |
|
||||
| ----- | ------- | ------- | ----------- |
|
||||
| users | first_name | Prénom | Affichage à différents endroits du BO |
|
||||
| users | last_name | Nom | Affichage à différents endroits du BO |
|
||||
| users | email | Adresse mail | Identifiant, sert à la connexion au BO |
|
||||
|
||||
### Formulaire de contact (marketing)
|
||||
|
||||
| Donnée | Contenu |
|
||||
| ------ | ------- |
|
||||
| Civilité | M/Mme |
|
||||
| Nom | Nom de la personne |
|
||||
| Prénom | Prénom de la personne |
|
||||
| Adresse | Adresse de la personne |
|
||||
| Code postal | Code postal de la personne |
|
||||
| Ville | Ville de la personne |
|
||||
| Pays | Pays de la personne |
|
||||
| Adresse E-mail | Adresse email de la personne |
|
||||
| Téléphone | Numéro de téléphone de la personne |
|
||||
| Pièce jointe | Photo renseignée par la personne |
|
||||
|
||||
## Cookies
|
||||
|
||||
| Service | Utilité |
|
||||
| ------- | ------- |
|
||||
| Matomo | Mesure d'audience |
|
||||
| Google Recaptcha | Empêcher la soumission de formulaire par des robots |
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Models\User;
|
||||
|
||||
class AdminCreate extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'admin:create';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Create Admin User';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$role = 0;
|
||||
$name = $this->ask('Name ?');
|
||||
$email = $this->ask('Email ?');
|
||||
$password = $this->secret('What is the password?');
|
||||
|
||||
$user = new User([
|
||||
'name' => $name,
|
||||
'email' => $email,
|
||||
'role' => $role,
|
||||
'password' => Hash::make($password)
|
||||
]);
|
||||
$user->saveOrFail();
|
||||
|
||||
$this->info('Admin created.');
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
47
app/Console/Commands/UserCreate.php
Normal file
47
app/Console/Commands/UserCreate.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class UserCreate extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'user:create';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Create a backend user';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$name = $this->ask('What is the name?');
|
||||
$email = $this->ask('What is the email?');
|
||||
$role = $this->ask('What is the role 1 (SuperAdmin) or 2 (Admin) ?') == '1' ? 1 : 2;
|
||||
$pwd = $this->secret('What is the password?');
|
||||
|
||||
$user = new User();
|
||||
$user->name = $name;
|
||||
$user->email = $email;
|
||||
$user->role = $role;
|
||||
$user->password = Hash::make($pwd);
|
||||
$user->saveOrFail();
|
||||
|
||||
$this->info('User created.');
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -12,8 +12,7 @@ class Kernel extends ConsoleKernel
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [
|
||||
];
|
||||
protected $commands = [];
|
||||
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
|
|
@ -23,7 +22,10 @@ class Kernel extends ConsoleKernel
|
|||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
// Write schedules here.
|
||||
// * FIXME: remove this when swithing to latest php version and ldc-web-admin-secure-laravel package
|
||||
if ($this->app->environment('staging')) {
|
||||
$schedule->command('ldcweb:admin-secure-sync')->daily();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -48,6 +48,6 @@ class ContactController extends Controller
|
|||
|
||||
$lang = session()->get('lang', config('app.locale'));
|
||||
return redirect()->route(session()->get('lang', config('app.locale')) === 'fr' ? 'contact' : $lang . ".contact")
|
||||
->with('status', true);
|
||||
->with('status', true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,5 +68,6 @@ class Kernel extends HttpKernel
|
|||
'lang-check' => LangCheck::class,
|
||||
'front-end-globals' => FrontEndGlobals::class,
|
||||
'back-end-globals' => BackEndGlobals::class,
|
||||
'admin-secure' => \App\Http\Middleware\AdminSecureMiddleware::class,
|
||||
];
|
||||
}
|
||||
|
|
|
|||
50
app/Http/Middleware/AdminSecureMiddleware.php
Normal file
50
app/Http/Middleware/AdminSecureMiddleware.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Lib\AdminSecure;
|
||||
use Closure;
|
||||
use Dxw\CIDR\IP;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AdminSecureMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if (config('app.env') === 'local') {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
$client_ip = AdminSecure::fetchClientIp();
|
||||
|
||||
$ip_is_allowed = \collect(AdminSecure::getOptions()->getCidrList())
|
||||
->reduce(function ($initial, $ip_range) use ($client_ip) {
|
||||
return $initial || IP::contains(
|
||||
$ip_range,
|
||||
$client_ip
|
||||
)->unwrap();
|
||||
});
|
||||
|
||||
$ip_is_allowed_by_config = \collect(AdminSecure::getOptions()->getCidrAllowedList())
|
||||
->reduce(function ($initial, $ip_range) use ($client_ip) {
|
||||
return $initial || IP::contains(
|
||||
$ip_range,
|
||||
$client_ip
|
||||
)->unwrap();
|
||||
});
|
||||
|
||||
if ($ip_is_allowed or $ip_is_allowed_by_config or AdminSecure::ipIsPrivate($client_ip)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
abort(403, \trans('Denied IP'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -88,6 +88,9 @@ class LangCheck
|
|||
*/
|
||||
private function checkFirstAccess(Request $request)
|
||||
{
|
||||
if (\strpos($request->header('User-Agent'), "Uptime-Kuma") !== false) {
|
||||
return false;
|
||||
}
|
||||
// Do we have session ?
|
||||
if (!$request->session()->has('lang')) {
|
||||
$fromC = Cookie::get('language');
|
||||
|
|
|
|||
|
|
@ -45,28 +45,20 @@ class SecureHeaders
|
|||
$cspPolicies = [
|
||||
// "default-src 'none';",
|
||||
"manifest-src 'self';",
|
||||
"connect-src 'self' blob: " . \implode(' ', [
|
||||
'https://*.google-analytics.com',
|
||||
'https://*.analytics.google.com',
|
||||
'https://*.googletagmanager.com',
|
||||
'https://*.g.doubleclick.net',
|
||||
'https://*.google.com',
|
||||
]) . ';',
|
||||
"img-src * data: blob: " . \implode(' ', [
|
||||
'https://*.google-analytics.com',
|
||||
'https://*.analytics.google.com',
|
||||
'https://*.googletagmanager.com',
|
||||
'https://*.g.doubleclick.net',
|
||||
'https://*.google.com',
|
||||
]) . ';',
|
||||
"connect-src 'self' https://yl.s-web.fr blob:;",
|
||||
"img-src * https://yl.s-web.fr data: blob:;",
|
||||
'frame-src ' . implode(' ', [
|
||||
'https://www.google.com/recaptcha/',
|
||||
'https://recaptcha.google.com/recaptcha/',
|
||||
]),
|
||||
]) . ';',
|
||||
// "font-src 'self' data:;",
|
||||
// ! Using CKEditor will must have unsafe-inline style
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
"style-src 'self' 'unsafe-inline';",
|
||||
'style-src ' . implode(" ", [
|
||||
'\'self\'',
|
||||
'\'unsafe-inline\'',
|
||||
'https://cdn.jsdelivr.net',
|
||||
]) . ';',
|
||||
// ! If you dont use ckeditor use this
|
||||
// "style-src 'self' 'nonce-$nonce';",
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
|
|
@ -74,7 +66,7 @@ class SecureHeaders
|
|||
'\'self\'',
|
||||
'https://www.google.com/recaptcha/',
|
||||
'https://www.gstatic.com/recaptcha/',
|
||||
'https://*.googletagmanager.com',
|
||||
'https://yl.s-web.fr',
|
||||
'https://cdn.ckeditor.com',
|
||||
'https://cdn.jsdelivr.net',
|
||||
]) . ' ' . $jsDev . ';'
|
||||
|
|
|
|||
131
app/Lib/AdminSecure.php
Normal file
131
app/Lib/AdminSecure.php
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
<?php
|
||||
|
||||
namespace App\Lib;
|
||||
|
||||
use App\Lib\Options;
|
||||
use Dxw\CIDR\IPAddress;
|
||||
use Dxw\CIDR\IPv4Address;
|
||||
use Dxw\CIDR\IPv4Range;
|
||||
use Dxw\CIDR\IPv6Address;
|
||||
use Dxw\CIDR\IPv6Range;
|
||||
|
||||
abstract class AdminSecure
|
||||
{
|
||||
/**
|
||||
* Private ipV4 CIDR list
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $private_ip_v4_cidr_list = [
|
||||
'10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16'
|
||||
];
|
||||
|
||||
/**
|
||||
* Private ipV4 CIDR loopback
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $private_ip_v4_loopback_cidr = '127.0.0.0/8';
|
||||
|
||||
/**
|
||||
* Private ipV6 CIDR list
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $private_ip_v6_cidr_list = [
|
||||
'fd00::/8'
|
||||
];
|
||||
|
||||
/**
|
||||
* Private ipV6 CIDR loopback
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $private_ip_v6_loopback_cidr = '::1/128';
|
||||
|
||||
/**
|
||||
* Private options
|
||||
*
|
||||
* @var \Uwil\AdminSecure\Laravel\Options|null
|
||||
*/
|
||||
private static $options = null;
|
||||
|
||||
/**
|
||||
* Check if ip is private
|
||||
*
|
||||
* @param \Dxw\CIDR\IPv4Address|\Dxw\CIDR\IPv6Address $ip_address
|
||||
* @return boolean
|
||||
*/
|
||||
public static function ipIsPrivate($ip_address): bool
|
||||
{
|
||||
return \get_class($ip_address) === IPv4Address::class ?
|
||||
self::ipV4IsPrivate($ip_address) : self::ipV6IsPrivate($ip_address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch client IP
|
||||
*
|
||||
* @return \Dxw\CIDR\IPv4Address|\Dxw\CIDR\IPv6Address
|
||||
* @throws \Uwil\AdminSecure\Laravel\Exceptions\AdminSecureException If the ip is invalid.
|
||||
*/
|
||||
public static function fetchClientIp()
|
||||
{
|
||||
// ! REVERSE PROXY HACK.
|
||||
$ip = request()->server('HTTP_X_FORWARDED_FOR') ?? request()->getClientIp();
|
||||
$ip = IPAddress::Make($ip);
|
||||
|
||||
if ($ip->isErr()) {
|
||||
throw new \Exception(\trans('Client IP not valid ') . $ip->getErr());
|
||||
}
|
||||
return $ip->unwrap();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if ipV4 is private
|
||||
*
|
||||
* @param \Dxw\CIDR\IPv4Address $ipv4_address
|
||||
* @return boolean
|
||||
*/
|
||||
private static function ipV4IsPrivate(IPv4Address $ipv4_address): bool
|
||||
{
|
||||
return \collect(self::$private_ip_v4_cidr_list)
|
||||
->concat([self::$private_ip_v4_loopback_cidr])
|
||||
->map(function (string $ipv4_cidr) {
|
||||
return IPv4Range::Make($ipv4_cidr)->unwrap();
|
||||
})
|
||||
->reduce(function ($initial, IPv4Range $ipv4_range) use ($ipv4_address) {
|
||||
return $initial || $ipv4_range->containsAddress($ipv4_address);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if ipV6 is private
|
||||
*
|
||||
* @param \Dxw\CIDR\IPv6Address $ipv6_address
|
||||
* @return boolean
|
||||
*/
|
||||
private static function ipV6IsPrivate(IPv6Address $ipv6_address): bool
|
||||
{
|
||||
return \collect(self::$private_ip_v6_cidr_list)
|
||||
->concat([self::$private_ip_v6_loopback_cidr])
|
||||
->map(function (string $ipv6_cidr) {
|
||||
return IPv6Range::Make($ipv6_cidr)->unwrap();
|
||||
})
|
||||
->reduce(function ($initial, IPv6Range $ipv6_range) {
|
||||
return $initial || $ipv6_range->containsAddress($ipv6_address);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Admin secure options
|
||||
*
|
||||
* @return \App\Lib\Options
|
||||
*/
|
||||
public static function getOptions(): Options
|
||||
{
|
||||
if (!self::$options) {
|
||||
self::$options = new Options(\config('admin-secure'));
|
||||
}
|
||||
return self::$options;
|
||||
}
|
||||
}
|
||||
159
app/Lib/Options.php
Normal file
159
app/Lib/Options.php
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Lib;
|
||||
|
||||
use Dxw\CIDR\IPv4Range;
|
||||
use Dxw\CIDR\IPv6Range;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
/**
|
||||
* Configuration
|
||||
*/
|
||||
final class Options
|
||||
{
|
||||
/**
|
||||
* @var array<string, mixed> The configuration options
|
||||
*/
|
||||
private $options;
|
||||
|
||||
/**
|
||||
* @var \Symfony\Component\OptionsResolver\OptionsResolver The options resolver
|
||||
*/
|
||||
private $resolver;
|
||||
|
||||
/**
|
||||
* The cache key where to store config cidr list.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private static $cache_config_key = 'uwil_ip_cidr_config_list';
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*
|
||||
* @param array<string, mixed> $options The configuration options.
|
||||
*/
|
||||
public function __construct(array $options = [])
|
||||
{
|
||||
$this->resolver = new OptionsResolver();
|
||||
|
||||
$this->configureOptions($this->resolver);
|
||||
|
||||
$this->options = $this->resolver->resolve($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cidr list
|
||||
*
|
||||
* @return array<\Dxw\CIDR\IPv4Range|\Dxw\CIDR\IPv6Range>
|
||||
*/
|
||||
public function getCidrList(): array
|
||||
{
|
||||
return $this->options['cidrList'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cidr project allowed list
|
||||
*
|
||||
* @return array<\Dxw\CIDR\IPv4Range|\Dxw\CIDR\IPv6Range>
|
||||
*/
|
||||
public function getCidrAllowedList(): array
|
||||
{
|
||||
return $this->options['cidrProjectAllowedList'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the options of the client.
|
||||
*
|
||||
* @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver The resolver for the options.
|
||||
* @return void
|
||||
*/
|
||||
private function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'cidrList' => [],
|
||||
'cidrProjectAllowedList' => []
|
||||
]);
|
||||
|
||||
$resolver->setNormalizer('cidrList', \Closure::fromCallable([$this, 'normalizeCidrList']));
|
||||
$resolver->setNormalizer('cidrProjectAllowedList', \Closure::fromCallable([$this, 'normalizeCidrProjectList']));
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalise Cidr list for cidrList option
|
||||
*
|
||||
* @param \Symfony\Component\OptionsResolver\Options $options
|
||||
* @param string|null $value
|
||||
* @return array
|
||||
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed
|
||||
*/
|
||||
private function normalizeCidrList(
|
||||
\Symfony\Component\OptionsResolver\Options $options,
|
||||
?string $value
|
||||
): array {
|
||||
// phpcs:enable
|
||||
return $this->doNormalizeCidrList($value, 'cidrList');
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalise Cidr list for cidrProjectAllowedList option
|
||||
*
|
||||
* @param \Symfony\Component\OptionsResolver\Options $options
|
||||
* @param string|null $value
|
||||
* @return array
|
||||
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed
|
||||
*/
|
||||
private function normalizeCidrProjectList(
|
||||
\Symfony\Component\OptionsResolver\Options $options,
|
||||
?string $value
|
||||
): array {
|
||||
// phpcs:enable
|
||||
return $this->doNormalizeCidrList($value, 'cidrProjectAllowedList');
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize CIDR list with specific cache key.
|
||||
*
|
||||
* @param string|null $value
|
||||
* @param string $optionName
|
||||
* @return array<\Dxw\CIDR\IPv4Range|\Dxw\CIDR\IPv6Range>
|
||||
*/
|
||||
private function doNormalizeCidrList(?string $value, string $optionName): array
|
||||
{
|
||||
$cacheConfigKey = self::$cache_config_key . '_' . $optionName;
|
||||
$allowed_cidr_config_list = collect(explode(',', strval($value)))->filter();
|
||||
$allowed_cidr_config_list_hash = \md5($allowed_cidr_config_list->implode(','));
|
||||
$allowed_cidr_list = [];
|
||||
|
||||
// Flush cache if config hash changed
|
||||
if ($allowed_cidr_config_list_hash !== \collect(Cache::get($cacheConfigKey))->get('hash')) {
|
||||
Cache::forget($cacheConfigKey);
|
||||
|
||||
/** @var array<\Dxw\CIDR\IPv4Range|\Dxw\CIDR\IPv6Range> $allowed_cidr_list */
|
||||
$allowed_cidr_list = $allowed_cidr_config_list
|
||||
->map(function (string $cidr) {
|
||||
$ip_range = !IPv4Range::Make($cidr)->isErr() ? IPv4Range::Make($cidr) : IPv6Range::Make($cidr);
|
||||
if ($ip_range->isErr()) {
|
||||
throw new \Exception(\trans(
|
||||
'CIDR LIST not valid (ipv4 or ipv6 cidr) :cidr',
|
||||
[
|
||||
'cidr' => $cidr
|
||||
]
|
||||
));
|
||||
}
|
||||
return $ip_range->unwrap();
|
||||
})->all();
|
||||
}
|
||||
|
||||
/** @var array<\Dxw\CIDR\IPv4Range|\Dxw\CIDR\IPv6Range> $allowed_cidr_list */
|
||||
return \collect(Cache::rememberForever($cacheConfigKey, function() use ($allowed_cidr_list, $allowed_cidr_config_list_hash) {
|
||||
return [
|
||||
'list' => $allowed_cidr_list,
|
||||
'hash' => $allowed_cidr_config_list_hash
|
||||
];
|
||||
}))->get('list');
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@
|
|||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^7.3",
|
||||
"dxw/cidr": "^3.1",
|
||||
"fruitcake/laravel-cors": "^2.0",
|
||||
"guzzlehttp/guzzle": "^7.0.1",
|
||||
"joedixon/laravel-translation": "^1.1",
|
||||
|
|
@ -17,19 +18,21 @@
|
|||
"laravel/framework": "^8.65",
|
||||
"laravel/tinker": "^2.5",
|
||||
"laravel/ui": "^3.3",
|
||||
"ldc/web-admin-secure-laravel": "^1.0",
|
||||
"mews/purifier": "^3.3",
|
||||
"sentry/sentry-laravel": "^4.1",
|
||||
"spatie/laravel-translatable": "^4.6"
|
||||
"spatie/laravel-translatable": "^4.6",
|
||||
"uwil/k8s-laravel": "^1.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"facade/ignition": "^2.5",
|
||||
"fakerphp/faker": "^1.9.1",
|
||||
"laravel-lang/lang": "^10.9",
|
||||
"laravel-lang/publisher": "12.2.1",
|
||||
"laravel/sail": "^1.0.1",
|
||||
"mockery/mockery": "^1.4.4",
|
||||
"nunomaduro/collision": "^5.10",
|
||||
"phpunit/phpunit": "^9.5.10",
|
||||
"slevomat/coding-standard": "^7.0"
|
||||
"slevomat/coding-standard": "^8.5"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
|||
2021
composer.lock
generated
2021
composer.lock
generated
File diff suppressed because it is too large
Load diff
6
config/admin-secure.php
Normal file
6
config/admin-secure.php
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'cidrList' => env('UWIL_ADMIN_SECURE_CIDR_LIST'),
|
||||
'cidrProjectAllowedList' => env('UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST')
|
||||
];
|
||||
|
|
@ -178,6 +178,7 @@ return [
|
|||
* Application Service Providers...
|
||||
*/
|
||||
|
||||
Uwil\K8S\Laravel\K8SServiceProvider::class,
|
||||
App\Providers\AppServiceProvider::class,
|
||||
App\Providers\AuthServiceProvider::class,
|
||||
App\Providers\EventServiceProvider::class,
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'analyticsKey' => env('ANALYTICS_GOOGLE_ID')
|
||||
];
|
||||
|
|
@ -17,7 +17,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'default' => env('LOG_CHANNEL', 'stack'),
|
||||
'default' => env('LOG_CHANNEL', 'k8s'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -38,4 +38,7 @@ return [
|
|||
]
|
||||
],
|
||||
|
||||
'matomo' => [
|
||||
'site_id' => env('MATOMO_SITE_ID')
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ class SlideFactory extends Factory
|
|||
'title' => $this->faker->unique()->word(),
|
||||
'text' => $this->faker->realText(25),
|
||||
'link_label' => $this->faker->text(128),
|
||||
'link' => route('wasup'),
|
||||
'link' => 'route(\'wasup\')',
|
||||
'link_new_tab' => rand(0, 1),
|
||||
'date_start' => Carbon::now(),
|
||||
'date_end' => Carbon::now()->addDays(2),
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ data:
|
|||
APP_ENV: "${APP_APP_ENV}"
|
||||
APP_KEY: "${APP_APP_KEY}"
|
||||
APP_DEBUG: "${APP_APP_DEBUG}"
|
||||
APP_URL: "https://www.${APP_DOMAIN}"
|
||||
APP_URL: "https://${REDIRECT}${APP_DOMAIN}"
|
||||
LOG_CHANNEL: "k8s"
|
||||
DB_HOST: "mariadb-service.common-services"
|
||||
DB_HOST: "${APP_DB_HOST}"
|
||||
DB_DATABASE: "${APP_DB_DATABASE}"
|
||||
DB_USERNAME: "${APP_DB_USERNAME}"
|
||||
DB_PASSWORD: "${APP_DB_PASSWORD}"
|
||||
|
|
@ -22,11 +22,12 @@ data:
|
|||
MAIL_FROM_ADDRESS: "${APP_MAIL_FROM_ADDRESS}"
|
||||
MAIL_FROM_NAME: "${APP_APP_NAME}"
|
||||
MAIL_LIST_CONTACTFORM: "${APP_MAIL_LIST_CONTACTFORM}"
|
||||
LDC_WEB_API_KEY: "${APP_LDC_WEB_API_KEY}"
|
||||
UWIL_ADMIN_SECURE_CIDR_LIST: "${APP_GLOBAL_UWIL_ADMIN_SECURE_CIDR_LIST}"
|
||||
GOOGLE_RECAPTCHA_PRIVATE: "${APP_GOOGLE_RECAPTCHA_PRIVATE}"
|
||||
GOOGLE_RECAPTCHA_PUBLIC: "${APP_GOOGLE_RECAPTCHA_PUBLIC}"
|
||||
GOOGLE_RECAPTCHA_VERSION: "${APP_GOOGLE_RECAPTCHA_VERSION}"
|
||||
ANALYTICS_GOOGLE_ID: "${APP_ANALYTICS_GOOGLE_ID}"
|
||||
MATOMO_SITE_ID: "${APP_MATOMO_SITE_ID}"
|
||||
SENTRY_LARAVEL_DSN: "${APP_SENTRY_LARAVEL_DSN}"
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
|
|
@ -62,6 +63,13 @@ spec:
|
|||
envFrom:
|
||||
- configMapRef:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
||||
resources:
|
||||
limits:
|
||||
cpu: "${APP_CI_CPU_LIMIT}"
|
||||
memory: "${APP_CI_MEMORY_LIMIT}"
|
||||
requests:
|
||||
cpu: "${APP_CI_CPU_REQUEST}"
|
||||
memory: "${APP_CI_MEMORY_REQUEST}"
|
||||
volumeMounts:
|
||||
- name: storage
|
||||
mountPath: /app/srcs/storage
|
||||
|
|
@ -90,7 +98,7 @@ spec:
|
|||
targetPort: 443
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-ingress-route
|
||||
|
|
@ -99,30 +107,15 @@ spec:
|
|||
- web
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`${APP_DOMAIN}`, `www.${APP_DOMAIN}`)
|
||||
- match: Host(`${APP_DOMAIN}`) || Host(`www.${APP_DOMAIN}`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-service
|
||||
port: 80
|
||||
middlewares:
|
||||
- name: redirect-no-www-to-www
|
||||
namespace: common-services
|
||||
tls:
|
||||
secretName: $APP_DOMAIN
|
||||
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: $APP_DOMAIN
|
||||
spec:
|
||||
dnsNames:
|
||||
- $APP_DOMAIN
|
||||
- www.${APP_DOMAIN}
|
||||
secretName: $APP_DOMAIN
|
||||
issuerRef:
|
||||
name: $APP_CERT_ISSUER
|
||||
kind: ClusterIssuer
|
||||
secretName: ${CRT_TLS_NAME}
|
||||
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
|
|
@ -131,6 +124,9 @@ metadata:
|
|||
name: ${CI_PROJECT_PATH_SLUG}-cronjob
|
||||
spec:
|
||||
schedule: "* * * * *"
|
||||
successfulJobsHistoryLimit: 1
|
||||
failedJobsHistoryLimit: 1
|
||||
concurrencyPolicy: Forbid
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
|
|
|
|||
1636
package-lock.json
generated
1636
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"name": "srcs",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run development",
|
||||
|
|
@ -10,6 +11,7 @@
|
|||
"production": "mix --production"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ldc-web/cookie-notice": "^6.0.3",
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.6.5",
|
||||
"bootstrap": "^5.1.3",
|
||||
|
|
|
|||
13
production-resources.yaml
Normal file
13
production-resources.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: $APP_DOMAIN
|
||||
spec:
|
||||
dnsNames:
|
||||
- $APP_DOMAIN
|
||||
- www.${APP_DOMAIN}
|
||||
secretName: $APP_DOMAIN
|
||||
issuerRef:
|
||||
name: $APP_CERT_ISSUER
|
||||
kind: ClusterIssuer
|
||||
|
|
@ -1,2 +1,3 @@
|
|||
User-agent: *
|
||||
Disallow:
|
||||
Sitemap: https://www.doux.com/sitemap.xml
|
||||
75
public/sitemap.xml
Normal file
75
public/sitemap.xml
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset
|
||||
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://www.doux.com/</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/marque</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/gammes</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/actualites</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/food-service</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/mentions-legales</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/charte-confidentialite</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/contact</loc>
|
||||
</url>
|
||||
<!-- ES -->
|
||||
<url>
|
||||
<loc>https://www.doux.com/es/marca</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/es/productos</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/es/noticias</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/es/food-service</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/es/terminos-y-condiciones-de-uso</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/es/política-de-privacidad</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/es/contacto</loc>
|
||||
</url>
|
||||
|
||||
<!-- EN -->
|
||||
<url>
|
||||
<loc>https://www.doux.com/en/brand</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.comen/en/products</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/en/news</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/en/food-service</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/en/terms-and-conditions</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/en/privacy-policy</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.doux.com/en/contact</loc>
|
||||
</url>
|
||||
</urlset>
|
||||
27
resources/js/frontend/cn-inline-buttons.js
vendored
Normal file
27
resources/js/frontend/cn-inline-buttons.js
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
document.addEventListener("DOMContentLoaded", function () {
|
||||
function handle(e) {
|
||||
e.preventDefault();
|
||||
const cookieEl = e.target.parentElement;
|
||||
if (!window.WebCookieNotice) {
|
||||
console.debug("Missing WebCookieNotice on window");
|
||||
return;
|
||||
}
|
||||
window.WebCookieNotice.acceptCookie(
|
||||
String(cookieEl.dataset.cookieName)
|
||||
);
|
||||
cookieEl.classList.add("d-none");
|
||||
}
|
||||
window.listenInlineCnButtons = () => {
|
||||
const cookieInlineActivation =
|
||||
document.getElementsByClassName("cn-cookie-activate");
|
||||
[...cookieInlineActivation].forEach((cookieEl) => {
|
||||
const cookieBtnActivation = cookieEl.querySelector("button");
|
||||
if (!cookieBtnActivation) {
|
||||
throw new Error("Invalid template cookie button");
|
||||
}
|
||||
cookieBtnActivation.removeEventListener("click", handle);
|
||||
cookieBtnActivation.addEventListener("click", handle);
|
||||
});
|
||||
};
|
||||
window.listenInlineCnButtons();
|
||||
});
|
||||
9
resources/js/frontend/front.js
vendored
9
resources/js/frontend/front.js
vendored
|
|
@ -1,8 +1,9 @@
|
|||
// cookie notice
|
||||
import { LdcwebCn } from "./ldcweb-cn.js";
|
||||
window.LdcwebCn = LdcwebCn;
|
||||
import CookieNotice from "@ldc-web/cookie-notice";
|
||||
window.CookieNotice = CookieNotice;
|
||||
|
||||
import { Carrousel } from "./caroussel.js"
|
||||
import { Carrousel } from "./caroussel.js";
|
||||
window.Carrousel = Carrousel;
|
||||
|
||||
require('./custom');
|
||||
require("./custom");
|
||||
require("./cn-inline-buttons");
|
||||
|
|
|
|||
426
resources/js/frontend/ldcweb-cn.js
vendored
426
resources/js/frontend/ldcweb-cn.js
vendored
|
|
@ -1,426 +0,0 @@
|
|||
/**
|
||||
* LDC Service Web
|
||||
* Version 1.3
|
||||
*/
|
||||
|
||||
export class LdcwebCn {
|
||||
constructor(config) {
|
||||
this.config = config;
|
||||
this.cookieContainer = document.getElementById("ldcweb-cn");
|
||||
this.bannerContainer = document.querySelector(".ldcweb-cn-banner");
|
||||
this.bannerBtn = document.querySelector(".ldcweb-banner-btnDetails-p");
|
||||
this.ldcwebBtn = document.querySelector(".ldcweb-btn");
|
||||
this.ldcwebBannerParaP = document.querySelector(
|
||||
".ldcweb-banner-para-p"
|
||||
);
|
||||
this.ldcwebBannerContent = document.querySelector(
|
||||
".ldcweb-banner-content"
|
||||
);
|
||||
this.ldcwebBannerDetails = document.querySelector(
|
||||
".ldcweb-banner-details"
|
||||
);
|
||||
this.ldcwebBannerBtnDetails = document.querySelector(
|
||||
".ldcweb-banner-btnDetails"
|
||||
);
|
||||
this.modalContainer = document.getElementById("ldcweb-cn-modal");
|
||||
this.acceptAllBtnBanner = document.getElementById(
|
||||
"ldcweb-cn-accept-banner"
|
||||
);
|
||||
this.denyAllBtnBanner = document.getElementById(
|
||||
"ldcweb-cn-deny-banner"
|
||||
);
|
||||
this.personalizeBtn = document.getElementsByClassName(
|
||||
"ldcweb-cn-personalize"
|
||||
);
|
||||
this.personalizeBtnBanner = document.querySelector(
|
||||
".ldcweb-cn-personalize"
|
||||
);
|
||||
this.changeBtn = document.getElementsByClassName("ldcweb-cn-change");
|
||||
this.cookiesList = document.getElementById("ldcweb-cn-list");
|
||||
this.cookieLink = document.querySelector(".ldcweb-cn-cookie-link");
|
||||
this.modalDetails = document.querySelector(".modal-details");
|
||||
this.template = document.getElementById("template").cloneNode(true);
|
||||
this.modalBtnBoolean = 0;
|
||||
this.bannerBtnTextBoolean = 0;
|
||||
document.getElementById("template").remove();
|
||||
|
||||
let cookies = this.getLDCWebCookie("ldcwebcn-init");
|
||||
if (cookies === undefined) {
|
||||
let newCookie = [];
|
||||
|
||||
for (const [key] of Object.entries(this.config)) {
|
||||
newCookie.push(key + "=wait");
|
||||
}
|
||||
|
||||
this.bannerContainer.classList.add("ldcweb-cn-banner-open");
|
||||
|
||||
this.saveLDCWebCookie(newCookie);
|
||||
} else {
|
||||
let test = cookies.split(",");
|
||||
test.forEach(elm => {
|
||||
let test = elm.split("=");
|
||||
if (test[1] === "wait") {
|
||||
this.bannerContainer.classList.add("ldcweb-cn-banner-open");
|
||||
}
|
||||
});
|
||||
}
|
||||
let accept = function(e) {
|
||||
e.preventDefault();
|
||||
for (const [key, value] of Object.entries(this.config)) {
|
||||
this.addCookie(key, value);
|
||||
}
|
||||
for (let acceptLabel of this.cookieContainer.querySelectorAll(
|
||||
".accept > label"
|
||||
)) {
|
||||
acceptLabel.classList.add("active");
|
||||
}
|
||||
for (let denyLabel of this.cookieContainer.querySelectorAll(
|
||||
".deny > label"
|
||||
)) {
|
||||
denyLabel.classList.remove("active");
|
||||
}
|
||||
this.updateAllCookiesButtonsActiveStatus();
|
||||
this.bannerContainer.classList.remove("ldcweb-cn-banner-open");
|
||||
}.bind(this);
|
||||
this.acceptAllBtnBanner.addEventListener("click", accept);
|
||||
|
||||
let deny = function(e) {
|
||||
e.preventDefault();
|
||||
for (const [key, value] of Object.entries(this.config)) {
|
||||
this.removeCookie(key, value);
|
||||
}
|
||||
for (let acceptLabel of this.cookieContainer.querySelectorAll(
|
||||
".accept > label"
|
||||
)) {
|
||||
acceptLabel.classList.remove("active");
|
||||
}
|
||||
for (let denyLabel of this.cookieContainer.querySelectorAll(
|
||||
".deny > label"
|
||||
)) {
|
||||
denyLabel.classList.add("active");
|
||||
}
|
||||
this.updateAllCookiesButtonsActiveStatus();
|
||||
this.bannerContainer.classList.remove("ldcweb-cn-banner-open");
|
||||
}.bind(this);
|
||||
this.denyAllBtnBanner.addEventListener("click", deny);
|
||||
|
||||
let openLdcwebCookies = function(e) {
|
||||
e.preventDefault();
|
||||
this.bannerContainer.classList.add("ldcweb-cn-banner-open");
|
||||
this.ldcwebBannerContent.classList.add("visibility");
|
||||
this.ldcwebBannerDetails.classList.add("visibility");
|
||||
this.ldcwebBannerBtnDetails.classList.add("visibility");
|
||||
this.modalContainer.classList.remove("visibility");
|
||||
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
|
||||
"data-open-modal"
|
||||
);
|
||||
this.modalBtnBoolean = 1;
|
||||
this.modalDetails.scrollTop = 0;
|
||||
this.openModal();
|
||||
}.bind(this);
|
||||
this.cookieLink.addEventListener("click", openLdcwebCookies);
|
||||
|
||||
let hideModal = function(e) {
|
||||
e.preventDefault();
|
||||
this.ldcwebBannerContent.classList.toggle("visibility");
|
||||
this.ldcwebBannerDetails.classList.toggle("visibility");
|
||||
this.ldcwebBannerBtnDetails.classList.toggle("visibility");
|
||||
this.modalContainer.classList.toggle("visibility");
|
||||
this.setCookieList();
|
||||
}.bind(this);
|
||||
this.personalizeBtnBanner.addEventListener("click", hideModal);
|
||||
|
||||
let changeBtnPersonalize = function(e) {
|
||||
e.preventDefault();
|
||||
this.modalDetails.scrollTop = 0;
|
||||
if (this.modalBtnBoolean === 0) {
|
||||
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
|
||||
"data-open-modal"
|
||||
);
|
||||
this.modalBtnBoolean = 1;
|
||||
} else {
|
||||
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
|
||||
"data-close-modal"
|
||||
);
|
||||
this.modalBtnBoolean = 0;
|
||||
}
|
||||
}.bind(this);
|
||||
this.personalizeBtnBanner.addEventListener(
|
||||
"click",
|
||||
changeBtnPersonalize
|
||||
);
|
||||
|
||||
this.setListenerOnChange();
|
||||
|
||||
let cookie = this.getLDCWebCookie("ldcwebcn-init");
|
||||
let test = cookie.split(",");
|
||||
test.forEach(elm => {
|
||||
let test = elm.split("=");
|
||||
if (test[1] === "true") {
|
||||
this.config[test[0]].script();
|
||||
}
|
||||
});
|
||||
|
||||
this.updateAllCookiesButtonsActiveStatus();
|
||||
|
||||
let changePara = function(e) {
|
||||
e.preventDefault();
|
||||
this.ldcwebBannerDetails.classList.toggle(
|
||||
"ldcweb-banner-details-open"
|
||||
);
|
||||
this.bannerBtn.classList.toggle("ldcweb-banner-btnDetails-p-open");
|
||||
if (this.bannerBtnTextBoolean === 0) {
|
||||
e.target.innerHTML = e.target.getAttribute("data-open");
|
||||
this.ldcwebBannerParaP.innerHTML = this.ldcwebBannerParaP.getAttribute(
|
||||
"data-open"
|
||||
);
|
||||
this.ldcwebBannerDetails.style.height =
|
||||
this.ldcwebBannerDetails.children[0].clientHeight + "px";
|
||||
this.bannerBtnTextBoolean = 1;
|
||||
} else {
|
||||
e.target.innerHTML = e.target.getAttribute("data-close");
|
||||
this.ldcwebBannerParaP.innerHTML = this.ldcwebBannerParaP.getAttribute(
|
||||
"data-close"
|
||||
);
|
||||
this.ldcwebBannerDetails.style.height = "0px";
|
||||
this.bannerBtnTextBoolean = 0;
|
||||
}
|
||||
}.bind(this);
|
||||
this.bannerBtn.addEventListener("click", changePara);
|
||||
|
||||
let resetVue = function(e) {
|
||||
e.preventDefault();
|
||||
this.bannerContainer.classList.toggle("ldcweb-cn-banner-open");
|
||||
if (
|
||||
this.bannerContainer.classList.contains("ldcweb-cn-banner-open")
|
||||
) {
|
||||
this.ldcwebBannerContent.classList.remove("visibility"),
|
||||
this.ldcwebBannerDetails.classList.remove("visibility"),
|
||||
this.ldcwebBannerBtnDetails.classList.remove("visibility"),
|
||||
this.modalContainer.classList.add("visibility");
|
||||
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
|
||||
"data-close-modal"
|
||||
);
|
||||
this.modalBtnBoolean = 0;
|
||||
}
|
||||
}.bind(this);
|
||||
this.ldcwebBtn.addEventListener("click", resetVue);
|
||||
}
|
||||
|
||||
setCookieList() {
|
||||
this.cookiesList.innerHTML = "";
|
||||
let cookiesSite = this.getLDCWebCookie("ldcwebcn-init");
|
||||
let acceptInputEvent = function(acceptLabel, denyLabel, key, value) {
|
||||
return function() {
|
||||
acceptLabel.classList.add("active");
|
||||
denyLabel.classList.remove("active");
|
||||
this.updateAllCookiesButtonsActiveStatus();
|
||||
this.addCookie(key, value);
|
||||
}.bind(this, [acceptLabel, denyLabel, key, value]);
|
||||
};
|
||||
let denyInputEvent = function(acceptLabel, denyLabel, key, value) {
|
||||
return function() {
|
||||
acceptLabel.classList.remove("active");
|
||||
denyLabel.classList.add("active");
|
||||
this.updateAllCookiesButtonsActiveStatus();
|
||||
this.removeCookie(key, value);
|
||||
}.bind(this, [acceptLabel, denyLabel, key, value]);
|
||||
};
|
||||
|
||||
for (const [key, value] of Object.entries(this.config)) {
|
||||
let cookie = document.createElement("li");
|
||||
cookie.append(this.template.children.item(0).cloneNode(true));
|
||||
let name = cookie.querySelector("span.ldcweb-cn-name");
|
||||
let description = cookie.querySelector(
|
||||
"span.ldcweb-cn-description"
|
||||
);
|
||||
let link = cookie.querySelector("a.ldcweb-cn-link");
|
||||
let acceptInput = cookie.querySelector(".accept > input");
|
||||
let denyInput = cookie.querySelector(".deny > input");
|
||||
let acceptLabel = cookie.querySelector(".accept > label");
|
||||
let denyLabel = cookie.querySelector(".deny > label");
|
||||
|
||||
name.textContent = value.name;
|
||||
description.textContent = value.description;
|
||||
link.textContent = value.labelLink;
|
||||
link.setAttribute("href", value.link);
|
||||
acceptInput.id = key + "1";
|
||||
acceptInput.name = key;
|
||||
acceptInput.dataset.name = key;
|
||||
acceptLabel.htmlFor = key + "1";
|
||||
denyInput.id = key + "2";
|
||||
denyInput.name = key;
|
||||
denyInput.dataset.name = key;
|
||||
denyLabel.htmlFor = key + "2";
|
||||
|
||||
acceptInput.addEventListener(
|
||||
"click",
|
||||
acceptInputEvent.apply(this, [
|
||||
acceptLabel,
|
||||
denyLabel,
|
||||
key,
|
||||
value
|
||||
])
|
||||
);
|
||||
denyInput.addEventListener(
|
||||
"click",
|
||||
denyInputEvent.apply(this, [acceptLabel, denyLabel, key, value])
|
||||
);
|
||||
|
||||
this.cookiesList.append(cookie);
|
||||
|
||||
let cookiesArray = cookiesSite.split(",");
|
||||
for (const cookieEl of cookiesArray) {
|
||||
let name = cookieEl.slice(0, cookieEl.indexOf("="));
|
||||
let status = cookieEl.slice(cookieEl.indexOf("=") + 1);
|
||||
if (name === key) {
|
||||
acceptLabel.classList.remove("active");
|
||||
denyLabel.classList.remove("active");
|
||||
switch (status) {
|
||||
case "true":
|
||||
acceptLabel.classList.add("active");
|
||||
break;
|
||||
case "false":
|
||||
denyLabel.classList.add("active");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.setListenerOnChange();
|
||||
}
|
||||
|
||||
updateAllCookiesButtonsActiveStatus() {
|
||||
let acceptsButtons = this.cookieContainer.querySelectorAll(
|
||||
"div.accept > label"
|
||||
);
|
||||
let deniesButtons = this.cookieContainer.querySelectorAll(
|
||||
"div.deny > label"
|
||||
);
|
||||
let activeAcceptsButtons = this.cookieContainer.querySelectorAll(
|
||||
"div.accept > label.active"
|
||||
);
|
||||
let activeDeniesButtons = this.cookieContainer.querySelectorAll(
|
||||
"div.deny > label.active"
|
||||
);
|
||||
|
||||
if (
|
||||
acceptsButtons.length &&
|
||||
acceptsButtons.length === activeAcceptsButtons.length
|
||||
) {
|
||||
}
|
||||
if (
|
||||
deniesButtons.length &&
|
||||
deniesButtons.length === activeDeniesButtons.length
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
||||
addCookie(key, value) {
|
||||
if (value.script) {
|
||||
value.script();
|
||||
}
|
||||
this.changeStatus(key, "true");
|
||||
}
|
||||
|
||||
removeCookie(key, value) {
|
||||
for (let cookieName of value.cookies) {
|
||||
this.deleteBrowserCookie(cookieName, "/", "." + location.host);
|
||||
}
|
||||
if (document.getElementById(key)) {
|
||||
document.getElementById(key).remove();
|
||||
}
|
||||
this.changeStatus(key, "false");
|
||||
}
|
||||
setListenerOnChange() {
|
||||
this.changeBtn = document.getElementsByClassName("ldcweb-cn-change");
|
||||
let itemClick = function(item) {
|
||||
return function() {
|
||||
this.changeStatus(
|
||||
item.getAttribute("data-name"),
|
||||
item.getAttribute("data-status")
|
||||
);
|
||||
}.bind(this);
|
||||
};
|
||||
for (let item of this.changeBtn) {
|
||||
this.addEvent(item, "click", itemClick.bind(this, [item]));
|
||||
}
|
||||
}
|
||||
|
||||
changeStatus(name, status) {
|
||||
let newCookie = [];
|
||||
|
||||
let cookie = this.getLDCWebCookie("ldcwebcn-init");
|
||||
let test = cookie.split(",");
|
||||
test.forEach(elm => {
|
||||
let test = elm.split("=");
|
||||
if (test[0] === name) {
|
||||
newCookie.push(name + "=" + status);
|
||||
if (status === "false") {
|
||||
this.config[test[0]].cookies.forEach(elm => {
|
||||
let cookies = this.getLDCWebCookie(elm);
|
||||
if (cookies !== undefined) {
|
||||
document.cookie =
|
||||
elm +
|
||||
"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=" +
|
||||
document.domain +
|
||||
"; path=/";
|
||||
document.cookie =
|
||||
elm +
|
||||
"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=." +
|
||||
document.domain +
|
||||
"; path=/";
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
newCookie.push(elm);
|
||||
}
|
||||
});
|
||||
|
||||
this.saveLDCWebCookie(newCookie);
|
||||
}
|
||||
|
||||
deleteBrowserCookie(name, path, domain) {
|
||||
if (this.getLDCWebCookie(name)) {
|
||||
document.cookie =
|
||||
name +
|
||||
"=" +
|
||||
(path ? ";path=" + path : "") +
|
||||
(domain ? ";domain=" + domain : "") +
|
||||
";expires=Thu, 01 Jan 1970 00:00:01 GMT";
|
||||
}
|
||||
}
|
||||
|
||||
getLDCWebCookie(name) {
|
||||
let matches = document.cookie.match(
|
||||
new RegExp(
|
||||
"(?:^|; )" +
|
||||
name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") +
|
||||
"=([^;]*)"
|
||||
)
|
||||
);
|
||||
return matches ? decodeURIComponent(matches[1]) : undefined;
|
||||
}
|
||||
|
||||
addEvent(element, evnt, funct) {
|
||||
if (element.attachEvent) return element.attachEvent("on" + evnt, funct);
|
||||
else return element.addEventListener(evnt, funct, false);
|
||||
}
|
||||
|
||||
saveLDCWebCookie(content) {
|
||||
let date = new Date();
|
||||
let newDate = new Date(date.setMonth(date.getMonth() + 13));
|
||||
document.cookie =
|
||||
"ldcwebcn-init=" +
|
||||
content +
|
||||
"; expires=" +
|
||||
newDate.toUTCString() +
|
||||
"; path=/;";
|
||||
}
|
||||
|
||||
openModal() {
|
||||
this.setCookieList();
|
||||
this.updateAllCookiesButtonsActiveStatus();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,76 +1,177 @@
|
|||
{
|
||||
"Marque": "Brand",
|
||||
"Produits": "Products",
|
||||
"Actualités": "News",
|
||||
"Accueil": "Home",
|
||||
"Qui sommes-nous": "About us",
|
||||
"Les produits": "products",
|
||||
"Doux": "Doux",
|
||||
"Résultats": "Results",
|
||||
"Découvrez DOUX, des produits de volailles françaises.": "Discover DOUX, French poultry products.",
|
||||
"Notre Histoire": "",
|
||||
"Nous contacter": "",
|
||||
"Adresse": "",
|
||||
"Votre message a bien été envoyé !": "",
|
||||
"Nos services mettent tout en oeuvre pour y répondre au plus vite.": "",
|
||||
"Oups ! Une erreur s’est produite...": "",
|
||||
"Votre message n’a pas pu être envoyé.<br>Nous en sommes désolés et vous prions<br>de bien vouloir réessayer plus tard.": "",
|
||||
"Vos coordonnées": "",
|
||||
"Monsieur": "",
|
||||
"Madame": "",
|
||||
"Nom": "",
|
||||
"Prénom": "",
|
||||
"Code postal": "",
|
||||
"Ville": "",
|
||||
"Téléphone": "",
|
||||
"Email": "",
|
||||
"Préciser votre demande": "",
|
||||
"Réclamation produit": "",
|
||||
"La marque": "",
|
||||
"Contact commercial": "",
|
||||
"Autre demande": "",
|
||||
"Nom du produit": "",
|
||||
"Code barre": "",
|
||||
"Lieu d'achat": "",
|
||||
"Numéro de lot": "",
|
||||
"Date Limite de Consommation": "",
|
||||
"Date de consommation": "",
|
||||
"Message": "",
|
||||
"Photo de l'emballage": "",
|
||||
"Insérer une pièce jointe": "",
|
||||
"Food service": "",
|
||||
"En savoir plus": "",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleur qualité": "We are always working to improve our recipes and offer better quality products",
|
||||
"Découvrir": "Discover",
|
||||
"Nos gammes produits": "Our product lines",
|
||||
"Toutes nos gammes": "All our product lines",
|
||||
"Des produits incontournables, Authentiques et Innovants !": "Must-have, Authentic and Innovative products!",
|
||||
"Gammes": "",
|
||||
"Poulet, Cordon bleu ou Wing's ?": "",
|
||||
"Découvrez tous nos produits à base de volaille.": "",
|
||||
"<span>les +<\/span><span>Produit<\/span>": "<span>Product<\/span><span>benefits<\/span>",
|
||||
"Cuisiner en famille": "",
|
||||
"Poulet rôti": "",
|
||||
"Grignottes de poulet": "",
|
||||
"Cuisine de chef": "",
|
||||
"Suggestion de poulet frit": "",
|
||||
"Mentions légales": "",
|
||||
"Charte de confidentialité": "",
|
||||
"Plan du site": "",
|
||||
"Contact": "",
|
||||
"Gestion des cookies": "",
|
||||
"Recherchez un produit": "",
|
||||
"Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?": "",
|
||||
"N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.": "N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.",
|
||||
"Doux, La référence française de la volaille": "",
|
||||
"Sélectionnez un pays": "",
|
||||
"Sélectionnez un département": "",
|
||||
"Doux Food Services": "",
|
||||
"Tous les produits Doux": "",
|
||||
"Les actualités Doux": "",
|
||||
"Nos conseils ...": "Advice ...",
|
||||
"Nous Rejoindre": "Join us",
|
||||
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">Usefull<\/span><br><span class=\"color-blue\">questions<\/span>",
|
||||
"Nos nouveautés": "",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": ""
|
||||
"<span>les +<\/span><span>Produit<\/span>": "<span>Product<\/span><span>benefits<\/span>",
|
||||
"A fresh verification link has been sent to your email address.": "A fresh verification link has been sent to your email address.",
|
||||
"Acceptez ce cookie pour utiliser les formulaires": "Accept this cookie to use the forms",
|
||||
"Accueil": "Home",
|
||||
"Actualités": "News",
|
||||
"Adresse": "Address",
|
||||
"All rights reserved.": "All rights reserved.",
|
||||
"Authorize": "",
|
||||
"Autre demande": "Other request",
|
||||
"Before proceeding, please check your email for a verification link.": "Before proceeding, please check your email for a verification link.",
|
||||
"Champ obligatoire": "Required Field",
|
||||
"Charte de confidentialité": "Privacy Policy",
|
||||
"click here to request another": "click here to request another",
|
||||
"Code barre": "Barcode",
|
||||
"Code postal": "Postal code",
|
||||
"Confirm Password": "Confirm Password",
|
||||
"Contact": "Contact",
|
||||
"Contact commercial": "Commercial contact",
|
||||
"cookie-notice.banner_text": "We use cookies to ensure the proper functioning of our site and for analytical purposes.\r You can change your mind at any time by clicking on the icon on any page of our site.\r By authorizing these third-party services, you agree to the deposit and reading of cookies and the use of tracking technologies necessary for their proper operation.",
|
||||
"cookie-notice.banner_title": "The :site_name website uses cookies!",
|
||||
"cookie-notice.button_allow": "Allow",
|
||||
"cookie-notice.button_allow_all": "Accept all",
|
||||
"cookie-notice.button_allow_all_title": "Accept all cookies and close the cookies panel",
|
||||
"cookie-notice.button_back": "Back",
|
||||
"cookie-notice.button_close_cookies": "Close cookie window",
|
||||
"cookie-notice.button_customize": "Customize",
|
||||
"cookie-notice.button_customize_cookies": "Customize cookies",
|
||||
"cookie-notice.button_forbid": "Prohibit",
|
||||
"cookie-notice.button_forbid_all": "Reject all",
|
||||
"cookie-notice.button_forbid_all_title": "Refuse all cookies and close the cookies panel",
|
||||
"cookie-notice.button_title_open_new_tab": "Open link in new tab",
|
||||
"cookie-notice.custom.matomo.description": "Audience measurement services are used to generate traffic statistics, which are useful for improving the site.",
|
||||
"cookie-notice.custom.matomo.labelLink": "Learn more",
|
||||
"cookie-notice.custom.matomo.title": "Matomo",
|
||||
"cookie-notice.custom.recaptcha.description": "The purpose of the cookies placed on forms via the recaptcha is to prevent them from being submitted by robots.",
|
||||
"cookie-notice.custom.recaptcha.labelLink": "Learn more",
|
||||
"cookie-notice.custom.recaptcha.title": "reCAPTACHA",
|
||||
"cookie-notice.custom.recaptcha.warning": "You must accept cookies to send the form",
|
||||
"cookie-notice.modal_title": "Cookie management window",
|
||||
"cookie-notice.navigation_title": "Cookies panel navigation",
|
||||
"cookie-notice.panel_content": "Cookie management panel content",
|
||||
"cookie-notice.panel_details": "The functionalities of this site are based on services provided by third parties. If you accept, these third parties will deposit cookies that will enable you to view content on the site hosted by these third parties. Through these cookies, these third parties will collect and use your browsing data for their own purposes, in accordance with their privacy policy (link below). This page allows you to give or withdraw your consent, either globally or service by service.",
|
||||
"cookie-notice.panel_subtitle": "Your privacy is our priority",
|
||||
"cookie-notice.panel_title": "Cookie management panel",
|
||||
"cookie-notice.picture_cookie_title": "Image of a nice big cookie",
|
||||
"Cuisine de chef": "Chef's cooking",
|
||||
"Cuisiner en famille": "Cooking as a family",
|
||||
"Dashboard": "Dashboard",
|
||||
"Date de consommation": "Consumption date",
|
||||
"Date Limite de Consommation": "Expiration date",
|
||||
"Des produits incontournables, Authentiques et Innovants !": "Must-have, Authentic and Innovative products!",
|
||||
"Doux": "Doux",
|
||||
"Doux Food Services": "Doux Food Services",
|
||||
"Doux, La référence française de la volaille": "Doux, The French reference for poultry",
|
||||
"Découvrez DOUX, des produits de volailles françaises.": "Discover DOUX, French poultry products.",
|
||||
"Découvrez tous nos produits à base de volaille.": "Discover all our poultry products.",
|
||||
"Découvrir": "Discover",
|
||||
"E-Mail Address": "E-Mail Address",
|
||||
"Email": "Email",
|
||||
"Email Address": "Email Address",
|
||||
"En savoir +": "Learn more",
|
||||
"En savoir plus": "Learn more",
|
||||
"Envoyer": "Send",
|
||||
"Food service": "",
|
||||
"Forbidden": "Forbidden",
|
||||
"Forgot Your Password?": "Forgot Your Password?",
|
||||
"Gammes": "Ranges",
|
||||
"Gestion des cookies": "Customize cookies",
|
||||
"Go Home": "Go Home",
|
||||
"Go to page :page": "Go to page :page",
|
||||
"Grignottes de poulet": "Chicken Nibbles",
|
||||
"Guadeloupe": "Guadeloupe",
|
||||
"Guyane": "Guyana",
|
||||
"Hello!": "Hello!",
|
||||
"If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.",
|
||||
"If you did not receive the email": "If you did not receive the email",
|
||||
"If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.",
|
||||
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:",
|
||||
"Insérer une pièce jointe": "Insert an attachment",
|
||||
"L'actualité de la marque Doux": "News from the Doux brand",
|
||||
"La marque": "The brand",
|
||||
"La Réunion": "Réunion",
|
||||
"Les actualités Doux": "Doux news",
|
||||
"Les produits": "products",
|
||||
"Lieu d'achat": "Place of purchase",
|
||||
"Login": "Login",
|
||||
"Logout": "Logout",
|
||||
"Madame": "Mrs.",
|
||||
"Marque": "Brand",
|
||||
"Martinique": "Martinique",
|
||||
"Mayotte": "Mayotte",
|
||||
"Mentions légales": "Legal Notice",
|
||||
"Message": "Message",
|
||||
"Monsieur": "Sir",
|
||||
"Name": "Name",
|
||||
"Nom": "Last name",
|
||||
"Nom du produit": "Product Name",
|
||||
"Nos conseils ...": "Advices ...",
|
||||
"Nos gammes produits": "Our product lines",
|
||||
"Nos nouveautés": "Our novelties",
|
||||
"Nos services mettent tout en oeuvre pour y répondre au plus vite.": "Our services do everything they can to respond as quickly as possible.",
|
||||
"Not Found": "Not Found",
|
||||
"Notre Histoire": "Our history",
|
||||
"Nous contacter": "Contact us",
|
||||
"Nous Rejoindre": "Join us",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleur qualité": "We are always working to improve our recipes and offer better quality products",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "We are always working to improve our recipes and offer better quality products.",
|
||||
"Nouvelle-Calédonie": "New Caledonia",
|
||||
"Numéro de lot": "Batch number",
|
||||
"N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.": "Do not hesitate to contact us by completing the form below.<br>We will process your request with the greatest attention as soon as possible.",
|
||||
"of": "of",
|
||||
"Oh no": "Oh no",
|
||||
"Oups ! Une erreur s’est produite...": "Oops ! An error has occurred...",
|
||||
"Page Expired": "Page Expired",
|
||||
"Pagination Navigation": "Pagination Navigation",
|
||||
"Password": "Password",
|
||||
"Photo de l'emballage": "Photo of the packaging",
|
||||
"Photo de l’emballage": "Photo of the packaging",
|
||||
"Plan du site": "Sitemap",
|
||||
"Please click the button below to verify your email address.": "Please click the button below to verify your email address.",
|
||||
"Please confirm your password before continuing.": "Please confirm your password before continuing.",
|
||||
"Polynésie française": "French Polynesia",
|
||||
"Poulet rôti": "Roast chicken",
|
||||
"Poulet, Cordon bleu ou Wing's ?": "Chicken, Cordon bleu or Wing's?",
|
||||
"Produits": "Products",
|
||||
"Préciser votre demande": "Specify your request",
|
||||
"Prénom": "First name",
|
||||
"Qui sommes-nous": "About us",
|
||||
"Recherchez un produit": "Search for a product",
|
||||
"Regards": "Regards",
|
||||
"Register": "Register",
|
||||
"Remember Me": "Remember Me",
|
||||
"Reset Password": "Reset Password",
|
||||
"Reset Password Notification": "Reset Password Notification",
|
||||
"results": "results",
|
||||
"Réclamation produit": "Product complaint",
|
||||
"Résultats": "Results",
|
||||
"Saint-Barthélémy": "Saint-Barthélémy",
|
||||
"Saint-Martin": "Saint-Martin",
|
||||
"Saint-Pierre-et-Miquelon": "Saint-Pierre and Miquelon",
|
||||
"Send Password Reset Link": "Send Password Reset Link",
|
||||
"Server Error": "Server Error",
|
||||
"Service Unavailable": "Service Unavailable",
|
||||
"Showing": "Showing",
|
||||
"Suggestion de poulet frit": "Fried chicken suggestion",
|
||||
"Sélectionnez un département": "Select a department",
|
||||
"Sélectionnez un pays": "Select a country",
|
||||
"Terres australes et antarctiques françaises": "French Southern and Antarctic Lands",
|
||||
"The :attribute must contain at least one letter.": "The :attribute must contain at least one letter.",
|
||||
"The :attribute must contain at least one number.": "The :attribute must contain at least one number.",
|
||||
"The :attribute must contain at least one symbol.": "The :attribute must contain at least one symbol.",
|
||||
"The :attribute must contain at least one uppercase and one lowercase letter.": "The :attribute must contain at least one uppercase and one lowercase letter.",
|
||||
"The given :attribute has appeared in a data leak. Please choose a different :attribute.": "The given :attribute has appeared in a data leak. Please choose a different :attribute.",
|
||||
"This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.",
|
||||
"to": "to",
|
||||
"Toggle navigation": "Toggle navigation",
|
||||
"Too Many Requests": "Too Many Requests",
|
||||
"Tous les produits Doux": "All Soft products",
|
||||
"Toutes nos gammes": "All our product lines",
|
||||
"Téléphone": "Phone",
|
||||
"Unauthorized": "Unauthorized",
|
||||
"Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?": "A question ? An idea ? Any advice?<br>Information on our products?",
|
||||
"Verify Email Address": "Verify Email Address",
|
||||
"Verify Your Email Address": "Verify Your Email Address",
|
||||
"Ville": "City",
|
||||
"Vos coordonnées": "Your contact details",
|
||||
"Votre message a bien été envoyé !": "Your message has been sent !",
|
||||
"Votre message n’a pas pu être envoyé.<br>Nous en sommes désolés et vous prions<br>de bien vouloir réessayer plus tard.": "Your message could not be sent.<br>We apologize and kindly ask you to try again later.",
|
||||
"Vous devez accepter les cookies reCaptcha pour utiliser les formulaires.": "You must accept reCaptcha cookies to use the forms.",
|
||||
"Wallis-et-Futuna": "Wallis and Futuna",
|
||||
"Whoops!": "Whoops!",
|
||||
"You are logged in!": "You are logged in!",
|
||||
"You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.",
|
||||
"Île de Clipperton": "Clipperton Island"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,7 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'password' => 'The provided password is incorrect.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
];
|
||||
|
|
|
|||
47
resources/lang/en/cookie-notice.php
Normal file
47
resources/lang/en/cookie-notice.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
// * Version 5.0.7
|
||||
// phpcs:disable
|
||||
return [
|
||||
'button_customize_cookies' => 'Customize cookies',
|
||||
'button_close_cookies' => 'Close cookie window',
|
||||
'button_toggle_cookie' => 'Accept or refuse',
|
||||
'button_forbid_all' => 'Refuse all',
|
||||
'button_allow_all' => 'Accept all',
|
||||
'button_forbid_all_title' => 'Refuse all cookies and close the cookies panel',
|
||||
'button_allow_all_title' => 'Accept all cookies and close the cookies panel',
|
||||
'button_customize' => 'Customize',
|
||||
'button_validate_and_close' => 'Confirm and close',
|
||||
'button_title_open_new_tab' => 'Open link in new tab',
|
||||
'banner_title' => 'The :site_name website uses cookies!',
|
||||
'banner_text' => 'We use cookies to ensure the proper functioning of our site and for analytical purposes.
|
||||
You can change your mind at any time by clicking on the icon on any page of our site.
|
||||
By authorizing these third-party services, you agree to the deposit and reading of cookies and the use of tracking technologies necessary for their proper operation.',
|
||||
'modal_title' => 'Cookie management window',
|
||||
'panel_content' => 'Cookie management panel content',
|
||||
'picture_cookie_title' => 'Image of a nice big cookie',
|
||||
'navigation_title' => 'Cookies panel navigation',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Audience measurement services make it possible to generate attendance statistics useful for improving the site.',
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'Youtube',
|
||||
'description' => 'Cookies placed via video sharing services are intended to allow the user to view multimedia content directly on the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept cookies to view this video',
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Audience measurement services are used to generate traffic statistics, which are useful for improving the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'The purpose of the cookies placed on forms via the recaptcha is to prevent them from being submitted by robots.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept reCAPTCHA cookies to send the form',
|
||||
]
|
||||
]
|
||||
];
|
||||
|
|
@ -1,19 +1,6 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'next' => 'Next »',
|
||||
'previous' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,22 +1,9 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Your password has been reset!',
|
||||
'sent' => 'We have emailed your password reset link!',
|
||||
'reset' => 'Your password has been reset!',
|
||||
'sent' => 'We have emailed your password reset link!',
|
||||
'throttled' => 'Please wait before retrying.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => "We can't find a user with that email address.",
|
||||
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => 'We can\'t find a user with that email address.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@ return array (
|
|||
),
|
||||
'contact' =>
|
||||
array (
|
||||
'acceptcgu' => '',
|
||||
'disclaimer' => '',
|
||||
'disclaimer' => 'The information collected from this form is processed by the Data Controller to respond to your contact request. To know your rights, you can consult the <a href=":PRIVROUTE">Confidentiality charter.</a>',
|
||||
),
|
||||
'cookie' =>
|
||||
array (
|
||||
|
|
|
|||
|
|
@ -1,158 +1,126 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'accepted_if' => 'The :attribute must be accepted when :other is :value.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
||||
'alpha' => 'The :attribute must only contain letters.',
|
||||
'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
|
||||
'alpha_num' => 'The :attribute must only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
||||
'between' => [
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'accepted_if' => 'The :attribute must be accepted when :other is :value.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
||||
'alpha' => 'The :attribute must only contain letters.',
|
||||
'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
|
||||
'alpha_num' => 'The :attribute must only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
||||
'between' => [
|
||||
'array' => 'The :attribute must have between :min and :max items.',
|
||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'numeric' => 'The :attribute must be between :min and :max.',
|
||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'string' => 'The :attribute must be between :min and :max characters.',
|
||||
'array' => 'The :attribute must have between :min and :max items.',
|
||||
'string' => 'The :attribute must be between :min and :max characters.',
|
||||
],
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'current_password' => 'The password is incorrect.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_equals' => 'The :attribute must be a date equal to :date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'ends_with' => 'The :attribute must end with one of the following: :values.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'gt' => [
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'current_password' => 'The password is incorrect.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_equals' => 'The :attribute must be a date equal to :date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'declined' => 'The :attribute must be declined.',
|
||||
'declined_if' => 'The :attribute must be declined when :other is :value.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'ends_with' => 'The :attribute must end with one of the following: :values.',
|
||||
'enum' => 'The selected :attribute is invalid.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'gt' => [
|
||||
'array' => 'The :attribute must have more than :value items.',
|
||||
'file' => 'The :attribute must be greater than :value kilobytes.',
|
||||
'numeric' => 'The :attribute must be greater than :value.',
|
||||
'file' => 'The :attribute must be greater than :value kilobytes.',
|
||||
'string' => 'The :attribute must be greater than :value characters.',
|
||||
'array' => 'The :attribute must have more than :value items.',
|
||||
'string' => 'The :attribute must be greater than :value characters.',
|
||||
],
|
||||
'gte' => [
|
||||
'gte' => [
|
||||
'array' => 'The :attribute must have :value items or more.',
|
||||
'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute must be greater than or equal to :value.',
|
||||
'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
|
||||
'string' => 'The :attribute must be greater than or equal to :value characters.',
|
||||
'array' => 'The :attribute must have :value items or more.',
|
||||
'string' => 'The :attribute must be greater than or equal to :value characters.',
|
||||
],
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'lt' => [
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'lt' => [
|
||||
'array' => 'The :attribute must have less than :value items.',
|
||||
'file' => 'The :attribute must be less than :value kilobytes.',
|
||||
'numeric' => 'The :attribute must be less than :value.',
|
||||
'file' => 'The :attribute must be less than :value kilobytes.',
|
||||
'string' => 'The :attribute must be less than :value characters.',
|
||||
'array' => 'The :attribute must have less than :value items.',
|
||||
'string' => 'The :attribute must be less than :value characters.',
|
||||
],
|
||||
'lte' => [
|
||||
'lte' => [
|
||||
'array' => 'The :attribute must not have more than :value items.',
|
||||
'file' => 'The :attribute must be less than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute must be less than or equal to :value.',
|
||||
'file' => 'The :attribute must be less than or equal to :value kilobytes.',
|
||||
'string' => 'The :attribute must be less than or equal to :value characters.',
|
||||
'array' => 'The :attribute must not have more than :value items.',
|
||||
'string' => 'The :attribute must be less than or equal to :value characters.',
|
||||
],
|
||||
'max' => [
|
||||
'mac_address' => 'The :attribute must be a valid MAC address.',
|
||||
'max' => [
|
||||
'array' => 'The :attribute must not have more than :max items.',
|
||||
'file' => 'The :attribute must not be greater than :max kilobytes.',
|
||||
'numeric' => 'The :attribute must not be greater than :max.',
|
||||
'file' => 'The :attribute must not be greater than :max kilobytes.',
|
||||
'string' => 'The :attribute must not be greater than :max characters.',
|
||||
'array' => 'The :attribute must not have more than :max items.',
|
||||
'string' => 'The :attribute must not be greater than :max characters.',
|
||||
],
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
||||
'min' => [
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
||||
'min' => [
|
||||
'array' => 'The :attribute must have at least :min items.',
|
||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'numeric' => 'The :attribute must be at least :min.',
|
||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'string' => 'The :attribute must be at least :min characters.',
|
||||
'array' => 'The :attribute must have at least :min items.',
|
||||
'string' => 'The :attribute must be at least :min characters.',
|
||||
],
|
||||
'multiple_of' => 'The :attribute must be a multiple of :value.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'not_regex' => 'The :attribute format is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'password' => 'The password is incorrect.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'multiple_of' => 'The :attribute must be a multiple of :value.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'not_regex' => 'The :attribute format is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'password' => 'The password is incorrect.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'prohibited' => 'The :attribute field is prohibited.',
|
||||
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
|
||||
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
|
||||
'prohibits' => 'The :attribute field prohibits :other from being present.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_array_keys' => 'The :attribute field must contain entries for: :values.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'prohibited' => 'The :attribute field is prohibited.',
|
||||
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
|
||||
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
|
||||
'prohibits' => 'The :attribute field prohibits :other from being present.',
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size' => [
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size' => [
|
||||
'array' => 'The :attribute must contain :size items.',
|
||||
'file' => 'The :attribute must be :size kilobytes.',
|
||||
'numeric' => 'The :attribute must be :size.',
|
||||
'file' => 'The :attribute must be :size kilobytes.',
|
||||
'string' => 'The :attribute must be :size characters.',
|
||||
'array' => 'The :attribute must contain :size items.',
|
||||
'string' => 'The :attribute must be :size characters.',
|
||||
],
|
||||
'starts_with' => 'The :attribute must start with one of the following: :values.',
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'timezone' => 'The :attribute must be a valid timezone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'url' => 'The :attribute must be a valid URL.',
|
||||
'uuid' => 'The :attribute must be a valid UUID.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'starts_with' => 'The :attribute must start with one of the following: :values.',
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'timezone' => 'The :attribute must be a valid timezone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'url' => 'The :attribute must be a valid URL.',
|
||||
'uuid' => 'The :attribute must be a valid UUID.',
|
||||
'attributes' => [],
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap our attribute placeholder
|
||||
| with something more reader friendly such as "E-Mail Address" instead
|
||||
| of "email". This simply helps us make our message more expressive.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,76 +1,177 @@
|
|||
{
|
||||
"Marque": "Marca",
|
||||
"Produits": "productos",
|
||||
"Actualités": "Noticias",
|
||||
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">Preguntas<\/span><br><span class=\"color-blue\">útiles<\/span>",
|
||||
"<span>les +<\/span><span>Produit<\/span>": "<span>Las ventajas<\/span><span>del producto<\/span>",
|
||||
"A fresh verification link has been sent to your email address.": "Se ha enviado un nuevo enlace de verificación a su correo electrónico.",
|
||||
"Acceptez ce cookie pour utiliser les formulaires": "Aceptar esta cookie para utilizar los formularios",
|
||||
"Accueil": "Inicio",
|
||||
"Actualités": "Noticias",
|
||||
"Adresse": "Domicilio",
|
||||
"All rights reserved.": "Todos los derechos reservados.",
|
||||
"Authorize": "Autorizar",
|
||||
"Autre demande": "Otra solicitud",
|
||||
"Before proceeding, please check your email for a verification link.": "Antes de continuar, compruebe el enlace de verificación en su correo electrónico.",
|
||||
"Champ obligatoire": "Campo obligatorio",
|
||||
"Charte de confidentialité": "Documento-marco de confidencialidad",
|
||||
"click here to request another": "haga clic aquí para solicitar otro",
|
||||
"Code barre": "Código de barras",
|
||||
"Code postal": "Código Postal",
|
||||
"Confirm Password": "Confirmar contraseña",
|
||||
"Contact": "Contacto",
|
||||
"Contact commercial": "Contacto comercial",
|
||||
"cookie-notice.banner_text": "Utilizamos cookies para garantizar que nuestro sitio funciona correctamente y con fines analíticos.\r Puede cambiar de opinión en cualquier momento haciendo clic en el icono de cualquier página de nuestro sitio.\r Al autorizar estos servicios de terceros, acepta el depósito y la lectura de cookies y el uso de tecnologías de seguimiento necesarias para su correcto funcionamiento.",
|
||||
"cookie-notice.banner_title": "El sitio web :site_name utiliza cookies.",
|
||||
"cookie-notice.button_allow": "Autorizar",
|
||||
"cookie-notice.button_allow_all": "Aceptar todo",
|
||||
"cookie-notice.button_allow_all_title": "Aceptar todas las cookies y cerrar el panel de cookies",
|
||||
"cookie-notice.button_back": "Volver",
|
||||
"cookie-notice.button_close_cookies": "Cerrar la ventana de cookies",
|
||||
"cookie-notice.button_customize": "Personalizar",
|
||||
"cookie-notice.button_customize_cookies": "Personalizar las cookies",
|
||||
"cookie-notice.button_forbid": "Prohibir",
|
||||
"cookie-notice.button_forbid_all": "Rechazar todo",
|
||||
"cookie-notice.button_forbid_all_title": "Rechazar todas las cookies y cerrar el panel de cookies",
|
||||
"cookie-notice.button_title_open_new_tab": "Abrir el enlace en una nueva pestaña",
|
||||
"cookie-notice.custom.matomo.description": "Los servicios de medición de audiencia se utilizan para generar estadísticas de visitas, útiles para mejorar el sitio.",
|
||||
"cookie-notice.custom.matomo.labelLink": "Más información",
|
||||
"cookie-notice.custom.matomo.title": "Matomo",
|
||||
"cookie-notice.custom.recaptcha.description": "Las cookies colocadas en los formularios que utilizan el recaptcha están diseñadas para evitar que los formularios sean enviados por robots.",
|
||||
"cookie-notice.custom.recaptcha.labelLink": "Más información",
|
||||
"cookie-notice.custom.recaptcha.title": "reCAPTACHA",
|
||||
"cookie-notice.custom.recaptcha.warning": "Debe aceptar las cookies para enviar el formulario",
|
||||
"cookie-notice.modal_title": "Ventana de gestión de cookies",
|
||||
"cookie-notice.navigation_title": "Navegación por el panel de cookies",
|
||||
"cookie-notice.panel_content": "Contenido del panel de cookies",
|
||||
"cookie-notice.panel_details": "Las funcionalidades de este sitio se basan en servicios ofrecidos por terceros. Si acepta, estos terceros depositarán cookies que le permitirán ver en el sitio contenidos alojados por estos terceros. A través de estas cookies, estos terceros recopilarán y utilizarán sus datos de navegación para sus propios fines, de conformidad con su política de privacidad (enlace más abajo). Esta página le permite dar o retirar su consentimiento, globalmente o servicio por servicio.",
|
||||
"cookie-notice.panel_subtitle": "Su privacidad es nuestra prioridad",
|
||||
"cookie-notice.panel_title": "Panel de gestión de cookies",
|
||||
"cookie-notice.picture_cookie_title": "Imagen de una buena galleta grande",
|
||||
"Cuisine de chef": "Cocina del chef",
|
||||
"Cuisiner en famille": "Cocinar en familia",
|
||||
"Dashboard": "Panel",
|
||||
"Date de consommation": "Fecha de consumo",
|
||||
"Date Limite de Consommation": "Fecha límite de consumo",
|
||||
"Des produits incontournables, Authentiques et Innovants !": "Recorra nuestras gamas y, sin duda, encontrará productos de su gusto.",
|
||||
"Doux": "Doux",
|
||||
"Doux Food Services": "Doux Food Services",
|
||||
"Doux, La référence française de la volaille": "Doux, La referencia francesa de la carne de ave",
|
||||
"Découvrez DOUX, des produits de volailles françaises.": "Descubra la marca DOUX de productos franceses de carne de ave.",
|
||||
"Qui sommes-nous": "¿Quiénes somos?",
|
||||
"Découvrez tous nos produits à base de volaille.": "Descubra todos nuestros productos a base de carne de ave.",
|
||||
"Découvrir": "Descubrir",
|
||||
"E-Mail Address": "Dirección de correo electrónico",
|
||||
"Email": "E-mail",
|
||||
"Email Address": "Correo electrónico",
|
||||
"En savoir +": "Aprende más",
|
||||
"En savoir plus": "Adjuntar un documento",
|
||||
"Envoyer": "Enviar",
|
||||
"Food service": "Food Service",
|
||||
"Forbidden": "Prohibido",
|
||||
"Forgot Your Password?": "¿Olvidó su Contraseña?",
|
||||
"Gammes": "Gamas",
|
||||
"Gestion des cookies": "Gestión de las cookies",
|
||||
"Go Home": "Ir a inicio",
|
||||
"Go to page :page": "Ir a la página :page",
|
||||
"Grignottes de poulet": "Productos de pollo para picar",
|
||||
"Guadeloupe": "Guadalupe",
|
||||
"Guyane": "Guayana",
|
||||
"Hello!": "¡Hola!",
|
||||
"If you did not create an account, no further action is required.": "Si no ha creado una cuenta, no se requiere ninguna acción adicional.",
|
||||
"If you did not receive the email": "Si usted no recibió el correo electrónico",
|
||||
"If you did not request a password reset, no further action is required.": "Si no ha solicitado el restablecimiento de contraseña, omita este mensaje de correo electrónico.",
|
||||
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si está teniendo problemas al hacer clic en el botón \":actionText\", copie y pegue la URL de abajo\nen su navegador web:",
|
||||
"Insérer une pièce jointe": "Adjuntar un documento",
|
||||
"L'actualité de la marque Doux": "",
|
||||
"La marque": "La marca",
|
||||
"La Réunion": "Reunión",
|
||||
"Les actualités Doux": "Las últimas noticias de Doux",
|
||||
"Les produits": "Productos",
|
||||
"Lieu d'achat": "Lugar de compra",
|
||||
"Login": "Iniciar sesión",
|
||||
"Logout": "Finalizar sesión",
|
||||
"Madame": "Señora",
|
||||
"Marque": "Marca",
|
||||
"Martinique": "Martinica",
|
||||
"Mayotte": "Mayotte",
|
||||
"Mentions légales": "Menciones legales",
|
||||
"Message": "Mensaje",
|
||||
"Monsieur": "Señor",
|
||||
"Name": "Nombre",
|
||||
"Nom": "Apellidos",
|
||||
"Nom du produit": "Nombre del producto",
|
||||
"Nos conseils ...": "Nuestros consejos…",
|
||||
"Nos gammes produits": "Nuestras gamas de productos",
|
||||
"Nos nouveautés": "nuestras novedades",
|
||||
"Nos services mettent tout en oeuvre pour y répondre au plus vite.": "Nuestros servicios harán lo posible para responderle cuanto antes.",
|
||||
"Not Found": "No encontrado",
|
||||
"Notre Histoire": "A su lado desde 1933",
|
||||
"Nous contacter": "Para contactar con nosotros",
|
||||
"Adresse": "Domicilio",
|
||||
"Votre message a bien été envoyé !": "Su mensaje ha sido enviado",
|
||||
"Nos services mettent tout en oeuvre pour y répondre au plus vite.": "Nuestros servicios harán lo posible para responderle cuanto antes.",
|
||||
"Oups ! Une erreur s’est produite...": "¡Ups! Se ha producido un error...",
|
||||
"Votre message n’a pas pu être envoyé.<br>Nous en sommes désolés et vous prions<br>de bien vouloir réessayer plus tard.": "Su mensaje no ha podido ser enviado.<br>Lo sentimos. Por favor, <br>inténtelo más tarde.",
|
||||
"Vos coordonnées": "Sus datos:",
|
||||
"Monsieur": "Señor",
|
||||
"Madame": "Señora",
|
||||
"Nom": "Apellidos",
|
||||
"Prénom": "Nombre",
|
||||
"Code postal": "Código Postal",
|
||||
"Ville": "Localidad",
|
||||
"Téléphone": "Teléfono",
|
||||
"Email": "E-mail",
|
||||
"Préciser votre demande": "Precise su solicitud:",
|
||||
"Réclamation produit": "Reclamación por un producto",
|
||||
"La marque": "La marca",
|
||||
"Contact commercial": "Contacto comercial",
|
||||
"Autre demande": "Otra solicitud",
|
||||
"Nom du produit": "Nombre del producto",
|
||||
"Code barre": "Código de barras",
|
||||
"Lieu d'achat": "Lugar de compra",
|
||||
"Numéro de lot": "Número de lote",
|
||||
"Date Limite de Consommation": "Fecha límite de consumo",
|
||||
"Date de consommation": "Fecha de consumo",
|
||||
"Message": "Mensaje",
|
||||
"Photo de l'emballage": "Foto del embalaje",
|
||||
"Insérer une pièce jointe": "Adjuntar un documento",
|
||||
"Food service": "Food Service",
|
||||
"En savoir plus": "Adjuntar un documento",
|
||||
"Les produits": "Productos",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleur qualité": "Seguimos trabajando para mejorar nuestras recetas y proponer productos de mejor calidad",
|
||||
"Découvrir": "Descubrir",
|
||||
"Nos gammes produits": "Nuestras gamas de productos",
|
||||
"Toutes nos gammes": "Todas nuestras gamas",
|
||||
"Des produits incontournables, Authentiques et Innovants !": "Recorra nuestras gamas y, sin duda, encontrará productos de su gusto.",
|
||||
"Gammes": "Gamas",
|
||||
"Poulet, Cordon bleu ou Wing's ?": "¿Pollo, Cordon Bleu o Wing's?",
|
||||
"Découvrez tous nos produits à base de volaille.": "Descubra todos nuestros productos a base de carne de ave.",
|
||||
"<span>les +<\/span><span>Produit<\/span>": "<span>Las ventajas<\/span><span>del producto<\/span>",
|
||||
"Résultats": "Resultados",
|
||||
"Cuisiner en famille": "Cocinar en familia",
|
||||
"Poulet rôti": "Pollo asado",
|
||||
"Grignottes de poulet": "Productos de pollo para picar",
|
||||
"Cuisine de chef": "Cocina del chef",
|
||||
"Suggestion de poulet frit": "Sugerencia de pollo frito",
|
||||
"Mentions légales": "Menciones legales",
|
||||
"Charte de confidentialité": "Documento-marco de confidencialidad",
|
||||
"Plan du site": "Mapa de la página web",
|
||||
"Contact": "Contacto",
|
||||
"Gestion des cookies": "Gestión de las cookies",
|
||||
"Recherchez un produit": "Busque un producto",
|
||||
"Doux": "Doux",
|
||||
"Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?": "¿Preguntas? ¿Ideas? ¿Consejos? <br>¿Información sobre nuestros productos?",
|
||||
"N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.": "No dude en ponerse en contacto con nosotros cumplimentando el siguiente formulario. <br>Tramitaremos su petición de forma pertinente lo antes posible.",
|
||||
"Doux, La référence française de la volaille": "Doux, La referencia francesa de la carne de ave",
|
||||
"Sélectionnez un pays": "Seleccione un país",
|
||||
"Sélectionnez un département": "Seleccione una provincia",
|
||||
"Doux Food Services": "Doux Food Services",
|
||||
"Tous les produits Doux": "Todos los productos Doux",
|
||||
"Les actualités Doux": "Las últimas noticias de Doux",
|
||||
"Nos conseils ...": "Nuestros consejos…",
|
||||
"Nous Rejoindre": "Únete a nosotros",
|
||||
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">Preguntas<\/span><br><span class=\"color-blue\">útiles<\/span>",
|
||||
"Nos nouveautés": "nuestras novedades",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Seguimos trabajando para mejorar nuestras recetas y proponer productos de mejor calidad"
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleur qualité": "Seguimos trabajando para mejorar nuestras recetas y proponer productos de mejor calidad",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Seguimos trabajando para mejorar nuestras recetas y proponer productos de mejor calidad",
|
||||
"Nouvelle-Calédonie": "Nueva Caledonia",
|
||||
"Numéro de lot": "Número de lote",
|
||||
"N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.": "No dude en ponerse en contacto con nosotros cumplimentando el siguiente formulario. <br>Tramitaremos su petición de forma pertinente lo antes posible.",
|
||||
"of": "de",
|
||||
"Oh no": "Oh no",
|
||||
"Oups ! Une erreur s’est produite...": "¡Ups! Se ha producido un error...",
|
||||
"Page Expired": "Página expirada",
|
||||
"Pagination Navigation": "Navegación por los enlaces de paginación",
|
||||
"Password": "Contraseña",
|
||||
"Photo de l'emballage": "Foto del embalaje",
|
||||
"Photo de l’emballage": "Foto del embalaje",
|
||||
"Plan du site": "Mapa de la página web",
|
||||
"Please click the button below to verify your email address.": "Por favor, haga clic en el botón de abajo para verificar su dirección de correo electrónico.",
|
||||
"Please confirm your password before continuing.": "Por favor confirme su contraseña antes de continuar.",
|
||||
"Polynésie française": "Polinesia francesa",
|
||||
"Poulet rôti": "Pollo asado",
|
||||
"Poulet, Cordon bleu ou Wing's ?": "¿Pollo, Cordon Bleu o Wing's?",
|
||||
"Produits": "productos",
|
||||
"Préciser votre demande": "Precise su solicitud:",
|
||||
"Prénom": "Nombre",
|
||||
"Qui sommes-nous": "¿Quiénes somos?",
|
||||
"Recherchez un produit": "Busque un producto",
|
||||
"Regards": "Saludos",
|
||||
"Register": "Registrarse",
|
||||
"Remember Me": "Mantener sesión activa",
|
||||
"Reset Password": "Restablecer contraseña",
|
||||
"Reset Password Notification": "Notificación de restablecimiento de contraseña",
|
||||
"results": "resultados",
|
||||
"Réclamation produit": "Reclamación por un producto",
|
||||
"Résultats": "Resultados",
|
||||
"Saint-Barthélémy": "San Bartolomé",
|
||||
"Saint-Martin": "San Martín",
|
||||
"Saint-Pierre-et-Miquelon": "San Pedro y Miquelón",
|
||||
"Send Password Reset Link": "Enviar enlace para restablecer la contraseña",
|
||||
"Server Error": "Error del servidor",
|
||||
"Service Unavailable": "Servicio no disponible",
|
||||
"Showing": "Mostrando",
|
||||
"Suggestion de poulet frit": "Sugerencia de pollo frito",
|
||||
"Sélectionnez un département": "Seleccione una provincia",
|
||||
"Sélectionnez un pays": "Seleccione un país",
|
||||
"Terres australes et antarctiques françaises": "Territorios australes y antárticos franceses",
|
||||
"The :attribute must contain at least one letter.": "La :attribute debe contener al menos una letra.",
|
||||
"The :attribute must contain at least one number.": "La :attribute debe contener al menos un número.",
|
||||
"The :attribute must contain at least one symbol.": "La :attribute debe contener al menos un símbolo.",
|
||||
"The :attribute must contain at least one uppercase and one lowercase letter.": "La :attribute debe contener al menos una letra mayúscula y una minúscula.",
|
||||
"The given :attribute has appeared in a data leak. Please choose a different :attribute.": "La :attribute proporcionada se ha visto comprometida en una filtración de datos (data leak). Elija una :attribute diferente.",
|
||||
"This password reset link will expire in :count minutes.": "Este enlace de restablecimiento de contraseña expirará en :count minutos.",
|
||||
"to": "al",
|
||||
"Toggle navigation": "Activar navegación",
|
||||
"Too Many Requests": "Demasiadas peticiones",
|
||||
"Tous les produits Doux": "Todos los productos Doux",
|
||||
"Toutes nos gammes": "Todas nuestras gamas",
|
||||
"Téléphone": "Teléfono",
|
||||
"Unauthorized": "No autorizado",
|
||||
"Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?": "¿Preguntas? ¿Ideas? ¿Consejos? <br>¿Información sobre nuestros productos?",
|
||||
"Verify Email Address": "Confirme su correo electrónico",
|
||||
"Verify Your Email Address": "Verifique su dirección de correo electrónico",
|
||||
"Ville": "Localidad",
|
||||
"Vos coordonnées": "Sus datos:",
|
||||
"Votre message a bien été envoyé !": "Su mensaje ha sido enviado",
|
||||
"Votre message n’a pas pu être envoyé.<br>Nous en sommes désolés et vous prions<br>de bien vouloir réessayer plus tard.": "Su mensaje no ha podido ser enviado.<br>Lo sentimos. Por favor, <br>inténtelo más tarde.",
|
||||
"Vous devez accepter les cookies reCaptcha pour utiliser les formulaires.": "Debe aceptar las cookies reCaptcha para utilizar los formularios.",
|
||||
"Wallis-et-Futuna": "Wallis y Futuna",
|
||||
"Whoops!": "¡Ups!",
|
||||
"You are logged in!": "¡Usted está conectado!",
|
||||
"You are receiving this email because we received a password reset request for your account.": "Ha recibido este mensaje porque se solicitó un restablecimiento de contraseña para su cuenta.",
|
||||
"Île de Clipperton": "Isla Clipperton"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,7 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements',
|
||||
'password' => 'Le mot de passe fourni est incorrect.',
|
||||
'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.',
|
||||
'failed' => 'Estas credenciales no coinciden con nuestros registros.',
|
||||
'password' => 'La contraseña ingresada no es correcta.',
|
||||
'throttle' => 'Demasiados intentos de acceso. Por favor intente nuevamente en :seconds segundos.',
|
||||
];
|
||||
|
|
|
|||
47
resources/lang/es/cookie-notice.php
Normal file
47
resources/lang/es/cookie-notice.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
// * Version 5.0.7
|
||||
// phpcs:deshabilitar
|
||||
return [
|
||||
'button_customize_cookies' => 'Personalizar cookies',
|
||||
'button_close_cookies' => 'Cerrar ventana de cookies',
|
||||
'button_toggle_cookie' => 'Autoriser ou refuser',
|
||||
'button_forbid_all' => 'Rechazar todo',
|
||||
'button_allow_all' => 'Aceptar todo',
|
||||
'button_forbid_all_title' => 'Rechazar todas las cookies y cerrar el panel de cookies',
|
||||
'button_allow_all_title' => 'Aceptar todas las cookies y cerrar el panel de cookies',
|
||||
'button_customize' => 'Personalizar',
|
||||
'button_validate_and_close' => 'Validar y cerrar',
|
||||
'button_title_open_new_tab' => 'Abrir enlace en una pestaña nueva',
|
||||
'banner_title' => '¡El sitio web:site_name utiliza cookies!',
|
||||
'banner_text' => 'Utilizamos cookies para garantizar que nuestro sitio funcione correctamente y con fines analíticos.
|
||||
Puede cambiar de opinión en cualquier momento haciendo clic en el icono en cada página de nuestro sitio.
|
||||
Al autorizar estos servicios de terceros, acepta el depósito y lectura de cookies y el uso de tecnologías de seguimiento necesarias para su correcto funcionamiento.',
|
||||
'modal_title' => 'Ventana de gestión de cookies',
|
||||
'panel_content' => 'Contenido del panel de cookies',
|
||||
'picture_cookie_title' => 'Imagen de una galleta grande y bonita',
|
||||
'navigation_title' => 'Navegación del panel de cookies',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Los servicios de medición de audiencia permiten generar estadísticas de tráfico útiles para mejorar el sitio.',
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'Youtube',
|
||||
'description' => 'Las cookies colocadas a través de servicios para compartir vídeos tienen como objetivo permitir al usuario ver contenido multimedia directamente en el sitio.',
|
||||
'labelLink' => 'Más información',
|
||||
'advertencia' => 'Debes aceptar cookies para ver este vídeo',
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Los servicios de medición de audiencia permiten generar estadísticas de tráfico útiles para mejorar el sitio.',
|
||||
'labelLink' => 'Más información',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'Las cookies que se colocan a través de recaptcha en los formularios tienen como objetivo evitar que sean enviadas por robots.',
|
||||
'labelLink' => 'Más información',
|
||||
'warning' => 'Debes aceptar las cookies reCAPTCHA para enviar el formulario',
|
||||
]
|
||||
]
|
||||
];
|
||||
|
|
@ -1,19 +1,19 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'kid' => 'enfant',
|
||||
'kid' => 'niño',
|
||||
'balanced_menu_type' => [
|
||||
'kid' => 'enfant',
|
||||
'teenager' => 'adolescent',
|
||||
'woman' => 'femme',
|
||||
'man' => 'homme',
|
||||
'senior' => 'senior',
|
||||
'kid' => 'niño',
|
||||
'teenager' => 'adolescente',
|
||||
'woman' => 'mujer',
|
||||
'man' => 'hombre',
|
||||
'senior' => 'sénior',
|
||||
'withPrefix' => [
|
||||
'kid' => 'un enfant',
|
||||
'teenager' => 'un adolescent',
|
||||
'woman' => 'une femme',
|
||||
'man' => 'un homme',
|
||||
'senior' => 'un senior'
|
||||
'kid' => 'un niño',
|
||||
'teenager' => 'un adolescente',
|
||||
'woman' => 'una mujer',
|
||||
'man' => 'un hombre',
|
||||
'senior' => 'un mayor'
|
||||
]
|
||||
]
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,17 +1,6 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Précédent',
|
||||
'next' => 'Suivant »',
|
||||
'next' => 'Siguiente »',
|
||||
'previous' => '« Anterior',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,20 +1,9 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Votre mot de passe a été réinitialisé !',
|
||||
'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !',
|
||||
'throttled' => 'Veuillez patienter avant de réessayer.',
|
||||
'token' => "Ce jeton de réinitialisation du mot de passe n'est pas valide.",
|
||||
'user' => "Aucun utilisateur n'a été trouvé avec cette adresse email.",
|
||||
'reset' => '¡Su contraseña ha sido restablecida!',
|
||||
'sent' => '¡Le hemos enviado por correo electrónico el enlace para restablecer su contraseña!',
|
||||
'throttled' => 'Por favor espere antes de intentar de nuevo.',
|
||||
'token' => 'El token de restablecimiento de contraseña es inválido.',
|
||||
'user' => 'No encontramos ningún usuario con ese correo electrónico.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@ return array (
|
|||
),
|
||||
'contact' =>
|
||||
array (
|
||||
'acceptcgu' => 'Acepto las condiciones generales de uso de la web y autorizo a Société Bretonne de Volaille a tratar mis datos personales de acuerdo con la Política de confidencialidad.',
|
||||
'disclaimer' => 'La información que nos comunique se recopilará y tratará por Société Bretonne de Volaille, responsable de tratamiento según los objetivos definidos en nuestra Política de confidencialidad. Esta información está destinada al personal de Société Bretonne de Volaille y puede compartirse con sus subcontratistas.<br /> Puede retirar su consentimiento en cualquier momento. Para cualquier información adicional sobre sus datos personales y sus derechos, consulte nuestra <a href=":PRIVROUTE">Política de confidencialidad.</a>',
|
||||
'disclaimer' => 'La información recogida en este formulario es procesada por el Responsable del tratamiento para responder a su solicitud de contacto. Para conocer sus derechos, puede consultar la <a href=":PRIVROUTE">Carta de confidencialidad.</a>',
|
||||
),
|
||||
'cookie' =>
|
||||
array (
|
||||
|
|
|
|||
|
|
@ -1,187 +1,162 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'Le champ :attribute doit être accepté.',
|
||||
'active_url' => "Le champ :attribute n'est pas une URL valide.",
|
||||
'after' => 'Le champ :attribute doit être une date postérieure au :date.',
|
||||
'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.',
|
||||
'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.',
|
||||
'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.',
|
||||
'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.',
|
||||
'array' => 'Le champ :attribute doit être un tableau.',
|
||||
'before' => 'Le champ :attribute doit être une date antérieure au :date.',
|
||||
'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.',
|
||||
'accepted' => ':attribute debe ser aceptado.',
|
||||
'accepted_if' => ':attribute debe ser aceptado cuando :other sea :value.',
|
||||
'active_url' => ':attribute no es una URL válida.',
|
||||
'after' => ':attribute debe ser una fecha posterior a :date.',
|
||||
'after_or_equal' => ':attribute debe ser una fecha posterior o igual a :date.',
|
||||
'alpha' => ':attribute sólo debe contener letras.',
|
||||
'alpha_dash' => ':attribute sólo debe contener letras, números, guiones y guiones bajos.',
|
||||
'alpha_num' => ':attribute sólo debe contener letras y números.',
|
||||
'array' => ':attribute debe ser un conjunto.',
|
||||
'before' => ':attribute debe ser una fecha anterior a :date.',
|
||||
'before_or_equal' => ':attribute debe ser una fecha anterior o igual a :date.',
|
||||
'between' => [
|
||||
'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.',
|
||||
'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.',
|
||||
'array' => ':attribute tiene que tener entre :min - :max elementos.',
|
||||
'file' => ':attribute debe pesar entre :min - :max kilobytes.',
|
||||
'numeric' => ':attribute tiene que estar entre :min - :max.',
|
||||
'string' => ':attribute tiene que tener entre :min - :max caracteres.',
|
||||
],
|
||||
'boolean' => 'Le champ :attribute doit être vrai ou faux.',
|
||||
'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.',
|
||||
'date' => "Le champ :attribute n'est pas une date valide.",
|
||||
'date_equals' => 'Le champ :attribute doit être une date égale à :date.',
|
||||
'date_format' => 'Le champ :attribute ne correspond pas au format :format.',
|
||||
'different' => 'Les champs :attribute et :other doivent être différents.',
|
||||
'digits' => 'Le champ :attribute doit contenir :digits chiffres.',
|
||||
'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.',
|
||||
'dimensions' => "La taille de l'image :attribute n'est pas conforme.",
|
||||
'distinct' => 'Le champ :attribute a une valeur en double.',
|
||||
'email' => 'Le champ :attribute doit être une adresse email valide.',
|
||||
'ends_with' => 'Le champ :attribute doit se terminer par une des valeurs suivantes : :values',
|
||||
'exists' => 'Le champ :attribute sélectionné est invalide.',
|
||||
'file' => 'Le champ :attribute doit être un fichier.',
|
||||
'filled' => 'Le champ :attribute doit avoir une valeur.',
|
||||
'boolean' => 'El campo :attribute debe tener un valor verdadero o falso.',
|
||||
'confirmed' => 'La confirmación de :attribute no coincide.',
|
||||
'current_password' => 'La contraseña es incorrecta.',
|
||||
'date' => ':attribute no es una fecha válida.',
|
||||
'date_equals' => ':attribute debe ser una fecha igual a :date.',
|
||||
'date_format' => ':attribute no corresponde al formato :format.',
|
||||
'declined' => ':attribute debe ser rechazado.',
|
||||
'declined_if' => ':attribute debe ser rechazado cuando :other sea :value.',
|
||||
'different' => ':attribute y :other deben ser diferentes.',
|
||||
'digits' => ':attribute debe tener :digits dígitos.',
|
||||
'digits_between' => ':attribute debe tener entre :min y :max dígitos.',
|
||||
'dimensions' => 'Las dimensiones de la imagen :attribute no son válidas.',
|
||||
'distinct' => 'El campo :attribute contiene un valor duplicado.',
|
||||
'email' => ':attribute no es un correo válido.',
|
||||
'ends_with' => 'El campo :attribute debe finalizar con uno de los siguientes valores: :values',
|
||||
'enum' => 'El :attribute seleccionado es inválido.',
|
||||
'exists' => 'El :attribute seleccionado es inválido.',
|
||||
'file' => 'El campo :attribute debe ser un archivo.',
|
||||
'filled' => 'El campo :attribute es obligatorio.',
|
||||
'gt' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir plus de :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir plus de :value éléments.',
|
||||
'array' => 'El campo :attribute debe tener más de :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener más de :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser mayor que :value.',
|
||||
'string' => 'El campo :attribute debe tener más de :value caracteres.',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au moins :value éléments.',
|
||||
'array' => 'El campo :attribute debe tener como mínimo :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener como mínimo :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser como mínimo :value.',
|
||||
'string' => 'El campo :attribute debe tener como mínimo :value caracteres.',
|
||||
],
|
||||
'image' => 'Le champ :attribute doit être une image.',
|
||||
'in' => 'Le champ :attribute est invalide.',
|
||||
'in_array' => "Le champ :attribute n'existe pas dans :other.",
|
||||
'integer' => 'Le champ :attribute doit être un entier.',
|
||||
'ip' => 'Le champ :attribute doit être une adresse IP valide.',
|
||||
'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.',
|
||||
'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.',
|
||||
'json' => 'Le champ :attribute doit être un document JSON valide.',
|
||||
'image' => ':attribute debe ser una imagen.',
|
||||
'in' => ':attribute es inválido.',
|
||||
'in_array' => 'El campo :attribute no existe en :other.',
|
||||
'integer' => ':attribute debe ser un número entero.',
|
||||
'ip' => ':attribute debe ser una dirección IP válida.',
|
||||
'ipv4' => ':attribute debe ser una dirección IPv4 válida.',
|
||||
'ipv6' => ':attribute debe ser una dirección IPv6 válida.',
|
||||
'json' => 'El campo :attribute debe ser una cadena JSON válida.',
|
||||
'lt' => [
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir moins de :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir moins de :value éléments.',
|
||||
'array' => 'El campo :attribute debe tener menos de :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener menos de :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser menor que :value.',
|
||||
'string' => 'El campo :attribute debe tener menos de :value caracteres.',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au plus :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au plus :value éléments.',
|
||||
'array' => 'El campo :attribute debe tener como máximo :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener como máximo :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser como máximo :value.',
|
||||
'string' => 'El campo :attribute debe tener como máximo :value caracteres.',
|
||||
],
|
||||
'mac_address' => 'El campo :attribute debe ser una dirección MAC válida.',
|
||||
'max' => [
|
||||
'numeric' => 'La valeur de :attribute ne peut être supérieure à :max.',
|
||||
'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.',
|
||||
'string' => 'Le texte de :attribute ne peut contenir plus de :max caractères.',
|
||||
'array' => 'Le tableau :attribute ne peut contenir plus de :max éléments.',
|
||||
'array' => ':attribute no debe tener más de :max elementos.',
|
||||
'file' => ':attribute no debe ser mayor que :max kilobytes.',
|
||||
'numeric' => ':attribute no debe ser mayor que :max.',
|
||||
'string' => ':attribute no debe ser mayor que :max caracteres.',
|
||||
],
|
||||
'mimes' => 'Le champ :attribute doit être un fichier de type : :values.',
|
||||
'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.',
|
||||
'mimes' => ':attribute debe ser un archivo con formato: :values.',
|
||||
'mimetypes' => ':attribute debe ser un archivo con formato: :values.',
|
||||
'min' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure à :min kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :min caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au moins :min éléments.',
|
||||
'array' => ':attribute debe tener al menos :min elementos.',
|
||||
'file' => 'El tamaño de :attribute debe ser de al menos :min kilobytes.',
|
||||
'numeric' => 'El tamaño de :attribute debe ser de al menos :min.',
|
||||
'string' => ':attribute debe contener al menos :min caracteres.',
|
||||
],
|
||||
'multiple_of' => 'La valeur de :attribute doit être un multiple de :value',
|
||||
'not_in' => "Le champ :attribute sélectionné n'est pas valide.",
|
||||
'not_regex' => "Le format du champ :attribute n'est pas valide.",
|
||||
'numeric' => 'Le champ :attribute doit contenir un nombre.',
|
||||
'password' => 'Le mot de passe est incorrect',
|
||||
'present' => 'Le champ :attribute doit être présent.',
|
||||
'regex' => 'Le format du champ :attribute est invalide.',
|
||||
'required' => 'Le champ :attribute est obligatoire.',
|
||||
'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.',
|
||||
'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.',
|
||||
'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.',
|
||||
'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.',
|
||||
'required_without' => "Le champ :attribute est obligatoire quand :values n'est pas présent.",
|
||||
'required_without_all' => "Le champ :attribute est requis quand aucun de :values n'est présent.",
|
||||
'same' => 'Les champs :attribute et :other doivent être identiques.',
|
||||
'multiple_of' => 'El campo :attribute debe ser múltiplo de :value',
|
||||
'not_in' => ':attribute es inválido.',
|
||||
'not_regex' => 'El formato del campo :attribute no es válido.',
|
||||
'numeric' => ':attribute debe ser numérico.',
|
||||
'password' => 'La contraseña es incorrecta.',
|
||||
'phone' => 'Le champ :attribute n\'est pas un numéro de téléphone valide.',
|
||||
'present' => 'El campo :attribute debe estar presente.',
|
||||
'prohibited' => 'El campo :attribute está prohibido.',
|
||||
'prohibited_if' => 'El campo :attribute está prohibido cuando :other es :value.',
|
||||
'prohibited_unless' => 'El campo :attribute está prohibido a menos que :other sea :values.',
|
||||
'prohibits' => 'El campo :attribute prohibe que :other esté presente.',
|
||||
'regex' => 'El formato de :attribute es inválido.',
|
||||
'required' => 'El campo :attribute es obligatorio.',
|
||||
'required_array_keys' => 'El campo :attribute debe contener entradas para: :values.',
|
||||
'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.',
|
||||
'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.',
|
||||
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.',
|
||||
'required_with_all' => 'El campo :attribute es obligatorio cuando :values están presentes.',
|
||||
'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.',
|
||||
'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values está presente.',
|
||||
'same' => ':attribute y :other deben coincidir.',
|
||||
'size' => [
|
||||
'numeric' => 'La valeur de :attribute doit être :size.',
|
||||
'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.',
|
||||
'string' => 'Le texte de :attribute doit contenir :size caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir :size éléments.',
|
||||
'array' => ':attribute debe contener :size elementos.',
|
||||
'file' => 'El tamaño de :attribute debe ser :size kilobytes.',
|
||||
'numeric' => 'El tamaño de :attribute debe ser :size.',
|
||||
'string' => ':attribute debe contener :size caracteres.',
|
||||
],
|
||||
'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values',
|
||||
'string' => 'Le champ :attribute doit être une chaîne de caractères.',
|
||||
'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.',
|
||||
'unique' => 'La valeur du champ :attribute est déjà utilisée.',
|
||||
'uploaded' => "Le fichier du champ :attribute n'a pu être téléversé.",
|
||||
'url' => "Le format de l'URL de :attribute n'est pas valide.",
|
||||
'uuid' => 'Le champ :attribute doit être un UUID valide',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'phone' => 'Le champ :attribute n\'est pas un numéro de téléphone valide.',
|
||||
|
||||
'custom' => [
|
||||
'starts_with' => 'El campo :attribute debe comenzar con uno de los siguientes valores: :values',
|
||||
'string' => 'El campo :attribute debe ser una cadena de caracteres.',
|
||||
'timezone' => ':Attribute debe ser una zona horaria válida.',
|
||||
'unique' => 'El campo :attribute ya ha sido registrado.',
|
||||
'uploaded' => 'Subir :attribute ha fallado.',
|
||||
'url' => ':Attribute debe ser una URL válida.',
|
||||
'uuid' => 'El campo :attribute debe ser un UUID válido.',
|
||||
'attributes' => [
|
||||
'address' => 'dirección',
|
||||
'age' => 'edad',
|
||||
'answers' => 'respuestas',
|
||||
'answers.*' => 'respuesta',
|
||||
'available' => 'disponible',
|
||||
'breeder_code' => 'código de obtentor',
|
||||
'city' => 'ciudad',
|
||||
'content' => 'contenido',
|
||||
'country' => 'país',
|
||||
'date' => 'fecha',
|
||||
'day' => 'día',
|
||||
'description' => 'descripción',
|
||||
'email' => 'dirección de correo electrónico',
|
||||
'excerpt' => 'extracto',
|
||||
'first_name' => 'nombre de pila',
|
||||
'gender' => 'género',
|
||||
'hour' => 'hora',
|
||||
'last_name' => 'apellido',
|
||||
'minute' => 'minuto',
|
||||
'mobile' => 'teléfono móvil',
|
||||
'month' => 'mes',
|
||||
'name' => 'nombre',
|
||||
'password' => 'contraseña',
|
||||
'password_confirmation' => 'confirmación de contraseña',
|
||||
'phone' => 'teléfono',
|
||||
'picture' => 'imagen',
|
||||
'postal_code' => 'código postal',
|
||||
'second' => 'el segundo',
|
||||
'sex' => 'sexo',
|
||||
'size' => 'tamaño',
|
||||
'time' => 'hora',
|
||||
'title' => 'título',
|
||||
'username' => 'nombre del usuario',
|
||||
'year' => 'año',
|
||||
],
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [
|
||||
'name' => 'nom',
|
||||
'username' => "nom d'utilisateur",
|
||||
'email' => 'adresse email',
|
||||
'first_name' => 'prénom',
|
||||
'last_name' => 'nom',
|
||||
'password' => 'mot de passe',
|
||||
'password_confirmation' => 'confirmation du mot de passe',
|
||||
'city' => 'ville',
|
||||
'country' => 'pays',
|
||||
'address' => 'adresse',
|
||||
'phone' => 'téléphone',
|
||||
'mobile' => 'portable',
|
||||
'age' => 'âge',
|
||||
'sex' => 'sexe',
|
||||
'gender' => 'genre',
|
||||
'day' => 'jour',
|
||||
'month' => 'mois',
|
||||
'year' => 'année',
|
||||
'hour' => 'heure',
|
||||
'minute' => 'minute',
|
||||
'second' => 'seconde',
|
||||
'title' => 'titre',
|
||||
'content' => 'contenu',
|
||||
'description' => 'description',
|
||||
'excerpt' => 'extrait',
|
||||
'date' => 'date',
|
||||
'time' => 'heure',
|
||||
'available' => 'disponible',
|
||||
'size' => 'taille',
|
||||
'answers' => 'réponses',
|
||||
'answers.*' => 'réponse',
|
||||
'postal_code' => 'code postal',
|
||||
'picture' => 'image',
|
||||
'breeder_code' => 'code éleveur'
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,76 +1,177 @@
|
|||
{
|
||||
"Marque": "Marque",
|
||||
"Produits": "Produits",
|
||||
"Actualités": "Actualités",
|
||||
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>",
|
||||
"<span>les +<\/span><span>Produit<\/span>": "<span>les +<\/span><span>Produit<\/span>",
|
||||
"A fresh verification link has been sent to your email address.": "Un nouveau lien de vérification a été envoyé à votre adresse e-mail.",
|
||||
"Acceptez ce cookie pour utiliser les formulaires": "",
|
||||
"Accueil": "Accueil",
|
||||
"Découvrez DOUX, des produits de volailles françaises.": "Découvrez DOUX, des produits de volailles françaises",
|
||||
"Qui sommes-nous": "Qui sommes-nous",
|
||||
"Les produits": "Les produits",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleur qualité": "Ne ratez aucune de nos nouveautés",
|
||||
"Découvrir": "Découvrir",
|
||||
"Nos gammes produits": "Nos gammes produits",
|
||||
"Toutes nos gammes": "Les gammes disponibles",
|
||||
"Actualités": "Actualités",
|
||||
"Adresse": "",
|
||||
"All rights reserved.": "Tous droits réservés.",
|
||||
"Authorize": "Autoriser",
|
||||
"Autre demande": "",
|
||||
"Before proceeding, please check your email for a verification link.": "Avant de continuer, merci de vérifier votre e-mail contenant un lien de vérification.",
|
||||
"Champ obligatoire": "",
|
||||
"Charte de confidentialité": "",
|
||||
"click here to request another": "cliquez ici pour en demander un autre",
|
||||
"Code barre": "",
|
||||
"Code postal": "",
|
||||
"Confirm Password": "Confirmez votre mot de passe",
|
||||
"Contact": "",
|
||||
"Contact commercial": "",
|
||||
"cookie-notice.banner_text": "Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des fins analytiques.\r Vous pouvez changer d'avis à tout moment en cliquant sur l'icône présente sur chaque page de notre site.\r En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement.",
|
||||
"cookie-notice.banner_title": "Le site internet :site_name utilise des cookies !",
|
||||
"cookie-notice.button_allow": "Autoriser",
|
||||
"cookie-notice.button_allow_all": "Tout accepter",
|
||||
"cookie-notice.button_allow_all_title": "Accepter tous les cookies et fermer le panneau des cookies",
|
||||
"cookie-notice.button_back": "Retour",
|
||||
"cookie-notice.button_close_cookies": "Fermer la fenêtre des cookies",
|
||||
"cookie-notice.button_customize": "Personnaliser",
|
||||
"cookie-notice.button_customize_cookies": "Personnaliser les cookies",
|
||||
"cookie-notice.button_forbid": "Interdire",
|
||||
"cookie-notice.button_forbid_all": "Tout refuser",
|
||||
"cookie-notice.button_forbid_all_title": "Refuser tous les cookies et fermer le panneau des cookies",
|
||||
"cookie-notice.button_title_open_new_tab": "Ouvrir le lien dans un nouvel onglet",
|
||||
"cookie-notice.custom.matomo.description": "Les services de mesure d’audience permettent de générer des statistiques de fréquentation utiles à l’amélioration du site.",
|
||||
"cookie-notice.custom.matomo.labelLink": "En apprendre plus",
|
||||
"cookie-notice.custom.matomo.title": "Matomo",
|
||||
"cookie-notice.custom.recaptcha.description": "Les cookies qui sont déposés via le recaptcha sur les formulaires ont pour finalité d’empêcher que ceux-ci ne soient soumis par des robots.",
|
||||
"cookie-notice.custom.recaptcha.labelLink": "En apprendre plus",
|
||||
"cookie-notice.custom.recaptcha.title": "reCAPTACHA",
|
||||
"cookie-notice.custom.recaptcha.warning": "Vous devez accepter les cookies pour envoyer le formulaire",
|
||||
"cookie-notice.modal_title": "Fenêtre de gestion de cookies",
|
||||
"cookie-notice.navigation_title": "Navigation du panneau des cookies",
|
||||
"cookie-notice.panel_content": "Contenu du panneau des cookies",
|
||||
"cookie-notice.panel_details": "Les fonctionnalités de ce site s'appuient sur des services proposés par des tiers. Si vous acceptez, ces tiers déposeront des cookies qui vous permettront de visualiser sur le site du contenu hébergé par ces tiers. Via ces cookies, ces tiers collecteront et utiliseront vos données de navigation pour des finalités qui leur sont propres, conformément à leur politique de confidentialité (lien ci-dessous). Cette page vous permet de donner ou de retirer votre consentement, soit globalement soit service par service.",
|
||||
"cookie-notice.panel_subtitle": "Le respect de votre vie privée est notre priorité",
|
||||
"cookie-notice.panel_title": "Panneau de gestion des cookies",
|
||||
"cookie-notice.picture_cookie_title": "Image d'un bon gros cookie",
|
||||
"Cuisine de chef": "",
|
||||
"Cuisiner en famille": "",
|
||||
"Dashboard": "Tableau de bord",
|
||||
"Date de consommation": "",
|
||||
"Date Limite de Consommation": "",
|
||||
"Des produits incontournables, Authentiques et Innovants !": "Parcourez nos gammes et trouvez les produits qui vous feront plaisir.",
|
||||
"Doux": "Doux",
|
||||
"Résultats": "Résultats",
|
||||
"Mentions légales": "Mentions légales",
|
||||
"Doux Food Services": "",
|
||||
"Doux, La référence française de la volaille": "Doux, La référence française de la volaille",
|
||||
"Découvrez DOUX, des produits de volailles françaises.": "Découvrez DOUX, des produits de volailles françaises",
|
||||
"Découvrez tous nos produits à base de volaille.": "",
|
||||
"Découvrir": "Découvrir",
|
||||
"E-Mail Address": "Adresse e-mail",
|
||||
"Email": "",
|
||||
"Email Address": "Adresse e-mail",
|
||||
"En savoir +": "",
|
||||
"En savoir plus": "",
|
||||
"Envoyer": "",
|
||||
"Food service": "",
|
||||
"Forbidden": "Interdit",
|
||||
"Forgot Your Password?": "Mot de passe oublié ?",
|
||||
"Gammes": "",
|
||||
"Gestion des cookies": "",
|
||||
"Go Home": "Aller à l'accueil",
|
||||
"Go to page :page": "Aller à la page :page",
|
||||
"Grignottes de poulet": "",
|
||||
"Guadeloupe": "",
|
||||
"Guyane": "",
|
||||
"Hello!": "Bonjour !",
|
||||
"If you did not create an account, no further action is required.": "Si vous n'avez pas créé de compte, vous pouvez ignorer ce message.",
|
||||
"If you did not receive the email": "Si vous n'avez pas reçu cet e-mail",
|
||||
"If you did not request a password reset, no further action is required.": "Si vous n'avez pas demandé de réinitialisation de mot de passe, vous pouvez ignorer ce message.",
|
||||
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si vous avez des difficultés à cliquer sur le bouton \":actionText\", copiez et collez l'URL ci-dessous\ndans votre navigateur Web:",
|
||||
"Insérer une pièce jointe": "",
|
||||
"L'actualité de la marque Doux": "",
|
||||
"La marque": "",
|
||||
"La Réunion": "",
|
||||
"Les actualités Doux": "",
|
||||
"Les produits": "Les produits",
|
||||
"Lieu d'achat": "",
|
||||
"Login": "Connexion",
|
||||
"Logout": "Déconnexion",
|
||||
"Madame": "",
|
||||
"Marque": "Marque",
|
||||
"Martinique": "",
|
||||
"Mayotte": "",
|
||||
"Mentions légales": "Mentions légales et CGU",
|
||||
"Message": "",
|
||||
"Monsieur": "",
|
||||
"Name": "Nom",
|
||||
"Nom": "",
|
||||
"Nom du produit": "",
|
||||
"Nos conseils ...": "Nos conseils ...",
|
||||
"Nos gammes produits": "Nos gammes produits",
|
||||
"Nos nouveautés": "Produits à la une",
|
||||
"Nos services mettent tout en oeuvre pour y répondre au plus vite.": "",
|
||||
"Not Found": "Non trouvé",
|
||||
"Notre Histoire": "Depuis 1933 à vos côtés",
|
||||
"Nous contacter": "",
|
||||
"Adresse": "",
|
||||
"Votre message a bien été envoyé !": "",
|
||||
"Nos services mettent tout en oeuvre pour y répondre au plus vite.": "",
|
||||
"Oups ! Une erreur s’est produite...": "",
|
||||
"Votre message n’a pas pu être envoyé.<br>Nous en sommes désolés et vous prions<br>de bien vouloir réessayer plus tard.": "",
|
||||
"Vos coordonnées": "",
|
||||
"Monsieur": "",
|
||||
"Madame": "",
|
||||
"Nom": "",
|
||||
"Prénom": "",
|
||||
"Code postal": "",
|
||||
"Ville": "",
|
||||
"Téléphone": "",
|
||||
"Email": "",
|
||||
"Préciser votre demande": "",
|
||||
"Réclamation produit": "",
|
||||
"La marque": "",
|
||||
"Contact commercial": "",
|
||||
"Autre demande": "",
|
||||
"Nom du produit": "",
|
||||
"Code barre": "",
|
||||
"Lieu d'achat": "",
|
||||
"Numéro de lot": "",
|
||||
"Date Limite de Consommation": "",
|
||||
"Date de consommation": "",
|
||||
"Message": "",
|
||||
"Photo de l'emballage": "Photo de l'emballage",
|
||||
"Insérer une pièce jointe": "",
|
||||
"Food service": "",
|
||||
"En savoir plus": "",
|
||||
"Gammes": "",
|
||||
"Poulet, Cordon bleu ou Wing's ?": "",
|
||||
"Découvrez tous nos produits à base de volaille.": "",
|
||||
"<span>les +<\/span><span>Produit<\/span>": "<span>les +<\/span><span>Produit<\/span>",
|
||||
"Cuisiner en famille": "",
|
||||
"Poulet rôti": "",
|
||||
"Grignottes de poulet": "",
|
||||
"Cuisine de chef": "",
|
||||
"Suggestion de poulet frit": "",
|
||||
"Charte de confidentialité": "",
|
||||
"Plan du site": "",
|
||||
"Contact": "",
|
||||
"Gestion des cookies": "",
|
||||
"Recherchez un produit": "",
|
||||
"Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?": "",
|
||||
"N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.": "",
|
||||
"Doux, La référence française de la volaille": "Doux, La référence française de la volaille",
|
||||
"Sélectionnez un pays": "",
|
||||
"Sélectionnez un département": "",
|
||||
"Doux Food Services": "",
|
||||
"Tous les produits Doux": "",
|
||||
"Les actualités Doux": "",
|
||||
"Nos conseils ...": "Nos conseils ...",
|
||||
"Nous Rejoindre": "",
|
||||
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>",
|
||||
"Nos nouveautés": "Produits à la une",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Ne ratez aucune de nos nouveautés"
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleur qualité": "Ne ratez aucune de nos nouveautés",
|
||||
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Ne ratez aucune de nos nouveautés",
|
||||
"Nouvelle-Calédonie": "",
|
||||
"Numéro de lot": "",
|
||||
"N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.": "",
|
||||
"of": "de",
|
||||
"Oh no": "Oh non",
|
||||
"Oups ! Une erreur s’est produite...": "",
|
||||
"Page Expired": "Page expirée",
|
||||
"Pagination Navigation": "Pagination",
|
||||
"Password": "Mot de passe",
|
||||
"Photo de l'emballage": "Photo de l'emballage",
|
||||
"Photo de l’emballage": "",
|
||||
"Plan du site": "",
|
||||
"Please click the button below to verify your email address.": "Veuillez cliquer sur le bouton ci-dessous pour vérifier votre adresse e-mail :",
|
||||
"Please confirm your password before continuing.": "Veuillez confirmer votre mot de passe avant de continuer.",
|
||||
"Polynésie française": "",
|
||||
"Poulet rôti": "",
|
||||
"Poulet, Cordon bleu ou Wing's ?": "",
|
||||
"Produits": "Produits",
|
||||
"Préciser votre demande": "",
|
||||
"Prénom": "",
|
||||
"Qui sommes-nous": "Qui sommes-nous",
|
||||
"Recherchez un produit": "",
|
||||
"Regards": "Cordialement",
|
||||
"Register": "Inscription",
|
||||
"Remember Me": "Se souvenir de moi",
|
||||
"Reset Password": "Réinitialisation du mot de passe",
|
||||
"Reset Password Notification": "Notification de réinitialisation du mot de passe",
|
||||
"results": "résultats",
|
||||
"Réclamation produit": "",
|
||||
"Résultats": "Résultats",
|
||||
"Saint-Barthélémy": "",
|
||||
"Saint-Martin": "",
|
||||
"Saint-Pierre-et-Miquelon": "",
|
||||
"Send Password Reset Link": "Envoyer le lien de réinitialisation du mot de passe",
|
||||
"Server Error": "Erreur serveur",
|
||||
"Service Unavailable": "Service indisponible",
|
||||
"Showing": "Montrant",
|
||||
"Suggestion de poulet frit": "",
|
||||
"Sélectionnez un département": "",
|
||||
"Sélectionnez un pays": "",
|
||||
"Terres australes et antarctiques françaises": "",
|
||||
"The :attribute must contain at least one letter.": "Le champ :attribute doit avoir au moins une lettre.",
|
||||
"The :attribute must contain at least one number.": "Le champ :attribute doit avoir au moins un numéro.",
|
||||
"The :attribute must contain at least one symbol.": "Le champ :attribute doit avoir au moins un symbole.",
|
||||
"The :attribute must contain at least one uppercase and one lowercase letter.": "Le champ :attribute doit avoir au moins une lettre majuscule et une lettre minuscule.",
|
||||
"The given :attribute has appeared in a data leak. Please choose a different :attribute.": "La valeur du champ :attribute est apparue dans une fuite de données. Veuillez choisir une valeur différente.",
|
||||
"This password reset link will expire in :count minutes.": "Ce lien de réinitialisation du mot de passe expirera dans :count minutes.",
|
||||
"to": "à",
|
||||
"Toggle navigation": "Basculer la navigation",
|
||||
"Too Many Requests": "Trop de requêtes",
|
||||
"Tous les produits Doux": "",
|
||||
"Toutes nos gammes": "Les gammes disponibles",
|
||||
"Téléphone": "",
|
||||
"Unauthorized": "Non autorisé",
|
||||
"Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?": "",
|
||||
"Verify Email Address": "Vérification de l'adresse e-mail",
|
||||
"Verify Your Email Address": "Vérifiez votre adresse e-mail",
|
||||
"Ville": "",
|
||||
"Vos coordonnées": "",
|
||||
"Votre message a bien été envoyé !": "",
|
||||
"Votre message n’a pas pu être envoyé.<br>Nous en sommes désolés et vous prions<br>de bien vouloir réessayer plus tard.": "",
|
||||
"Vous devez accepter les cookies reCaptcha pour utiliser les formulaires.": "",
|
||||
"Wallis-et-Futuna": "",
|
||||
"Whoops!": "Oups !",
|
||||
"You are logged in!": "Vous êtes connecté(e) !",
|
||||
"You are receiving this email because we received a password reset request for your account.": "Vous recevez cet e-mail car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.",
|
||||
"Île de Clipperton": ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,7 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements',
|
||||
'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements.',
|
||||
'password' => 'Le mot de passe fourni est incorrect.',
|
||||
'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.',
|
||||
];
|
||||
|
|
|
|||
47
resources/lang/fr/cookie-notice.php
Normal file
47
resources/lang/fr/cookie-notice.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
// * Version 5.0.7
|
||||
// phpcs:disable
|
||||
return [
|
||||
'button_customize_cookies' => 'Personnaliser les cookies',
|
||||
'button_close_cookies' => 'Fermer la fenêtre des cookies',
|
||||
'button_toggle_cookie' => 'Autoriser ou refuser',
|
||||
'button_forbid_all' => 'Tout refuser',
|
||||
'button_allow_all' => 'Tout accepter',
|
||||
'button_forbid_all_title' => 'Refuser tous les cookies et fermer le panneau des cookies',
|
||||
'button_allow_all_title' => 'Accepter tous les cookies et fermer le panneau des cookies',
|
||||
'button_customize' => 'Personnaliser',
|
||||
'button_validate_and_close' => 'Valider et fermer',
|
||||
'button_title_open_new_tab' => 'Ouvrir le lien dans un nouvel onglet',
|
||||
'banner_title' => 'Le site internet :site_name utilise des cookies !',
|
||||
'banner_text' => 'Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des fins analytiques.
|
||||
Vous pouvez changer d’avis à tout moment en cliquant sur l’icône présente sur chaque page de notre site.
|
||||
En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l’utilisation de technologies de suivi nécessaires à leur bon fonctionnement.',
|
||||
'modal_title' => 'Fenêtre de gestion de cookies',
|
||||
'panel_content' => 'Contenu du panneau des cookies',
|
||||
'picture_cookie_title' => 'Image d’un bon gros cookie',
|
||||
'navigation_title' => 'Navigation du panneau des cookies',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Les services de mesure d’audience permettent de générer des statistiques de fréquentation utiles à l’amélioration du site.',
|
||||
],
|
||||
'youtube' => [
|
||||
'name' => 'Youtube',
|
||||
'description' => 'Les cookies placés via les services de partage de vidéos sont destinés à permettre à l’utilisateur de visionner des contenus multimédias directement sur le site.',
|
||||
'labelLink' => 'En apprendre plus',
|
||||
'warning' => 'Vous devez accepter les cookies pour visionner cette vidéo',
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Les services de mesure d’audience permettent de générer des statistiques de fréquentation utiles à l’amélioration du site.',
|
||||
'labelLink' => 'En apprendre plus',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'Les cookies qui sont déposés via le recaptcha sur les formulaires ont pour finalité d’empêcher que ceux-ci ne soient soumis par des robots.',
|
||||
'labelLink' => 'En apprendre plus',
|
||||
'warning' => 'Vous devez accepter les cookies reCAPTCHA pour envoyer le formulaire',
|
||||
]
|
||||
]
|
||||
];
|
||||
|
|
@ -1,17 +1,6 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Précédent',
|
||||
'next' => 'Suivant »',
|
||||
'previous' => '« Précédent',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,20 +1,9 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Votre mot de passe a été réinitialisé !',
|
||||
'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !',
|
||||
'throttled' => 'Veuillez patienter avant de réessayer.',
|
||||
'token' => "Ce jeton de réinitialisation du mot de passe n'est pas valide.",
|
||||
'user' => "Aucun utilisateur n'a été trouvé avec cette adresse email.",
|
||||
'token' => 'Ce jeton de réinitialisation du mot de passe n\'est pas valide.',
|
||||
'user' => 'Aucun utilisateur n\'a été trouvé avec cette adresse email.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -24,9 +24,7 @@ return array (
|
|||
),
|
||||
'contact' =>
|
||||
array (
|
||||
'acceptcgu' => 'J’accepte les conditions générales d’utilisation du site et autorise la Société Bretonne de Volaille à traiter mes données personnelles conformément à la Charte de confidentialité.',
|
||||
'disclaimer' => 'Les informations que vous nous communiquez sont collectées et traitées par la Société Bretonne de Volaille, responsable de traitement selon les finalités définies dans notre Charte de confidentialité. Ces informations sont destinées au personnel de la Société Bretonne de Volaille et peuvent être partagées avec ses sous-traitants.<br />
|
||||
A tout moment, vous pouvez retirer votre consentement. Pour toute information complémentaire concernant vos données personnelles et vos droits, merci de consulter notre <a href=":PRIVROUTE">Charte de confidentialité.</a>',
|
||||
'disclaimer' => 'Les informations recueillies à partir de ce formulaire sont traitées par le Responsable de Traitement pour donner suite à votre demande de contact. Pour connaître vos droits, vous pouvez consulter la <a href=":PRIVROUTE">Charte de confidentialité.</a>',
|
||||
),
|
||||
'cookie' =>
|
||||
array (
|
||||
|
|
|
|||
|
|
@ -1,19 +1,9 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'Le champ :attribute doit être accepté.',
|
||||
'active_url' => "Le champ :attribute n'est pas une URL valide.",
|
||||
'accepted_if' => 'Le champ :attribute doit être accepté quand :other a la valeur :value.',
|
||||
'active_url' => 'Le champ :attribute n\'est pas une URL valide.',
|
||||
'after' => 'Le champ :attribute doit être une date postérieure au :date.',
|
||||
'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.',
|
||||
'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.',
|
||||
|
|
@ -23,165 +13,150 @@ return [
|
|||
'before' => 'Le champ :attribute doit être une date antérieure au :date.',
|
||||
'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.',
|
||||
'between' => [
|
||||
'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.',
|
||||
'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.',
|
||||
'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.',
|
||||
'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.',
|
||||
'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.',
|
||||
],
|
||||
'boolean' => 'Le champ :attribute doit être vrai ou faux.',
|
||||
'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.',
|
||||
'date' => "Le champ :attribute n'est pas une date valide.",
|
||||
'current_password' => 'Le mot de passe est incorrect.',
|
||||
'date' => 'Le champ :attribute n\'est pas une date valide.',
|
||||
'date_equals' => 'Le champ :attribute doit être une date égale à :date.',
|
||||
'date_format' => 'Le champ :attribute ne correspond pas au format :format.',
|
||||
'declined' => 'Le champ :attribute doit être décliné.',
|
||||
'declined_if' => 'Le champ :attribute doit être décliné quand :other a la valeur :value.',
|
||||
'different' => 'Les champs :attribute et :other doivent être différents.',
|
||||
'digits' => 'Le champ :attribute doit contenir :digits chiffres.',
|
||||
'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.',
|
||||
'dimensions' => "La taille de l'image :attribute n'est pas conforme.",
|
||||
'dimensions' => 'La taille de l\'image :attribute n\'est pas conforme.',
|
||||
'distinct' => 'Le champ :attribute a une valeur en double.',
|
||||
'email' => 'Le champ :attribute doit être une adresse email valide.',
|
||||
'email' => 'Le champ :attribute doit être une adresse e-mail valide.',
|
||||
'ends_with' => 'Le champ :attribute doit se terminer par une des valeurs suivantes : :values',
|
||||
'enum' => 'Le champ :attribute sélectionné est invalide.',
|
||||
'exists' => 'Le champ :attribute sélectionné est invalide.',
|
||||
'file' => 'Le champ :attribute doit être un fichier.',
|
||||
'filled' => 'Le champ :attribute doit avoir une valeur.',
|
||||
'gt' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir plus de :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir plus de :value éléments.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.',
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure à :value.',
|
||||
'string' => 'Le texte :attribute doit contenir plus de :value caractères.',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au moins :value éléments.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.',
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :value caractères.',
|
||||
],
|
||||
'image' => 'Le champ :attribute doit être une image.',
|
||||
'in' => 'Le champ :attribute est invalide.',
|
||||
'in_array' => "Le champ :attribute n'existe pas dans :other.",
|
||||
'in_array' => 'Le champ :attribute n\'existe pas dans :other.',
|
||||
'integer' => 'Le champ :attribute doit être un entier.',
|
||||
'ip' => 'Le champ :attribute doit être une adresse IP valide.',
|
||||
'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.',
|
||||
'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.',
|
||||
'json' => 'Le champ :attribute doit être un document JSON valide.',
|
||||
'lt' => [
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir moins de :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir moins de :value éléments.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.',
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure à :value.',
|
||||
'string' => 'Le texte :attribute doit contenir moins de :value caractères.',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au plus :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au plus :value éléments.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.',
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.',
|
||||
'string' => 'Le texte :attribute doit contenir au plus :value caractères.',
|
||||
],
|
||||
'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.',
|
||||
'max' => [
|
||||
'numeric' => 'La valeur de :attribute ne peut être supérieure à :max.',
|
||||
'array' => 'Le tableau :attribute ne peut pas contenir plus que :max éléments.',
|
||||
'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.',
|
||||
'string' => 'Le texte de :attribute ne peut contenir plus de :max caractères.',
|
||||
'array' => 'Le tableau :attribute ne peut contenir plus de :max éléments.',
|
||||
'numeric' => 'La valeur de :attribute ne peut pas être supérieure à :max.',
|
||||
'string' => 'Le texte de :attribute ne peut pas contenir plus de :max caractères.',
|
||||
],
|
||||
'mimes' => 'Le champ :attribute doit être un fichier de type : :values.',
|
||||
'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.',
|
||||
'min' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure à :min kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :min caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au moins :min éléments.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :min kilo-octets.',
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :min caractères.',
|
||||
],
|
||||
'multiple_of' => 'La valeur de :attribute doit être un multiple de :value',
|
||||
'not_in' => "Le champ :attribute sélectionné n'est pas valide.",
|
||||
'not_regex' => "Le format du champ :attribute n'est pas valide.",
|
||||
'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.',
|
||||
'not_regex' => 'Le format du champ :attribute n\'est pas valide.',
|
||||
'numeric' => 'Le champ :attribute doit contenir un nombre.',
|
||||
'password' => 'Le mot de passe est incorrect',
|
||||
'phone' => 'Le champ :attribute n\'est pas un numéro de téléphone valide.',
|
||||
'present' => 'Le champ :attribute doit être présent.',
|
||||
'prohibited' => 'Le champ :attribute est interdit.',
|
||||
'prohibited_if' => 'Le champ :attribute est interdit quand :other a la valeur :value.',
|
||||
'prohibited_unless' => 'Le champ :attribute est interdit à moins que :other est l\'une des valeurs :values.',
|
||||
'prohibits' => 'Le champ :attribute interdit :other d\'être présent.',
|
||||
'regex' => 'Le format du champ :attribute est invalide.',
|
||||
'required' => 'Le champ :attribute est obligatoire.',
|
||||
'required_array_keys' => 'Le champ :attribute doit contenir des entrées pour : :values.',
|
||||
'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.',
|
||||
'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.',
|
||||
'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.',
|
||||
'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.',
|
||||
'required_without' => "Le champ :attribute est obligatoire quand :values n'est pas présent.",
|
||||
'required_without_all' => "Le champ :attribute est requis quand aucun de :values n'est présent.",
|
||||
'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.',
|
||||
'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.',
|
||||
'same' => 'Les champs :attribute et :other doivent être identiques.',
|
||||
'size' => [
|
||||
'numeric' => 'La valeur de :attribute doit être :size.',
|
||||
'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.',
|
||||
'string' => 'Le texte de :attribute doit contenir :size caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir :size éléments.',
|
||||
'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.',
|
||||
'numeric' => 'La valeur de :attribute doit être :size.',
|
||||
'string' => 'Le texte de :attribute doit contenir :size caractères.',
|
||||
],
|
||||
'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values',
|
||||
'string' => 'Le champ :attribute doit être une chaîne de caractères.',
|
||||
'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.',
|
||||
'unique' => 'La valeur du champ :attribute est déjà utilisée.',
|
||||
'uploaded' => "Le fichier du champ :attribute n'a pu être téléversé.",
|
||||
'url' => "Le format de l'URL de :attribute n'est pas valide.",
|
||||
'uploaded' => 'Le fichier du champ :attribute n\'a pu être téléversé.',
|
||||
'url' => 'Le format de l\'URL de :attribute n\'est pas valide.',
|
||||
'uuid' => 'Le champ :attribute doit être un UUID valide',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'phone' => 'Le champ :attribute n\'est pas un numéro de téléphone valide.',
|
||||
|
||||
'custom' => [
|
||||
'attributes' => [
|
||||
'address' => 'adresse',
|
||||
'age' => 'âge',
|
||||
'answers' => 'réponses',
|
||||
'answers.*' => 'réponse',
|
||||
'available' => 'disponible',
|
||||
'breeder_code' => 'code éleveur',
|
||||
'city' => 'ville',
|
||||
'content' => 'contenu',
|
||||
'country' => 'pays',
|
||||
'date' => 'date',
|
||||
'day' => 'jour',
|
||||
'description' => 'description',
|
||||
'email' => 'adresse email',
|
||||
'excerpt' => 'extrait',
|
||||
'first_name' => 'prénom',
|
||||
'gender' => 'genre',
|
||||
'hour' => 'heure',
|
||||
'last_name' => 'nom',
|
||||
'minute' => 'minute',
|
||||
'mobile' => 'portable',
|
||||
'month' => 'mois',
|
||||
'name' => 'nom',
|
||||
'password' => 'mot de passe',
|
||||
'password_confirmation' => 'confirmation du mot de passe',
|
||||
'phone' => 'téléphone',
|
||||
'picture' => 'image',
|
||||
'postal_code' => 'code postal',
|
||||
'second' => 'seconde',
|
||||
'sex' => 'sexe',
|
||||
'size' => 'taille',
|
||||
'time' => 'heure',
|
||||
'title' => 'titre',
|
||||
'username' => 'nom d\'utilisateur',
|
||||
'year' => 'année',
|
||||
],
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [
|
||||
'name' => 'nom',
|
||||
'username' => "nom d'utilisateur",
|
||||
'email' => 'adresse email',
|
||||
'first_name' => 'prénom',
|
||||
'last_name' => 'nom',
|
||||
'password' => 'mot de passe',
|
||||
'password_confirmation' => 'confirmation du mot de passe',
|
||||
'city' => 'ville',
|
||||
'country' => 'pays',
|
||||
'address' => 'adresse',
|
||||
'phone' => 'téléphone',
|
||||
'mobile' => 'portable',
|
||||
'age' => 'âge',
|
||||
'sex' => 'sexe',
|
||||
'gender' => 'genre',
|
||||
'day' => 'jour',
|
||||
'month' => 'mois',
|
||||
'year' => 'année',
|
||||
'hour' => 'heure',
|
||||
'minute' => 'minute',
|
||||
'second' => 'seconde',
|
||||
'title' => 'titre',
|
||||
'content' => 'contenu',
|
||||
'description' => 'description',
|
||||
'excerpt' => 'extrait',
|
||||
'date' => 'date',
|
||||
'time' => 'heure',
|
||||
'available' => 'disponible',
|
||||
'size' => 'taille',
|
||||
'answers' => 'réponses',
|
||||
'answers.*' => 'réponse',
|
||||
'postal_code' => 'code postal',
|
||||
'picture' => 'image',
|
||||
'breeder_code' => 'code éleveur'
|
||||
],
|
||||
];
|
||||
|
|
|
|||
22
resources/sass/frontend/_custom.scss
vendored
22
resources/sass/frontend/_custom.scss
vendored
|
|
@ -28,6 +28,28 @@
|
|||
}
|
||||
}
|
||||
|
||||
.form-result_confirm {
|
||||
background-color: #D1E7DD;
|
||||
border: 1px solid #badbcc;
|
||||
color: #0f5132;
|
||||
border-radius: 0.375rem;
|
||||
padding: 1rem;
|
||||
margin: 1rem 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.form-result_error {
|
||||
background-color: #f8d7da;
|
||||
border: 1px solid #f5c2c7;
|
||||
color: #842029;
|
||||
border-radius: 0.375rem;
|
||||
padding: 1rem;
|
||||
margin: 1rem 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#products,
|
||||
#values {
|
||||
display: flex;
|
||||
|
|
|
|||
13
resources/sass/frontend/_variables.scss
vendored
13
resources/sass/frontend/_variables.scss
vendored
|
|
@ -21,3 +21,16 @@ $fontcocon-regular: "cocon-regular", arial, sans-serif;
|
|||
|
||||
$fontbarlow-regular: "barlow-regular", arial, sans-serif;
|
||||
$fontbarlow-bold: "barlow-bold", arial, sans-serif;
|
||||
|
||||
// * COOKIE NOTICE
|
||||
// * Global
|
||||
$ck-primary-color: $color-dark !default;
|
||||
$ck-secondary-color: $color-second !default;
|
||||
$ck-background-color: $color-main !default;
|
||||
$ck-shadow-color: 0 0.5rem 1rem rgb(0 0 0 / 35%) !default;
|
||||
$ck-title-font: "barlow-bold", arial, sans-serif !default;
|
||||
$ck-title-size: 40px !default;
|
||||
$ck-accept-color: #33aa33 !default;
|
||||
$ck-deny-color: #aa3333 !default;
|
||||
// * Buttons
|
||||
$cn-button-bg-color: $color-main !default;
|
||||
|
|
|
|||
3
resources/sass/frontend/compile.scss
vendored
3
resources/sass/frontend/compile.scss
vendored
|
|
@ -27,4 +27,5 @@
|
|||
@import "timeline";
|
||||
|
||||
@import "custom";
|
||||
@import "cookies-ldc";
|
||||
@import "./partials/cn-inline-buttons";
|
||||
@import "~@ldc-web/cookie-notice";
|
||||
|
|
|
|||
502
resources/sass/frontend/cookies-ldc.scss
vendored
502
resources/sass/frontend/cookies-ldc.scss
vendored
|
|
@ -1,502 +0,0 @@
|
|||
/* DEBUT DU PARAMETRAGE */
|
||||
/* - Choix des FONTS */
|
||||
/* - Changement des couleurs et des polices */
|
||||
|
||||
:root {
|
||||
/* PARTIE A RENSEIGNER */
|
||||
--primary-color: #0c1417;
|
||||
--secondary-color: #ff0400;
|
||||
--background-color: #fccf1d;
|
||||
--shadow-color: 0 0.5rem 1rem rgb(0 0 0 / 35%);
|
||||
--title-font: "barlow-bold", arial, sans-serif;
|
||||
--title-size: 40px;
|
||||
--text-font: "Barlow", sans-serif;
|
||||
--text-size: 14px;
|
||||
--accept-color: #33aa33;
|
||||
--deny-color: #aa3333;
|
||||
|
||||
/* Position et animation des cookies */
|
||||
--ldcweb-cn-position-left: 20px; /* Distance par rapport à la gauche de la fenêtre */
|
||||
--ldcweb-cn-position-right: auto; /* Distance par rapport à la droite de la fenêtre */
|
||||
--ldcweb-cn-animation-left: 0; /* Position gauche de base des cookies */
|
||||
--ldcweb-cn-animation-right: auto; /* Position droite de base des cookies */
|
||||
--ldcweb-cn-position-bottom: 20px; /* Distance par rapport au bas de la fenêtre */
|
||||
--ldcweb-cn-z-index: 200;
|
||||
|
||||
/* PARTIE A RENSEIGNER FACULTATIF */
|
||||
/* FENETRE D'ACCUEIL */
|
||||
--ck-bg-color: var(--background-color);
|
||||
|
||||
/* Title settings */
|
||||
--ck-w1-bgcolor-title: var(--background-color);
|
||||
--ck-w1-font-family-title: var(--title-font);
|
||||
--ck-w1-font-size-title: var(--title-size);
|
||||
--ck-w1-color-title: var(--secondary-color);
|
||||
|
||||
/* Text settings */
|
||||
--ck-w1-font-family-txt: var(--text-font);
|
||||
--ck-w1-font-size-txt: var(--text-size);
|
||||
--ck-w1-color-txt: var(--primary-color);
|
||||
--ck-w1-color-href-hover: var(--secondary-color);
|
||||
|
||||
/* Button settings */
|
||||
--ck-w1-color-btn: var(--secondary-color);
|
||||
--ck-w1-color-btn-hover: var(--secondary-color);
|
||||
--ck-w1-font-family-btn-txt: var(--text-font);
|
||||
--ck-w1-font-size-btn-txt: var(--text-size);
|
||||
--ck-w1-color-btn-txt: #ffffff;
|
||||
--ck-w1-color-btn-txt-hover: #ffffff;
|
||||
--ck-w1-color-btn-border: transparent;
|
||||
--ck-w1-color-btn-border-hover: transparent;
|
||||
|
||||
/* FENETRE DE PERSONNALISATION */
|
||||
--ck-bg-color-modal-wrapper: #ffffff;
|
||||
/* Title settings */
|
||||
--ck-w2-bgcolor-title: var(--background-color);
|
||||
--ck-w2-font-family-title: var(--title-font);
|
||||
--ck-w2-font-size-title: var(--title-size);
|
||||
--ck-w2-color-title: var(--secondary-color);
|
||||
|
||||
/* Text settings */
|
||||
--ck-w2-font-family-txt: var(--text-font);
|
||||
--ck-w2-font-size-txt: var(--text-size);
|
||||
--ck-w2-color-txt: var(--primary-color);
|
||||
--ck-w2-color-href-hover: #000000;
|
||||
|
||||
/* Accept/Deny btn settings */
|
||||
--ck-color-accept: #808080;
|
||||
--ck-color-accept-hover: var(--accept-color);
|
||||
--ck-color-deny: #808080;
|
||||
--ck-color-deny-hover: var(--deny-color);
|
||||
--ck-color-txt: #ffffff;
|
||||
--ck-color-txt-hover: #ffffff;
|
||||
|
||||
/* Cookies list settings */
|
||||
--ck-bgcolor-list: #e4e4e4;
|
||||
--ck-font-family-list: var(--text-font);
|
||||
--ck-font-size-list: var(--text-size);
|
||||
--ck-color-list: #000000;
|
||||
--ck-color-title: var(--secondary-color);
|
||||
|
||||
/* Scroll bar */
|
||||
--ck-scroll-bgcolor: var(--primary-color);
|
||||
--ck-scroll-barcolor: var(--secondary-color);
|
||||
}
|
||||
/* FIN DU PARAMETRAGE */
|
||||
|
||||
/* MOBILE FIRST */
|
||||
#template {
|
||||
display: none;
|
||||
}
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#ldcweb-cn.open-banner .ldcweb-cn-banner {
|
||||
display: flex;
|
||||
}
|
||||
#ldcweb-cn.open-banner,
|
||||
#ldcweb-cn.open-modal {
|
||||
display: flex;
|
||||
}
|
||||
#ldcweb-cn p,
|
||||
#ldcweb-cn a {
|
||||
font-family: var(--ck-w1-font-family-txt);
|
||||
font-size: var(--ck-w1-font-size-txt);
|
||||
color: var(--ck-w1-color-txt);
|
||||
}
|
||||
#ldcweb-cn a {
|
||||
text-decoration: underline;
|
||||
transition: 0s;
|
||||
}
|
||||
#ldcweb-cn a::before {
|
||||
content: none;
|
||||
}
|
||||
.ldcweb-cn-cookie-link {
|
||||
cursor: pointer;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-cn-banner,
|
||||
#ldcweb-cn-modal .modal-wrapper {
|
||||
overflow: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-cn-banner {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
padding-top: 20px;
|
||||
background-color: var(--ck-bg-color);
|
||||
flex-direction: column;
|
||||
justify-content: flex-end;
|
||||
position: fixed;
|
||||
left: var(--ldcweb-cn-animation-left);
|
||||
right: var(--ldcweb-cn-animation-right);
|
||||
bottom: calc(var(--ldcweb-cn-position-bottom) + 60px);
|
||||
width: 475px;
|
||||
height: auto;
|
||||
max-height: 80vh;
|
||||
border-radius: 10px;
|
||||
z-index: var(--ldcweb-cn-z-index);
|
||||
line-height: initial;
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow-color);
|
||||
user-select: none;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: 0.3s;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-cn-banner-open {
|
||||
left: var(--ldcweb-cn-position-left);
|
||||
right: var(--ldcweb-cn-position-right);
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
.ldcweb-banner-content,
|
||||
.ldcweb-banner-details {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0px 20px 0px 20px;
|
||||
}
|
||||
.ldcweb-banner-details {
|
||||
height: 0;
|
||||
transition: 0.3s;
|
||||
text-align: justify;
|
||||
overflow: hidden;
|
||||
align-items: flex-start;
|
||||
}
|
||||
.ldcweb-banner-details-open {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-img {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: auto;
|
||||
width: 150px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-img img {
|
||||
width: 100%;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-text {
|
||||
flex: 2;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-title {
|
||||
line-height: 0.9;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-title p {
|
||||
font-family: var(--ck-w1-font-family-title);
|
||||
font-size: var(--ck-w1-font-size-title);
|
||||
font-weight: bold;
|
||||
color: var(--ck-w1-color-title);
|
||||
text-align: left;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-para-p {
|
||||
text-align: justify;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btnDetails {
|
||||
width: 100%;
|
||||
margin: 0 0 20px 0;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btnDetails-p {
|
||||
cursor: pointer;
|
||||
color: var(--secondary-color);
|
||||
width: fit-content;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btns {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
cursor: pointer;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex {
|
||||
width: 66.5%;
|
||||
border-top: 1px solid grey;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
.ldcweb-banner-btn-personalize {
|
||||
width: 33.5%;
|
||||
border-top: 1px solid gray;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex div {
|
||||
width: 50%;
|
||||
}
|
||||
.ldcweb-banner-btn-accept {
|
||||
border-left: 1px solid gray;
|
||||
border-right: 1px solid gray;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex .ldcweb-cn-accept {
|
||||
font-weight: bolder;
|
||||
color: var(--secondary-color);
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btns-btn {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
background-color: var(--background-color);
|
||||
text-decoration: none;
|
||||
font-family: var(--ck-w1-font-family-btn-txt);
|
||||
font-size: var(--ck-w1-font-size-btn-txt);
|
||||
color: var(--primary-color);
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btns-btn:hover {
|
||||
color: var(--ck-w1-color-btn-txt-hover);
|
||||
background-color: var(--ck-w1-color-btn-hover);
|
||||
}
|
||||
.ldcweb-btn {
|
||||
position: fixed;
|
||||
left: var(--ldcweb-cn-position-left);
|
||||
right: var(--ldcweb-cn-position-right);
|
||||
bottom: var(--ldcweb-cn-position-bottom);
|
||||
z-index: var(--ldcweb-cn-z-index);
|
||||
background-color: white;
|
||||
padding: 8px;
|
||||
border-radius: 100%;
|
||||
cursor: pointer;
|
||||
box-shadow: var(--shadow-color);
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
.ldcweb-btn-icon path {
|
||||
fill: var(--secondary-color);
|
||||
}
|
||||
.ldcweb-btn-icon circle {
|
||||
fill: var(--secondary-color);
|
||||
}
|
||||
.visibility {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* MODAL */
|
||||
#ldcweb-cn-modal {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 200;
|
||||
opacity: 1;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-wrapper {
|
||||
position: relative;
|
||||
max-height: 100vh;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-wrapper > div:not(:first-of-type) {
|
||||
width: 100%;
|
||||
align-items: flex-end;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-title {
|
||||
padding: 0px 20px 0px 20px;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-title * {
|
||||
text-align: justify;
|
||||
margin: 0;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-title .description,
|
||||
#ldcweb-cn-modal .modal-btns {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
font-weight: normal;
|
||||
line-height: initial;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-title .description,
|
||||
#ldcweb-cn-modal .modal-btns p,
|
||||
#ldcweb-cn-modal .modal-btns a,
|
||||
#ldcweb-cn-modal .modal-title > .subTitle {
|
||||
font-family: var(--ck-w2-font-family-txt);
|
||||
font-size: var(--ck-w2-font-size-txt);
|
||||
color: var(--ck-w2-color-txt);
|
||||
}
|
||||
/* TITLE */
|
||||
#ldcweb-cn-modal .modal-title .title {
|
||||
font-family: var(--ck-w2-font-family-title);
|
||||
font-size: var(--ck-w2-font-size-title);
|
||||
font-weight: bold;
|
||||
color: var(--ck-w2-color-title);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-title > .subTitle {
|
||||
color: var(--ck-w2-color-title);
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-title .title,
|
||||
#ldcweb-cn-modal .modal-title > .subTitle {
|
||||
text-align: center;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-title a {
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
/* DETAILS */
|
||||
#ldcweb-cn-modal .modal-details {
|
||||
width: 100%;
|
||||
height: 153px;
|
||||
overflow-y: auto;
|
||||
margin: 6px 0;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details ul {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0 20px;
|
||||
list-style: none;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details li > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin: 10px 0;
|
||||
padding: 10px 20px;
|
||||
border-radius: 20px;
|
||||
border: 1px solid var(--ck-bgcolor-list);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details li span,
|
||||
#ldcweb-cn-modal .modal-details li a,
|
||||
#ldcweb-cn-modal .modal-details li label {
|
||||
font-family: var(--ck-font-family-list);
|
||||
font-size: var(--ck-font-size-list);
|
||||
color: var(--ck-color-list);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-name {
|
||||
color: var(--ck-color-title);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos span:first-of-type {
|
||||
font-size: var(--ck-w1-font-size-title);
|
||||
font-weight: bold;
|
||||
font-family: var(--ck-w1-font-family-title);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos .ldcweb-cn-description {
|
||||
color: var(--ck-w2-color-txt);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos a {
|
||||
width: fit-content;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
width: 200px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:first-of-type,
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:last-of-type {
|
||||
transition: all 0.3s;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:first-of-type {
|
||||
background: var(--ck-color-accept);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:last-of-type {
|
||||
background: var(--ck-color-deny);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div {
|
||||
display: table;
|
||||
text-align: center;
|
||||
margin: 0.5em;
|
||||
}
|
||||
#ldcweb-cn-modal
|
||||
.modal-details
|
||||
.ldcweb-cn-buttons
|
||||
div:first-of-type
|
||||
input:checked
|
||||
~ label,
|
||||
#ldcweb-cn-modal
|
||||
.modal-details
|
||||
.ldcweb-cn-buttons
|
||||
div:first-of-type
|
||||
input
|
||||
~ label.active {
|
||||
background-color: var(--ck-color-deny-hover);
|
||||
}
|
||||
#ldcweb-cn-modal
|
||||
.modal-details
|
||||
.ldcweb-cn-buttons
|
||||
div:last-of-type
|
||||
input:checked
|
||||
~ label,
|
||||
#ldcweb-cn-modal
|
||||
.modal-details
|
||||
.ldcweb-cn-buttons
|
||||
div:last-of-type
|
||||
input
|
||||
~ label.active {
|
||||
background-color: var(--ck-color-accept-hover);
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons input {
|
||||
display: none;
|
||||
}
|
||||
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons label {
|
||||
width: 100px;
|
||||
display: block;
|
||||
color: var(--ck-color-txt);
|
||||
transition: color 0.3s;
|
||||
padding: 6px 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* MEDIA QUERIES */
|
||||
@media (max-width: 535px) {
|
||||
.ldcweb-banner-content,
|
||||
#ldcweb-cn .ldcweb-banner-btns {
|
||||
flex-direction: column;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex,
|
||||
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-personalize {
|
||||
width: 100%;
|
||||
}
|
||||
#ldcweb-cn
|
||||
.ldcweb-banner-btns
|
||||
.ldcweb-banner-btn-flex
|
||||
.ldcweb-banner-btn-deny,
|
||||
#ldcweb-cn
|
||||
.ldcweb-banner-btns
|
||||
.ldcweb-banner-btn-flex
|
||||
.ldcweb-banner-btn-accept {
|
||||
width: 50%;
|
||||
}
|
||||
.ldcweb-banner-btn-accept {
|
||||
border-left: 1px solid gray;
|
||||
border-right: none;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-cn-banner {
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-cn-banner {
|
||||
width: 100%;
|
||||
max-height: 100vh;
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
.ldcweb-banner-details-open {
|
||||
height: 0;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-title p {
|
||||
text-align: center;
|
||||
}
|
||||
#ldcweb-cn .ldcweb-banner-img {
|
||||
padding: 0 0 20px 0;
|
||||
}
|
||||
}
|
||||
159
resources/sass/frontend/partials/_cn-inline-buttons.scss
vendored
Normal file
159
resources/sass/frontend/partials/_cn-inline-buttons.scss
vendored
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
$large-screen: 1366px;
|
||||
$big-screen: 1200px;
|
||||
$desktop: 1024px;
|
||||
$tablet: 768px;
|
||||
$mobile: 500px;
|
||||
$xmobile: 320px;
|
||||
|
||||
@mixin min-width($width) {
|
||||
@media screen and (min-width: $width), print and (min-width: $width) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
.cn-cookie-activate {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0.6rem 1rem;
|
||||
background-color: #fff;
|
||||
border-radius: 1rem;
|
||||
// * Prevent weird theme override
|
||||
font-size: calc(0.9rem + 0.1vw) !important;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
border-color: $color-main;
|
||||
|
||||
@include min-width($mobile) {
|
||||
max-width: 80%;
|
||||
// * Prevent weird theme override
|
||||
font-size: calc(0.9rem + 0.1vw) !important;
|
||||
}
|
||||
|
||||
@include min-width($tablet) {
|
||||
max-width: 70%;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
@include min-width($desktop) {
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
&.d-none {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
&.d-flex-column {
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
&.w-100 {
|
||||
max-width: inherit !important;
|
||||
}
|
||||
|
||||
// * Prevent weird theme override
|
||||
span {
|
||||
padding: 0.3rem;
|
||||
color: $color-main !important;
|
||||
font-size: calc(0.9rem + 0.1vw) !important;
|
||||
font-weight: 800;
|
||||
text-align: center !important;
|
||||
|
||||
@include min-width($mobile) {
|
||||
font-size: calc(0.9rem + 0.1vw) !important;
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
height: fit-content;
|
||||
padding: 0.8rem 0.6rem;
|
||||
border-width: 0.1rem;
|
||||
border-radius: 1rem;
|
||||
border-style: solid;
|
||||
font-size: 0.9rem !important;
|
||||
border-color: $color-second;
|
||||
color: $color-second;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
transition: all .3s;
|
||||
|
||||
&:hover,&:focus {
|
||||
transition: all .3s;
|
||||
background-color: $color-second;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
@include min-width($mobile) {
|
||||
// * Prevent weird theme override
|
||||
font-size: calc(0.9rem + 0.1vw) !important;
|
||||
}
|
||||
|
||||
@include min-width($tablet) {
|
||||
// * Prevent weird theme override
|
||||
font-size: calc(0.9rem - 0.1vw) !important;
|
||||
}
|
||||
|
||||
@include min-width($desktop) {
|
||||
// * Prevent weird theme override
|
||||
font-size: 0.9rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
> span {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-bottom: 0.9rem;
|
||||
color: $color-main;
|
||||
font-weight: bold;
|
||||
|
||||
@include min-width($mobile) {
|
||||
margin-bottom: initial;
|
||||
}
|
||||
|
||||
> small {
|
||||
color: initial;
|
||||
font-weight: initial;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* stylelint-disable-next-line selector-id-pattern */
|
||||
#r_captcha {
|
||||
display: flex;
|
||||
width: inherit;
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
.g-recaptcha {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
.w-100 {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.h-100 {
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
// * CKEDITOR
|
||||
|
||||
.ck-content .video-inlaid {
|
||||
display: flex !important;
|
||||
justify-content: center !important;
|
||||
|
||||
iframe {
|
||||
/** 16/9 */
|
||||
width: 22rem;
|
||||
height: 12.375rem;
|
||||
|
||||
@include min-width($mobile) {
|
||||
width: 28rem;
|
||||
height: 15.75rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,61 +1,64 @@
|
|||
<div class="forms-group">
|
||||
<div class="form-group">
|
||||
<label for="title">{{ __('Titre') }} *</label>
|
||||
<input type="text" id="title" name="title" class="form-control" placeholder="{{ __('Titre') }} *" value="{{ old('title', $text->title ?? '') }}" required>
|
||||
@include('back.modules.input-error', ['inputName'=>'title'])
|
||||
<input class="form-control" id="title" name="title" type="text" value="{{ old('title', $text->title ?? '') }}"
|
||||
placeholder="{{ __('Titre') }} *" required>
|
||||
@include('back.modules.input-error', ['inputName' => 'title'])
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-group">
|
||||
<label for="text">{{ __('Texte') }} *</label>
|
||||
<textarea class="form-control" placeholder="{{ __('Texte') }}" id="text" name="text" style="height: 150px;">{{ old('commentaire', $text->text ?? '') }}</textarea>
|
||||
@include('back.modules.input-error', ['inputName'=>'text'])
|
||||
<textarea class="form-control" id="text" name="text" style="height: 150px;" placeholder="{{ __('Texte') }}">{{ old('commentaire', $text->text ?? '') }}</textarea>
|
||||
@include('back.modules.input-error', ['inputName' => 'text'])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script type="text/javascript">
|
||||
var editorConfig = {
|
||||
removePlugins: ["Image", "ImageCaption", "ImageStyle", "ImageToolbar", "ImageUpload"],
|
||||
toolbar: ['heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', '|', 'blockQuote', 'insertTable', '|', 'undo', 'redo'],
|
||||
heading: {
|
||||
options: [{
|
||||
model: 'paragraph',
|
||||
title: 'Paragraph',
|
||||
class: 'ck-heading_paragraph'
|
||||
<script type="text/javascript" nonce="{{ $nonce }}">
|
||||
var editorConfig = {
|
||||
removePlugins: ["Image", "ImageCaption", "ImageStyle", "ImageToolbar", "ImageUpload"],
|
||||
toolbar: ['heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', '|', 'blockQuote', 'insertTable', '|',
|
||||
'undo', 'redo'
|
||||
],
|
||||
heading: {
|
||||
options: [{
|
||||
model: 'paragraph',
|
||||
title: 'Paragraph',
|
||||
class: 'ck-heading_paragraph'
|
||||
},
|
||||
{
|
||||
model: 'heading1',
|
||||
view: 'h1',
|
||||
title: 'Heading 1',
|
||||
class: 'ck-heading_heading1'
|
||||
},
|
||||
{
|
||||
model: 'heading2',
|
||||
view: 'h2',
|
||||
title: 'Heading 2',
|
||||
class: 'ck-heading_heading2'
|
||||
},
|
||||
{
|
||||
model: 'heading3',
|
||||
view: 'h3',
|
||||
title: 'Heading 3',
|
||||
class: 'ck-heading_heading3'
|
||||
},
|
||||
{
|
||||
model: 'heading4',
|
||||
view: 'h4',
|
||||
title: 'Heading 4',
|
||||
class: 'ck-heading_heading4'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
model: 'heading1',
|
||||
view: 'h1',
|
||||
title: 'Heading 1',
|
||||
class: 'ck-heading_heading1'
|
||||
},
|
||||
{
|
||||
model: 'heading2',
|
||||
view: 'h2',
|
||||
title: 'Heading 2',
|
||||
class: 'ck-heading_heading2'
|
||||
},
|
||||
{
|
||||
model: 'heading3',
|
||||
view: 'h3',
|
||||
title: 'Heading 3',
|
||||
class: 'ck-heading_heading3'
|
||||
},
|
||||
{
|
||||
model: 'heading4',
|
||||
view: 'h4',
|
||||
title: 'Heading 4',
|
||||
class: 'ck-heading_heading4'
|
||||
table: {
|
||||
contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
|
||||
}
|
||||
]
|
||||
},
|
||||
table: {
|
||||
contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
|
||||
}
|
||||
};
|
||||
ClassicEditor
|
||||
.create(document.querySelector('#text'), editorConfig)
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
};
|
||||
ClassicEditor
|
||||
.create(document.querySelector('#text'), editorConfig)
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
|
|
|||
|
|
@ -1,258 +1,314 @@
|
|||
@extends('layouts.frontend')
|
||||
@section('title', __('Nous contacter'))
|
||||
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
|
||||
@section('description', __('Découvrez DOUX, des produits de volailles françaises.'))
|
||||
|
||||
@section('content')
|
||||
|
||||
<section class="jumbotron">
|
||||
<p class="maintitle ttu animate__animated fadeIn animate__slow">{{ __('Nous contacter') }}</p>
|
||||
<img class="img-zoom" src="{{ asset('assets/images/contact.jpg') }}" alt="Nous contacter">
|
||||
<div class="banner">
|
||||
<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1919.76 59.99">
|
||||
<section class="jumbotron">
|
||||
<p class="maintitle ttu animate__animated fadeIn animate__slow">{{ __('Nous contacter') }}</p>
|
||||
<img class="img-zoom" src="{{ asset('assets/images/contact.jpg') }}" alt="Nous contacter">
|
||||
<div class="banner">
|
||||
<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1919.76 59.99">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #ffffff;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: transparent;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-1"
|
||||
d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
|
||||
<path class="cls-2"
|
||||
d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
|
||||
</svg>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="contact-page has-bckg--grey is-flex horizontal-center container">
|
||||
<svg class="p-abs" id="picto-localisation" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #ffffff;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: transparent;
|
||||
fill-rule: evenodd;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-1" d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
|
||||
<path class="cls-2" d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
|
||||
<path class="cls-1"
|
||||
d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z" />
|
||||
</svg>
|
||||
<p>
|
||||
<strong>{{ __('Adresse') }}</strong><br /><br />
|
||||
DOUX FARMOR<br />
|
||||
450 Route de Rosporden<br />
|
||||
Le Grand Guelen<br />
|
||||
29000 QUIMPER, France
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="container contact-page has-bckg--grey is-flex horizontal-center">
|
||||
<svg id="picto-localisation" class="p-abs" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236"><defs>
|
||||
<style>.cls-1{fill-rule:evenodd;}</style>
|
||||
</defs><path class="cls-1" d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z"/>
|
||||
</svg>
|
||||
<p>
|
||||
<strong>{{ __('Adresse') }}</strong><br /><br />
|
||||
DOUX FARMOR<br />
|
||||
450 Route de Rosporden<br />
|
||||
Le Grand Guelen<br />
|
||||
29000 QUIMPER, France
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="wrapper">
|
||||
<div class="breadcrumb is-flex">
|
||||
<a href="{{ route($routeprefixer . 'home') }}" class="link">{{ __('Accueil') }}</a>
|
||||
</div>
|
||||
<div class="header-title sectiontitle align-center p-rel">
|
||||
<h2 class="punchline-module__title align-center animate__animated fadeInUp animate__slow">{!! __('Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?') !!}</h2>
|
||||
</div>
|
||||
<p class="align-center">{!! __('N\'hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.') !!}</p>
|
||||
@if(session()->has('status'))
|
||||
<div class="form-result form-result_confirm">
|
||||
<div class="form-result__title title title_small">{{ __('Votre message a bien été envoyé !') }}</div>
|
||||
<div class="form-result__text">{{ __('Nos services mettent tout en oeuvre pour y répondre au plus vite.') }}</div>
|
||||
</div>
|
||||
@endif
|
||||
<form id="contact-form" action="{{route($routeprefixer . 'contact.submit')}}" method="post" class="form contact__form" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@if ($errors->any())
|
||||
@foreach ($errors->all() as $error)
|
||||
<div class="field__error">{{ $error }}</div>
|
||||
@endforeach
|
||||
<div class="container">
|
||||
<div class="wrapper">
|
||||
<div class="breadcrumb is-flex">
|
||||
<a class="link" href="{{ route($routeprefixer . 'home') }}">{{ __('Accueil') }}</a>
|
||||
</div>
|
||||
<div class="header-title sectiontitle align-center p-rel">
|
||||
<h2 class="punchline-module__title align-center animate__animated fadeInUp animate__slow">{!! __('Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?') !!}</h2>
|
||||
</div>
|
||||
<p class="align-center">{!! __(
|
||||
'N’hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.',
|
||||
) !!}</p>
|
||||
@if (session()->has('status'))
|
||||
<div class="form-result form-result_confirm">
|
||||
<div class="form-result__title title title_small">{{ __('Votre message a bien été envoyé !') }}</div>
|
||||
<div class="form-result__text">{{ __('Nos services mettent tout en oeuvre pour y répondre au plus vite.') }}</div>
|
||||
</div>
|
||||
@endif
|
||||
<fieldset>
|
||||
<legend>{{ __('Vos coordonnées') }} :</legend>
|
||||
|
||||
<label class="radio-label">{{ __('Monsieur') }}
|
||||
<input type="radio" checked="checked" name="civilite" value="monsieur" @if (old('civilite') === "monsieur" ) checked @endif>
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
<label class="radio-label">{{ __('Madame') }}
|
||||
<input type="radio" name="civilite" value="madame" @if (old('civilite') === "madame" ) checked @endif>
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="name">{{ __('Nom') }}* : </label>
|
||||
<input type="text" name="name" id="name" minlength="2" required value="{{old('name')}}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname">{{ __('Prénom') }}* : </label>
|
||||
<input type="text" name="lastname" id="lastname" minlength="2" value="{{ old('lastname') }}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="address">{{ __('Adresse') }}* : </label>
|
||||
<input type="text" name="address" id="address" maxlength="255" value="{{ old('address') }}" autocomplete="street-address" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="postcode">{{ __('Code postal') }}* : </label>
|
||||
<input type="text" name="postcode" id="postcode" minlength="1" maxlength="99000" value="{{ old('postcode') }}" autocomplete="postal-code" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="city">{{ __('Ville') }}* : </label>
|
||||
<input type="text" name="city" id="city" maxlength="255" value="{{ old('city') }}" autocomplete="address-level2" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="phone">{{ __('Téléphone') }}* : </label>
|
||||
<input type="number" name="phone" id="phone" min="1" max="9999999999" value="{{ old('phone') }}" autocomplete="tel" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email">{{ __('Email') }}* : </label>
|
||||
<input type="mail" name="email" id="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" value="{{ old('email') }}" autocomplete="email" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="country">
|
||||
<select id="country" class="changeLength" maxlength="255" name="country" required>
|
||||
<option value="" @if(!old('country')) selected @endif>{{ __('Sélectionnez un pays') }} *</option>
|
||||
@foreach($listCountries as $country)
|
||||
<option value="{{ $country->value }}" @if(old('country') == $country->value) selected @endif>{{ __($country->label) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="drom">
|
||||
<select id="departement" class="changeLength" maxlength="255" name="departement">
|
||||
<option value="" @if(!old('departement')) selected @endif>{{ __('Sélectionnez un département') }} *</option>
|
||||
@foreach ($listDeps as $departement)
|
||||
<option value="{{ $departement->value }}" @if(old('departement') === $departement->value) selected @endif>{{ __($departement->label) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{ __('Préciser votre demande') }} :</legend>
|
||||
<div class="ck-button">
|
||||
<label>
|
||||
<input class="consoRecla" type="radio" value="Réclamation" name="topic" @if (old('topic')=="Réclamation") checked @endif><span>{{ __('Réclamation produit') }}</span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="otherRecla" type="radio" value="La marque" name="topic" @if (old('topic')=="La marque") checked @endif><span>{{ __('La marque') }}</span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="otherRecla" type="radio" value="Contact Commercial" name="topic" @if (old('topic')=="Contact Commercial") checked @endif><span>{{ __('Contact commercial') }}</span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="otherRecla" type="radio" value="Autre" name="topic" @if (old('topic')=="Autre") checked @endif><span>{{ __('Autre demande') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-row recla_field">
|
||||
<div class="form-group">
|
||||
<label for="address">{{ __('Nom du produit') }}* : </label>
|
||||
<input type="text" name="product_name" id="product_name" value="{{ old('product_name') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="barcode">{{ __('Code barre') }}* : </label>
|
||||
<input type="number" name="barcode" id="barcode" value="{{ old('barcode') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row recla_field">
|
||||
<div class="form-group">
|
||||
<label for="shop">{{ __("Lieu d'achat") }}* : </label>
|
||||
<input type="text" name="shop" id="shop" value="{{ old('shop') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lot">{{ __('Numéro de lot') }}* : </label>
|
||||
<input type="number" name="lot" id="lot" value="{{ old('lot') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row recla_field">
|
||||
<div class="form-group">
|
||||
<label for="limit_date">{{ __('Date Limite de Consommation') }}* : </label>
|
||||
<input type="date" name="limit_date" id="limit_date" value="{{ old('limit_date') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="consumption_date">{{ __('Date de consommation') }}* : </label>
|
||||
<input type="date" name="consumption_date" id="consumption_date" value="{{ old('consumption_date') }}">
|
||||
</div>
|
||||
</div>
|
||||
<form class="form contact__form" id="form-submit" id="contact-form" action="{{ route($routeprefixer . 'contact.submit') }}"
|
||||
method="post" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@if ($errors->any())
|
||||
@foreach ($errors->all() as $error)
|
||||
<div class="form-result_error">{{ $error }}</div>
|
||||
@endforeach
|
||||
@endif
|
||||
<div>
|
||||
<label for="message">{{ __('Message') }}* : </label>
|
||||
<textarea name="message" id="message" cols="30" rows="10">{{ old('message') }}</textarea>
|
||||
@include('front.partials.inline-cookie', [
|
||||
'class' => ['d-flex-column'],
|
||||
'cookie_name' => 'recaptcha',
|
||||
'text_line_1' => __('Vous devez accepter les cookies reCaptcha pour utiliser les formulaires.'),
|
||||
'text_line_2' => __('Acceptez ce cookie pour utiliser les formulaires'),
|
||||
])
|
||||
</div>
|
||||
<div>
|
||||
<input type="file" name="file" id="file" @if ('topic'=="Réclamation" ) required @endif>
|
||||
<label for="file" id="lblFile"></label>
|
||||
<fieldset class="inert">
|
||||
<legend>{{ __('Vos coordonnées') }} :</legend>
|
||||
|
||||
<label class="radio-label">{{ __('Monsieur') }}
|
||||
<input name="civilite" type="radio" value="monsieur" checked="checked"
|
||||
@if (old('civilite') === 'monsieur') checked @endif>
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
<label class="radio-label">{{ __('Madame') }}
|
||||
<input name="civilite" type="radio" value="madame" @if (old('civilite') === 'madame') checked @endif>
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="name">{{ __('Nom') }}* : </label>
|
||||
<input id="name" name="name" type="text" value="{{ old('name') }}" minlength="2" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname">{{ __('Prénom') }}* : </label>
|
||||
<input id="lastname" name="lastname" type="text" value="{{ old('lastname') }}" minlength="2" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="address">{{ __('Adresse') }}* : </label>
|
||||
<input id="address" name="address" type="text" value="{{ old('address') }}" maxlength="255"
|
||||
autocomplete="street-address" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="postcode">{{ __('Code postal') }}* : </label>
|
||||
<input id="postcode" name="postcode" type="text" value="{{ old('postcode') }}" minlength="1" maxlength="99000"
|
||||
autocomplete="postal-code" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="city">{{ __('Ville') }}* : </label>
|
||||
<input id="city" name="city" type="text" value="{{ old('city') }}" maxlength="255"
|
||||
autocomplete="address-level2" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="phone">{{ __('Téléphone') }}* : </label>
|
||||
<input id="phone" name="phone" type="number" value="{{ old('phone') }}" min="1" max="9999999999"
|
||||
autocomplete="tel" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email">{{ __('Email') }}* : </label>
|
||||
<input id="email" name="email" type="mail" value="{{ old('email') }}"
|
||||
pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" autocomplete="email" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="country">
|
||||
<select class="changeLength" id="country" name="country" maxlength="255" required>
|
||||
<option value="" @if (!old('country')) selected @endif>{{ __('Sélectionnez un pays') }} *
|
||||
</option>
|
||||
@foreach ($listCountries as $country)
|
||||
<option value="{{ $country->value }}" @if (old('country') == $country->value) selected @endif>
|
||||
{{ __($country->label) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="drom">
|
||||
<select class="changeLength" id="departement" name="departement" maxlength="255">
|
||||
<option value="" @if (!old('departement')) selected @endif>
|
||||
{{ __('Sélectionnez un département') }} *</option>
|
||||
@foreach ($listDeps as $departement)
|
||||
<option value="{{ $departement->value }}" @if (old('departement') === $departement->value) selected @endif>
|
||||
{{ __($departement->label) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="inert">
|
||||
<legend>{{ __('Préciser votre demande') }} :</legend>
|
||||
<div class="ck-button">
|
||||
<label>
|
||||
<input class="consoRecla" name="topic" type="radio" value="Réclamation"
|
||||
@if (old('topic') == 'Réclamation') checked @endif><span>{{ __('Réclamation produit') }}</span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="otherRecla" name="topic" type="radio" value="La marque"
|
||||
@if (old('topic') == 'La marque') checked @endif><span>{{ __('La marque') }}</span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="otherRecla" name="topic" type="radio" value="Contact Commercial"
|
||||
@if (old('topic') == 'Contact Commercial') checked @endif><span>{{ __('Contact commercial') }}</span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="otherRecla" name="topic" type="radio" value="Autre"
|
||||
@if (old('topic') == 'Autre') checked @endif><span>{{ __('Autre demande') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-row recla_field">
|
||||
<div class="form-group">
|
||||
<label for="address">{{ __('Nom du produit') }}* : </label>
|
||||
<input id="product_name" name="product_name" type="text" value="{{ old('product_name') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="barcode">{{ __('Code barre') }}* : </label>
|
||||
<input id="barcode" name="barcode" type="number" value="{{ old('barcode') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row recla_field">
|
||||
<div class="form-group">
|
||||
<label for="shop">{{ __("Lieu d'achat") }}* : </label>
|
||||
<input id="shop" name="shop" type="text" value="{{ old('shop') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lot">{{ __('Numéro de lot') }}* : </label>
|
||||
<input id="lot" name="lot" type="number" value="{{ old('lot') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row recla_field">
|
||||
<div class="form-group">
|
||||
<label for="limit_date">{{ __('Date Limite de Consommation') }}* : </label>
|
||||
<input id="limit_date" name="limit_date" type="date" value="{{ old('limit_date') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="consumption_date">{{ __('Date de consommation') }}* : </label>
|
||||
<input id="consumption_date" name="consumption_date" type="date" value="{{ old('consumption_date') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="message">{{ __('Message') }}* : </label>
|
||||
<textarea id="message" name="message" cols="30" rows="10">{{ old('message') }}</textarea>
|
||||
</div>
|
||||
<div>
|
||||
<input id="file" name="file" type="file" @if ('topic' == 'Réclamation') required @endif>
|
||||
<label id="lblFile" for="file"></label>
|
||||
</div>
|
||||
</fieldset>
|
||||
<p class="is-small">{!! __('rgpd.contact.disclaimer', ['PRIVROUTE' => route($routeprefixer . 'policy')]) !!}</P>
|
||||
|
||||
<div class="d-flex flex-column justify-content-center align-items-center">
|
||||
<div id="r_captcha"></div>
|
||||
@if ($errors->has('g-recaptcha-response'))
|
||||
<div class="mb-6">
|
||||
<span class="text-danger">{{ $errors->first('g-recaptcha-response') }}</span>
|
||||
</div>
|
||||
@endif
|
||||
<p>*{{ __('Champ obligatoire') }}</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
<p class="is-small">{!! __('rgpd.contact.disclaimer', ['PRIVROUTE' => route($routeprefixer . 'policy')]) !!}</P>
|
||||
<div class="is-small">
|
||||
<input type="checkbox" name="rgpd" id="rgpd" required>
|
||||
<label for="rgpd">{{ __('rgpd.contact.acceptcgu') }}</label>
|
||||
</div>
|
||||
<div class="align-center">
|
||||
<div class="g-recaptcha" data-sitekey="{{ config('services.google.recaptcha.public') }}"></div>
|
||||
<input type="submit" value="Envoyer">
|
||||
</div>
|
||||
</form>
|
||||
<div class="align-center inert">
|
||||
<input type="submit" value="{{ __('Envoyer') }}">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
|
||||
<script nonce="{{ $nonce }}">
|
||||
function showReclaFields() {
|
||||
var collection = document.getElementsByClassName('recla_field');
|
||||
for(let elem of collection) {
|
||||
elem.style.display = 'flex';
|
||||
<script nonce="{{ $nonce }}">
|
||||
function showReclaFields() {
|
||||
var collection = document.getElementsByClassName('recla_field');
|
||||
for (let elem of collection) {
|
||||
elem.style.display = 'flex';
|
||||
}
|
||||
document.getElementById('lblFile').innerHTML = '{{ __('Photo de l’emballage') }}*';
|
||||
document.getElementById('file').required = true;
|
||||
}
|
||||
document.getElementById('lblFile').innerHTML = 'Photo de l\'emballage*';
|
||||
document.getElementById('file').required = true;
|
||||
}
|
||||
|
||||
function hideReclaFields() {
|
||||
var collection = document.getElementsByClassName('recla_field');
|
||||
for(let elem of collection) {
|
||||
elem.style.display = 'none';
|
||||
function hideReclaFields() {
|
||||
var collection = document.getElementsByClassName('recla_field');
|
||||
for (let elem of collection) {
|
||||
elem.style.display = 'none';
|
||||
}
|
||||
document.getElementById('lblFile').innerHTML = '{{ __('Insérer une pièce jointe') }}';
|
||||
document.getElementById('file').required = false;
|
||||
}
|
||||
document.getElementById('lblFile').innerHTML = 'Insérer une pièce jointe';
|
||||
document.getElementById('file').required = false;
|
||||
}
|
||||
|
||||
function showDromField() {
|
||||
const countryList = document.getElementById('country');
|
||||
const departmentList = document.getElementById('departement');
|
||||
if (countryList.value=='{{ \App\Enums\Country::france()->value }}') {
|
||||
departmentList.style.display = 'initial';
|
||||
departmentList.required = true;
|
||||
} else {
|
||||
departmentList.style.display = 'none';
|
||||
departmentList.required = false;
|
||||
function showDromField() {
|
||||
const countryList = document.getElementById('country');
|
||||
const departmentList = document.getElementById('departement');
|
||||
if (countryList.value == '{{ \App\Enums\Country::france()->value }}') {
|
||||
departmentList.style.display = 'initial';
|
||||
departmentList.required = true;
|
||||
} else {
|
||||
departmentList.style.display = 'none';
|
||||
departmentList.required = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
hideReclaFields();
|
||||
showDromField();
|
||||
@if (old('topic')=="Réclamation")
|
||||
showReclaFields();
|
||||
@endif
|
||||
document.getElementById('country').addEventListener('change', showDromField)
|
||||
});
|
||||
</script>
|
||||
|
||||
<script nonce="{{ $nonce }}">
|
||||
window.__LDC_CN_Recaptcha = function() {
|
||||
(function(d, t) {
|
||||
let g = d.createElement(t),
|
||||
s = d.getElementsByTagName(t)[0];
|
||||
g.src = 'https://www.google.com/recaptcha/api.js';
|
||||
s.parentNode.insertBefore(g, s)
|
||||
}(document, 'script'));
|
||||
};
|
||||
|
||||
function onSubmit(token) {
|
||||
document.getElementById("contact-form").submit();
|
||||
}
|
||||
</script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
hideReclaFields();
|
||||
showDromField();
|
||||
@if (old('topic') == 'Réclamation')
|
||||
showReclaFields();
|
||||
@endif
|
||||
document.getElementById('country').addEventListener('change', showDromField)
|
||||
});
|
||||
</script>
|
||||
|
||||
<script nonce="{{ $nonce }}">
|
||||
const initFormCaptcha = () => {
|
||||
const newDiv = document.createElement("div");
|
||||
newDiv.classList.add('g-recaptcha');
|
||||
document.getElementById('r_captcha').appendChild(newDiv);
|
||||
[...document.querySelectorAll('#form-submit .inert')].forEach(el => {
|
||||
el.inert = true;
|
||||
});
|
||||
};
|
||||
window.__CN_Recaptcha = function() {
|
||||
initFormCaptcha();
|
||||
(function(d, t) {
|
||||
let g = d.createElement(t),
|
||||
s = d.getElementsByTagName(t)[0];
|
||||
g.src = 'https://www.google.com/recaptcha/api.js?render=explicit&onload=__CN_Recaptcha_Loaded';
|
||||
s.parentNode.insertBefore(g, s)
|
||||
}(document, 'script'));
|
||||
};
|
||||
window.__CN_Recaptcha_Reset = function() {
|
||||
document.querySelector('#r_captcha > div')?.remove();
|
||||
[...document.querySelectorAll('#form-submit .inert')].forEach(el => {
|
||||
el.inert = true;
|
||||
});
|
||||
};
|
||||
window.__CN_Recaptcha_Loaded = function() {
|
||||
[...document.querySelectorAll('#form-submit .inert')].forEach(el => {
|
||||
el.inert = false;
|
||||
});
|
||||
grecaptcha.render(document.querySelector('#r_captcha > div'), {
|
||||
'sitekey': "{{ config('services.google.recaptcha.public') }}"
|
||||
});
|
||||
};
|
||||
</script>
|
||||
@endpush
|
||||
|
|
|
|||
9
resources/views/front/partials/inline-cookie.blade.php
Normal file
9
resources/views/front/partials/inline-cookie.blade.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<span data-cookie-name="{{ $cookie_name }}" @class(array_merge(['cn-cookie-activate w-100'], $class ?? []))>
|
||||
<span>
|
||||
<span>{{ $text_line_1 }}</span>
|
||||
@if (!empty($text_line_2))
|
||||
<small>{{ $text_line_2 }}</small>
|
||||
@endif
|
||||
</span>
|
||||
<button class="button brown">{{ __('Authorize') }}</button>
|
||||
</span>
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
<main>
|
||||
@yield('content')
|
||||
</main>
|
||||
@include('layouts.frontend.cookie')
|
||||
@include('vendor.ldcweb-cookies')
|
||||
@include('layouts.frontend.app-footer')
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,16 @@
|
|||
<footer>
|
||||
<div class="footer-widgets is-flex p-rel">
|
||||
<div class="footer-widgets__content wrapper is-flex p-abs @if (Route::current()->getName() == 'food') white-color @endif">
|
||||
<svg id="picto-localisation" class="p-abs" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236"><defs>
|
||||
<style>.cls-1{fill-rule:evenodd;}</style>
|
||||
</defs><path class="cls-1" d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z"/>
|
||||
<svg class="p-abs" id="picto-localisation" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill-rule: evenodd;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-1"
|
||||
d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z" />
|
||||
</svg>
|
||||
<p>
|
||||
DOUX FARMOR<br />
|
||||
|
|
@ -13,26 +20,32 @@
|
|||
</p>
|
||||
</div>
|
||||
@switch (Route::current()->getName())
|
||||
@case('wasup')
|
||||
<img src="{{ asset('assets/images/footer_marque.jpg') }}" alt="{{ __('Cuisiner en famille') }}" />
|
||||
@break
|
||||
@case('product')
|
||||
<img src="{{ asset('assets/images/footer_product.jpg') }}" alt="{{ __('Poulet rôti') }}" />
|
||||
@break
|
||||
@case('products')
|
||||
<img src="{{ asset('assets/images/footer_products.jpg') }}" alt="{{ __('Poulet rôti') }}" />
|
||||
@break
|
||||
@case('gammes')
|
||||
<img src="{{ asset('assets/images/footer_gammes.jpg') }}" alt="{{ __('Grignottes de poulet') }}" />
|
||||
@break
|
||||
@case('news')
|
||||
<img src="{{ asset('assets/images/footer_news.jpg') }}" alt="{{ __('Poulet rôti') }}" />
|
||||
@break
|
||||
@case('food')
|
||||
<img src="{{ asset('assets/images/footer_food.jpg') }}" alt="{{ __('Cuisine de chef') }}" />
|
||||
@break
|
||||
@default
|
||||
<img src="{{ asset('assets/images/footer_home.jpg') }}" alt="{{ __('Suggestion de poulet frit') }}" />
|
||||
@case('wasup')
|
||||
<img src="{{ asset('assets/images/footer_marque.jpg') }}" alt="{{ __('Cuisiner en famille') }}" />
|
||||
@break
|
||||
|
||||
@case('product')
|
||||
<img src="{{ asset('assets/images/footer_product.jpg') }}" alt="{{ __('Poulet rôti') }}" />
|
||||
@break
|
||||
|
||||
@case('products')
|
||||
<img src="{{ asset('assets/images/footer_products.jpg') }}" alt="{{ __('Poulet rôti') }}" />
|
||||
@break
|
||||
|
||||
@case('gammes')
|
||||
<img src="{{ asset('assets/images/footer_gammes.jpg') }}" alt="{{ __('Grignottes de poulet') }}" />
|
||||
@break
|
||||
|
||||
@case('news')
|
||||
<img src="{{ asset('assets/images/footer_news.jpg') }}" alt="{{ __('Poulet rôti') }}" />
|
||||
@break
|
||||
|
||||
@case('food')
|
||||
<img src="{{ asset('assets/images/footer_food.jpg') }}" alt="{{ __('Cuisine de chef') }}" />
|
||||
@break
|
||||
|
||||
@default
|
||||
<img src="{{ asset('assets/images/footer_home.jpg') }}" alt="{{ __('Suggestion de poulet frit') }}" />
|
||||
@endswitch
|
||||
<div class="banner footer">
|
||||
<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1919.76 59.99">
|
||||
|
|
@ -47,20 +60,22 @@
|
|||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-1" d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
|
||||
<path class="cls-2" d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
|
||||
<path class="cls-1"
|
||||
d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
|
||||
<path class="cls-2"
|
||||
d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container footer-content align-center @if (strpos(Route::current()->getName(), 'food') !== false) blue-bg @endif">
|
||||
<div class="footer-content align-center @if (strpos(Route::current()->getName(), 'food') !== false) blue-bg @endif container">
|
||||
<ul>
|
||||
<li><a href="{{ route($routeprefixer . 'cgu') }}">{{ __('Mentions légales') }}</a></li>
|
||||
<li><a href="{{ route($routeprefixer . 'policy') }}">{{ __('Charte de confidentialité') }}</a></li>
|
||||
{{--<li><a href="{{ route($routeprefixer . 'site-map') }}">{{ __('Plan du site') }}</a></li>--}}
|
||||
{{-- <li><a href="{{ route($routeprefixer . 'site-map') }}">{{ __('Plan du site') }}</a></li> --}}
|
||||
<li><a href="https://recrutement.ldc.fr/fr/annonces?brands=593" target="_blank">{{ __('Nous Rejoindre') }}</a></li>
|
||||
<li><a href="{{ route($routeprefixer . 'contact') }}">{{ __('Contact') }}</a></li>
|
||||
<li><a href="#cookies" class="ldcweb-cn-cookie-link">{{ __('Gestion des cookies') }}</a></li>
|
||||
<li><a class="cn-cookie-link" href="#cookies">{{ __('Gestion des cookies') }}</a></li>
|
||||
</ul>
|
||||
|
||||
<span>© 2022 DOUX</span>
|
||||
|
|
|
|||
|
|
@ -1,130 +0,0 @@
|
|||
<div id="ldcweb-cn">
|
||||
<a class="ldcweb-btn" title="Personnaliser les cookies">
|
||||
<svg class="ldcweb-btn-icon" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M14.0001 2.93383C14.0001 4.16622 14.6159 5.25477 15.5567 5.90849C15.3526 6.46423 15.2412 7.06473 15.2412 7.69126C15.2412 10.5472 17.5564 12.8624 20.4123 12.8624C21.0807 12.8624 21.7195 12.7356 22.3059 12.5047C22.9456 13.527 24.0817 14.2069 25.3766 14.2069C26.1872 14.2069 26.9357 13.9404 27.539 13.4903C27.5453 13.6594 27.5484 13.8294 27.5484 14C27.5484 21.4826 21.4826 27.5484 14 27.5484C6.51748 27.5484 0.45166 21.4826 0.45166 14C0.45166 6.51748 6.51748 0.45166 14 0.45166C14.3209 0.45166 14.6391 0.462811 14.9543 0.484747C14.3618 1.12929 14.0001 1.98931 14.0001 2.93383ZM21.2176 2.53212C21.2195 2.54914 21.2213 2.56619 21.2229 2.58328C21.2569 2.58864 21.2909 2.59433 21.3247 2.60035C21.2891 2.57745 21.2534 2.5547 21.2176 2.53212ZM25.5171 6.86104C25.523 6.89745 25.5285 6.93399 25.5336 6.97066C25.5512 6.97141 25.5687 6.97228 25.5861 6.97328C25.5633 6.93574 25.5403 6.89833 25.5171 6.86104ZM12.5247 2.09283C12.4748 2.38291 12.4487 2.68118 12.4487 2.98553C12.4487 4.33316 12.9591 5.56158 13.7972 6.48802C13.7266 6.87842 13.6898 7.28054 13.6898 7.69126C13.6898 11.404 16.6996 14.4137 20.4123 14.4137C20.8725 14.4137 21.3219 14.3675 21.7562 14.2794C22.689 15.1941 23.9669 15.7582 25.3766 15.7582C25.5439 15.7582 25.7094 15.7503 25.8726 15.7347C25.0321 21.5385 20.0368 25.9971 14.0001 25.9971C7.37431 25.9971 2.00305 20.6258 2.00305 14.0001C2.00305 7.87378 6.59498 2.82 12.5247 2.09283Z"
|
||||
fill="#FF4E4E" />
|
||||
<circle cx="7.58784" cy="12.8624" r="1.96503" fill="#FF4E4E" />
|
||||
<circle cx="8.82887" cy="19.2745" r="1.3445" fill="#FF4E4E" />
|
||||
<circle cx="13.6897" cy="14.5171" r="1.03423" fill="#FF4E4E" />
|
||||
<circle cx="11.4144" cy="7.48439" r="0.930805" fill="#FF4E4E" />
|
||||
<circle cx="17.5164" cy="20.3089" r="1.86161" fill="#FF4E4E" />
|
||||
<circle cx="21.3432" cy="6.7604" r="0.930805" fill="#FF4E4E" />
|
||||
<circle cx="22.1706" cy="1.89958" r="1.44792" fill="#FF4E4E" />
|
||||
<circle cx="26.8245" cy="8.31185" r="0.72396" fill="#FF4E4E" />
|
||||
</svg>
|
||||
</a>
|
||||
<div id="ldcweb-banner" class="ldcweb-cn-banner">
|
||||
<div class="ldcweb-banner-content">
|
||||
<div class="ldcweb-banner-img">
|
||||
<img src="{{ asset('assets/images/logo-doux.png') }}" alt="{{ __('Doux') }}" />
|
||||
</div>
|
||||
<div class="ldcweb-banner-text">
|
||||
<div class="ldcweb-banner-title">
|
||||
<p aria-level="h1">{{ __('rgpd.banner.title') }}</p>
|
||||
</div>
|
||||
<p class="ldcweb-banner-para-p" data-open="{{ __('rgpd.banner.desc.introopen') }}" data-close="{{ __('rgpd.banner.desc.introclose') }}">
|
||||
{!! __('rgpd.banner.desc.introclose') !!}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ldcweb-banner-details">
|
||||
<p>{!! __('rgpd.banner.desc.more', ['PRIVROUTE' => route($routeprefixer . 'policy')]) !!}</p>
|
||||
</div>
|
||||
<div class="ldcweb-banner-btnDetails">
|
||||
<p class="ldcweb-banner-btnDetails-p" data-open="{{ __('rgpd.banner.lessdetails') }}" data-close="{{ __('rgpd.banner.moredetails') }}">{{ __('rgpd.banner.moredetails') }}</p>
|
||||
</div>
|
||||
<div id="ldcweb-cn-modal" class="visibility">
|
||||
<div class="modal-wrapper">
|
||||
<div class="modal-title">
|
||||
<p class="title" aria-level="h2">{{ __('rgpd.manage.title') }}</p>
|
||||
<p class="subTitle">{{ __('rgpd.manage.subtitle') }}</p>
|
||||
<p class="description">{!! __('rgpd.manage.explain') !!}</p>
|
||||
</div>
|
||||
<div class="modal-details">
|
||||
<ul id="ldcweb-cn-list">
|
||||
</ul>
|
||||
<div id="template">
|
||||
<div>
|
||||
<div class="ldcweb-cn-infos">
|
||||
<span class="ldcweb-cn-name">Google Analytics (universal)</span>
|
||||
<span class="ldcweb-cn-description">Ce service peut déposer 8 cookies.</span>
|
||||
<a class="ldcweb-cn-link" href="#">En savoir plus</a>
|
||||
</div>
|
||||
<div class="ldcweb-cn-buttons">
|
||||
<div class="deny" id="deny-btn">
|
||||
<input type="radio" id="analytics2" name="analytics" data-name="analytics"
|
||||
data-status="false">
|
||||
<label for="analytics2">{{ __('rgpd.cookie.deny') }}</label>
|
||||
</div>
|
||||
<div class="accept" id="accept-btn">
|
||||
<input type="radio" id="analytics1" name="analytics" data-name="analytics"
|
||||
data-status="true">
|
||||
<label for="analytics1">{{ __('rgpd.cookie.allow') }}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ldcweb-banner-btns">
|
||||
<div class="ldcweb-banner-btn-flex">
|
||||
<div class="ldcweb-banner-btn-deny">
|
||||
<a id="ldcweb-cn-deny-banner" class="ldcweb-banner-btns-btn ldcweb-cn-deny">{{ __('rgpd.cookies.denyall') }}</a>
|
||||
</div>
|
||||
<div class="ldcweb-banner-btn-accept">
|
||||
<a id="ldcweb-cn-accept-banner" class="ldcweb-banner-btns-btn ldcweb-cn-accept">{{ __('rgpd.cookies.allowall') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ldcweb-banner-btn-personalize">
|
||||
<a class="ldcweb-banner-btns-btn ldcweb-cn-personalize" data-open-modal="{{ __('rgpd.cookies.return') }}"
|
||||
data-close-modal="{{ __('rgpd.cookies.personalize') }}">{{ __('rgpd.cookies.personalize') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script nonce="{{ $nonce }}">
|
||||
window.LDCWebCN = new LdcwebCn({
|
||||
'analytics': {
|
||||
'name': "{!! __('rgpd.analytics.title') !!}",
|
||||
'description': "{!! __('rgpd.analytics.desc') !!}",
|
||||
'link': 'https://support.google.com/analytics/answer/6004245',
|
||||
'cookies': ['_ga', '_gat_gtag_{{ str_replace('-', '_', config('google.analyticsKey')) }}',
|
||||
'_gid'
|
||||
],
|
||||
'script': function() {
|
||||
(function(d, t) {
|
||||
var g = d.createElement(t),
|
||||
s = d.getElementsByTagName(t)[0];
|
||||
g.src =
|
||||
'https://www.googletagmanager.com/gtag/js?id={{ config('google.analyticsKey') }}';
|
||||
s.parentNode.insertBefore(g, s)
|
||||
}(document, 'script'));
|
||||
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '{{ config('google.analyticsKey') }}');
|
||||
}
|
||||
},
|
||||
'recaptcha': {
|
||||
'name': "API - reCAPTACHA",
|
||||
'description': 'Les cookies qui sont déposés via le recaptcha sur les formulaires ont pour finalité d\'empêcher que ceux-ci ne soient soumis par des robots.',
|
||||
'link': 'https://policies.google.com/privacy',
|
||||
'labelLink': 'En savoir plus',
|
||||
'cookies': ['NID', '__Secure-3PAPISID', '__Secure-3PSID', '__Secure-3PSIDCC'],
|
||||
'script': function() {
|
||||
if (window.__LDC_CN_Recaptcha) {
|
||||
window.__LDC_CN_Recaptcha();
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
111
resources/views/vendor/cn-cookies.blade.php
vendored
Normal file
111
resources/views/vendor/cn-cookies.blade.php
vendored
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
{{-- blade-formatter-disable --}}
|
||||
@php
|
||||
|
||||
$site_name = Str::ucfirst(config('app.name'));
|
||||
$logo_picture_url = asset('assets/images/logo-doux.png');
|
||||
$logo_title_text = __('Logo du site :name', ['name' => $site_name]);
|
||||
$logo_alt_text = __('Logo :name', ['name' => $site_name]);
|
||||
|
||||
$strings = (object)[
|
||||
'modal_title' => __('cookie-notice.modal_title'),
|
||||
'button_customize_cookies' => __('cookie-notice.button_customize_cookies'),
|
||||
'button_close_cookies' => __('cookie-notice.button_close_cookies'),
|
||||
'button_title_open_new_tab' => __('cookie-notice.button_title_open_new_tab'),
|
||||
'button_forbid' => __('cookie-notice.button_forbid'),
|
||||
'button_allow' => __('cookie-notice.button_allow'),
|
||||
'button_forbid_all' => Str::upper(__('cookie-notice.button_forbid_all')),
|
||||
'button_allow_all' => Str::upper(__('cookie-notice.button_allow_all')),
|
||||
'button_customize' => Str::upper(__('cookie-notice.button_customize')),
|
||||
'button_forbid_all_title' => __('cookie-notice.button_forbid_all_title'),
|
||||
'button_allow_all_title' => __('cookie-notice.button_allow_all_title'),
|
||||
'button_back' => Str::upper(__('cookie-notice.button_back')),
|
||||
'banner_title' => __('cookie-notice.banner_title', ['site_name' => $site_name]),
|
||||
'banner_text' => __('cookie-notice.banner_text'),
|
||||
'panel_title' => __('cookie-notice.panel_title'),
|
||||
'panel_content' => __('cookie-notice.panel_content'),
|
||||
'panel_subtitle' => __('cookie-notice.panel_subtitle'),
|
||||
'panel_details' => __('cookie-notice.panel_details'),
|
||||
'picture_cookie_title' => __('cookie-notice.picture_cookie_title'),
|
||||
'navigation_title' => __('cookie-notice.navigation_title'),
|
||||
];
|
||||
|
||||
$cookies = [];
|
||||
|
||||
// RECAPTCHA
|
||||
$cookies['recaptcha'] = [
|
||||
'name' => __('cookie-notice.custom.recaptcha.title'),
|
||||
'description' => __('cookie-notice.custom.recaptcha.description'),
|
||||
'link' => 'https://policies.google.com/privacy',
|
||||
'labelLink' => __('cookie-notice.custom.recaptcha.labelLink'),
|
||||
'cookies' => ['NID', '__Secure-3PAPISID', '__Secure-3PSID', '__Secure-3PSIDCC']
|
||||
];
|
||||
|
||||
$cookies['recaptcha']['script'] = <<<SCRIPT
|
||||
function () {
|
||||
if (window.__CN_Recaptcha) {
|
||||
window.__CN_Recaptcha();
|
||||
}
|
||||
}
|
||||
SCRIPT;
|
||||
|
||||
// MATOMO
|
||||
$cookies['matomo'] = [
|
||||
'name' => __('cookie-notice.custom.matomo.title'),
|
||||
'description' => __('cookie-notice.custom.matomo.description'),
|
||||
'link' => 'https://fr.matomo.org/gdpr-analytics/',
|
||||
'labelLink' => __('cookie-notice.custom.matomo.labelLink'),
|
||||
'cookies' => ['_pk']
|
||||
];
|
||||
|
||||
$cookies['matomo']['script'] = <<<SCRIPT
|
||||
function () {
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//yl.s-web.fr/";
|
||||
_paq.push(['setTrackerUrl', u+'rainbow']);
|
||||
_paq.push(['setSiteId', '
|
||||
SCRIPT;
|
||||
$cookies['matomo']['script'] .= config("services.matomo.site_id");
|
||||
$cookies['matomo']['script'] .= <<<SCRIPT
|
||||
']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'unicorn'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
}
|
||||
SCRIPT;
|
||||
|
||||
@endphp
|
||||
|
||||
{{-- INCLUDE TEMPLATE --}}
|
||||
@include('vendor.cookie-notice-templates.standard', compact(
|
||||
'site_name', 'logo_picture_url', 'logo_alt_text',
|
||||
'logo_title_text', 'strings'
|
||||
))
|
||||
|
||||
@push('scripts')
|
||||
<script nonce="{{ $nonce ?? '' }}">
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
window.WebCookieNotice = {};
|
||||
@foreach($cookies as $index_name => $cookie)
|
||||
window.WebCookieNotice['{{ $index_name }}'] = {};
|
||||
window.WebCookieNotice['{{ $index_name }}'].tmp = {};
|
||||
// SCRIPT
|
||||
window.WebCookieNotice['{{ $index_name }}'].tmp.script = {!! strip_tags($cookie['script']) !!};
|
||||
@php unset($cookie['script']); @endphp
|
||||
// FALLBACK
|
||||
@if(isset($cookie['fallback']))
|
||||
window.WebCookieNotice['{{ $index_name }}'].tmp.fallback = {!! strip_tags($cookie['fallback']) !!};
|
||||
@php unset($cookie['fallback']); @endphp
|
||||
@endif
|
||||
window.WebCookieNotice['{{ $index_name }}'].conf = @json($cookie);
|
||||
window.WebCookieNotice['{{ $index_name }}'].conf.script = window.WebCookieNotice['{{ $index_name }}'].tmp.script;
|
||||
window.WebCookieNotice['{{ $index_name }}'].conf.fallback = window.WebCookieNotice['{{ $index_name }}'].tmp.fallback;
|
||||
window.WebCookieNotice['{{ $index_name }}'] = window.WebCookieNotice['{{ $index_name }}'].conf;
|
||||
@endforeach
|
||||
window.WebCookieNotice = new window.CookieNotice(window.WebCookieNotice);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
74
resources/views/vendor/cookie-notice/templates/standard.blade.php
vendored
Normal file
74
resources/views/vendor/cookie-notice/templates/standard.blade.php
vendored
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
<div id="cn-wrapper" title="{{ $strings->modal_title }}" role="alertdialog" tabindex="-1">
|
||||
<button id="cn-cookie-btn" title="{{ $strings->button_customize_cookies }}">
|
||||
{{-- COOKIE SVG --}}
|
||||
<svg viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>{{ $strings->picture_cookie_title }}</title>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M14.0001 2.93383C14.0001 4.16622 14.6159 5.25477 15.5567 5.90849C15.3526 6.46423 15.2412 7.06473 15.2412 7.69126C15.2412 10.5472 17.5564 12.8624 20.4123 12.8624C21.0807 12.8624 21.7195 12.7356 22.3059 12.5047C22.9456 13.527 24.0817 14.2069 25.3766 14.2069C26.1872 14.2069 26.9357 13.9404 27.539 13.4903C27.5453 13.6594 27.5484 13.8294 27.5484 14C27.5484 21.4826 21.4826 27.5484 14 27.5484C6.51748 27.5484 0.45166 21.4826 0.45166 14C0.45166 6.51748 6.51748 0.45166 14 0.45166C14.3209 0.45166 14.6391 0.462811 14.9543 0.484747C14.3618 1.12929 14.0001 1.98931 14.0001 2.93383ZM21.2176 2.53212C21.2195 2.54914 21.2213 2.56619 21.2229 2.58328C21.2569 2.58864 21.2909 2.59433 21.3247 2.60035C21.2891 2.57745 21.2534 2.5547 21.2176 2.53212ZM25.5171 6.86104C25.523 6.89745 25.5285 6.93399 25.5336 6.97066C25.5512 6.97141 25.5687 6.97228 25.5861 6.97328C25.5633 6.93574 25.5403 6.89833 25.5171 6.86104ZM12.5247 2.09283C12.4748 2.38291 12.4487 2.68118 12.4487 2.98553C12.4487 4.33316 12.9591 5.56158 13.7972 6.48802C13.7266 6.87842 13.6898 7.28054 13.6898 7.69126C13.6898 11.404 16.6996 14.4137 20.4123 14.4137C20.8725 14.4137 21.3219 14.3675 21.7562 14.2794C22.689 15.1941 23.9669 15.7582 25.3766 15.7582C25.5439 15.7582 25.7094 15.7503 25.8726 15.7347C25.0321 21.5385 20.0368 25.9971 14.0001 25.9971C7.37431 25.9971 2.00305 20.6258 2.00305 14.0001C2.00305 7.87378 6.59498 2.82 12.5247 2.09283Z"
|
||||
fill="#FF4E4E" />
|
||||
<circle cx="7.58784" cy="12.8624" r="1.96503" fill="#FF4E4E" />
|
||||
<circle cx="8.82887" cy="19.2745" r="1.3445" fill="#FF4E4E" />
|
||||
<circle cx="13.6897" cy="14.5171" r="1.03423" fill="#FF4E4E" />
|
||||
<circle cx="11.4144" cy="7.48439" r="0.930805" fill="#FF4E4E" />
|
||||
<circle cx="17.5164" cy="20.3089" r="1.86161" fill="#FF4E4E" />
|
||||
<circle cx="21.3432" cy="6.7604" r="0.930805" fill="#FF4E4E" />
|
||||
<circle cx="22.1706" cy="1.89958" r="1.44792" fill="#FF4E4E" />
|
||||
<circle cx="26.8245" cy="8.31185" r="0.72396" fill="#FF4E4E" />
|
||||
</svg>
|
||||
</button>
|
||||
{{-- BANNER --}}
|
||||
<div id="cn-banner" tabindex="-1">
|
||||
<div class="cn-modal-top-line">
|
||||
<button id="cn-close-modal" title="{{ $strings->button_close_cookies }}">X</button>
|
||||
</div>
|
||||
{{-- CONTENT VIEW --}}
|
||||
<div class="cn-content" title="{{ $strings->panel_content }}" tabindex="0">
|
||||
{{-- 1ST PAGE BANNER --}}
|
||||
<div class="cn-banner-content">
|
||||
<div class="cn-banner-img">
|
||||
<img src="{{ $logo_picture_url }}" title="{{ $logo_title_text }}" alt="{{ $logo_alt_text }}">
|
||||
</div>
|
||||
<div class="cn-banner-text">
|
||||
<div class="cn-banner-title">
|
||||
<span>{!! nl2br(e($strings->banner_title)) !!}</span>
|
||||
</div>
|
||||
<div class="cn-banner-para-p">
|
||||
<p>{!! $strings->banner_text !!}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{-- 2ND PAGE CUSTOMIZE PANEL --}}
|
||||
<div class="cn-modal-container d-none">
|
||||
{{-- COOKIES LIST --}}
|
||||
<ul id="cn-modal-list"></ul>
|
||||
</div>
|
||||
</div>
|
||||
{{-- NAV BAR --}}
|
||||
<div class="cn-nav" title="{{ $strings->navigation_title }}" role="navigation">
|
||||
<button class="cn-banner-btn cn-deny" id="cn-deny-banner"
|
||||
title="{{ $strings->button_forbid_all_title }}">{{ $strings->button_forbid_all }}</button>
|
||||
<button class="cn-banner-btn cn-accept" id="cn-accept-banner"
|
||||
title="{{ $strings->button_allow_all_title }}">{{ $strings->button_allow_all }}</button>
|
||||
<button class="cn-banner-btn cn-custom" id="cn-settings-banner" data-open-modal="{{ $strings->button_validate_and_close }}"
|
||||
data-close-modal="{{ $strings->button_customize }}">{{ $strings->button_customize }}</button>
|
||||
</div>
|
||||
|
||||
{{-- COOKIE LIST LI TEMPLATE --}}
|
||||
<div id="cn-li-template">
|
||||
<div class="cn-cookie-wrapper">
|
||||
<div class="cn-cookie-infos">
|
||||
<span class="cn-cookie-name">#name</span>
|
||||
<span class="cn-cookie-description">#description</span>
|
||||
<a class="cn-cookie-link" title="{{ $strings->button_title_open_new_tab }}" target="blank">#link</a>
|
||||
</div>
|
||||
<div class="cn-cookie-buttons">
|
||||
<label class="cn-switch" title="{{ $strings->button_toggle_cookie }}" role="checkbox"
|
||||
aria-label="{{ $strings->button_toggle_cookie }}" aria-checked="undefined" tabindex="0">
|
||||
<input type="checkbox" tabindex="-1" />
|
||||
<span></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
130
resources/views/vendor/ldcweb-cookies.blade.php
vendored
Normal file
130
resources/views/vendor/ldcweb-cookies.blade.php
vendored
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
{{-- blade-formatter-disable --}}
|
||||
@php
|
||||
|
||||
$site_name = Str::ucfirst(config('app.name'));
|
||||
$logo_picture_url = asset('assets/images/logo-doux.png');
|
||||
$logo_title_text = Str::ucfirst(__('cookie-notice.logo_title_text', ['name' => $site_name]));
|
||||
$logo_alt_text = Str::ucfirst(__('cookie-notice.logo_alt_text'));
|
||||
|
||||
|
||||
|
||||
$strings = (object)[
|
||||
'modal_title' => __('cookie-notice.modal_title'),
|
||||
'button_customize_cookies' => __('cookie-notice.button_customize_cookies'),
|
||||
'button_close_cookies' => __('cookie-notice.button_close_cookies'),
|
||||
'button_title_open_new_tab' => __('cookie-notice.button_title_open_new_tab'),
|
||||
'button_toggle_cookie' => __('cookie-notice.button_toggle_cookie'),
|
||||
'button_forbid_all' => Str::upper(__('cookie-notice.button_forbid_all')),
|
||||
'button_allow_all' => Str::upper(__('cookie-notice.button_allow_all')),
|
||||
'button_customize' => Str::upper(__('cookie-notice.button_customize')),
|
||||
'button_forbid_all_title' => __('cookie-notice.button_forbid_all_title'),
|
||||
'button_allow_all_title' => __('cookie-notice.button_allow_all_title'),
|
||||
'button_validate_and_close' => Str::upper(__('cookie-notice.button_validate_and_close')),
|
||||
'banner_title' => __('cookie-notice.banner_title', ['site_name' => $site_name]),
|
||||
'banner_text' => sprintf(
|
||||
"%s<br><br>%s",
|
||||
__('cookie-notice.banner_text'),
|
||||
"<a class='underline' href='" . route($routeprefixer . 'policy') . "'>" . __('Charte de confidentialité') . "</a>"
|
||||
),
|
||||
'panel_content' => __('cookie-notice.panel_content'),
|
||||
'picture_cookie_title' => __('cookie-notice.picture_cookie_title'),
|
||||
'navigation_title' => __('cookie-notice.navigation_title'),
|
||||
];
|
||||
|
||||
$cookies = [];
|
||||
|
||||
// RECAPTCHA
|
||||
$cookies['recaptcha'] = [
|
||||
'name' => __('cookie-notice.custom.recaptcha.title'),
|
||||
'description' => __('cookie-notice.custom.recaptcha.description'),
|
||||
'link' => 'https://policies.google.com/privacy',
|
||||
'labelLink' => __('En savoir +'),
|
||||
'cookies' => ['NID', '__Secure-3PAPISID', '__Secure-3PSID', '__Secure-3PSIDCC']
|
||||
];
|
||||
|
||||
$cookies['recaptcha']['script'] = <<<SCRIPT
|
||||
function () {
|
||||
if (window.__CN_Recaptcha) {
|
||||
window.__CN_Recaptcha();
|
||||
}
|
||||
[...document.getElementsByClassName('cn-cookie-activate')].forEach(function(el) {
|
||||
if (el.dataset.cookieName === 'recaptcha') {
|
||||
el.classList.add('d-none');
|
||||
}
|
||||
});
|
||||
}
|
||||
SCRIPT;
|
||||
$cookies['recaptcha']['fallback'] = <<<FALLBACK
|
||||
function () {
|
||||
if (window.__CN_Recaptcha_Reset) {
|
||||
window.__CN_Recaptcha_Reset();
|
||||
}
|
||||
|
||||
[...document.getElementsByClassName('cn-cookie-activate')].forEach(function(el) {
|
||||
if (el.dataset.cookieName === 'recaptcha') {
|
||||
el.classList.remove('d-none');
|
||||
}
|
||||
});
|
||||
}
|
||||
FALLBACK;
|
||||
|
||||
// MATOMO
|
||||
$cookies['matomo'] = [
|
||||
'name' => __('cookie-notice.custom.matomo.title'),
|
||||
'description' => __('cookie-notice.custom.matomo.description'),
|
||||
'link' => 'https://fr.matomo.org/gdpr-analytics/',
|
||||
'labelLink' => __('En savoir +'),
|
||||
'cookies' => ['_pk']
|
||||
];
|
||||
|
||||
$cookies['matomo']['script'] = <<<SCRIPT
|
||||
function () {
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//yl.s-web.fr/";
|
||||
_paq.push(['setTrackerUrl', u+'rainbow']);
|
||||
_paq.push(['setSiteId', '
|
||||
SCRIPT;
|
||||
$cookies['matomo']['script'] .= config("services.matomo.site_id");
|
||||
$cookies['matomo']['script'] .= <<<SCRIPT
|
||||
']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'unicorn'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
}
|
||||
SCRIPT;
|
||||
|
||||
@endphp
|
||||
|
||||
{{-- INCLUDE TEMPLATE --}}
|
||||
@include('vendor.cookie-notice.templates.standard', compact(
|
||||
'site_name', 'logo_picture_url', 'logo_alt_text',
|
||||
'logo_title_text', 'strings'
|
||||
))
|
||||
|
||||
|
||||
<script nonce="{{ $nonce ?? '' }}">
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
window.WebCookieNotice = {};
|
||||
@foreach($cookies as $index_name => $cookie)
|
||||
window.WebCookieNotice['{{ $index_name }}'] = {};
|
||||
window.WebCookieNotice['{{ $index_name }}'].tmp = {};
|
||||
// SCRIPT
|
||||
window.WebCookieNotice['{{ $index_name }}'].tmp.script = {!! strip_tags($cookie['script']) !!};
|
||||
@php unset($cookie['script']); @endphp
|
||||
// FALLBACK
|
||||
@if(isset($cookie['fallback']))
|
||||
window.WebCookieNotice['{{ $index_name }}'].tmp.fallback = {!! strip_tags($cookie['fallback']) !!};
|
||||
@php unset($cookie['fallback']); @endphp
|
||||
@endif
|
||||
window.WebCookieNotice['{{ $index_name }}'].conf = @json($cookie);
|
||||
window.WebCookieNotice['{{ $index_name }}'].conf.script = window.WebCookieNotice['{{ $index_name }}'].tmp.script;
|
||||
window.WebCookieNotice['{{ $index_name }}'].conf.fallback = window.WebCookieNotice['{{ $index_name }}'].tmp.fallback;
|
||||
window.WebCookieNotice['{{ $index_name }}'] = window.WebCookieNotice['{{ $index_name }}'].conf;
|
||||
@endforeach
|
||||
window.WebCookieNotice = new window.CookieNotice(window.WebCookieNotice);
|
||||
});
|
||||
</script>
|
||||
108
routes/web.php
108
routes/web.php
|
|
@ -114,58 +114,60 @@ Route::prefix('bo')
|
|||
}
|
||||
);
|
||||
|
||||
$langs = ['en', 'es', ''];
|
||||
if (!app()->runningInConsole()) {
|
||||
$langs = ['en', 'es', ''];
|
||||
|
||||
foreach ($langs as $lang) {
|
||||
Route::middleware(['front-end-globals'])
|
||||
->prefix($lang)
|
||||
->name($lang == '' ? '' : $lang . '.')
|
||||
->group(
|
||||
function () use ($lang) {
|
||||
Route::get('/', [ControllersHomeController::class, 'index'])->name('home');
|
||||
foreach ($langs as $lang) {
|
||||
Route::middleware(['front-end-globals'])
|
||||
->prefix($lang)
|
||||
->name($lang == '' ? '' : $lang . '.')
|
||||
->group(
|
||||
function () use ($lang) {
|
||||
Route::get('/', [ControllersHomeController::class, 'index'])->name('home');
|
||||
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.marque', [], $lang)),
|
||||
[ControllersMarqueController::class, 'index']
|
||||
)->name('wasup');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.gammes', [], $lang)),
|
||||
[ControllersGammesController::class, 'index']
|
||||
)->name('gammes.index');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.gamme', [], $lang)) . '/{gammeSlug:slug}',
|
||||
[ControllersGammesController::class, 'show']
|
||||
)->name('gammes.show');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.produit', [], $lang)) . '/{gammeSlug:slug}/{productSlug:slug}',
|
||||
[ControllersProductsController::class, 'show']
|
||||
)->name('product.show');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.news', [], $lang)),
|
||||
[ControllersNewsController::class, 'index']
|
||||
)->name('news');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.food-service', [], $lang)),
|
||||
[ControllersFoodServiceController::class, 'index']
|
||||
)->name('food');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.legals', [], $lang)),
|
||||
[ControllersLegalsController::class, 'index']
|
||||
)->name('cgu');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.policy', [], $lang)),
|
||||
[ControllersPolicyController::class, 'index']
|
||||
)->name('policy');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.search', [], $lang)),
|
||||
[ControllersProductsController::class, 'search']
|
||||
)->name('search');
|
||||
// Classic.
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.contact', [], $lang)),
|
||||
[ControllersContactController::class, 'contact']
|
||||
)->name('contact');
|
||||
Route::post('/contact', [ControllersContactController::class, 'contactSubmit'])->name('contact.submit');
|
||||
}
|
||||
);
|
||||
}//end foreach
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.marque', [], $lang)),
|
||||
[ControllersMarqueController::class, 'index']
|
||||
)->name('wasup');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.gammes', [], $lang)),
|
||||
[ControllersGammesController::class, 'index']
|
||||
)->name('gammes.index');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.gamme', [], $lang)) . '/{gammeSlug:slug}',
|
||||
[ControllersGammesController::class, 'show']
|
||||
)->name('gammes.show');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.produit', [], $lang)) . '/{gammeSlug:slug}/{productSlug:slug}',
|
||||
[ControllersProductsController::class, 'show']
|
||||
)->name('product.show');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.news', [], $lang)),
|
||||
[ControllersNewsController::class, 'index']
|
||||
)->name('news');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.food-service', [], $lang)),
|
||||
[ControllersFoodServiceController::class, 'index']
|
||||
)->name('food');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.legals', [], $lang)),
|
||||
[ControllersLegalsController::class, 'index']
|
||||
)->name('cgu');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.policy', [], $lang)),
|
||||
[ControllersPolicyController::class, 'index']
|
||||
)->name('policy');
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.search', [], $lang)),
|
||||
[ControllersProductsController::class, 'search']
|
||||
)->name('search');
|
||||
// Classic.
|
||||
Route::get(
|
||||
'/' . Str::slug(Lang::get('urls.contact', [], $lang)),
|
||||
[ControllersContactController::class, 'contact']
|
||||
)->name('contact');
|
||||
Route::post('/contact', [ControllersContactController::class, 'contactSubmit'])->name('contact.submit');
|
||||
}
|
||||
);
|
||||
}//end foreach
|
||||
}//end if
|
||||
|
|
|
|||
20
staging-resources.yaml
Normal file
20
staging-resources.yaml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-ingress-route
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`${APP_DOMAIN}`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-service
|
||||
port: 80
|
||||
middlewares:
|
||||
- name: admin-ldc-whitelist
|
||||
namespace: common-services
|
||||
tls:
|
||||
secretName: ${CRT_TLS_NAME}
|
||||
Loading…
Add table
Reference in a new issue