Merge branch '342-tdf-feedbacks' into 'develop'

fix: 🐛 handle feedback from re7 review

See merge request ldc-web/projets/le-gaulois!338
This commit is contained in:
karl.muller 2026-06-09 10:12:11 +00:00
commit 9371a3033f
11 changed files with 152 additions and 113 deletions

View file

@ -63,7 +63,8 @@ class UpdateStaticPageRequest extends UpdateMiniCrudRequest
!$staticPageModel->type->equals(StaticPageType::products) &&
!$staticPageModel->type->equals(StaticPageType::product) &&
!$staticPageModel->type->equals(StaticPageType::sitemap) &&
!$staticPageModel->type->equals(StaticPageType::rules)
!$staticPageModel->type->equals(StaticPageType::rules) &&
!$staticPageModel->type->equals(StaticPageType::tdf)
) {
$this->mergePicture('picture');
}
@ -116,7 +117,8 @@ class UpdateStaticPageRequest extends UpdateMiniCrudRequest
!$staticPageModel->type->equals(StaticPageType::selling) &&
!$staticPageModel->type->equals(StaticPageType::accessibility) &&
!$staticPageModel->type->equals(StaticPageType::sitemap) &&
!$staticPageModel->type->equals(StaticPageType::rules)
!$staticPageModel->type->equals(StaticPageType::rules) &&
!$staticPageModel->type->equals(StaticPageType::tdf)
) {
$rules = \array_merge(
$rules,
@ -150,7 +152,8 @@ class UpdateStaticPageRequest extends UpdateMiniCrudRequest
!$staticPageModel->type->equals(StaticPageType::accessibility) &&
!$staticPageModel->type->equals(StaticPageType::ourFarms) &&
!$staticPageModel->type->equals(StaticPageType::exitOutside) &&
!$staticPageModel->type->equals(StaticPageType::ouiCBon)
!$staticPageModel->type->equals(StaticPageType::ouiCBon) &&
!$staticPageModel->type->equals(StaticPageType::tdf)
) {
$rules = \array_merge(
$rules,
@ -168,7 +171,8 @@ class UpdateStaticPageRequest extends UpdateMiniCrudRequest
!$staticPageModel->type->equals(StaticPageType::contact) &&
!$staticPageModel->type->equals(StaticPageType::search) &&
!$staticPageModel->type->equals(StaticPageType::exitOutside) &&
!$staticPageModel->type->equals(StaticPageType::ouiCBon)
!$staticPageModel->type->equals(StaticPageType::ouiCBon) &&
!$staticPageModel->type->equals(StaticPageType::tdf)
) {
$rules = \array_merge(
$rules,

View file

@ -16,6 +16,13 @@ return new class extends Migration
{
// TDF
$data = [
'page_title' => [
'label' => 'Titre de la page',
'inputType' => InputType::string->value,
'value' => 'Le Gaulois Le sponsor du Tour de France',
'validate' => 'required|string|between:3,255',
'required' => true
],
'highlight_text' => [
'label' => 'Texte de l\'encart',
'inputType' => InputType::string->value,
@ -30,6 +37,13 @@ return new class extends Migration
'validate' => 'required|string|between:3,255',
'required' => true
],
'banner_text' => [
'label' => 'Texte de la bannière',
'inputType' => InputType::text->value,
'value' => '<p>Depuis 2015, Le Gaulois est fier d\'être <strong>la volaille officielle du Tour de France</strong>. Un évènement populaire marquant le début de la pause estivale qui s\'adresse à tous les Français, un rendez-vous immanquable pour des milliers de passionnés aux bords des routes ou devant leur télévision. <strong>La convivialité, le partage et la bonne humeur</strong> sont au rendez-vous et c\'est ce <strong>bon vivre à la française</strong> que la caravane Le Gaulois véhicule en sillonnant les routes de France chaque année. Des milliers de cadeaux sont distribués pour ravir les petits comme les plus grands. La participation à cet évènement est également l\'occasion de réaffirmer auprès du public, <strong>l\'engagement sur l\'origine 100% française des volailles Le Gaulois !</strong></p>',
'validate' => 'required|string|min:15',
'required' => true
],
'banner_picture' => [
'label' => 'Logo de la bannière',
'inputType' => 4,
@ -57,6 +71,19 @@ return new class extends Migration
'validate' => 'required|string|between:3,255',
'required' => true
],
'banner_bgpicture' => [
'label' => 'Image de fond',
'inputType' => 4,
'dimensions' => [
'width' => 720,
'height' => 405,
],
'alt' => 'Image de fond',
'title' => 'Image de fond',
'value' => '',
'validate' => 'required',
'required' => true
],
'banner_picture_author' => [
'label' => 'Nom du photographe',
'inputType' => InputType::string->value,
@ -64,6 +91,19 @@ return new class extends Migration
'validate' => 'required|string|between:3,255',
'required' => true
],
'play_picture' => [
'label' => 'Logo de la section n°2',
'inputType' => 4,
'dimensions' => [
'width' => 200,
'height' => 125
],
'alt' => '100% Gagnant',
'title' => '100% Gagnant',
'value' => '',
'validate' => 'required',
'required' => true
],
'play_title' => [
'label' => 'Titre de la section n°2',
'inputType' => InputType::string->value,
@ -78,19 +118,6 @@ return new class extends Migration
'validate' => 'required|string|min:15',
'required' => true
],
'play_picture' => [
'label' => 'Logo de la section n°2',
'inputType' => 4,
'dimensions' => [
'width' => 200,
'height' => 125
],
'alt' => '100% Gagnant',
'title' => '100% Gagnant',
'value' => '',
'validate' => 'required',
'required' => true
],
'play_btn_text' => [
'label' => 'Texte du bouton',
'inputType' => InputType::string->value,
@ -172,18 +199,30 @@ return new class extends Migration
"validate" => "required|boolean",
'required' => true
],
'find_us_title' => [
'label' => 'Titre de la section n°3',
'inputType' => InputType::string->value,
'value' => 'Venez nous retrouver sur le parcours du Tour de France',
'validate' => 'required|string|between:3,255',
'find_us_picture_1' => [
'label' => 'Image n°1 de la section n°3',
'inputType' => 4,
'dimensions' => [
'width' => 300,
'height' => 220
],
'alt' => 'Chars de la caravane Le Gaulois',
'title' => 'Caravane Le Gaulois au mileu des supporters du Tour de France',
'value' => '',
'validate' => 'required',
'required' => true
],
'find_us_description' => [
'label' => 'Description de la section n°3',
'inputType' => InputType::text->value,
'value' => '<p>Participez à notre jeu 100% gagnant Le Gaulois pendant le Tour de France 2025.</p>',
'validate' => 'required|string|min:15',
'find_us_picture_2' => [
'label' => 'Image n°2 de la section n°3',
'inputType' => 4,
'dimensions' => [
'width' => 300,
'height' => 220
],
'alt' => 'Char Cuisson Express Le Gaulois',
'title' => 'Char cocotte Cuisson Express traversant un pont lors d\'une étape du Tour de France',
'value' => '',
'validate' => 'required',
'required' => true
],
'find_us_picture' => [
@ -199,6 +238,20 @@ return new class extends Migration
'validate' => 'required',
'required' => true
],
'find_us_title' => [
'label' => 'Titre de la section n°3',
'inputType' => InputType::string->value,
'value' => 'Venez nous retrouver sur le parcours du Tour de France',
'validate' => 'required|string|between:3,255',
'required' => true
],
'find_us_description' => [
'label' => 'Description de la section n°3',
'inputType' => InputType::text->value,
'value' => '<p>Participez à notre jeu 100% gagnant Le Gaulois pendant le Tour de France 2025.</p>',
'validate' => 'required|string|min:15',
'required' => true
],
'find_us_btn_text_1' => [
'label' => 'Texte du bouton n°1',
'inputType' => InputType::string->value,
@ -227,32 +280,6 @@ return new class extends Migration
"validate" => "required|string|url:http,https",
'required' => true
],
'find_us_picture_1' => [
'label' => 'Image n°1 de la section n°3',
'inputType' => 4,
'dimensions' => [
'width' => 300,
'height' => 220
],
'alt' => 'Chars de la caravane Le Gaulois',
'title' => 'Caravane Le Gaulois au mileu des supporters du Tour de France',
'value' => '',
'validate' => 'required',
'required' => true
],
'find_us_picture_2' => [
'label' => 'Image n°2 de la section n°3',
'inputType' => 4,
'dimensions' => [
'width' => 300,
'height' => 220
],
'alt' => 'Char Cuisson Express Le Gaulois',
'title' => 'Char cocotte Cuisson Express traversant un pont lors d\'une étape du Tour de France',
'value' => '',
'validate' => 'required',
'required' => true
],
'find_us_picture_author' => [
'label' => 'Nom du photographe',
'inputType' => InputType::string->value,
@ -330,14 +357,14 @@ return new class extends Migration
[
'id' => 'picture_alt',
'type' => 'text',
'placeholder' => Str::ucFirst(__('validation.custom.picture_alt')),
'placeholder' => Str::ucFirst(__('crud.minicrud.picture_alt_label')),
'validation' => 'required|string|between:3,255',
'required' => true
],
[
'id' => 'picture_title',
'type' => 'text',
'placeholder' => Str::ucFirst(__('validation.custom.picture_title')),
'placeholder' => Str::ucFirst(__('crud.minicrud.picture_title_label')),
'validation' => 'required|string|between:3,255',
'required' => true
],
@ -373,26 +400,6 @@ return new class extends Migration
'validate' => 'required|string|between:3,255',
'required' => true
],
'heart_picture' => [
'label' => 'Image de fond de la section n°6',
'inputType' => 4,
'dimensions' => [
'width' => 1020,
'height' => 680
],
'alt' => 'Char \'La crousty mobile\' qui traverse un village français pendant le Tour de France',
'title' => 'Char de la caravane Le Gaulois',
'value' => '',
'validate' => 'required',
'required' => true
],
'heart_picture_author' => [
'label' => 'Nom du photographe',
'inputType' => InputType::string->value,
'value' => 'Crédit photo - ASO Aurélien Vialatte',
'validate' => 'required|string|between:3,255',
'required' => true
],
'fun_facts_title_1' => [
'label' => 'Titre de l\'anecdote n°1',
'inputType' => InputType::string->value,
@ -501,6 +508,26 @@ return new class extends Migration
'validate' => 'required',
'required' => true
],
'heart_picture' => [
'label' => 'Image de fond de la section n°6',
'inputType' => 4,
'dimensions' => [
'width' => 1020,
'height' => 680
],
'alt' => 'Char \'La crousty mobile\' qui traverse un village français pendant le Tour de France',
'title' => 'Char de la caravane Le Gaulois',
'value' => '',
'validate' => 'required',
'required' => true
],
'heart_picture_author' => [
'label' => 'Nom du photographe',
'inputType' => InputType::string->value,
'value' => 'Crédit photo - ASO Aurélien Vialatte',
'validate' => 'required|string|between:3,255',
'required' => true
],
'testimonials_title' => [
'label' => 'Titre de la section n°7',
'inputType' => InputType::string->value,
@ -525,14 +552,14 @@ return new class extends Migration
[
'id' => 'picture_alt',
'type' => 'text',
'placeholder' => Str::ucFirst(__('validation.custom.picture_alt')),
'placeholder' => Str::ucFirst(__('crud.minicrud.picture_alt_label')),
'validation' => 'required|string|between:3,255',
'required' => true
],
[
'id' => 'picture_title',
'type' => 'text',
'placeholder' => Str::ucFirst(__('validation.custom.picture_title')),
'placeholder' => Str::ucFirst(__('crud.minicrud.picture_title_label')),
'validation' => 'required|string|between:3,255',
'required' => true
],
@ -608,7 +635,7 @@ return new class extends Migration
public function down(): void
{
Schema::table('static_pages', function () {
$staticPage = StaticPage::query()->where('type', StaticPageType::tdf)->first();
$staticPage = StaticPage::query()->where('type', StaticPageType::tdf)->first();
$staticPage->data = [];
$staticPage->saveQuietly();
});

View file

@ -331,9 +331,5 @@ return [
'common_section_part' => 'common section',
'picture' => 'image',
'picture_author' => 'image author',
'picture_alt' => 'image alternative text',
'picture_title' => 'image title',
'video_alt' => 'video alternative text',
'video_title' => 'video title',
],
];

View file

@ -350,9 +350,5 @@ return [
'rules_accepted' => 'réglement du jeux',
'picture' => 'image',
'picture_author' => 'auteur de l\'image',
'picture_alt' => 'texte alternatif de l\'image',
'picture_title' => 'titre de l\'image',
'video_alt' => 'texte alternatif de la vidéo',
'video_title' => 'titre de la vidéo',
],
];

View file

@ -56,7 +56,3 @@
.mt-16 {
margin-top: 4rem;
}
.mt-24 {
margin-top: 6.25rem;
}

View file

@ -82,7 +82,8 @@
@if (
!$staticPageModel->type->equals(StaticPageType::recipe) &&
!$staticPageModel->type->equals(StaticPageType::product) &&
!$staticPageModel->type->equals(StaticPageType::home))
!$staticPageModel->type->equals(StaticPageType::home) &&
!$staticPageModel->type->equals(StaticPageType::tdf))
{{-- TITLE --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="h-100 border p-3">
@ -121,7 +122,8 @@
!$staticPageModel->type->equals(StaticPageType::selling) &&
!$staticPageModel->type->equals(StaticPageType::ourFarms) &&
!$staticPageModel->type->equals(StaticPageType::exitOutside) &&
!$staticPageModel->type->equals(StaticPageType::ouiCBon))
!$staticPageModel->type->equals(StaticPageType::ouiCBon) &&
!$staticPageModel->type->equals(StaticPageType::tdf))
{{-- SUBTITLE --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="h-100 border p-3">
@ -166,7 +168,8 @@
!$staticPageModel->type->equals(StaticPageType::home) &&
!$staticPageModel->type->equals(StaticPageType::search) &&
!$staticPageModel->type->equals(StaticPageType::exitOutside) &&
!$staticPageModel->type->equals(StaticPageType::ouiCBon))
!$staticPageModel->type->equals(StaticPageType::ouiCBon) &&
!$staticPageModel->type->equals(StaticPageType::tdf))
{{-- CONTENT --}}
<div class="col-12 mb-3">
<fieldset class="border p-3">
@ -208,7 +211,8 @@
!$staticPageModel->type->equals(StaticPageType::accessibility) &&
!$staticPageModel->type->equals(StaticPageType::selling) &&
!$staticPageModel->type->equals(StaticPageType::sitemap) &&
!$staticPageModel->type->equals(StaticPageType::rules))
!$staticPageModel->type->equals(StaticPageType::rules) &&
!$staticPageModel->type->equals(StaticPageType::tdf))
{{-- PICTURE SECTION --}}
<div class="col-12 pb-3">
<fieldset class="h-100 border p-3">

View file

@ -44,7 +44,7 @@
])>
@include('bo.partials.inputs.varchar', [
'id' => sprintf("%sVideoAlt", $id),
'label' => Str::ucFirst(__('validation.custom.video_alt')),
'label' => Str::ucFirst(__('crud.minicrud.video_alt_label')),
'hasWordCounter' => true,
'name' => "data[$name][value][video][alt]",
'required' => true,
@ -52,11 +52,11 @@
'disabled' => empty($model->data[$name]['value']['video']['alt']),
'value' => $model->data[$name]['value']['video']['alt'] ?? '',
'helper' => __('crud.minicrud.video_alt_helper') . ' ' . __('validation.between.string', [
'attribute' => Str::ucFirst(__('validation.custom.video_alt')),
'attribute' => Str::ucFirst(__('crud.minicrud.video_alt_label')),
'min' => 6,
'max' => 255
]),
'placeholder' => Str::ucFirst(__('validation.custom.video_alt')),
'placeholder' => Str::ucFirst(__('crud.minicrud.video_alt_label')),
])
</div>
{{-- VIDEO_TITLE --}}
@ -66,7 +66,7 @@
])>
@include('bo.partials.inputs.varchar', [
'id' => sprintf("%sVideoTitle", $id),
'label' => Str::ucFirst(__('validation.custom.video_title')),
'label' => Str::ucFirst(__('crud.minicrud.video_title_label')),
'hasWordCounter' => true,
'name' => "data[$name][value][video][title]",
'required' => true,
@ -74,11 +74,11 @@
'disabled' => empty($model->data[$name]['value']['video']['title']),
'value' => $model->data[$name]['value']['video']['title'] ?? '',
'helper' => __('crud.minicrud.video_title_helper') . ' ' . __('validation.between.string', [
'attribute' => Str::ucFirst(__('validation.custom.video_title')),
'attribute' => Str::ucFirst(__('crud.minicrud.video_title_label')),
'min' => 6,
'max' => 255
]),
'placeholder' => Str::ucFirst(__('validation.custom.video_title')),
'placeholder' => Str::ucFirst(__('crud.minicrud.video_title_label')),
])
</div>
{{-- PICTURE --}}
@ -108,7 +108,7 @@
])>
@include('bo.partials.inputs.varchar', [
'id' => sprintf("%sPictureAlt", $id),
'label' => Str::ucFirst(__('validation.custom.picture_alt')),
'label' => Str::ucFirst(__('crud.minicrud.picture_alt_label')),
'hasWordCounter' => true,
'name' => "data[$name][value][picture][alt]",
'required' => true,
@ -116,11 +116,11 @@
'disabled' => empty($model->data[$name]['value']['picture']['alt']),
'value' => $model->data[$name]['value']['picture']['alt'] ?? '',
'helper' => __('crud.minicrud.picture_alt_helper') . ' ' . __('validation.between.string', [
'attribute' => Str::ucFirst(__('validation.custom.picture_alt')),
'attribute' => Str::ucFirst(__('crud.minicrud.picture_alt_label')),
'min' => 6,
'max' => 255
]),
'placeholder' => Str::ucFirst(__('validation.custom.picture_alt')),
'placeholder' => Str::ucFirst(__('crud.minicrud.picture_alt_label')),
])
</div>
{{-- PICTURE_TITLE --}}
@ -130,7 +130,7 @@
])>
@include('bo.partials.inputs.varchar', [
'id' => sprintf("%sPictureTitle", $id),
'label' => Str::ucFirst(__('validation.custom.picture_title')),
'label' => Str::ucFirst(__('crud.minicrud.picture_title_label')),
'hasWordCounter' => true,
'name' => "data[$name][value][picture][title]",
'required' => true,
@ -138,11 +138,11 @@
'disabled' => empty($model->data[$name]['value']['picture']['title']),
'value' => $model->data[$name]['value']['picture']['title'] ?? '',
'helper' => __('crud.minicrud.picture_title_helper') . ' ' . __('validation.between.string', [
'attribute' => Str::ucFirst(__('validation.custom.picture_title')),
'attribute' => Str::ucFirst(__('crud.minicrud.picture_title_label')),
'min' => 6,
'max' => 255
]),
'placeholder' => Str::ucFirst(__('validation.custom.picture_title')),
'placeholder' => Str::ucFirst(__('crud.minicrud.picture_title_label')),
])
</div>
{{-- NOTHING SELECTED --}}

View file

@ -102,11 +102,18 @@
</div>
</div>
<div @class([
'd-lg-flex d-none justify-content-end w-75',
'mt-24' => !$model->data['play_display_section']['value']
'd-lg-flex d-none justify-content-center',
'w-100' => !$model->data['play_display_section']['value'],
'w-75 ms-auto' => $model->data['play_display_section']['value']
])>
<div class="d-flex justify-content-center w-25">
<small>{{ $model->data['find_us_picture_author']['value'] }}</small>
<div @class([
'd-flex w-50',
'justify-content-start' => !$model->data['play_display_section']['value'],
'justify-content-end' => $model->data['play_display_section']['value']
])>
<small @class([
'ms-5' => !$model->data['play_display_section']['value'],
])>{{ $model->data['find_us_picture_author']['value'] }}</small>
</div>
</div>
</div>

View file

@ -3,13 +3,15 @@
<div class="row justify-content-center pt-5">
<div class="col-12 col-lg-10 rounded-3 position-relative line-border-medium bg-white p-5 shadow">
<span class="badge bg-warning fs-5 mb-2 p-2 text-white">{{ $model->data['highlight_text']['value'] }}</span>
<div class="text-muted small mb-2">{{ $model->subtitle }}</div>
<div class="text-muted small mb-2">
@include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $model])
</div>
<div class="d-flex mb-1">
<h1 class="fw-bold text-uppercase fs-1">{{ $model->data['banner_title']['value'] }}</h1>
</div>
<div class="d-flex justify-content-around align-items-center mb-1">
<div class="w-md-75 mb-3 w-100">
{!! clean($model->content) !!}
{!! clean($model->data['banner_text']['value']) !!}
</div>
<div class="d-flex align-items-center logo-tdf">
<img src="{{ asset($model->data['banner_picture']['value']) }}"
@ -26,5 +28,5 @@
</div>
</section>
<div class="ms-md-5 mt-4 d-none d-md-block">
<small>{{ $model->data['find_us_picture_author']['value'] }}</small>
<small>{{ $model->data['banner_picture_author']['value'] }}</small>
</div>

View file

@ -2,6 +2,7 @@
@section('title', $staticPageModel->seo_title)
@section('description', $staticPageModel->seo_description)
@section('breadcrumb', request()->route()->getName())
@section('bg-offset', true)
@section('content')

View file

@ -179,3 +179,9 @@ Breadcrumbs::for('fo.contact.show', function (Generator $trail) {
$trail->parent('fo.home.show');
$trail->push(Str::of(__('Contactez-nous'))->ucfirst(), route('fo.contact.show'));
});
// * TDF
Breadcrumbs::for('fo.tdf', function (Generator $trail, StaticPage $staticPage) {
$trail->parent('fo.home.show');
$trail->push(Str::of($staticPage->data['page_title']['value'])->ucfirst(), route('fo.tdf', $staticPage));
});