Closes #45 Add static pages

This commit is contained in:
Jérémy Munsch 2024-01-09 15:20:18 +00:00 • committed by Vincent BRIDIER
parent bcbf47bced
commit 9c680b3fa9
48 changed files with 2093 additions and 413 deletions

View file

@ -0,0 +1,47 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self contactAbuse()
* @method static self contactComplain()
* @method static self contactRecipe()
* @method static self legals()
* @method static self confidentiality()
*/
final class StaticPageType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'contactAbuse' => 1,
'contactComplain' => 2,
'contactRecipe' => 3,
'legals' => 4,
'confidentiality' => 5,
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'contactAbuse' => 'Contact plainte utilisateur',
'contactComplain' => 'Contact réclamation',
'contactRecipe' => 'Contact recette ',
'legals' => 'Mentions légales',
'confidentiality' => 'Confidentialité',
];
}
}

View file

@ -0,0 +1,48 @@
<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\StaticPages\UpdateStaticPageRequest;
use App\Models\StaticPage;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class StaticPageController extends Controller
{
/**
* Show the form for editing the specified resource.
*
* @param App\Models\StaticPage $static_page
* @return \Illuminate\Contracts\View\View
*/
public function edit(StaticPage $static_page): \Illuminate\Contracts\View\View
{
return view('bo.pages.static_pages.edit', ['staticPageModel' => $static_page]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\StaticPages\UpdateStaticPageRequest $request
* @param \App\Models\StaticPage $static_page
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateStaticPageRequest $request, StaticPage $static_page): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request, $static_page) {
$static_page->fill($request->validated());
if ($static_page->saveOrFail()) {
return redirect()->route('bo.static_pages.edit', $static_page)
->with('success', __('crud.messages.has_been_updated', [
'model' => Str::ucfirst(\trans_choice('models.classes.static_page', 1))
]));
}
return redirect()->route('bo.static_pages.edit', $static_page)
->with('error', __('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(\trans_choice('models.classes.static_page', 1))
]));
});
}
}

View file

@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Enums\ContactFormType;
use App\Enums\StaticPageType;
use App\Exceptions\AbortContactMailer;
use App\Http\Requests\ContactFormRequest;
use App\Jobs\SendArcadiaMail;
@ -10,6 +11,7 @@ use App\Jobs\SendNLMail;
use App\Jobs\SendPasserelleMail;
use App\Models\Contact as Contact;
use App\Models\MailContactData;
use App\Models\StaticPage;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
@ -22,6 +24,7 @@ class ContactController extends Controller
* @param \Illuminate\Http\Request $request
* @param \App\Enums\ContactFormType|null $type
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
* @throws \RuntimeException If contact form type is handled.
*/
public function contact(Request $request, ContactFormType $type = null)
{
@ -29,7 +32,33 @@ class ContactController extends Controller
$status = $request->session()->get('status');
$type = $type ?? ContactFormType::none();
$username = $request->username ?? '';
return view('front.contact.contact', compact('type', 'user', 'status', 'username'));
$staticPageType = StaticPageType::contactComplain();
switch ($type) {
case ContactFormType::abuse():
$staticPageType = StaticPageType::contactAbuse();
break;
case ContactFormType::recipe():
$staticPageType = StaticPageType::contactRecipe();
break;
case ContactFormType::none():
case ContactFormType::complain():
$staticPageType = StaticPageType::contactComplain();
break;
default:
throw new \RuntimeException("Unhandled contact form type {$type}");
}
$staticPageModel = StaticPage::query()->where('type', $staticPageType->value)->firstOrFail();
return view('front.contact.contact', compact(
'type',
'user',
'status',
'staticPageModel',
'username'
));
}
/**

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers;
use App\Enums\StaticPageType;
use App\Models\StaticPage;
use Illuminate\Contracts\View\View;
class StaticPageController extends Controller
{
/**
* Show legals conditions page
*
* @return \Illuminate\Contracts\View\View
*/
public function legals(): View
{
$staticPageModel = StaticPage::query()->where('type', StaticPageType::legals())->firstOrFail();
return view('front.legals', compact('staticPageModel'));
}
/**
* Show page Charte de confidentialité
*
* @return \Illuminate\Contracts\View\View
*/
public function charte(): View
{
$staticPageModel = StaticPage::query()->where('type', StaticPageType::confidentiality())->firstOrFail();
return view('front.charte', compact('staticPageModel'));
}
}

View file

@ -0,0 +1,46 @@
<?php
namespace App\Http\Requests\Bo\StaticPages;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Str;
class UpdateStaticPageRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize(): bool
{
return auth('web')->check();
}
/**
* Prepare the data for validation.
*
* @return void
*/
public function prepareForValidation(): void
{
$this->merge([
'content' => (string)Str::of($this->post('content'))
]);
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'seo_title' => 'required|min:45|max:70',
'seo_description' => 'required|min:50|max:160',
'title' => 'required|min:3|max:255',
'content' => 'present',
];
}
}

View file

@ -6,6 +6,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class ToolboxHelper
{
@ -62,4 +63,85 @@ class ToolboxHelper
]
], [], ['g-recaptcha-response' => 'reCaptcha']);
}
/**
* Asserts that the field is unique
*
* @param string $table
* @param string $field
* @param string|integer|float|boolean|null|array $value
* @param integer|null $id
* @param callable|null $query
* @return void
* @throws \Illuminate\Validation\ValidationException If the field is not unique.
*/
public static function assertFieldIsUnique(
string $table,
string $field,
$value,
?int $id = null,
?callable $query = null
) {
if (!$query) {
Validator::make([$field => $value], [
self::mbReplace('.', '\.', $field) => Rule::unique($table, $field)->ignore($id),
], [
self::mbReplace('.', '\.', "{$field}.unique")
=> trans('crud.libs.toolbox.assertFieldIsUnique', ['attribute' => $field, 'value' => $value])
])->validate();
return;
}
Validator::make([$field => $value], [
$field => Rule::unique($table)->where($query)->ignore($id),
], [
$field . '.unique' => trans(
'crud.libs.toolbox.assertFieldIsUnique',
['attribute' => $field, 'value' => $value]
)
])->validate();
}
/**
* Mutltibyte string replace
*
* @param array|string $search
* @param array|string $replace
* @param array|string $subject
* @param integer $count
* @return array|string
*/
public static function mbReplace(
$search,
$replace,
$subject,
int &$count = 0
) {
if (!is_array($search) && is_array($replace)) {
return false;
}
if (is_array($subject)) {
// Call mb_replace for each single string in $subject .
foreach ($subject as &$string) {
$string = &self::mbReplace($search, $replace, $string, $count);
}
} elseif (is_array($search)) {
if (!is_array($replace)) {
foreach ($search as &$string) {
$subject = self::mbReplace($string, $replace, $subject, $count);
}
} else {
$n = max(count($search), count($replace));
while ($n--) {
$subject = self::mbReplace(current($search), current($replace), $subject, $count);
next($search);
next($replace);
}
}
} else {
$parts = mb_split(preg_quote($search), $subject);
$count = count($parts) - 1;
$subject = implode($replace, $parts);
} //end if
return $subject;
}
}

87
app/Models/StaticPage.php Normal file
View file

@ -0,0 +1,87 @@
<?php
namespace App\Models;
use App\Enums\StaticPageType;
use App\Lib\Helpers\ToolboxHelper;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
use Kwaadpepper\Enum\Traits\CastsEnums;
/**
* @property \App\Enums\StaticPageType $type Page type (StaticPageEnum).
* @property string $seo_title Seo title about 70 chars as recommended.
* @property string $seo_description Seo description about 160 chars as recommended.
* @property string $title Title for the page.
* @property string $slug Slug of the title for the page.
* @property string $content WYSIWYG text content using ckeditor.
* @property-read \Illuminate\Support\Carbon $created_at Created date.
* @property-read \Illuminate\Support\Carbon $updated_at Updated date.
*/
class StaticPage extends Model
{
use CastsEnums;
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'seo_title',
'seo_description',
'title',
'content',
];
/**
* The attributes that should be cast to Enums.
*
* @var array
*/
protected $enumCasts = [
'type' => StaticPageType::class
];
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted(): void
{
static::creating(function (self $model) {
// * ASSERTIONS
static::assertTitleIsUnique($model->title);
// * CHANGES
$model->slug = Str::slug($model->title);
});
static::updating(function (self $model) {
// * ASSERTIONS
static::assertTitleIsUnique($model->title, $model->id);
// * CHANGES
$model->slug = Str::slug($model->title);
});
}
// * METHODS
/**
* Asserts using validation that the title is unique
*
* @param string|null $title
* @param integer|null $id
* @return void
* @throws \Illuminate\Validation\ValidationException If an actu title already exists.
*/
private static function assertTitleIsUnique(?string $title, ?int $id = null)
{
$table = (new self())->getTable();
ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id);
ToolboxHelper::assertFieldIsUnique($table, 'slug', Str::slug($title), $id);
}
}

View file

@ -29,6 +29,7 @@ use App\Models\ProductSliderPictures;
use App\Models\Range;
use App\Models\Recipes;
use App\Models\Reduction;
use App\Models\StaticPage;
use App\Models\SubRange;
use App\Models\Tag;
use BadMethodCallException;
@ -102,6 +103,7 @@ class RouteServiceProvider extends ServiceProvider
}
}
});
Route::model('static_page', StaticPage::class);
Route::model('engagement', Engagement::class);
Route::bind('publishedProduct', function ($value) {
// * Old slug middleware will throw 404 if needed.

View file

@ -0,0 +1,46 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('static_pages', function (Blueprint $table) {
$table->id();
$table->unsignedTinyInteger('type')->unique()->comment('Page type (StaticPageEnum)');
$table->string('seo_title')->comment('Seo title about 70 chars as recommended');
$table->string('seo_description')->comment('Seo description about 160 chars as recommended');
$table->string('title')->comment('Title for the page');
$table->string('slug')->unique()->comment('Unique title slug');
$table->text('content')->comment('WYSIWYG text content using ckeditor');
$table->timestamps();
});
Artisan::call('db:seed', [
'class' => 'StaticPageSeeder'
]);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('static_pages');
}
};

View file

@ -0,0 +1,84 @@
<?php
namespace Database\Seeders;
use App\Enums\StaticPageType;
use App\Models\StaticPage;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;
class StaticPageSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
StaticPage::query()->updateOrCreate(
[
'type' => StaticPageType::contactAbuse(),
],
[
'seo_title' => 'Formulaire de modération',
'seo_description' => "Un souci avec un utilisateur ? N'hésitez pas à compléter le formulaire.",
'title' => 'Formulaire de modération',
'type' => StaticPageType::contactAbuse(),
'content' => File::get(\database_path('seeders/bigStrings/contact-abuse.html')),
]
);
StaticPage::query()->updateOrCreate(
[
'type' => StaticPageType::contactComplain(),
],
[
'seo_title' => 'Formulaire de réclamation produit',
// phpcs:ignore Generic.Files.LineLength.TooLong
'seo_description' => "Envie de partager une remarque, une idée avec nous, de poser une question : n'hésitez pas à compléter le formulaire de récalamation produit.",
'title' => 'Contactez-nous pour une réclamation',
'type' => StaticPageType::contactComplain(),
'content' => File::get(\database_path('seeders/bigStrings/contact-complain.html')),
]
);
StaticPage::query()->updateOrCreate(
[
'type' => StaticPageType::contactRecipe(),
],
[
'seo_title' => 'Formulaire pour proposer une recette',
// phpcs:ignore Generic.Files.LineLength.TooLong
'seo_description' => "Envie de partager une recette, une idée avec nous : n'hésitez pas à compléter le formulaire.",
'title' => 'Contactez-nous pour nous proposer une recette',
'type' => StaticPageType::contactRecipe(),
'content' => File::get(\database_path('seeders/bigStrings/contact-recipe.html')),
]
);
StaticPage::query()->updateOrCreate(
[
'type' => StaticPageType::legals(),
],
[
'seo_title' => 'Mentions légales',
// phpcs:ignore Generic.Files.LineLength.TooLong
'seo_description' => "Retrouvez l'ensemble de nos conditions générales et d'utilisation du site Le Gaulois. A lire impérativement avant l'inscription au club des Gaulois",
'title' => 'Mentions légales',
'type' => StaticPageType::legals(),
'content' => File::get(\database_path('seeders/bigStrings/legals.html')),
]
);
StaticPage::query()->updateOrCreate(
[
'type' => StaticPageType::confidentiality(),
],
[
'seo_title' => 'Charte de confidentialité',
'seo_description' => 'Retrouvez la charte de confidentialité du site Le Gaulois',
'title' => 'Charte de confidentialitée',
'type' => StaticPageType::confidentiality(),
'content' => File::get(\database_path('seeders/bigStrings/confidentiality.html')),
]
);
}
}

View file

@ -0,0 +1,291 @@
<h3>Introduction</h3>
<p>
Le nouveau Règlement Général de l’Union Européenne sur la Protection des Données (RGPD), entré en vigueur le 25 mai
2018, vise à mieux encadrer la collecte, le traitement et l’utilisation de vos données personnelles. LDC Sablé, en
sa qualité de responsable du traitement, renforce ses engagements pour garantir la protection et la sécurité des
données à caractère personnel que vous lui confiez.
<br><br>
A ce titre, la présente Charte de confidentialité vous informe sur le type de données que nous collectons, comment
nous les traitons, dans quelles finalités, de manière à rendre leur utilisation la plus adaptée à vos besoins.
<br><br>
Le responsable de traitement, qui collecte et gère vos données, est la société LDC Sablé, Société par Actions
Simplifiée au capital social de 235 738 512 € immatriculée au registre du commerce et des sociétés de Le Mans sous
le numéro 444.502.025 dont le siège social est Zone Industrielle St Laurent, 72300 SABLE SUR SARTHE.
<br><br>
Pour toute question relative à notre Charte de confidentialité, <strong>merci de nous contacter via le formulaire de
contact suivant : <a href="https://www.ldc.fr/rgpd/consommateurs/?website=legaulois"
target="_blank">https://www.ldc.fr/rgpd/consommateurs/</a>.Nous vous invitons à consulter régulièrement
cette rubrique car LDC Sablé peut être amené à la modifier à tout moment.</strong>
<br><br>
La présente Charte de confidentialité a été mise à jour le 4 février 2021.
</p>
<h3>Nos engagements</h3>
<p>
Conformément à la réglementation relative à la protection des données personnelles et à la vie privée, notamment la
loi n°78-17 du 6 janvier 1978 relative à l’informatique, aux fichiers et aux libertés dite loi « Informatique et
Libertés » et au Règlement (UE) 2016/679 du 25 mai 2018 relatif à la protection des personnes physiques à l'égard du
traitement des données à caractère personnel et à la libre circulation de ces données, (ci-après le « Règlement
RGPD»), LDC Sablé s’engage à respecter les principes suivants :
<br><br>
- <strong>Consentement</strong> : vous devez avoir consenti à la collecte et au traitement de vos données. Si tel
n’était pas le cas ou si vous avez changé d’avis, merci de vous reporter à l’article ci-dessous relatif à vos
droits.
<br>
- <strong>Limitation des données collectées</strong> : nous ne collectons que les données qui sont strictement
nécessaires au traitement et à l’utilisation envisagée. Nous vous rappelons qu’il n’y a aucune obligation à nous
transmettre ces données. Toutefois certains services ou opérations promotionnelles nécessitent certaines données,
faute de quoi vous ne pourriez y accéder.
<br>
- <strong>Limitation des finalités</strong> : les données que nous collectons sont traitées uniquement dans les
finalités décrites ci-dessous.
<br>
- <strong>Limitation des durées de conservation</strong> : vos données sont conservées uniquement le temps
nécessaire aux finalités de traitement pour lequel elles ont été collectées. Au-delà de cette durée si aucune
obligation légale impose leur conservation, nous veillerons à ce que vos données soient supprimées, détruites ou
anonymisées.
<br>
- <strong>Protection des données</strong> : en vue de sécuriser vos données et leur traitement, nous avons mis en
place des mesures techniques et organisationnelles détaillées ci-dessous.
<br>
- <strong>Transparence et loyauté</strong> : lorsque LDC Sablé collecte une donnée vous concernant, nous vous
informons de l’utilisation qui en sera faite. C’est pourquoi nous vous conseillons de lire attentivement les
informations qui vous sont transmises à travers notre site internet.
</p>
<h3>Quelles données personnelles sont collectées ?</h3>
<p>
Au sens du Règlement RGPD, une donnée à caractère personnel désigne toute information relative à une personne
physique identifiée ou identifiable.
<br><br>
Les données personnelles collectées varient en fonction du but de la collecte et du service dont vous souhaitez
bénéficier.
<br><br>
La société LDC Sablé est amenée à collecter les catégories de données personnelles suivantes: <br>
- Coordonnées personnelles (civilité, nom, prénom, adresse e-mail, adresse postale) ; <br>
- Coordonnées personnelles <strong>non obligatoires</strong> (date de naissance, numéro de téléphone, nombre de
personnes dans le foyer, produits préférés, intérêt pour les départ’aimants) ;identifiants utilisés pour accéder à
votre compte en ligne (adresse IP, adresse e-mail et mot de passe) ;
<br>
- Historiques de navigation, telles que les pages visitées et actions sur le site. <br><br>
Vous vous engagez à fournir des données personnelles actualisées et valides et garantissez ne faire aucune fausse
déclaration et ne donner aucune information erronée.
</p>
<h3>Pourquoi vos données personnelles sont collectées ?</h3>
<p>
Vos données peuvent être collectées dans la mesure où vous avez consenti de manière spécifique, libre et éclairé.
Elles peuvent également être collectées pour satisfaire à l’exécution d’une obligation légale ou dans le cadre de la
relation contractuelle construite avec vous (notamment conditions générales d’utilisation, conditions générales de
vente) ou encore dans l’intérêt légitime de LDC Sablé (par exemple pour assurer la sécurité des transactions).
<br><br>
Nous collectons vos données personnelles afin de vous fournir la meilleure expérience utilisateur à travers notre
site internet.
<br><br>
<strong>Ces données sont collectées aux fins suivantes : </strong> <br>
- Gestion des fonctionnalités et de la qualité du site internet <br>
- Gestion de votre inscription à notre Newsletter et de votre Compte utilisateur <br>
- Accès à votre Compte utilisateur <br>
- Gestion du recrutement <br>
- Traitement de vos demandes de renseignements <br>
- Communication des informations (promotions, nouveaux produits, activité de la marque) <br>
- Gestion de votre participation à nos jeux, tirages au sort, activités promotionnelles <br>
- Développement et amélioration des produits Le Gaulois et des services du Club des Gaulois <br>
- Statistiques <br>
- Proposition de produits personnalisés et de communications adaptées ou pour recommandation de produits en fonction
des besoins de consommateurs <br>
- Partages sur les réseaux sociaux
</p>
<h3>Quels sont vos droits ?</h3>
<p>
Vous disposez d’un certain nombre de droits concernant vos données personnelles listés ci-dessous. <br><br>
- <strong>Droit d’accès</strong> <br>
Vous pouvez demander la communication de vos données sous une forme accessible, la confirmation que vos données font
ou ne font plus l’objet d’un traitement ainsi que la communication des informations relatives à vos données. Afin
que vos données personnelles soient exactes, complètes, pertinentes et à jour, vous avez le droit d’accéder, de
corriger ou de mettre à jour vos données personnelles à tout moment.
<br><br>
- <strong>Droit de rectification</strong> <br>
Vous êtes en droit de demander à ce que vos données soient rectifiées, complétées ou mises à jour lorsqu’elles sont
inexactes, incomplètes, équivoques ou périmées.
<br><br>
- <strong>Droit à l’effacement</strong> <br>
Vous avez le droit de demander la suppression de vos données personnelles notamment lorsqu’elles ne sont plus
nécessaires aux finalités pour lesquelles elles ont été collectées. Si les données personnelles collectées ne sont
plus nécessaires à aucune finalité et qu’aucune obligation légale nous impose de les conserver, nous mettrons tout
en œuvre pour supprimer, détruire ou anonymiser ces données.
<br><br>
- <strong>Droit à la limitation du traitement</strong> <br>
Vous avez le droit de demander la limitation du traitement de vos données personnelles si : <br>
-- vous contestez l’exactitude des données ; <br>
-- vous souhaitez limiter le traitement des données qui n’avaient pas été traitées de manière licite plutôt que leur
suppression ; <br>
-- nous n’avons plus besoin de vos données personnelles mais celles-ci sont nécessaires pour la constatation,
l’exercice ou la défense de vos droits en justice ; <br>
-- vous vous êtes opposés au traitement de vos données personnelles et attendez de savoir si vos intérêts liés à
cette objection l’emportent sur les motifs légitimes que nous poursuivons.
<br><br>
- <strong>Droit à la portabilité de vos données</strong> <br>
Lorsque le traitement est effectué à partir de procédés automatisés et que vous avez librement consenti au
traitement de vos données personnelles pour une finalité que nous vous avions communiqué au préalable ; ou lorsque
nous traitons vos données dans le cadre d’une opération commerciale (ex : vous fournir un produit) vous avez le
droit de demander :
<br>
-- à recevoir vos données personnelles dans un format structuré, couramment utilisé et lisible par une machine ;
<br>
-- à ce que vos données personnelles soient transmises directement à une autre responsable de traitement, lorsque
que cela est techniquement possible. <br>
<br><br>
- <strong>Droit d’opposition</strong> <br>
Lorsque vos données sont traitées à des fins de prospection commerciale, vous avez le droit, à tout moment, de vous
opposer au traitement de vos données personnelles et ce sans motif.
<br><br>
- <strong>Droit de porter réclamation auprès de la CNIL</strong> <br>
Si vous estimez que le traitement de vos données personnelles constitue une violation de la réglementation, vous
pouvez introduire une réclamation auprès d’une autorité de contrôle, telle que la CNIL.
<br><br>
<strong>Vous pouvez exercer ces droits à tout moment en nous contactant via le formulaire suivant <a
href="https://www.ldc.fr/rgpd/consommateurs/?website=legaulois"
target="_blank">https://www.ldc.fr/rgpd/consommateurs/</a></strong>
<br><br>
<strong>Vous recevrez une réponse de notre part dans un délai d’un mois à compter de la réception de la demande. En
cas de demande complexe ou du nombre important de demandes, le délai peut être prolongé de deux mois.</strong>
<br><br>
<strong>L’exercice des droits se fait à titre gratuit. Si toutefois la demande était manifestement infondée ou
excessive, LDC Sablé se réserve la possibilité d’appliquer des frais administratifs ou de refuser de donner
suite à la demande.</strong>
</p>
<h3>Comment vos données personnelles sont protégées ?</h3>
<p>
Afin d’assurer la sécurité de vos données personnelles nous avons mis en place des mesures de sécurité, notamment
des contrôles d’accès, des pares-feux, des serveurs sécurisés.
<br><br>
Ces mesures visent à protéger vos données personnelles contre toute perte, détournement, mauvaise utilisation,
divulgation, modification, interférence, dommage, accès non autorisé des données.
<br><br>
En cas de violation de vos données personnelles susceptible d’engendrer un risque pour vos droits et libertés, LDC
Sablé en notifie la violation à la CNIL dans les meilleurs délais et, si possible, 72 heures au plus tard après en
avoir pris connaissance. LDC Sablé vous en informera dans les meilleurs délais.
</p>
<h3>Accès à vos données personnelles :</h3>
<p>
Vos données personnelles sont destinées au personnel de LDC Sablé habilité à les traiter, notamment le service
marketing, informatique, commercial, qualité et administratif.
</p>
<h3>Partage de vos données personnelles :</h3>
<p>
Conformément à la règlementation, quand nous sommes amenés à partager vos données personnelles avec des
sous-traitants pour certaines finalités décrites dans la présente Charte, nous nous assurons que leur dispositif en
matière de sécurité des données et de leur stockage est au moins aussi important que celui de notre organisation.
Nous veillons également à ce qu’ils respectent les lois relatives à la protection des données personnelles dans des
conditions au moins équivalentes à celles que nous respectons.
<br><br>
Par ailleurs, les sous-traitants étant amenés à traiter de vos données personnelles pour notre compte et sur nos
instructions, nous nous engageons à ce que vos données personnelles ne soient pas partagées ou divulguées pour des
finalités autres que celles décrites dans la présente Charte. Nous pouvons cependant être amenés à transmettre vos
données, pour des finalités autres que celles prévues dans la Charte, dans les cas où leur communication est requise
par la loi et les autorités gouvernementales.
</p>
<h3>Transfert de vos données en dehors de l'espace économique Européen :</h3>
<p>
Nous nous informons que vos données personnelles ne sont pas traitées en dehors de l’Espace Economique Européen
(EEE). En cas de changement, nous vous en avertirons et mettrons tout en œuvre pour que ce transfert international
de données dispose d’un niveau et de garanties de sécurité adéquats.
</p>
<h3>Utilisation des cookies :</h3>
<p>
Les cookies sont des petits fichiers textes contenant des informations propres vous concernant stockés sur le disque
dur de l’équipement informatique avec lequel vous vous êtes connectés sur le site internet et pouvant être lus
seulement par le serveur qui l’a fourni. Les cookies sont gérés par votre navigateur internet.
<br><br>
Les cookies indiquent la fréquentation des pages que vous visitez, ce qui nous aide à connaître les informations qui
vous intéressent. Cela permet de vous offrir plus de contenu qui vous intéresse et moins de contenu qui ne vous
intéresse pas.
<br><br>
Les cookies vous permettent de stocker des préférences et les noms des utilisateurs, enregistrer des produits et des
services, personnaliser des pages ou faire de la publicité ciblée.
<br><br>
A travers ces cookies, vos données personnelles peuvent être recueilles telles que : <br>
- des informations concernant le navigateur de votre appareil et le système d'exploitation que vous utilisez ; <br>
- l’adresse IP de l'appareil que vous utilisez ; <br>
- les pages Web que vous consultez ; <br>
- les liens sur lesquelles vous cliquez pendant que vous êtes en interaction avec nos services. <br><br>
Le site internet <a href="https://www.legaulois.fr" target="_blank">www.legaulois.fr</a> utilise trois types de
cookies qui ont des finalités différentes. Tous les cookies de type non techniques doivent recueillir votre
consentement avant d’être installés. Vous pouvez donner votre consentement sur la page d’accueil du site internet,
en cliquant sur « accepter ».
<br><br>
- Les cookies strictement nécessaires et fonctionnels <br>
Ces cookies sont nécessaires au bon fonctionnement du site internet. Ils vous permettent d’utiliser les principales
fonctionnalités. Sans ces cookies, vous ne pourrez pas utiliser normalement le site internet.
<br><br>
- Les cookies analytiques <br>
Ces cookies nous permettent de connaître l’utilisation et les performances du site internet et d’en améliorer son
fonctionnement.
<br><br>
- Les cookies de ciblage <br>
Ces cookies sont utilisés pour vous présenter des publicités ou vous adresser des informations adaptées à vos
centres d’intérêts en dehors du site www.legaulois.fr lors de votre navigation sur Internet. Le refus de ces cookies
publicitaires n’a pas d’impact sur l’utilisation du site internet. Cependant, le fait de refuser les cookies
publicitaires n’entraînera pas l’arrêt de la publicité sur Internet. Cela aura seulement pour effet d’afficher une
publicité qui ne tiendra pas compte de vos centres d’intérêt ou de vos préférences.
<br><br>
<strong>Vous avez le choix :</strong> <br>
- <strong>d’accepter</strong> ces cookies en cliquant sur le bouton « Accepter » présent sur le bandeau Cookies,
apparaissant au bas de votre page internet. Tant que vous n’avez pas accepté, les cookies ne pourront être stockés
sur votre appareil ; <strong>ou</strong>
<br>
- <strong>de refuser</strong> ces cookies via le bouton « refuser» présent sur le bandeau Cookies ou les paramètres
de votre navigateur internet.
<br><br>
Lorsque vous cliquez sur le bouton « refuser » du bandeau Cookies, le dépôt des cookies par défaut désactivé le
restera.
<br><br>
Pour en savoir plus sur la désactivation des cookies via votre navigateur internet : <br><br>
Internet Explorer: <a href="http://windows.microsoft.com/fr-FR/windows-vista/Block-or-allow-cookies"
target="_blank">http://windows.microsoft.com/fr-FR/windows-vista/Block-or-allow-cookies</a><br>
Chrome: <a href="http://support.google.com/chrome/bin/answer.py?hl=fr&amp;hlrm=en&amp;answer=95647"
target="_blank">http://support.google.com/chrome/bin/answer.py?hl=fr&amp;hlrm=en&amp;answer=95647</a><br>
Firefox: <a href="https://support.mozilla.org/fr/kb/protection-renforcee-contre-pistage-firefox-ordinateur"
target="_blank">https://support.mozilla.org/fr/kb/protection-renforcee-contre-pistage-firefox-ordinateur</a><br>
Safari: <a href="https://support.apple.com/fr-fr/guide/safari/sfri11471/mac"
target="_blank">https://support.apple.com/fr-fr/guide/safari/sfri11471/mac</a><br>
<br>
La durée de conservation de ces informations dans votre appareil est d’une durée maximale de 13 mois. A l’expiration
de ce délai, nous recueillerons de nouveau votre consentement.
<br><br>
Pour plus d’informations sur le paramétrage de vos cookies, vous pouvez consulter :<br>
<a href="http://www.youronlinechoices.com/fr/" target="_blank">http://www.youronlinechoices.com/fr/</a> <br>
<a href="https://www.allaboutcookies.org/" target="_blank">https://www.allaboutcookies.org/</a>
</p>
<h3>Sites internet de tiers</h3>
<p>
Le site internet www.legaulois.fr peut être associé à des sites internet tiers. Les sites hébergés par des tiers
sont hors de notre contrôle. Lorsque vous renseignez des données personnelles sur un site internet tiers, le
traitement de ces données n'est pas effectué sur notre site internet, mais sur le site internet tiers concerné.
Toute donnée personnelle que vous fournissez sera collectée et traitée conformément à la politique relative à la
confidentialité des données du tiers concerné.
<br><br>
Par conséquent, nous n'assumons aucune responsabilité concernant les pratiques exercées par lesdits tiers en matière
de protection des données.
</p>
<h3>Droit applicable</h3>
<p>
La présente Charte de confidentialité est régie et sera interprétée conformément au droit français.
</p>
<h3>Nous contacter</h3>
<p>
Si vous avez des questions, remarques ou réclamations relatives à la présente Charte de confidentialité, ou le
traitement de vos données personnelles, veuillez-nous
<a href="https://www.ldc.fr/rgpd/consommateurs/?website=legaulois">contacter ici</a>.
</p>
<br>

View file

@ -0,0 +1,7 @@
<p>Bonjour,</p>
<p>Si vous avez une question à nous poser ou des remarques à formuler sur notre site, n'hésitez pas à les inscrire dans
le formulaire ci-contre. Merci d'indiquer vos coordonnées exactes pour que nous puissions vous répondre
prochainement.</p>
<p>Les informations qui vous concernent sont destinées à un usage interne et ne seront en aucun cas transmises à des
tiers. Vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données qui vous
concernent (art. 34 de la loi "Informatique et Libertés").</p>

View file

@ -0,0 +1,6 @@
<p>Bonjour,</p>
<p>Vous souhaitez nous faire part d'un problème rencontré avec un produit Le Gaulois ? Compléter ce formulaire
ci-contre. Merci d'indiquer vos coordonnées exactes pour que nous puissions vous répondre prochainement.</p>
<p>Les informations qui vous concernent sont destinées à un usage interne et ne seront en aucun cas transmises à des
tiers. Vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données qui vous
concernent (art. 34 de la loi "Informatique et Libertés").</p>

View file

@ -0,0 +1,7 @@
<p>Bonjour,</p>
<p>Si vous avez une question à nous poser ou des remarques à formuler sur notre site, n'hésitez pas à les inscrire dans
le formulaire ci-contre. Merci d'indiquer vos coordonnées exactes pour que nous puissions vous répondre
prochainement.</p>
<p>Les informations qui vous concernent sont destinées à un usage interne et ne seront en aucun cas transmises à des
tiers. Vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données qui vous
concernent (art. 34 de la loi "Informatique et Libertés").</p>

View file

@ -0,0 +1,240 @@
<h2>Notice légale et conditions générales d'utilisation du site internet Le Gaulois</h2>
<br><br>
<h2>Introduction</h2>
<br>
<p>
Nous vous remercions de lire ces conditions générales d'utilisation qui régissent les conditions d’accès et
d’utilisation du site www.legaulois.fr.
<br><br>
<strong>Nous vous invitons à consulter régulièrement cette rubrique car la société LDC Sablé peut être amenée à la
modifier à tout moment.</strong>
<br><br>
<strong>Tout utilisateur déclare avoir lu et accepté les mentions légales et les conditions générales d’utilisation
et s’engage à s’y conformer.</strong>
<br><br>
Mise à jour le 4.02.2021.
</p>
<br><br>
<h2>Mentions légales</h2>
<br>
<p>
<b>LDC Sablé</b><br />
Zone Industrielle Saint Laurent - 72300 Sablé sur Sarthe
<br><br>
Tél : 02 43 62 70 00
Société par actions simplifiée au capital de 235 738 512 € euros - RCS Le Mans 444.502.025
<br><br>
<strong>Editeur du Site :</strong> LDC Sablé, Zone Industrielle Saint Laurent 72300 Sablé sur Sarthe
<br><br>
Directeur de la publication : Sylvain Gouet, Responsable Web Marketing Groupe LDC <br>
Conception du site et réalisation : LDC Services <br>
Illustrations : LDC Services <br>
Le site est hébergé par : OVH, via LDC, SAS au capital de 10 069 020 euros, RCS Lille Métropole 537 407 926, 2 rue
Kellermann – 59100 Roubaix, Tel : 09 72 10 10 07, Mail : hosting@ml.ovh.net
</p>
<br><br>
<h2>Conditions Générales d'Utilisation du site internet</h2>
<br><br>
<h2>Droit d’auteur - Droit des marques – Protection des bases de données</h2>
<br>
<p>
La présentation et le contenu du site constituent, ensemble, une œuvre protégée par les lois en vigueur des droits
d’auteur, de la propriété intellectuelle et industrielle.
<br><br>
Les créations apparaissant sur le site (dessins, photographies, images, textes, séquences animées sonores ou non et
autres documentations représentées), sont objets de droits d’auteur, de propriété industrielle et/ou intellectuelle
et sont, selon les cas, propriété de la société LDC Sablé ou de tiers ayant autorisé la société LDC Sablé à les
utiliser.
Aucune exploitation commerciale, reproduction, représentation, utilisation, adaptation, modification, incorporation,
traduction, commercialisation, partielle ou intégrale de ces éléments (y compris ceux téléchargeables ou copiables)
ne pourra en être faite sans l'accord préalable et écrit de la société LDC Sablé, à l'exception de l'utilisation
pour un usage privé sous réserve des dispositions différentes voire plus restrictives du Code de la propriété
intellectuelle.
Toute utilisation non expressément autorisée peut engager la responsabilité civile et/ou pénale de son auteur.
LDC Sablé se réserve le droit d'engager des poursuites judiciaires à l'encontre de toute personne qui n'aurait pas
respecté cette interdiction.
</p>
<br><br>
<h2>Vie privée – Données personnelles – Cookies</h2>
<br>
<p>
Nous vous invitons à vous reporter à notre Charte de confidentialité en cliquant <a
href="{{ route('chart-conf') }}">ici</a>.
</p>
<br><br>
<h2>Mentions Sanitaires :</h2>
<br>
<p>
Pour votre santé : <br>
- mangez au moins cinq fruits et légumes par jour <br>
- pratiquez une activité physique régulière <br>
- évitez de manger trop gras, trop sucré, trop salé <br>
- évitez de grignoter entre les repas <br>
<br>
Pour toute information complémentaire, consultez le site : <a
href="https://www.mangerbouger.fr">www.mangerbouger.fr</a>
</p>
<br><br>
<h2>Responsabilité</h2>
<br>
<p>
LDC Sablé a déployé ses meilleurs efforts pour s’assurer de l’exactitude des informations présentes sur son site
internet (ci-après le Site). Cependant, LDC Sablé n’est responsable ni de l’exactitude, ni des erreurs, ni des
omissions contenues sur le Site. L’utilisateur est seul responsable de l’utilisation de telles informations.
<br>
LDC Sablé ne donne aucune garantie, explicite ou implicite, et n’assume aucune responsabilité qui pourrait résulter
de l’accès ou de l’utilisation de ce Site incluant toutes détériorations ou virus qui pourraient infecter
l’équipement informatique ou tout autre bien de l’utilisateur.
<br><br>
Par ailleurs. <br>
LDC Sablé pourra unilatéralement et à tout moment interrompre temporairement ou définitivement l’accès à tout ou
partie du Site, y compris notamment le contenu, les fonctionnalités ou les heures de disponibilité, sans que sa
responsabilité ne puisse être recherchée et sans que cela ne puisse donner lieu à l’allocation de dommages et
intérêts de quelque nature que ce soit.
<br><br>
Les pages du Site peuvent contenir des liens hypertextes renvoyant vers d'autres sites internet gérés par des
sociétés distinctes de LDC Sablé et sur lesquels LDC Sablé n'exerce aucune sorte de contrôle. LDC Sablé n'est pas
responsable du contenu de tout autre site auquel vous pourriez avoir accès via le Site ou les autres sites internet
du groupe LDC. Tout utilisateur ou visiteur du Site ne peut mettre en place un lien hypertexte en direction de ce
Site sans l’autorisation expresse préalable de LDC Sablé.
<br>
</p>
<br><br>
<h2>Conditions Particulières d’Utilisation de la communauté Départ’aimants</h2>
<br><br>
<h2>Objet</h2>
<br>
<p>
Les Conditions Générales ont pour objet de régir les conditions dans lesquelles LDC Sablé vous autorise à utiliser
les services fournis par elle consistant à offrir aux utilisateurs la possibilité d’échanger, d’envoyer ou
d’acquérir auprès d’autres utilisateurs des aimants représentant les départements de France (ci-après les «
<strong>Départ’aimants</strong> ») offerts avec les produits Le Gaulois (ci-après « <strong>La Bourse aux
échanges</strong> »).
<br><br>
Les Conditions générales régissent les conditions applicables à la mise à disposition de La Bourse aux échanges
mettant en relation les utilisateurs, sans que LDC Sablé ne soit jamais partie à l’échange, envoi ou réception de
Départ’aimants.
<br><br>
La participation à La Bourse aux échanges est gratuite et soumise à l’inscription préalable de l’utilisateur au club
des Gaulois sur le Site (ci-après le « <strong>Club des Gaulois</strong> »).
<br>
</p>
<br><br>
<h2>Création de compte</h2>
<br>
<p>
L’inscription à la communauté Départ’aimants et la participation à la Bourse aux Echanges sur le Site nécessitent
votre inscription préalable au Club Le Gaulois en fournissant vos nom, prénom, date de naissance et adresse e-mail.
Vous vous engagez à fournir à LDC Sablé des informations sincères et exactes vous concernant.
<br><br>
Le choix d’un pseudonyme et d’un mot de passe vous sera demandé. Le pseudonyme vous identifiera sur le Site et sera
visible par les autres utilisateurs de la Bourse aux Echanges. Il ne doit en conséquence pas porter atteinte aux
bonnes mœurs ou aux droits d’un tiers.
<br><br>
L'inscription au Club le Gaulois emporte ouverture de votre compte (ci-après le « <strong>Compte</strong> »),
accessible via le Site.
<br><br>
Votre inscription et la création de votre Compte seront confirmées par l'envoi d'un email à l'adresse électronique
que vous aurez associée à votre Compte.
<br><br>
Les informations que vous transmettez à LDC Sablé vous sont personnelles. Vous garantissez la confidentialité de
votre pseudonyme et de votre mot de passe, que vous vous engagez à ne communiquer à aucun tiers.
<br><br>
LDC Sablé peut refuser votre inscription ou suspendre votre Compte à tout moment, sans mise en demeure préalable, si
les informations que vous avez communiquées lors de votre inscription s'avèrent incohérentes, invérifiables et/ou
incomplètes.
<br><br>
Vous disposez également de la possibilité de fermer votre Compte à tout moment.
<br><br>
Par ailleurs, LDC Sablé se réserve le droit de fermer votre Compte, sans préavis et sans préjudice de tous les
dommages-intérêts auxquels elle pourrait prétendre, en cas de non-respect de l'une quelconque des stipulations des
présentes Conditions Générales, en cas de fourniture d'informations fausses, incomplètes ou périmées lors de votre
inscription, ou bien en cas de signalement d’un message contraire aux règles du Club Le Gaulois adressé à un
utilisateur dans le cadre de la Bourse aux Echanges.
<br><br>
LDC Sablé pourra encore déconnecter un utilisateur et/ou lui interdire l'accès au Site si la connexion au Site
entraîne ou risque d'entraîner une perturbation dans son fonctionnement ou une gêne pour les autres utilisateurs, ou
encore en cas de panne, de dysfonctionnement, ou de risque informatique quel qu'il soit. LDC Sablé se réserve le
droit, si utile ou nécessaire, de suspendre l'accès au Club des Gaulois, sans préjudice de la réclamation de
dommages et intérêts.
<br><br>
</p>
<br><br>
<h2>Gestion du compte</h2>
<br>
<p>
Une fois connecté à son Compte, l’utilisateur peut gérer sa collection de Départ’aimants.
<br><br>
Le Site met à la disposition sur chaque Compte une carte de France en ligne, vierge de tout Départ’aimant, que
l’utilisateur est libre de renseigner selon sa collection physique de Départ’aimants (Départ’aimant détenu,
Départ’aimants avec un ou plusieurs double(s), Départ’aimants manquants, Départ’aimants manquants et recherchés).
<br><br>
L’utilisateur s’engage à renseigner sa carte de France avec des informations réelles et mises à jour qui
correspondent en tous points à sa collection physique de Départ’aimants. Ceci est une condition impérative à
l’inscription au Club des Gaulois et à la participation à la Bourse aux Echanges.
<br><br>
</p>
<br><br>
<h2>Participation à la Bourse aux échanges</h2>
<br>
<p>
Une fois inscrit au Club des Gaulois, l’utilisateur peut participer à la Bourse aux Echanges permettant de se mettre
en relation avec d’autres utilisateurs souhaitant échanger, acquérir ou envoyer gratuitement leurs Départ’aimants.
Les frais d’envoi peuvent être demandés au destinataire par l’expéditeur sous forme de timbres. LDC Sablé n’est pas
concerné par ces frais d’envoi. Le Site met à disposition de l’utilisateur un moteur de recherche permettant
d’identifier les autres utilisateurs détenant les Départ’aimants qui manquent ou de rechercher les utilisateurs
intéressés par les Départ’aimants proposés à l’échange.
<br><br>
L’Utilisateur ne peut participer à la Bourse aux Echanges qu’aux conditions suivantes : <br>
- sa carte de France des Départ’aimants est à jour <br>
- l’envoi ou l’échange de Départ’aimants est fait à titre gratuit. Les frais d’envoi peuvent être demandés au
destinataire par l’expéditeur sous forme de timbres
<br>
- l’engagement d’envoyer un Départ’aimant à un autre utilisateur doit être réalisé dans les plus brefs délais
<br>
Lorsqu’un utilisateur souhaite contacter un autre utilisateur pour obtenir ou échanger un Départ’aimant, il poste
sur le Site un message détaillant sa demande et, s’il le souhaite, précisant ses coordonnées pour que l’autre
utilisateur puisse lui répondre directement.
<br><br>
LDC Sablé a mis en place un système de modération automatique a priori des messages postés par les utilisateurs via
le Site notamment afin d’éviter l’envoi de message illicite à caractère pornographique ou portant atteinte aux
bonnes mœurs. En cas de détection d’un mot non conforme à la charte d’utilisation du Club des Gaulois, LDC Sablé
pourra refuser d’adresser ce message à l’utilisateur qui en était destinataire et pourra exclure l’Utilisateur
expéditeur du Club des Gaulois.
<br><br>
Dans le cas où l’utilisateur serait contacté par un autre utilisateur ou contacterait un autre utilisateur pour
échanger ou solliciter ou envoyer un Départ’aimant, il le fera sous sa seule responsabilité.
<br><br>
En cas de litige entre utilisateurs relatifs à l’échange, l’envoi ou la réception de Départ’aimants, LDC Sablé
n’étant pas partie à l’accord convenu entre les utilisateurs, ils doivent faire tout leur possible pour le régler
directement dans les meilleurs délais.
<br><br>
LDC Sablé s’engage à mettre en œuvre tous les moyens dont elle dispose pour assurer l’intermédiation technique entre
les utilisateurs qui souhaitent se mettre en relation pour échanger, envoyer ou acquérir des Départ’aimants. LDC
Sablé n’est en rien responsable de la relation entre utilisateurs postérieurement à leur mise en relation via la
Bourse aux Echanges.
<br><br>
Vous acceptez d'indemniser LDC Sablé de tout préjudice (y compris de toute indemnité qu'elle pourrait avoir à verser
à des tiers ou de tous frais ou honoraires qu'elle aurait à supporter pour assurer sa défense) qu'elle pourrait
subir du fait (i) de l’envoi à un autre utilisateur d’un message portant atteinte à un droit quelconque ou
constituant une infraction, (ii) de l’inexécution d’une obligation relative à l’envoi, échange ou acquisition de
Départ’aimants ou (iii) de toute activité illégale exercée à partir de votre Compte, à raison de toute faute ou
négligence de votre part.
<br><br>
</p>
<br><br>
<h2>Durée</h2>
<br>
<p>
Votre Compte est ouvert pour une durée indéterminée et est régi par les présentes Conditions Générales, sous réserve
des modifications qui pourraient intervenir et qui seraient portées à votre connaissance par leur mise en ligne sur
le Site.
<br><br>
Vous pouvez décider à tout moment de fermer votre Compte. Dans l'hypothèse où votre Compte serait désactivé, vous ne
pourriez plus accéder au Club des Gaulois. Votre carte de France personnalisée avec vos Départ’aimants ne serait
alors plus accessible.
<br><br>
En outre, LDC Sablé peut à tout moment mettre fin à l’inscription d’un Participant par courrier électronique sans
préavis en cas de manquement du Participant à ses obligations issues des présentes Conditions Générales.
<br><br>
</p>

View file

@ -0,0 +1,83 @@
<?php
return [
'actions' => [
'list' => 'list',
'view' => 'view',
'create' => 'create',
'duplicate' => 'duplicate',
'update' => 'update',
'delete' => 'delete',
'save' => 'save',
'edit' => 'edit',
],
'helpers' => [
'list' => 'List',
'list_all' => 'List all :model',
'create_model' => 'Create :model',
'view_model' => 'View :model',
'update_model' => 'Update :model',
'duplicate_model' => 'Duplicate :model',
'delete_model' => 'Delete :model',
'save_model' => 'Save :model',
'edit_model' => 'Edit :model',
'no_results' => 'No results for :models',
'publish' => 'Publish',
'unpublish' => 'Unpublish',
'seo_title' => 'Must give a precise description of the page, which is recommended for optimum
positioning in search engines (<title> tag).',
'seo_description' => 'Must give a precise description of the page content (<meta> description tag).',
],
'libs' => [
'toolbox' => [
'assertFieldIsUnique' => 'The :value for the :attribute field is already in use',
'assertNoInternalBoUrls' => ':attribute : It is forbidden to paste back-office uri into this field',
'assertNoInternalUrls' => ':attribute : It is forbidden to paste a url of :appname into this field',
]
],
'messages' => [
'has_been_created' => ':model has been created',
'cannot_be_created' => ':model cannot be created',
'has_been_updated' => ':model has been updated',
'cannot_be_updated' => ':model cannot be updated',
'has_been_deleted' => ':model has been deleted',
'cannot_be_deleted' => ':model cannot be deleted',
'order_changed' => 'The order has been changed!',
'order_not_changed' => 'The order hasn\'t been changed!',
'publish_status_saved' => 'Change of publication status successful!',
'right' => 'You don\'t have the rights to access this part !',
'theme_updated' => 'The theme has been updated !',
],
'minicrud' => [
'visibility_label' => 'Visibility',
'visibility_helper' => 'Check to make it visible.',
'enum_select' => 'Select :enum from the list.',
'associated_enum' => 'Associated :enum',
'dimensions_must_be' => 'Must be :widthpx (width) by :heightpx (height).',
'picture_title_helper' => 'Useful for users, displayed by moving the mouse over the image',
'picture_title_label' => 'Title attribute of the image',
'picture_alt_helper' => 'Must describe your image for search engines and blind people (5 to 6 words)',
'picture_alt_label' => 'Alt attribute of the image',
'text_warning' => 'Proofread your content before publishing it',
],
'other' => [
'up' => 'Change the order of appearance upwards',
'down' => 'Change the order of appearance downwards',
'no_model_found' => 'None :model found',
'publish' => 'Published',
'unpublish' => 'Unpublished',
'search_start' => 'Start search',
'search_delete' => 'Delete search',
'search_placeholder' => 'Your keywords here...',
'sort_ascending' => 'Sort :name in ascending order',
'sort_descending' => 'Sort :name in descending order',
'sort_delete' => 'Delete sorting',
'sort_arrow' => 'Here, the arrows are used to sort, not filter.',
'right' => 'You don\'t have the rights',
]
];

View file

@ -0,0 +1,9 @@
<?php
return [
'classes' => [
'user' => 'user',
'activity_log' => 'activity log|activity logs',
'static_page' => 'static page|static pages',
]
];

View file

@ -148,5 +148,21 @@ return [
*/
'attributes' => [],
'custom' => [
'of_the' => [
'male' => 'of the ',
'female' => 'of the ',
'vowel' => 'of the '
],
'event' => 'event',
'model' => 'target element',
'order' => 'order',
'publication' => 'publication',
'activated' => 'activated',
'target' => 'target',
'static_page_type' => 'static page type',
'seo_title' => 'SEO title',
'seo_description' => 'SEO description',
],
];

View file

@ -0,0 +1,90 @@
<?php
return [
'actions' => [
'list' => 'liste',
'view' => 'voir',
'create' => 'créer',
'duplicate' => 'dupliquer',
'update' => 'éditer',
'delete' => 'supprimer',
'save' => 'sauvegarder',
'edit' => 'mettre à jour',
],
'helpers' => [
'list' => 'Liste',
'list_all' => 'Lister tous les :model',
'create_model' => 'Créer :model',
'view_model' => 'Voir :model',
'update_model' => 'Éditer :model',
'duplicate_model' => 'Dupliquer :model',
'delete_model' => 'Supprimer :model',
'save_model' => 'Sauvegarder :model',
'edit_model' => 'Mettre à jour :model',
'no_results' => 'Aucun résultat pour :model',
'publish' => 'Publié',
'unpublish' => 'Dépublié',
'seo_title' => 'Doit décrire précisément la page, recommandation pour un positionnement
optimal dans les moteurs de recherche (balise <title>).',
'seo_description' => 'Doit décrire précisément le contenu de la page (balise <meta> description).',
],
'libs' => [
'toolbox' => [
'assertFieldIsUnique' => 'La :valeur du champ :attribut est déjà utilisée',
'assertNoInternalBoUrls' => ':attribute : Il est interdit de coller l\'uri de back-office dans ce champ',
'assertNoInternalUrls' => ':attribute : Il est interdit de coller une url de :appname dans ce champ.',
]
],
'messages' => [
'has_been_created' => ':model a été créé',
'cannot_be_created' => ':model ne peut être créé',
'has_been_updated' => ':model a été mis à jour',
'cannot_be_updated' => ':model ne peut être mis à jour',
'has_been_deleted' => ':model a été supprimé',
'cannot_be_deleted' => ':model ne peut être supprimé',
'order_changed' => 'L\'ordre a été changé !',
'order_not_changed' => 'L\'ordre n\'a pas été changé !',
'publish_status_saved' => 'Changement de l\'état de publication réussit !',
'right' => 'Vous n\'avez pas les droits pour accéder à cette partie !',
'theme_updated' => 'Le thème a été mis à jour !',
],
'minicrud' => [
'visibility_label' => 'Visibilité',
'visibility_helper' => 'Vérifier qu\'il est visible.',
'enum_select' => 'Sélectionnez :enum dans la liste.',
'associated_enum' => 'Associé :enum',
'dimensions_must_be' => 'Doit être :widthpx (largeur) par :heightpx (hauteur).',
'picture_title_helper' => 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image',
'picture_title_label' => 'Attribut du titre de l\'image',
'picture_alt_helper' => 'Doit décrire votre image pour les moteurs de recherche et les aveugles (5 à 6 mots)',
'picture_alt_label' => 'Attribut Alt de l\'image',
'text_warning' => 'Relisez votre contenu avant de le publier',
],
'pagination' => [
"previous" => "Page précédente",
"next" => "Page suivante",
"specific_page" => "Accéder à la page n°:id",
'paginate_list' => 'Nombre d\'éléments par page',
],
'other' => [
'up' => 'Modifier l\'ordre d\'apparition vers le haut',
'down' => 'Modifier l\'ordre d\'apparition vers le bas',
'no_model_found' => 'Aucun :model trouvé',
'publish' => 'Publié',
'unpublish' => 'Dépublié',
'search_start' => 'Lancer la recherche',
'search_delete' => 'Supprimer la recherche',
'search_placeholder' => 'Vos mots clés ici...',
'sort_ascending' => 'Trier :name dans l\'ordre croissant',
'sort_descending' => 'Trier :name dans l\'ordre décroissant',
'sort_delete' => 'Supprimer le tri',
'sort_arrow' => 'Ici, les flèches sont utilisées pour trier et non pour filtrer',
'right' => 'Vous n\'avez pas les droits',
]
];

View file

@ -0,0 +1,9 @@
<?php
return [
'classes' => [
'user' => 'utilisateur',
'activity_log' => 'journal d\'activité|journaux d\'activité',
'static_page' => 'page statique|pages statiques'
]
];

View file

@ -184,4 +184,20 @@ return [
'picture' => 'image',
'breeder_code' => 'code éleveur'
],
'custom' => [
'of_the' => [
'male' => 'du ',
'female' => 'de la ',
'vowel' => 'de l\''
],
'event' => 'évènement',
'model' => 'élément ciblé',
'order' => 'ordre',
'publication' => 'publication',
'activated' => 'activé',
'target' => 'cible',
'static_page_type' => 'type de page',
'seo_title' => 'titre SEO',
'seo_description' => 'description SEO',
],
];

View file

@ -0,0 +1,31 @@
@extends('layouts.bo', ['brParam' => $staticPageModel])
@section('title', __('Édition d\'un :model', ['model' => __('models.classes.static_page')]))
@section('description', __('Édition d\'un :model déjà existant', ['model' => __('models.classes.static_page')]))
@section('breadcrumb',
request()->route()->getName())
@section('content')
<div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3">
<div class="d-flex align-items-start flex-row">
@include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $staticPageModel])
</div>
</div>
<div class="card">
<div class="card-body">
<form action="{{ route('bo.static_pages.update', $staticPageModel) }}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
@include('bo.pages.static_pages.form')
<div class="row">
<div class="col text-center">
<button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" type="submit"
title="{{ __('crud.helpers.save_model', ['model' => __('models.classes.static_page')]) }}">
{{ Str::ucfirst(__('crud.actions.save')) }}
</button>
</div>
</div>
</form>
</div>
</div>
@endsection

View file

@ -0,0 +1,137 @@
<div class="row">
{{-- TITLE --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="h-100 border p-3">
<legend>{{ Str::ucfirst(__('validation.attributes.title')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.varchar', [
'id' => 'userFirstname',
'label' => __('Titre de la :model', ['model' => trans_choice('models.classes.static_page', 1)]),
'hasWordCounter' => true,
'name' => 'title',
'required' => true,
'model' => $staticPageModel ?? null,
'helper' => __('validation.between.string', [
'attribute' => __('titre de la :model', ['model' => trans_choice('models.classes.static_page', 1)]),
'min' => 3,
'max' => 255,
]),
'placeholder' => __('Un titre clair et concis'),
])
</div>
</div>
</fieldset>
</div>
</div>
<div class="row">
{{-- SEO_TITLE --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="h-100 border p-3">
<legend>{{ Str::ucfirst(__('validation.custom.seo_title')) }}</legend>
<div class="row">
<div class="col-12 mb-3">
@include('bo.partials.inputs.varchar', [
'id' => 'staticPagesSeoTitle',
'label' => __(':field :inter:model', [
'field' => Str::ucfirst(__('validation.custom.seo_title')),
'inter' => __('validation.custom.of_the.female'),
'model' => trans_choice('models.classes.static_page', 1),
]),
'hasWordCounter' => true,
'name' => 'seo_title',
'required' => true,
'model' => $staticPageModel ?? null,
'helper' => sprintf(
'%s %s',
__('crud.helpers.seo_title'),
__('validation.between.string', [
'attribute' => __(':field :inter:model', [
'field' => __('validation.custom.seo_title'),
'inter' => __('validation.custom.of_the.female'),
'model' => trans_choice('models.classes.static_page', 1),
]),
'min' => 45,
'max' => 70,
])),
'placeholder' => __(':field :inter:model', [
'field' => Str::ucfirst(__('validation.custom.seo_title')),
'inter' => __('validation.custom.of_the.female'),
'model' => trans_choice('models.classes.static_page', 1),
]),
])
</div>
</div>
</fieldset>
</div>
{{-- SEO_DESCRIPTION --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="h-100 border p-3">
<legend>{{ Str::ucfirst(__('validation.custom.seo_description')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.varchar', [
'id' => 'staticPagesSeoDescription',
'label' => __(':field :inter:model', [
'field' => Str::ucfirst(__('validation.custom.seo_description')),
'inter' => __('validation.custom.of_the.female'),
'model' => trans_choice('models.classes.static_page', 1),
]),
'name' => 'seo_description',
'model' => $staticPageModel ?? null,
'required' => true,
'helper' => sprintf(
'%s %s',
__('crud.helpers.seo_description'),
__('validation.between.string', [
'attribute' => __(':field :inter:model', [
'field' => __('validation.custom.seo_description'),
'inter' => __('validation.custom.of_the.female'),
'model' => trans_choice('models.classes.static_page', 1),
]),
'min' => 50,
'max' => 160,
])),
'placeholder' => __(':field :inter:model', [
'field' => Str::ucfirst(__('validation.custom.seo_description')),
'inter' => __('validation.custom.of_the.female'),
'model' => trans_choice('models.classes.static_page', 1),
]),
])
</div>
</div>
</fieldset>
</div>
</div>
<div class="row">
{{-- CONTENT --}}
<div class="col-12 mb-3">
<fieldset class="border p-3">
<legend>{{ Str::ucfirst(__('validation.attributes.content')) }}</legend>
<div class="row mb-3">
<div class="col-12 vueComponent">
@include('bo.partials.inputs.text-html', [
'id' => 'articleContent',
'label' => __(':field :inter:model', [
'field' => Str::ucfirst(__('validation.attributes.content')),
'inter' => __('validation.custom.of_the.female'),
'model' => trans_choice('models.classes.static_page', 1),
]),
'name' => 'content',
'model' => $staticPageModel ?? null,
'required' => true,
'helper' => __('crud.minicrud.text_warning'),
])
</div>
</div>
</fieldset>
</div>
</div>
<div class="row">
<div class="col text-center">
<p><b>{{ __('* Champs obligatoires') }}</b></p>
</div>
</div>

View file

@ -0,0 +1,43 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the select tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$associatedModels || The models of the relation. || Collection || REQUIRED ||
$foreignLabel || The field to display. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$size || The number of lines to display. || integer || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label"><b>{{ $label }} *</b></label>
@endif
<select
id="{{ $id }}"
class="form-select @if($errors->has($name)) is-invalid @endif"
name="{{ $name }}"
@if(!empty($size))
size="{{ $size }}"
@endif
aria-describedby="{{ $id }}Help"
@if(!empty($required))
required
@endif>
@foreach ($associatedModels as $associatedModel)
<option
value="{{ $associatedModel->id }}"
@if (old($name, $model->{$name} ?? $associatedModels[0]->id) == $associatedModel->id)
selected
@endif>
{{ $associatedModel->{$foreignLabel} }}
</option>
@endforeach
</select>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{{ $id }}Help",
'helper' => $helper
])

View file

@ -0,0 +1,57 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$appendText || The text to append to the left
of the input. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$value || The default value of the input. || integer || OPTIONNAL || 0
$step || The step of the input. || integer || OPTIONNAL || 1
$unsigned || Is the value unsigned ? || boolean || OPTIONNAL || false
$min || The min value of the input. || integer || OPTIONNAL || !empty($unsigned) ? 0 : -2147483648
$max || The max value of the input. || integer || OPTIONNAL || !empty($unsigned) ? 4294967295 : 2147483647
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@endif
@if(isset($appendText))
<div class="input-group">
@endif
<input id="{{ $id }}"
name="{{ $name }}"
type="number"
value="{{ Str::replace(',', '.', strval(old($name, $value ?? $model->{$name} ?? 0))) }}"
class="form-control @if($errors->has($name)) is-invalid @endif"
aria-describedby="{{ $id }}Help"
@if(!empty($step))
step="{{ Str::replace(',', '.', strval($step)) }}"
@else step="1"
@endif
@if(!empty($max))
max="{{ $max }}"
@else
max="{{ !empty($unsigned) ? '4294967295' : '2147483647' }}"
@endif
@if(!empty($min)) min="{{ $min }}"
@else
min="{{ !empty($unsigned) ? '0' : '-2147483648' }}"
@endif
@if(!empty($required))
required
@endif>
@if(isset($appendText))
<label class="input-group-text">{{ $appendText }}</label>
</div>
@endif
@include('modules.input-error', [
'inputName' => $name,
'helperId' => '{{ $id }}Help',
'helper' => $helper
])

View file

@ -0,0 +1,28 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$placeholder || The placeholder of the input. || string || REQUIRED ||
$itemsList || Collection of available models. || Collection || REQUIRED ||
$itemLimit || Array of min and max limits. || array<integer> || OPTIONNAL || [0, null]
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@php
$data = [
'name' => $name,
'value' => Arr::wrap(old($name) ?? ($model->{$name} ?? [])),
'placeholder' => $placeholder,
'itemsList' => $itemsList,
'itemLimit' => $itemLimit ?? null,
'errors' => $errors->getBag('default')->getMessages() ?? [],
];
@endphp
<div class="belongs-to-many-dropdown" data-json='@json($data)'></div>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{$id}Help",
'helper' => $helper,
])

View file

@ -0,0 +1,16 @@
@php
$data = [
"name" => $name,
"label" => $label,
"value" => $value ?? [],
"placeholder" => $placeholder,
"itemsSelected" => $itemsSelected,
"itemsList" => $itemsList,
"itemLimit" => $itemLimit,
"showSpecificItem" => $showSpecificItem ?? null,
"errors" => $errors->getBag("default")->getMessages() ?? [],
'helper' => $helper,
'require' => $require
];
@endphp
<div class="select-multiple-enum" data-json='@json($data)'></div>

View file

@ -0,0 +1,33 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || OPTIONNAL || __('crud.minicrud.text_warning')
$label || The text displayed as a label. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$value || The default value of the input. || string || OPTIONNAL || ''
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@endif
@php
$data = [
'name' => $name,
'text' => old($name, $model->{$name} ?? $value ?? '')
];
@endphp
{{-- <div class="ck-editor" data-json='@json($data)'></div> --}}
<custom-ckeditor old="true" name="{{ $name }}" dbtext="{{ old($name, $model->{$name} ?? $value ?? '') }}"></custom-ckeditor>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{$id}Help",
'helper' => $helper ?? __('crud.minicrud.text_warning') . '. ' . __('validation.min.string', [
'attribute' => $input['label'],
'min' => 15
]),
])

View file

@ -0,0 +1,31 @@
<div class="container p-0 m-0">
<div class="row">
<div class="col">
<label for="{{ $name }}" class="col-form-label">
<b>{{ $label }} {{ $required ? '*' : '' }}</b>
</label>
</div>
</div>
<div class="row">
<div class="col">
@php
$data = [
'itemList' => old($name, $model->{$name} ?? []) ?? [],
'itemColumns' => $itemColumns,
'itemType' => $itemType,
'itemLimit' => $itemLimit ?? [],
'inputName' => $name,
'inputPlaceholder' => $inputPlaceholder,
'header' => $header ?? false,
'errors' => $errors->getBag('default')->getMessages() ?? []
];
@endphp
<div class="list-item" data-json='@json($data)'></div>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{$id}Help",
'helper' => $helper,
])
</div>
</div>
</div>

View file

@ -0,0 +1,28 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@endif
<input id="{{ $id }}"
name="{{ $name }}"
class="form-control @if($errors->has($name)) is-invalid @endif"
type="datetime-local"
data-form-type="date"
aria-describedby="{{ "{$id}Help" }}"
value="{{ old($name, ((isset($model) and $model->{$name}) ? ($model->{$name}->format('Y-m-d\TH:i') ?? '') : '')) }}">
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{$id}Help",
'helper' => $helper
])

View file

@ -0,0 +1,26 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || REQUIRED ||
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
<div class="form-check form-switch ms-2">
<label class="col-form-label p-0" type="button" for="{{ $id }}"><b>{{ $label }}</b></label>
<input
id="{{ $id }}"
aria-describedby="{{ $id }}Help"
name="{{ $name }}"
type="checkbox"
class="ml-2 form-check-input"
value="1"
@if(old($name, (old('_token') ? false : ($model->{$name} ?? false)))) checked @endif>
</div>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => '{{ $id }}Help' ,
'helper' => $helper
])

View file

@ -0,0 +1,44 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the select tag. || string || REQUIRED ||
$name || The name of the select tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$associatedModels || The enum to associate. || Enum || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$disabled || Is the field disabled ? || boolean || OPTIONNAL || false
$required || Is the field required ? || boolean || OPTIONNAL || false
$value || The default selected option. || integer || OPTIONNAL || 1
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $name }}" class="col-form-label"><b>{{ $label }}@if(!empty($required)) * @endif</b></label>
@endif
<select
id="{{ $name }}"
class="form-select @if($errors->has($name)) is-invalid @endif"
name="{{ $name }}"
aria-describedby="{{ $id }}Help"
@if(!empty($disabled))
disabled
@endif
@if(!empty($required))
required
@endif
role="button">
@foreach ($associatedModels as $associatedModel)
<option
value="{{ $associatedModel->value}}"
@if (old($name, $model->{$name}->value ?? $value ?? 1) == $associatedModel->value)
selected
@endif>
{{ $associatedModel->label }}
</option>
@endforeach
</select>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{{ $id }}Help",
'helper' => $helper
])

View file

@ -0,0 +1,33 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$placeholder || The placeholder of the input. || string || OPTIONNAL || __('aaa.bbb@example.com')
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@endif
<input
name="{{ $name }}"
type="email"
value="{{ old($name, $model->{$name} ?? '') }}"
class="form-control @if($errors->has($name)) is-invalid @endif"
id="{{ $id }}"
aria-describedby="{{ $id }}Help"
placeholder="{{ $placeholder ?? __('aaa.bbb@example.com') }}"
@if(!empty($required))
required
@endif>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => '{{ $id }}Help',
'helper' => $helper
])

View file

@ -0,0 +1,44 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$value || The default value of the input. || string || OPTIONNAL || ''
$file || The accepted files extensions. || string || OPTIONNAL || '.pdf'
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@endif
<div class="input-group">
<input name="{{ $name }}"
type="file"
value="{{ old($name, $model->{$name} ?? $value ?? '') }}"
class="form-control @if($errors->has($name)) is-invalid @endif"
id="{{ $id }}"
aria-describedby="{{ $id }}Help"
accept="{{ $file ?? '.pdf' }}"
@if(!empty($required))
required
@endif>
@if (!empty($model->{$name}))
<a class="btn btn-warning"
href="/{{ $model->{$name} }}"
target="_blank"
title="{{ __("Visualiser votre fichier :name", ['name' => basename($model->{$name})]) }}"
data-bs-toggle="tooltip">
{{ basename($model->{$name}) }}
</a>
@endif
</div>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{$id}Help",
'helper' => $helper
])

View file

@ -0,0 +1,32 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$placeholder || The placeholder of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
<label class="col-form-label" for="{{ $id }}">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@php
$data = [
'id' => $id,
'class' => 'w-100 form-control ' . ($errors->has($name) ? 'is-invalid ' : ''),
'name' => $name,
'placeholder' => $placeholder,
'ariaDescribedby' => "{$id}Help",
'required' => $required,
'value' => old($name, $model->{$name} ?? ''),
];
@endphp
<div class="input-text-auto" data-json='@json($data)'></div>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => "{$id}Help",
'helper' => $helper,
])

View file

@ -0,0 +1,44 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$placeholder || The placeholder of the input. || string || OPTIONNAL || __('Un beau mot de passe')
$hasWordCounter || Is the WordCounter needed ? || boolean || OPTIONNAL || false
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@endif
@if(!empty($hasWordCounter ?? false))
<div class="word-counter" data-json='@json(['id'=> "$id"])'></div>
@endif
<div class="col-12 input-group d-flex w-100 justify-content-center">
<input id="{{ $id }}"
name="{{ $name }}"
type="password"
value="{{ old($name, $model->{$name} ?? '') }}"
class="form-control @if($errors->has($name)) is-invalid @endif @if(!empty($hasWordCounter ?? false)) need-word-counter-password @endif"
id="{{ $id }}"
aria-describedby="{{ $id }}Help"
placeholder="{{ $placeholder ?? __('Un beau mot de passe') }}"
autocomplete="current-password"
@if(!empty($required))
required
@endif>
@php $dataPassword = ['inputId' => $id]; @endphp
<span class="btn btn-primary password-visibility w-fit d-flex justify-content-center align-items-center p-0 @if(!empty($hasWordCounter ?? false)) need-word-counter-password-btn @endif"
data-json='@json($dataPassword)'>
</span>
</div>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => $id . 'Help',
'helper' => $helper
])

View file

@ -0,0 +1,31 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$width || The width of the picture. || integer || REQUIRED ||
$height || The name of the picture. || integer || REQUIRED ||
$required || Is the field required ? || boolean || OPTIONNAL || false
$preview || Is the picture previewed ? || boolean || OPTIONNAL || false
$browseEvent || Let false if you need to import
a picture || boolean || OPTIONNAL || false
$value || The default value of the input. || string || OPTIONNAL || ''
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@php
$data = [
'id' => $id,
'name' => $name,
'helper' => $helper,
'width' => $width,
'height' => $height,
'value' => $model->{$name} ?? $value ?? '',
'preview' => $preview ?? false,
'browseEvent' => $browseEvent ?? false,
'required' => $required ?? false,
];
@endphp
<div class="image-input" data-json='@json($data)'></div>
@include('modules.input-error', ['inputName' => $name, 'helper' => null])

View file

@ -0,0 +1,37 @@
{{--
VARIABLE || COMMENT || TYPE || REQUIRED || DEFAULT
$id || The id of the input tag. || string || REQUIRED ||
$name || The name of the input tag. || string || REQUIRED ||
$helper || The helper of the input. || string || REQUIRED ||
$label || The text displayed as a label. || string || OPTIONNAL || null
$required || Is the field required ? || boolean || OPTIONNAL || false
$value || The default value of the input. || string || OPTIONNAL || ''
$placeholder || The placeholder of the input. || string || OPTIONNAL || __('A beautiful title')
$hasWordCounter || Is the WordCounter needed ? || boolean || OPTIONNAL || false
$model || The model we're creating/editing || Model class || OPTIONNAL || null
--}}
@if(!empty($label))
<label for="{{ $id }}" class="col-form-label">
<b>{{ $label }} {{ $required ?? false ? '*' : '' }}</b>
</label>
@endif
@if(!empty($hasWordCounter ?? false))
<div class="word-counter" data-json='@json(['id'=> $id])'></div>
@endif
<input name="{{ $name }}"
type="text"
value="{{ old($name, $model->{$name} ?? $value ?? '') }}"
class="form-control @if($errors->has($name)) is-invalid @endif"
id="{{ $id }}"
aria-describedby="{{ $id }}Help"
placeholder="{{ $placeholder ?? __('A beautiful title') }}"
@if(!empty($required))
required
@endif>
@include('modules.input-error', [
'inputName' => $name,
'helperId' => $id.'Help',
'helper' => $helper
])

View file

@ -1,206 +1,17 @@
@extends('layouts.app')
@section('title', __('Charte de confidentialité'))
@section('description', "Retrouvez la charte de confidentialité du site Le Gaulois")
@section('title', $staticPageModel->seo_title)
@section('description', $staticPageModel->seo_description)
@section('sub_header')
<div class="sub_header sub_header_mention">
<div class="title">
<h1>{{ __('Charte de confidentialité') }}</h1>
<div class="sub_header sub_header_mention">
<div class="title">
<h1>{{ $staticPageModel->title }}</h1>
</div>
</div>
</div>
@endsection
@section('content')
<div class="content legals"><section>
<h3>Introduction</h3>
<p>
Le nouveau Règlement Général de l’Union Européenne sur la Protection des Données (RGPD), entré en vigueur le 25 mai 2018, vise à mieux encadrer la collecte, le traitement et l’utilisation de vos données personnelles. LDC Sablé, en sa qualité de responsable du traitement, renforce ses engagements pour garantir la protection et la sécurité des données à caractère personnel que vous lui confiez.
<br><br>
A ce titre, la présente Charte de confidentialité vous informe sur le type de données que nous collectons, comment nous les traitons, dans quelles finalités, de manière à rendre leur utilisation la plus adaptée à vos besoins.
<br><br>
Le responsable de traitement, qui collecte et gère vos données, est la société LDC Sablé, Société par Actions Simplifiée au capital social de 235 738 512 € immatriculée au registre du commerce et des sociétés de Le Mans sous le numéro 444.502.025 dont le siège social est Zone Industrielle St Laurent, 72300 SABLE SUR SARTHE.
<br><br>
Pour toute question relative à notre Charte de confidentialité, <strong>merci de nous contacter via le formulaire de contact suivant : <a href="https://www.ldc.fr/rgpd/consommateurs/?website=legaulois" target="_blank">https://www.ldc.fr/rgpd/consommateurs/</a>.Nous vous invitons à consulter régulièrement cette rubrique car LDC Sablé peut être amené à la modifier à tout moment.</strong>
<br><br>
La présente Charte de confidentialité a été mise à jour le 4 février 2021.
</p>
<h3>Nos engagements</h3>
<p>
Conformément à la réglementation relative à la protection des données personnelles et à la vie privée, notamment la loi n°78-17 du 6 janvier 1978 relative à l’informatique, aux fichiers et aux libertés dite loi « Informatique et Libertés » et au Règlement (UE) 2016/679 du 25 mai 2018 relatif à la protection des personnes physiques à l'égard du traitement des données à caractère personnel et à la libre circulation de ces données, (ci-après le « Règlement RGPD»), LDC Sablé s’engage à respecter les principes suivants :
<br><br>
- <strong>Consentement</strong> : vous devez avoir consenti à la collecte et au traitement de vos données. Si tel n’était pas le cas ou si vous avez changé d’avis, merci de vous reporter à l’article ci-dessous relatif à vos droits.
<br>
- <strong>Limitation des données collectées</strong> : nous ne collectons que les données qui sont strictement nécessaires au traitement et à l’utilisation envisagée. Nous vous rappelons qu’il n’y a aucune obligation à nous transmettre ces données. Toutefois certains services ou opérations promotionnelles nécessitent certaines données, faute de quoi vous ne pourriez y accéder.
<br>
- <strong>Limitation des finalités</strong> : les données que nous collectons sont traitées uniquement dans les finalités décrites ci-dessous.
<br>
- <strong>Limitation des durées de conservation</strong> : vos données sont conservées uniquement le temps nécessaire aux finalités de traitement pour lequel elles ont été collectées. Au-delà de cette durée si aucune obligation légale impose leur conservation, nous veillerons à ce que vos données soient supprimées, détruites ou anonymisées.
<br>
- <strong>Protection des données</strong> : en vue de sécuriser vos données et leur traitement, nous avons mis en place des mesures techniques et organisationnelles détaillées ci-dessous.
<br>
- <strong>Transparence et loyauté</strong> : lorsque LDC Sablé collecte une donnée vous concernant, nous vous informons de l’utilisation qui en sera faite. C’est pourquoi nous vous conseillons de lire attentivement les informations qui vous sont transmises à travers notre site internet.
</p>
<h3>Quelles données personnelles sont collectées ?</h3>
<p>
Au sens du Règlement RGPD, une donnée à caractère personnel désigne toute information relative à une personne physique identifiée ou identifiable.
<br><br>
Les données personnelles collectées varient en fonction du but de la collecte et du service dont vous souhaitez bénéficier.
<br><br>
La société LDC Sablé est amenée à collecter les catégories de données personnelles suivantes: <br>
- Coordonnées personnelles (civilité, nom, prénom, adresse e-mail, adresse postale) ; <br>
- Coordonnées personnelles <strong>non obligatoires</strong> (date de naissance, numéro de téléphone, nombre de personnes dans le foyer, produits préférés, intérêt pour les départ’aimants) ;identifiants utilisés pour accéder à votre compte en ligne (adresse IP, adresse e-mail et mot de passe) ;
<br>
- Historiques de navigation, telles que les pages visitées et actions sur le site. <br><br>
Vous vous engagez à fournir des données personnelles actualisées et valides et garantissez ne faire aucune fausse déclaration et ne donner aucune information erronée.
</p>
<h3>Pourquoi vos données personnelles sont collectées ?</h3>
<p>
Vos données peuvent être collectées dans la mesure où vous avez consenti de manière spécifique, libre et éclairé. Elles peuvent également être collectées pour satisfaire à l’exécution d’une obligation légale ou dans le cadre de la relation contractuelle construite avec vous (notamment conditions générales d’utilisation, conditions générales de vente) ou encore dans l’intérêt légitime de LDC Sablé (par exemple pour assurer la sécurité des transactions).
<br><br>
Nous collectons vos données personnelles afin de vous fournir la meilleure expérience utilisateur à travers notre site internet.
<br><br>
<strong>Ces données sont collectées aux fins suivantes : </strong> <br>
- Gestion des fonctionnalités et de la qualité du site internet <br>
- Gestion de votre inscription à notre Newsletter et de votre Compte utilisateur <br>
- Accès à votre Compte utilisateur <br>
- Gestion du recrutement <br>
- Traitement de vos demandes de renseignements <br>
- Communication des informations (promotions, nouveaux produits, activité de la marque) <br>
- Gestion de votre participation à nos jeux, tirages au sort, activités promotionnelles <br>
- Développement et amélioration des produits Le Gaulois et des services du Club des Gaulois <br>
- Statistiques <br>
- Proposition de produits personnalisés et de communications adaptées ou pour recommandation de produits en fonction des besoins de consommateurs <br>
- Partages sur les réseaux sociaux
</p>
<h3>Quels sont vos droits ?</h3>
<p>
Vous disposez d’un certain nombre de droits concernant vos données personnelles listés ci-dessous. <br><br>
- <strong>Droit d’accès</strong> <br>
Vous pouvez demander la communication de vos données sous une forme accessible, la confirmation que vos données font ou ne font plus l’objet d’un traitement ainsi que la communication des informations relatives à vos données. Afin que vos données personnelles soient exactes, complètes, pertinentes et à jour, vous avez le droit d’accéder, de corriger ou de mettre à jour vos données personnelles à tout moment.
<br><br>
- <strong>Droit de rectification</strong> <br>
Vous êtes en droit de demander à ce que vos données soient rectifiées, complétées ou mises à jour lorsqu’elles sont inexactes, incomplètes, équivoques ou périmées.
<br><br>
- <strong>Droit à l’effacement</strong> <br>
Vous avez le droit de demander la suppression de vos données personnelles notamment lorsqu’elles ne sont plus nécessaires aux finalités pour lesquelles elles ont été collectées. Si les données personnelles collectées ne sont plus nécessaires à aucune finalité et qu’aucune obligation légale nous impose de les conserver, nous mettrons tout en œuvre pour supprimer, détruire ou anonymiser ces données.
<br><br>
- <strong>Droit à la limitation du traitement</strong> <br>
Vous avez le droit de demander la limitation du traitement de vos données personnelles si : <br>
-- vous contestez l’exactitude des données ; <br>
-- vous souhaitez limiter le traitement des données qui n’avaient pas été traitées de manière licite plutôt que leur suppression ; <br>
-- nous n’avons plus besoin de vos données personnelles mais celles-ci sont nécessaires pour la constatation, l’exercice ou la défense de vos droits en justice ; <br>
-- vous vous êtes opposés au traitement de vos données personnelles et attendez de savoir si vos intérêts liés à cette objection l’emportent sur les motifs légitimes que nous poursuivons.
<br><br>
- <strong>Droit à la portabilité de vos données</strong> <br>
Lorsque le traitement est effectué à partir de procédés automatisés et que vous avez librement consenti au traitement de vos données personnelles pour une finalité que nous vous avions communiqué au préalable ; ou lorsque nous traitons vos données dans le cadre d’une opération commerciale (ex : vous fournir un produit) vous avez le droit de demander :
<br>
-- à recevoir vos données personnelles dans un format structuré, couramment utilisé et lisible par une machine ; <br>
-- à ce que vos données personnelles soient transmises directement à une autre responsable de traitement, lorsque que cela est techniquement possible. <br>
<br><br>
- <strong>Droit d’opposition</strong> <br>
Lorsque vos données sont traitées à des fins de prospection commerciale, vous avez le droit, à tout moment, de vous opposer au traitement de vos données personnelles et ce sans motif.
<br><br>
- <strong>Droit de porter réclamation auprès de la CNIL</strong> <br>
Si vous estimez que le traitement de vos données personnelles constitue une violation de la réglementation, vous pouvez introduire une réclamation auprès d’une autorité de contrôle, telle que la CNIL.
<br><br>
<strong>Vous pouvez exercer ces droits à tout moment en nous contactant via le formulaire suivant <a href="https://www.ldc.fr/rgpd/consommateurs/?website=legaulois" target="_blank">https://www.ldc.fr/rgpd/consommateurs/</a></strong>
<br><br>
<strong>Vous recevrez une réponse de notre part dans un délai d’un mois à compter de la réception de la demande. En cas de demande complexe ou du nombre important de demandes, le délai peut être prolongé de deux mois.</strong>
<br><br>
<strong>L’exercice des droits se fait à titre gratuit. Si toutefois la demande était manifestement infondée ou excessive, LDC Sablé se réserve la possibilité d’appliquer des frais administratifs ou de refuser de donner suite à la demande.</strong>
</p>
<h3>Comment vos données personnelles sont protégées ?</h3>
<p>
Afin d’assurer la sécurité de vos données personnelles nous avons mis en place des mesures de sécurité, notamment des contrôles d’accès, des pares-feux, des serveurs sécurisés.
<br><br>
Ces mesures visent à protéger vos données personnelles contre toute perte, détournement, mauvaise utilisation, divulgation, modification, interférence, dommage, accès non autorisé des données.
<br><br>
En cas de violation de vos données personnelles susceptible d’engendrer un risque pour vos droits et libertés, LDC Sablé en notifie la violation à la CNIL dans les meilleurs délais et, si possible, 72 heures au plus tard après en avoir pris connaissance. LDC Sablé vous en informera dans les meilleurs délais.
</p>
<h3>Accès à vos données personnelles :</h3>
<p>
Vos données personnelles sont destinées au personnel de LDC Sablé habilité à les traiter, notamment le service marketing, informatique, commercial, qualité et administratif.
</p>
<h3>Partage de vos données personnelles :</h3>
<p>
Conformément à la règlementation, quand nous sommes amenés à partager vos données personnelles avec des sous-traitants pour certaines finalités décrites dans la présente Charte, nous nous assurons que leur dispositif en matière de sécurité des données et de leur stockage est au moins aussi important que celui de notre organisation. Nous veillons également à ce qu’ils respectent les lois relatives à la protection des données personnelles dans des conditions au moins équivalentes à celles que nous respectons.
<br><br>
Par ailleurs, les sous-traitants étant amenés à traiter de vos données personnelles pour notre compte et sur nos instructions, nous nous engageons à ce que vos données personnelles ne soient pas partagées ou divulguées pour des finalités autres que celles décrites dans la présente Charte. Nous pouvons cependant être amenés à transmettre vos données, pour des finalités autres que celles prévues dans la Charte, dans les cas où leur communication est requise par la loi et les autorités gouvernementales.
</p>
<h3>Transfert de vos données en dehors de l'espace économique Européen :</h3>
<p>
Nous nous informons que vos données personnelles ne sont pas traitées en dehors de l’Espace Economique Européen (EEE). En cas de changement, nous vous en avertirons et mettrons tout en œuvre pour que ce transfert international de données dispose d’un niveau et de garanties de sécurité adéquats.
</p>
<h3>Utilisation des cookies :</h3>
<p>
Les cookies sont des petits fichiers textes contenant des informations propres vous concernant stockés sur le disque dur de l’équipement informatique avec lequel vous vous êtes connectés sur le site internet et pouvant être lus seulement par le serveur qui l’a fourni. Les cookies sont gérés par votre navigateur internet.
<br><br>
Les cookies indiquent la fréquentation des pages que vous visitez, ce qui nous aide à connaître les informations qui vous intéressent. Cela permet de vous offrir plus de contenu qui vous intéresse et moins de contenu qui ne vous intéresse pas.
<br><br>
Les cookies vous permettent de stocker des préférences et les noms des utilisateurs, enregistrer des produits et des services, personnaliser des pages ou faire de la publicité ciblée.
<br><br>
A travers ces cookies, vos données personnelles peuvent être recueilles telles que : <br>
- des informations concernant le navigateur de votre appareil et le système d'exploitation que vous utilisez ; <br>
- l’adresse IP de l'appareil que vous utilisez ; <br>
- les pages Web que vous consultez ; <br>
- les liens sur lesquelles vous cliquez pendant que vous êtes en interaction avec nos services. <br><br>
Le site internet <a href="https://www.legaulois.fr" target="_blank">www.legaulois.fr</a> utilise trois types de cookies qui ont des finalités différentes. Tous les cookies de type non techniques doivent recueillir votre consentement avant d’être installés. Vous pouvez donner votre consentement sur la page d’accueil du site internet, en cliquant sur « accepter ».
<br><br>
- Les cookies strictement nécessaires et fonctionnels <br>
Ces cookies sont nécessaires au bon fonctionnement du site internet. Ils vous permettent d’utiliser les principales fonctionnalités. Sans ces cookies, vous ne pourrez pas utiliser normalement le site internet.
<br><br>
- Les cookies analytiques <br>
Ces cookies nous permettent de connaître l’utilisation et les performances du site internet et d’en améliorer son fonctionnement.
<br><br>
- Les cookies de ciblage <br>
Ces cookies sont utilisés pour vous présenter des publicités ou vous adresser des informations adaptées à vos centres d’intérêts en dehors du site www.legaulois.fr lors de votre navigation sur Internet. Le refus de ces cookies publicitaires n’a pas d’impact sur l’utilisation du site internet. Cependant, le fait de refuser les cookies publicitaires n’entraînera pas l’arrêt de la publicité sur Internet. Cela aura seulement pour effet d’afficher une publicité qui ne tiendra pas compte de vos centres d’intérêt ou de vos préférences.
<br><br>
<strong>Vous avez le choix :</strong> <br>
- <strong>d’accepter</strong> ces cookies en cliquant sur le bouton « Accepter » présent sur le bandeau Cookies, apparaissant au bas de votre page internet. Tant que vous n’avez pas accepté, les cookies ne pourront être stockés sur votre appareil ; <strong>ou</strong>
<br>
- <strong>de refuser</strong> ces cookies via le bouton « refuser» présent sur le bandeau Cookies ou les paramètres de votre navigateur internet.
<br><br>
Lorsque vous cliquez sur le bouton « refuser » du bandeau Cookies, le dépôt des cookies par défaut désactivé le restera.
<br><br>
Pour en savoir plus sur la désactivation des cookies via votre navigateur internet : <br><br>
Internet Explorer: <a href="http://windows.microsoft.com/fr-FR/windows-vista/Block-or-allow-cookies" target="_blank">http://windows.microsoft.com/fr-FR/windows-vista/Block-or-allow-cookies</a><br>
Chrome: <a href="http://support.google.com/chrome/bin/answer.py?hl=fr&amp;hlrm=en&amp;answer=95647" target="_blank">http://support.google.com/chrome/bin/answer.py?hl=fr&amp;hlrm=en&amp;answer=95647</a><br>
Firefox: <a href="https://support.mozilla.org/fr/kb/protection-renforcee-contre-pistage-firefox-ordinateur" target="_blank">https://support.mozilla.org/fr/kb/protection-renforcee-contre-pistage-firefox-ordinateur</a><br>
Safari: <a href="https://support.apple.com/fr-fr/guide/safari/sfri11471/mac" target="_blank">https://support.apple.com/fr-fr/guide/safari/sfri11471/mac</a><br>
<br>
La durée de conservation de ces informations dans votre appareil est d’une durée maximale de 13 mois. A l’expiration de ce délai, nous recueillerons de nouveau votre consentement.
<br><br>
Pour plus d’informations sur le paramétrage de vos cookies, vous pouvez consulter :<br>
<a href="http://www.youronlinechoices.com/fr/" target="_blank">http://www.youronlinechoices.com/fr/</a> <br>
<a href="https://www.allaboutcookies.org/" target="_blank">https://www.allaboutcookies.org/</a>
</p>
<h3>Sites internet de tiers</h3>
<p>
Le site internet www.legaulois.fr peut être associé à des sites internet tiers. Les sites hébergés par des tiers sont hors de notre contrôle. Lorsque vous renseignez des données personnelles sur un site internet tiers, le traitement de ces données n'est pas effectué sur notre site internet, mais sur le site internet tiers concerné. Toute donnée personnelle que vous fournissez sera collectée et traitée conformément à la politique relative à la confidentialité des données du tiers concerné.
<br><br>
Par conséquent, nous n'assumons aucune responsabilité concernant les pratiques exercées par lesdits tiers en matière de protection des données.
</p>
<h3>Droit applicable</h3>
<p>
La présente Charte de confidentialité est régie et sera interprétée conformément au droit français.
</p>
<h3>Nous contacter</h3>
<p>
Si vous avez des questions, remarques ou réclamations relatives à la présente Charte de confidentialité, ou le traitement de vos données personnelles, veuillez-nous
<a href="https://www.ldc.fr/rgpd/consommateurs/?website=legaulois">contacter ici</a>.
</p>
<br>
</div>
<div class="content legals">
<div class="ck-content">{!! clean($staticPageModel->content) !!}</div>
</div>
@endsection

View file

@ -1,58 +1,41 @@
@extends('layouts.app')
@if($type->equals(ContactFormType::complain()))
@section('title', __('Formulaire de réclamation produit'))
@section('description', __('Envie de partager une remarque, une idée avec nous, de poser une question : n\'hésitez pas à compléter le formulaire de récalamation produit.'))
@elseif($type->equals(ContactFormType::recipe()))
@section('title', __('Formulaire pour proposer une recette'))
@section('description', __('Envie de partager une recette, une idée avec nous : n\'hésitez pas à compléter le formulaire.'))
@elseif($type->equals(ContactFormType::abuse()))
@section('title', __('Formulaire de modération'))
@section('description', __('Un souci avec un utilisateur ? N\'hésitez pas à compléter le formulaire.'))
@else
@section('title', __('Formulaire de contact'))
@section('description', __('Envie de partager une remarque, une idée avec nous, de poser une question : n\'hésitez pas à compléter le formulaire de contact.'))
@endif
@section('title', $staticPageModel->seo_title)
@section('description', $staticPageModel->seo_description)
@section('sub_header')
<div class="sub_header sub_header_contact">
<div class="title">
<h1>{{ __('Contactez-nous') }}</h1>
<div class="sub_header sub_header_contact">
<div class="title">
<h1>{{ $staticPageModel->title }}</h1>
</div>
</div>
</div>
@endsection
@section('content')
<div class="content contact clearfix">
<aside>
<div>
<p>{{ __('Bonjour,') }}</p>
@if($type->equals(ContactFormType::complain()))
<p>{{ __('Vous souhaitez nous faire part d\'un problème rencontré avec un produit Le Gaulois ? Compléter ce formulaire ci-contre. Merci d\'indiquer vos coordonnées exactes pour que nous puissions vous répondre prochainement.') }}</p>
<div class="content contact clearfix">
<aside>
<div class="ck-content">{!! clean($staticPageModel->content) !!}</div>
</aside>
<section>
{{-- IF MAIL IS SENT --}}
@if (!is_null($status))
<div class="statusMsg">
@if (session()->get('status'))
<p>{{ __('message_contact_send') }}</p>
@else
<p>{{ __('message_contact_failed') }}</p>
@endif
<a class="btn btn-red btn-arronded-20 text-uppercase" href="{{ route('home') }}">{{ __('Retour à l\'accueil') }}</a>
</div>
@else
<p>{{ __('Si vous avez une question à nous poser ou des remarques à formuler sur notre site, n\'hésitez pas à les inscrire dans le formulaire ci-contre. Merci d\'indiquer vos coordonnées exactes pour que nous puissions vous répondre prochainement.') }}</p>
@if (!$type->equals(ContactFormType::complain()) and !$type->equals(ContactFormType::recipe()) and !$type->equals(ContactFormType::abuse()))
<p class="text-white">{{ __('Si vous désirez plutôt envoyer une réclamation utilisez ce lien') }}<br>
<a class="btn btn-red btn-arronded-20 text-uppercase"
href="{{ route('product-request') }}">{{ __('Envoyer une réclamation') }}</a>
</p>
<br>
@endif
@include('front.contact.contact-form')
@endif
<p>{{ __('Les informations qui vous concernent sont destinées à un usage interne et ne seront en aucun cas transmises à des tiers. Vous disposez d\'un droit d\'accès, de modification, de rectification et de suppression des données qui vous concernent (art. 34 de la loi "Informatique et Libertés").') }}</p>
</div>
</aside>
<section>
{{-- IF MAIL IS SENT --}}
@if(!is_null($status))
<div class="statusMsg">
@if(session()->get('status'))
<p>{{ __('message_contact_send') }}</p>
@else
<p>{{ __('message_contact_failed') }}</p>
@endif
<a href="{{ route('home') }}" class="btn btn-red btn-arronded-20 text-uppercase">{{ __('Retour à l\'accueil') }}</a>
</div>
@else
@if(!$type->equals(ContactFormType::complain()) and !$type->equals(ContactFormType::recipe()) and !$type->equals(ContactFormType::abuse()))
<p class="text-white">{{ __('Si vous désirez plutôt envoyer une réclamation utilisez ce lien') }}<br>
<a href="{{ route('product-request') }}" class="btn btn-red btn-arronded-20 text-uppercase">{{ __('Envoyer une réclamation') }}</a></p>
<br>
@endif
@include('front.contact.contact-form')
@endif
</section>
</div>
</section>
</div>
@endsection

View file

@ -1,174 +1,17 @@
@extends('layouts.app')
@section('title', __('Mentions légales'))
@section('description', "Retrouvez l'ensemble de nos conditions générales et d'utilisation du site Le Gaulois. A lire impérativement avant l'inscription au club des Gaulois")
@section('title', $staticPageModel->seo_title)
@section('description', $staticPageModel->seo_description)
@section('sub_header')
<div class="sub_header sub_header_mention">
<div class="title">
<h1>{{ __('Mentions légales') }}</h1>
<div class="sub_header sub_header_mention">
<div class="title">
<h1>{{ $staticPageModel->title }}</h1>
</div>
</div>
</div>
@endsection
@section('content')
<div class="content legals">
<h2>Notice légale et conditions générales d'utilisation du site internet Le Gaulois</h2>
<br><br>
<h2>Introduction</h2>
<br>
<p>
Nous vous remercions de lire ces conditions générales d'utilisation qui régissent les conditions d’accès et d’utilisation du site www.legaulois.fr.
<br><br>
<strong>Nous vous invitons à consulter régulièrement cette rubrique car la société LDC Sablé peut être amenée à la modifier à tout moment.</strong>
<br><br>
<strong>Tout utilisateur déclare avoir lu et accepté les mentions légales et les conditions générales d’utilisation et s’engage à s’y conformer.</strong>
<br><br>
Mise à jour le 4.02.2021.
</p>
<br><br>
<h2>Mentions légales</h2>
<br>
<p>
<b>LDC Sablé</b><br/>
Zone Industrielle Saint Laurent - 72300 Sablé sur Sarthe
<br><br>
Tél : 02 43 62 70 00
Société par actions simplifiée au capital de 235 738 512 € euros - RCS Le Mans 444.502.025
<br><br>
<strong>Editeur du Site :</strong> LDC Sablé, Zone Industrielle Saint Laurent 72300 Sablé sur Sarthe
<br><br>
Directeur de la publication : Sylvain Gouet, Responsable Web Marketing Groupe LDC <br>
Conception du site et réalisation : LDC Services <br>
Illustrations : LDC Services <br>
Le site est hébergé par : OVH, via LDC, SAS au capital de 10 069 020 euros, RCS Lille Métropole 537 407 926, 2 rue Kellermann – 59100 Roubaix, Tel : 09 72 10 10 07, Mail : hosting@ml.ovh.net
</p>
<br><br>
<h2>Conditions Générales d'Utilisation du site internet</h2>
<br><br>
<h2>Droit d’auteur - Droit des marques – Protection des bases de données</h2>
<br>
<p>
La présentation et le contenu du site constituent, ensemble, une œuvre protégée par les lois en vigueur des droits d’auteur, de la propriété intellectuelle et industrielle.
<br><br>
Les créations apparaissant sur le site (dessins, photographies, images, textes, séquences animées sonores ou non et autres documentations représentées), sont objets de droits d’auteur, de propriété industrielle et/ou intellectuelle et sont, selon les cas, propriété de la société LDC Sablé ou de tiers ayant autorisé la société LDC Sablé à les utiliser.
Aucune exploitation commerciale, reproduction, représentation, utilisation, adaptation, modification, incorporation, traduction, commercialisation, partielle ou intégrale de ces éléments (y compris ceux téléchargeables ou copiables) ne pourra en être faite sans l'accord préalable et écrit de la société LDC Sablé, à l'exception de l'utilisation pour un usage privé sous réserve des dispositions différentes voire plus restrictives du Code de la propriété intellectuelle.
Toute utilisation non expressément autorisée peut engager la responsabilité civile et/ou pénale de son auteur.
LDC Sablé se réserve le droit d'engager des poursuites judiciaires à l'encontre de toute personne qui n'aurait pas respecté cette interdiction.
</p>
<br><br>
<h2>Vie privée – Données personnelles – Cookies</h2>
<br>
<p>
Nous vous invitons à vous reporter à notre Charte de confidentialité en cliquant <a href="{{ route('chart-conf') }}">ici</a>.
</p>
<br><br>
<h2>Mentions Sanitaires :</h2>
<br>
<p>
Pour votre santé : <br>
- mangez au moins cinq fruits et légumes par jour <br>
- pratiquez une activité physique régulière <br>
- évitez de manger trop gras, trop sucré, trop salé <br>
- évitez de grignoter entre les repas <br>
<br>
Pour toute information complémentaire, consultez le site : <a href="https://www.mangerbouger.fr">www.mangerbouger.fr</a>
</p>
<br><br>
<h2>Responsabilité</h2>
<br>
<p>
LDC Sablé a déployé ses meilleurs efforts pour s’assurer de l’exactitude des informations présentes sur son site internet (ci-après le Site). Cependant, LDC Sablé n’est responsable ni de l’exactitude, ni des erreurs, ni des omissions contenues sur le Site. L’utilisateur est seul responsable de l’utilisation de telles informations.
<br>
LDC Sablé ne donne aucune garantie, explicite ou implicite, et n’assume aucune responsabilité qui pourrait résulter de l’accès ou de l’utilisation de ce Site incluant toutes détériorations ou virus qui pourraient infecter l’équipement informatique ou tout autre bien de l’utilisateur.
<br><br>
Par ailleurs. <br>
LDC Sablé pourra unilatéralement et à tout moment interrompre temporairement ou définitivement l’accès à tout ou partie du Site, y compris notamment le contenu, les fonctionnalités ou les heures de disponibilité, sans que sa responsabilité ne puisse être recherchée et sans que cela ne puisse donner lieu à l’allocation de dommages et intérêts de quelque nature que ce soit.
<br><br>
Les pages du Site peuvent contenir des liens hypertextes renvoyant vers d'autres sites internet gérés par des sociétés distinctes de LDC Sablé et sur lesquels LDC Sablé n'exerce aucune sorte de contrôle. LDC Sablé n'est pas responsable du contenu de tout autre site auquel vous pourriez avoir accès via le Site ou les autres sites internet du groupe LDC. Tout utilisateur ou visiteur du Site ne peut mettre en place un lien hypertexte en direction de ce Site sans l’autorisation expresse préalable de LDC Sablé.
<br>
</p>
<br><br>
<h2>Conditions Particulières d’Utilisation de la communauté Départ’aimants</h2>
<br><br>
<h2>Objet</h2>
<br>
<p>
Les Conditions Générales ont pour objet de régir les conditions dans lesquelles LDC Sablé vous autorise à utiliser les services fournis par elle consistant à offrir aux utilisateurs la possibilité d’échanger, d’envoyer ou d’acquérir auprès d’autres utilisateurs des aimants représentant les départements de France (ci-après les « <strong>Départ’aimants</strong> ») offerts avec les produits Le Gaulois (ci-après « <strong>La Bourse aux échanges</strong> »).
<br><br>
Les Conditions générales régissent les conditions applicables à la mise à disposition de La Bourse aux échanges mettant en relation les utilisateurs, sans que LDC Sablé ne soit jamais partie à l’échange, envoi ou réception de Départ’aimants.
<br><br>
La participation à La Bourse aux échanges est gratuite et soumise à l’inscription préalable de l’utilisateur au club des Gaulois sur le Site (ci-après le « <strong>Club des Gaulois</strong> »).
<br>
</p>
<br><br>
<h2>Création de compte</h2>
<br>
<p>
L’inscription à la communauté Départ’aimants et la participation à la Bourse aux Echanges sur le Site nécessitent votre inscription préalable au Club Le Gaulois en fournissant vos nom, prénom, date de naissance et adresse e-mail. Vous vous engagez à fournir à LDC Sablé des informations sincères et exactes vous concernant.
<br><br>
Le choix d’un pseudonyme et d’un mot de passe vous sera demandé. Le pseudonyme vous identifiera sur le Site et sera visible par les autres utilisateurs de la Bourse aux Echanges. Il ne doit en conséquence pas porter atteinte aux bonnes mœurs ou aux droits d’un tiers.
<br><br>
L'inscription au Club le Gaulois emporte ouverture de votre compte (ci-après le « <strong>Compte</strong> »), accessible via le Site.
<br><br>
Votre inscription et la création de votre Compte seront confirmées par l'envoi d'un email à l'adresse électronique que vous aurez associée à votre Compte.
<br><br>
Les informations que vous transmettez à LDC Sablé vous sont personnelles. Vous garantissez la confidentialité de votre pseudonyme et de votre mot de passe, que vous vous engagez à ne communiquer à aucun tiers.
<br><br>
LDC Sablé peut refuser votre inscription ou suspendre votre Compte à tout moment, sans mise en demeure préalable, si les informations que vous avez communiquées lors de votre inscription s'avèrent incohérentes, invérifiables et/ou incomplètes.
<br><br>
Vous disposez également de la possibilité de fermer votre Compte à tout moment.
<br><br>
Par ailleurs, LDC Sablé se réserve le droit de fermer votre Compte, sans préavis et sans préjudice de tous les dommages-intérêts auxquels elle pourrait prétendre, en cas de non-respect de l'une quelconque des stipulations des présentes Conditions Générales, en cas de fourniture d'informations fausses, incomplètes ou périmées lors de votre inscription, ou bien en cas de signalement d’un message contraire aux règles du Club Le Gaulois adressé à un utilisateur dans le cadre de la Bourse aux Echanges.
<br><br>
LDC Sablé pourra encore déconnecter un utilisateur et/ou lui interdire l'accès au Site si la connexion au Site entraîne ou risque d'entraîner une perturbation dans son fonctionnement ou une gêne pour les autres utilisateurs, ou encore en cas de panne, de dysfonctionnement, ou de risque informatique quel qu'il soit. LDC Sablé se réserve le droit, si utile ou nécessaire, de suspendre l'accès au Club des Gaulois, sans préjudice de la réclamation de dommages et intérêts.
<br><br>
</p>
<br><br>
<h2>Gestion du compte</h2>
<br>
<p>
Une fois connecté à son Compte, l’utilisateur peut gérer sa collection de Départ’aimants.
<br><br>
Le Site met à la disposition sur chaque Compte une carte de France en ligne, vierge de tout Départ’aimant, que l’utilisateur est libre de renseigner selon sa collection physique de Départ’aimants (Départ’aimant détenu, Départ’aimants avec un ou plusieurs double(s), Départ’aimants manquants, Départ’aimants manquants et recherchés).
<br><br>
L’utilisateur s’engage à renseigner sa carte de France avec des informations réelles et mises à jour qui correspondent en tous points à sa collection physique de Départ’aimants. Ceci est une condition impérative à l’inscription au Club des Gaulois et à la participation à la Bourse aux Echanges.
<br><br>
</p>
<br><br>
<h2>Participation à la Bourse aux échanges</h2>
<br>
<p>
Une fois inscrit au Club des Gaulois, l’utilisateur peut participer à la Bourse aux Echanges permettant de se mettre en relation avec d’autres utilisateurs souhaitant échanger, acquérir ou envoyer gratuitement leurs Départ’aimants. Les frais d’envoi peuvent être demandés au destinataire par l’expéditeur sous forme de timbres. LDC Sablé n’est pas concerné par ces frais d’envoi. Le Site met à disposition de l’utilisateur un moteur de recherche permettant d’identifier les autres utilisateurs détenant les Départ’aimants qui manquent ou de rechercher les utilisateurs intéressés par les Départ’aimants proposés à l’échange.
<br><br>
L’Utilisateur ne peut participer à la Bourse aux Echanges qu’aux conditions suivantes : <br>
- sa carte de France des Départ’aimants est à jour <br>
- l’envoi ou l’échange de Départ’aimants est fait à titre gratuit. Les frais d’envoi peuvent être demandés au destinataire par l’expéditeur sous forme de timbres
<br>
- l’engagement d’envoyer un Départ’aimant à un autre utilisateur doit être réalisé dans les plus brefs délais
<br>
Lorsqu’un utilisateur souhaite contacter un autre utilisateur pour obtenir ou échanger un Départ’aimant, il poste sur le Site un message détaillant sa demande et, s’il le souhaite, précisant ses coordonnées pour que l’autre utilisateur puisse lui répondre directement.
<br><br>
LDC Sablé a mis en place un système de modération automatique a priori des messages postés par les utilisateurs via le Site notamment afin d’éviter l’envoi de message illicite à caractère pornographique ou portant atteinte aux bonnes mœurs. En cas de détection d’un mot non conforme à la charte d’utilisation du Club des Gaulois, LDC Sablé pourra refuser d’adresser ce message à l’utilisateur qui en était destinataire et pourra exclure l’Utilisateur expéditeur du Club des Gaulois.
<br><br>
Dans le cas où l’utilisateur serait contacté par un autre utilisateur ou contacterait un autre utilisateur pour échanger ou solliciter ou envoyer un Départ’aimant, il le fera sous sa seule responsabilité.
<br><br>
En cas de litige entre utilisateurs relatifs à l’échange, l’envoi ou la réception de Départ’aimants, LDC Sablé n’étant pas partie à l’accord convenu entre les utilisateurs, ils doivent faire tout leur possible pour le régler directement dans les meilleurs délais.
<br><br>
LDC Sablé s’engage à mettre en œuvre tous les moyens dont elle dispose pour assurer l’intermédiation technique entre les utilisateurs qui souhaitent se mettre en relation pour échanger, envoyer ou acquérir des Départ’aimants. LDC Sablé n’est en rien responsable de la relation entre utilisateurs postérieurement à leur mise en relation via la Bourse aux Echanges.
<br><br>
Vous acceptez d'indemniser LDC Sablé de tout préjudice (y compris de toute indemnité qu'elle pourrait avoir à verser à des tiers ou de tous frais ou honoraires qu'elle aurait à supporter pour assurer sa défense) qu'elle pourrait subir du fait (i) de l’envoi à un autre utilisateur d’un message portant atteinte à un droit quelconque ou constituant une infraction, (ii) de l’inexécution d’une obligation relative à l’envoi, échange ou acquisition de Départ’aimants ou (iii) de toute activité illégale exercée à partir de votre Compte, à raison de toute faute ou négligence de votre part.
<br><br>
</p>
<br><br>
<h2>Durée</h2>
<br>
<p>
Votre Compte est ouvert pour une durée indéterminée et est régi par les présentes Conditions Générales, sous réserve des modifications qui pourraient intervenir et qui seraient portées à votre connaissance par leur mise en ligne sur le Site.
<br><br>
Vous pouvez décider à tout moment de fermer votre Compte. Dans l'hypothèse où votre Compte serait désactivé, vous ne pourriez plus accéder au Club des Gaulois. Votre carte de France personnalisée avec vos Départ’aimants ne serait alors plus accessible.
<br><br>
En outre, LDC Sablé peut à tout moment mettre fin à l’inscription d’un Participant par courrier électronique sans préavis en cas de manquement du Participant à ses obligations issues des présentes Conditions Générales.
<br><br>
</p>
<div class="ck-content">{!! clean($staticPageModel->content) !!}</div>
</div>
@endsection

View file

@ -305,6 +305,23 @@
<a class="dropdown-item" href="{{ route('bo.ocb.create') }}">{{ __('Ajouter') }}</a>
</div>
</li>
{{-- Pages statiques --}}
<li class="nav-item dropdown btn btn-sm btn-dark mb-1">
<a class="nav-link dropdown-toggle text-white" data-toggle="dropdown" href="#"
role="button">{{ __('Pages statiques') }}</a>
<div class="dropdown-menu">
<a class="dropdown-item"
href="{{ route('bo.static_pages.edit', \App\Enums\StaticPageType::contactAbuse()) }}">{{ __('Plainte contre un utilisateur') }}</a>
<a class="dropdown-item"
href="{{ route('bo.static_pages.edit', \App\Enums\StaticPageType::contactComplain()) }}">{{ __('Réclamation produit') }}</a>
<a class="dropdown-item"
href="{{ route('bo.static_pages.edit', \App\Enums\StaticPageType::contactRecipe()) }}">{{ __('Proposer une recette') }}</a>
<a class="dropdown-item"
href="{{ route('bo.static_pages.edit', \App\Enums\StaticPageType::legals()) }}">{{ __('Mentions légales') }}</a>
<a class="dropdown-item"
href="{{ route('bo.static_pages.edit', \App\Enums\StaticPageType::confidentiality()) }}">{{ __('Confidentialité') }}</a>
</div>
</li>
{{-- Sliders --}}
<li class="nav-item dropdown btn btn-sm btn-dark mb-1">
<a class="nav-link dropdown-toggle text-white" data-toggle="dropdown" href="#"

View file

@ -0,0 +1,7 @@
@hasSection('breadcrumb')
@if (Breadcrumbs::exists(app()->view->getSections()['breadcrumb']))
{{ call_user_func_array('Breadcrumbs::render', array_merge([app()->view->getSections()['breadcrumb']], Arr::wrap($brParam))) }}
@endif
@elseif(Breadcrumbs::exists(request()->route()->getName()))
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endif

View file

@ -0,0 +1,10 @@
@hasSection('breadcrumb')
@if (Breadcrumbs::exists(app()->view->getSections()['breadcrumb']))
{{ call_user_func_array(
'Breadcrumbs::view',
array_merge(['breadcrumbs::json-ld', app()->view->getSections()['breadcrumb']], Arr::wrap($brParam)),
) }}
@endif
@elseif(Breadcrumbs::exists(request()->route()->getName()))
{{ Breadcrumbs::view('breadcrumbs::json-ld',request()->route()->getName()) }}
@endif

View file

@ -0,0 +1,17 @@
@if (count($breadcrumbs))
<ol class="breadcrumb justify-content-center w-100 m-0">
@foreach ($breadcrumbs as $breadcrumb)
@if ($breadcrumb->url && !$loop->last)
<li class="breadcrumb-item d-flex">
<a class="h2 fw-bold m-0 ps-2" href="{{ $breadcrumb->url }}">
{{ $breadcrumb->title }}
</a>
</li>
@else
<li class="breadcrumb-item btn-games d-flex align-items-center flex-grow-1 active h2 fw-bold m-0">
{{ $breadcrumb->title }}
</li>
@endif
@endforeach
</ol>
@endif

View file

@ -0,0 +1,8 @@
@if($errors->has($inputName))
<div class="col-12">
<small class="text-danger">{{ implode(',', $errors->get($inputName)) }}</small>
</div>
@endif
@if(isset($helper))
<small @if(isset($helperId)) id="{{ $helperId }}" @endif class="form-text text-body-secondary">{{ $helper }}</small>
@endif

View file

@ -28,6 +28,7 @@ use App\Http\Controllers\Bo\ProductSliderPicturesController;
use App\Http\Controllers\Bo\RangeController;
use App\Http\Controllers\Bo\RecipesController;
use App\Http\Controllers\Bo\ReductionsController;
use App\Http\Controllers\Bo\StaticPageController;
use App\Http\Controllers\Bo\SubRangeController;
use App\Http\Controllers\Bo\TagController;
use App\Http\Controllers\Bo\TraceabilityController;
@ -110,6 +111,16 @@ Route::prefix('bo')
Route::resource('breeding-page', BreedingPageController::class)->except(['index', 'show', 'create', 'store'])
->withoutMiddleware('xss')
->middleware('xss:headerContent,subtitleContent,html');
// * StaticPages
Route::resource('pages', StaticPageController::class)
->names([
'edit' => 'static_pages.edit',
'update' => 'static_pages.update',
])->parameters(['pages' => 'static_page'])
->only(['edit', 'update'])
->withoutMiddleware('xss')
->middleware('xss:content');
});
Route::get('/', [DashboardController::class, 'index'])->name('dashboard');

View file

@ -23,6 +23,7 @@ use App\Http\Controllers\OCBController;
use App\Http\Controllers\OnePageController;
use App\Http\Controllers\ProductsController;
use App\Http\Controllers\RecipesController;
use App\Http\Controllers\StaticPageController;
use App\Http\Controllers\TraceabilityController;
use App\Http\Middleware\Authenticate;
use App\Http\Middleware\EncryptCookies;
@ -55,8 +56,8 @@ Route::get('/de-smaak-om-te-delen', [OnePageController::class, 'index'])->name('
Route::get('/faq', [FaqController::class, 'index'])->name('faq');
Route::post('/faq/{question?}', [FaqController::class, 'updateSatisfactionStat'])->name('faq.updateSatisfactionStat');
Route::view('/mentions-legales', 'front.legals')->name('legal-notice');
Route::view('/charte-de-confidentialite', 'front.charte')->name('chart-conf');
Route::get('/mentions-legales', [StaticPageController::class, 'legals'])->name('legal-notice');
Route::get('/charte-de-confidentialite', [StaticPageController::class, 'charte'])->name('chart-conf');
Route::prefix('/produits')
->name('products.')