From 5defc78270d2417298418971f53ee1c89e33093b Mon Sep 17 00:00:00 2001 From: Sebastien Hattry Date: Fri, 2 Aug 2024 16:17:48 +0200 Subject: [PATCH 1/3] feat: add team slide in BO --- app/Enums/Slides/SliderTypeEnum.php | 2 ++ .../Controllers/Fo/StaticPageController.php | 2 ++ .../Requests/Bo/Slides/StoreSlideRequest.php | 25 ++++++++++---- .../2024_08_02_155528_update_slides_table.php | 34 +++++++++++++++++++ .../views/bo/pages/slides/create.blade.php | 10 +++--- .../views/bo/pages/slides/form.blade.php | 15 ++++++-- resources/views/fo/pages/home.blade.php | 16 ++------- 7 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 database/migrations/2024_08_02_155528_update_slides_table.php diff --git a/app/Enums/Slides/SliderTypeEnum.php b/app/Enums/Slides/SliderTypeEnum.php index 9be5739..f7f1899 100644 --- a/app/Enums/Slides/SliderTypeEnum.php +++ b/app/Enums/Slides/SliderTypeEnum.php @@ -11,6 +11,7 @@ enum SliderTypeEnum: int case home = 1; case better_life = 2; case respect_earth = 3; + case team = 4; /** * Optionnal labels definition. @@ -21,5 +22,6 @@ enum SliderTypeEnum: int self::home->name => 'Accueil', self::better_life->name => 'Mieux vivre', self::respect_earth->name => 'Respecter la terre', + self::team->name => 'Nous rejoindre', ]; } diff --git a/app/Http/Controllers/Fo/StaticPageController.php b/app/Http/Controllers/Fo/StaticPageController.php index 453497e..2f845f8 100644 --- a/app/Http/Controllers/Fo/StaticPageController.php +++ b/app/Http/Controllers/Fo/StaticPageController.php @@ -48,6 +48,7 @@ class StaticPageController extends Controller $ambitionSection = $sectionModels->where('section', PageSectionEnum::home_ambition)->first(); $teamSection = $sectionModels->where('section', PageSectionEnum::home_team)->first(); $lifeSection = $sectionModels->where('section', PageSectionEnum::home_life)->first(); + $slideTeams = Slide::query()->where('type', SliderTypeEnum::team)->get(); return view('fo.pages.home', compact( 'staticPageModel', @@ -59,6 +60,7 @@ class StaticPageController extends Controller 'ambitionSection', 'teamSection', 'lifeSection', + 'slideTeams', )); } diff --git a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php index c69d2e3..060c2df 100644 --- a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php +++ b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php @@ -54,18 +54,28 @@ class StoreSlideRequest extends FormRequest 'between:3,255' ], 'content' => [ - 'required_if:type,' . SliderTypeEnum::home->value(), + 'required_if:type,' . SliderTypeEnum::home->value() . ', ' . SliderTypeEnum::team->value(), + 'nullable', + 'string', + 'between:3,275' + ], + 'video_id' => 'nullable|string|regex:%([^"&?\/\s]{11})%i', + 'picture_alt' => [ + 'required_unless:type,' . SliderTypeEnum::team->value(), + 'nullable', + 'string', + 'between:3,255' + ], + 'picture_title' => [ + 'required_unless:type,' . SliderTypeEnum::team->value(), 'nullable', 'string', 'between:3,255' ], - 'video_id' => 'nullable|string|regex:%([^"&?\/\s]{11})%i', - 'picture_alt' => 'required|string|between:3,255', - 'picture_title' => 'required|string|between:3,255', 'button_label' => 'required_if:button_status,true|nullable|string|between:3,35', 'button_url' => 'required_if:button_status,true|nullable|string|between:3,255', 'button_status' => [ - 'required_unless:type,' . SliderTypeEnum::home->value(), + 'required_unless:type,' . SliderTypeEnum::home->value() . ', ' . SliderTypeEnum::team->value(), 'nullable', 'boolean' ], 'button_new_tab' => 'required|boolean', @@ -113,9 +123,10 @@ class StoreSlideRequest extends FormRequest ]), ], 'content' => [ - 'required_unless' => __('Le champ :attribute est obligatoire si le slider n\'est pas :name.', [ + 'required_if' => __('Le champ :attribute est obligatoire si le slider est :name1 ou :name2.', [ 'attribute' => trans('validation.attributes.content'), - 'name' => SliderTypeEnum::home->label() + 'name1' => SliderTypeEnum::home->label(), + 'name2' => SliderTypeEnum::team->label() ]), ] ]; diff --git a/database/migrations/2024_08_02_155528_update_slides_table.php b/database/migrations/2024_08_02_155528_update_slides_table.php new file mode 100644 index 0000000..c66cfcd --- /dev/null +++ b/database/migrations/2024_08_02_155528_update_slides_table.php @@ -0,0 +1,34 @@ +string('content', 300)->nullable()->comment('Slide content.')->change(); + $table->string('picture')->nullable()->comment('Slide picture path.')->change(); + $table->string('picture_alt')->nullable()->comment('Slide picture alt attribute.')->change(); + $table->string('picture_title')->nullable()->comment('Slide picture title attribute.')->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('slides', function (Blueprint $table) { + $table->string('content', 255)->nullable()->comment('Slide content.')->change(); + $table->string('picture')->comment('Slide picture path.')->change(); + $table->string('picture_alt')->comment('Slide picture alt attribute.')->change(); + $table->string('picture_title')->comment('Slide picture title attribute.')->change(); + }); + } +}; diff --git a/resources/views/bo/pages/slides/create.blade.php b/resources/views/bo/pages/slides/create.blade.php index 7e79f75..98ffba5 100644 --- a/resources/views/bo/pages/slides/create.blade.php +++ b/resources/views/bo/pages/slides/create.blade.php @@ -1,21 +1,21 @@ @extends('bo.layout', ['brParam' => $slideModel]) -@section('title', __('Création d\'un :model', ['model' => trans_choice('models.classes.site', 1)])) -@section('description', __('Création d\'un tout nouveau :model', ['model' => trans_choice('models.classes.site', 1)])) +@section('title', __('Création d\'un :model', ['model' => trans_choice('models.classes.slide', 1)])) +@section('description', __('Création d\'un tout nouveau :model', ['model' => trans_choice('models.classes.slide', 1)])) @section('breadcrumb', request()->route()->getName()) @section('content')
+ title="{{ __('crud.helpers.list_all', ['model' => trans_choice('models.classes.slide', 1)]) }}"> @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $slideModel])
@@ -27,7 +27,7 @@
diff --git a/resources/views/bo/pages/slides/form.blade.php b/resources/views/bo/pages/slides/form.blade.php index eb72cc0..418396e 100644 --- a/resources/views/bo/pages/slides/form.blade.php +++ b/resources/views/bo/pages/slides/form.blade.php @@ -116,7 +116,7 @@
{{-- PICTURE --}} -
+
{{ Str::ucfirst(__('validation.attributes.image')) }}
@@ -133,7 +133,7 @@ ]), 'hasWordCounter' => true, 'name' => 'picture_alt', - 'required' => true, + 'required' => false, 'model' => $slideModel ?? null, 'helper' => __('crud.minicrud.picture_alt_helper'), 'placeholder' => __(':field1 :inter1:field2 :inter2:model', [ @@ -158,7 +158,7 @@ ]), 'hasWordCounter' => true, 'name' => 'picture_title', - 'required' => true, + 'required' => false, 'model' => $slideModel ?? null, 'helper' => __('crud.minicrud.picture_title_helper'), 'placeholder' => __(':field1 :inter1:field2 :inter2:model', [ @@ -290,6 +290,7 @@ const fieldsetVideo = document.getElementById('divVideo'); const fieldsetTitle = document.getElementById('divTitle'); const fieldsetContent = document.getElementById('divContent'); + const fieldsetPicture = document.getElementById('divPicture'); const fieldsetButton = document.getElementById('divButton'); checkSelectValue() sliderSelectType.addEventListener('input', checkSelectValue); @@ -299,11 +300,19 @@ fieldsetVideo.hidden = false; fieldsetTitle.required = false; fieldsetContent.hidden = false; + fieldsetPicture.hidden = false; fieldsetButton.hidden = false; + } else if (sliderSelectType.value === "{{ \App\Enums\Slides\SliderTypeEnum::team->value() }}") { + fieldsetVideo.hidden = true; + fieldsetTitle.required = true; + fieldsetContent.hidden = false; + fieldsetPicture.hidden = true; + fieldsetButton.hidden = true; } else { fieldsetVideo.hidden = true; fieldsetTitle.required = true; fieldsetContent.hidden = true; + fieldsetPicture.hidden = false; fieldsetButton.hidden = true; } } diff --git a/resources/views/fo/pages/home.blade.php b/resources/views/fo/pages/home.blade.php index 2a4ee3b..fb913c4 100644 --- a/resources/views/fo/pages/home.blade.php +++ b/resources/views/fo/pages/home.blade.php @@ -141,20 +141,10 @@
- @php - $homeTeamData = [ - 'Culture d’entreprise inclusive et collaborative :' => - 'Notre entreprise valorise la diversité des perspectives et favorise un environnement où chacun se sent écouté et respecté. Nous croyons en la force de la collaboration et encourageons l’innovation à tous les niveaux.', - 'Opportunités de développement professionnel :' => - 'En nous rejoignant, vous aurez accès à des programmes de formation et de développement pour renforcer vos compétences et progresser dans votre carrière. Nous encourageons la croissance personnelle et professionnelle de nos employés.', - 'Implication dans des projets innovants :' => - 'Nous travaillons sur des projets stimulants et innovants qui offre l’opportunité de faire une réelle différence pour les consommateurs. Rejoindre notre équipe vous permettra de contribuer à des initiatives passionnantes et impactantes.

Et en plus, on est sympas.', - ]; - @endphp - @foreach ($homeTeamData as $title => $text) + @foreach ($slideTeams as $slide)
-

{!! $title !!}

-

{!! $text !!}

+

{{ $slide->title }}

+

{{ $slide->content }}

@endforeach
From 241b8d6a42fb3852691c1b1a227167330ed1ade1 Mon Sep 17 00:00:00 2001 From: Noah Lancien Date: Thu, 20 Feb 2025 11:44:16 +0100 Subject: [PATCH 2/3] feat: limit team slides between 1 and 3, added ckeditor for content field and fix error messages --- app/Enums/CkEditorConfigName.php | 8 +- .../Requests/Bo/Slides/StoreSlideRequest.php | 36 +- app/Models/Slide.php | 47 ++ composer.json | 1 - composer.lock | 90 +-- .../2024_08_02_155528_update_slides_table.php | 40 +- .../seeders/Mandatory/TeamSlideSeeder.php | 61 ++ .../ts/bo/components/CkEditorComponent.vue | 689 ++++++++++-------- resources/ts/index.d.ts | 1 + .../views/bo/pages/slides/form.blade.php | 30 +- .../bo/partials/inputs/text-html.blade.php | 3 + resources/views/fo/pages/home.blade.php | 4 +- routes/web-bo.php | 46 +- 13 files changed, 600 insertions(+), 456 deletions(-) create mode 100644 database/seeders/Mandatory/TeamSlideSeeder.php diff --git a/app/Enums/CkEditorConfigName.php b/app/Enums/CkEditorConfigName.php index b0ac3d1..5930111 100644 --- a/app/Enums/CkEditorConfigName.php +++ b/app/Enums/CkEditorConfigName.php @@ -8,9 +8,8 @@ enum CkEditorConfigName: int { use BaseEnum; - case minimal = 1; - case base = 2; - case advanced = 3; + case minimal = 1; + case basic = 2; /** * Optionnal labels definition. @@ -19,7 +18,6 @@ enum CkEditorConfigName: int */ private const LABELS = [ self::minimal->name => 'minimal', - self::base->name => 'base', - self::advanced->name => 'advanced', + self::basic->name => 'basic', ]; } diff --git a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php index 060c2df..d35bacd 100644 --- a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php +++ b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\Bo\Slides; use App\Enums\Slides\SliderTypeEnum; +use App\Rules\WysiwygLength; use App\Traits\Requests\HasPicture; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rules\Enum; @@ -30,7 +31,7 @@ class StoreSlideRequest extends FormRequest { $this->merge([ 'button_status' => $this->boolean('button_status'), - 'button_new_tab' => $this->boolean('button_new_tab') + 'button_new_tab' => $this->boolean('button_new_tab'), ]); $this->mergePicture('picture'); } @@ -57,7 +58,8 @@ class StoreSlideRequest extends FormRequest 'required_if:type,' . SliderTypeEnum::home->value() . ', ' . SliderTypeEnum::team->value(), 'nullable', 'string', - 'between:3,275' + new WysiwygLength(3, 275), + 'max:500' ], 'video_id' => 'nullable|string|regex:%([^"&?\/\s]{11})%i', 'picture_alt' => [ @@ -76,7 +78,8 @@ class StoreSlideRequest extends FormRequest 'button_url' => 'required_if:button_status,true|nullable|string|between:3,255', 'button_status' => [ 'required_unless:type,' . SliderTypeEnum::home->value() . ', ' . SliderTypeEnum::team->value(), - 'nullable', 'boolean' + 'nullable', + 'boolean' ], 'button_new_tab' => 'required|boolean', ]; @@ -116,19 +119,22 @@ class StoreSlideRequest extends FormRequest public function messages(): array { return [ - 'title' => [ - 'required_unless' => __('Le champ :attribute est obligatoire si le slider n\'est pas :name.', [ - 'attribute' => trans('validation.attributes.title'), - 'name' => SliderTypeEnum::home->label() - ]), - ], - 'content' => [ - 'required_if' => __('Le champ :attribute est obligatoire si le slider est :name1 ou :name2.', [ + 'title.required_unless' => __('Le champ :attribute est obligatoire si le slider n\'est pas :name.', [ + 'attribute' => trans('validation.attributes.title'), + 'name' => SliderTypeEnum::home->label() + ]), + 'content.required_if' => __('Le champ :attribute est obligatoire si le slider est :name1 ou :name2.', [ + 'attribute' => trans('validation.attributes.content'), + 'name1' => SliderTypeEnum::home->label(), + 'name2' => SliderTypeEnum::team->label() + ]), + 'content.max' => __( + 'Le champ :attribute ne peut pas contenir plus de :max caractères (balises incluses).', + [ 'attribute' => trans('validation.attributes.content'), - 'name1' => SliderTypeEnum::home->label(), - 'name2' => SliderTypeEnum::team->label() - ]), - ] + 'max' => '500', + ] + ), ]; } } diff --git a/app/Models/Slide.php b/app/Models/Slide.php index 58c2421..68dd24e 100644 --- a/app/Models/Slide.php +++ b/app/Models/Slide.php @@ -7,6 +7,7 @@ use App\Lib\Helpers\FileStorageHelper; use App\Traits\Models\ActivityLog; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Validation\ValidationException; /** * @property \App\Enums\Slides\SliderTypeEnum $type Slide type. @@ -30,6 +31,12 @@ class Slide extends Model use ActivityLog; use HasFactory; + /** @var integer Minimum number of published slides */ + private int $min = 1; + + /** @var integer Maximum number of published slides */ + private int $max = 3; + /** * The attributes that are mass assignable. * @@ -68,6 +75,14 @@ class Slide extends Model protected static function booted(): void { static::creating(function (self $model) { + if ( + $model->type === SliderTypeEnum::team && + self::query()->where('type', SliderTypeEnum::team)->count() > $model::getMaxPublished() + 1 + ) { + throw ValidationException::withMessages([ + 'slide' => 'Il ne peut y avoir que 3 slides en même temps.' + ]); + } self::manageFields($model); }); static::updating(function (self $model) { @@ -76,6 +91,16 @@ class Slide extends Model static::updated(function (self $model) { FileStorageHelper::removeOldFile($model, 'picture'); }); + static::deleting(function (self $model) { + if ( + $model->type === SliderTypeEnum::team && + self::query()->where('type', SliderTypeEnum::team)->count() - 1 < $model::getMinPublished() + ) { + throw ValidationException::withMessages([ + 'slide' => 'Il doit y avoir au mininmum 1 slide d\'active.' + ]); + } + }); static::deleted(function (self $model) { FileStorageHelper::removeFile($model, 'picture'); }); @@ -93,4 +118,26 @@ class Slide extends Model { $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); } + + /** + * Getter for the $min property. + * + * @return integer + */ + public static function getMinPublished(): int + { + $self = new self(); + return $self->min; + } + + /** + * Getter for the $max property. + * + * @return integer + */ + public static function getMaxPublished(): int + { + $self = new self(); + return $self->max; + } } diff --git a/composer.json b/composer.json index 5116c9d..cf6bd09 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,6 @@ "require-dev": { "fakerphp/faker": "^1.9.1", "kitloong/laravel-migrations-generator": "^6.8", - "krlove/eloquent-model-generator": "dev-l10-compatibility", "larastan/larastan": "^2.9", "laravel-lang/common": "^4.0", "laravel/pint": "^1.0", diff --git a/composer.lock b/composer.lock index be0148a..3159675 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c06d9627a9b3a3aedb38f936fcf50b9a", + "content-hash": "7e2effeafd1cbae360198092b1705a40", "packages": [ { "name": "axlon/laravel-postal-code-validation", @@ -8877,90 +8877,6 @@ ], "time": "2024-02-06T14:42:33+00:00" }, - { - "name": "krlove/code-generator", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/krlove/code-generator.git", - "reference": "1ac521f5ef79a376282e3315ba6a13a83c63fb9a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/krlove/code-generator/zipball/1ac521f5ef79a376282e3315ba6a13a83c63fb9a", - "reference": "1ac521f5ef79a376282e3315ba6a13a83c63fb9a", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Krlove\\CodeGenerator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Code Generator", - "support": { - "issues": "https://github.com/krlove/code-generator/issues", - "source": "https://github.com/krlove/code-generator/tree/1.0.1" - }, - "time": "2022-02-20T12:24:22+00:00" - }, - { - "name": "krlove/eloquent-model-generator", - "version": "dev-l10-compatibility", - "source": { - "type": "git", - "url": "https://github.com/laravel-shift/eloquent-model-generator.git", - "reference": "d8f0280de04d85cf2991e5a5dd317f5dea239d95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel-shift/eloquent-model-generator/zipball/d8f0280de04d85cf2991e5a5dd317f5dea239d95", - "reference": "d8f0280de04d85cf2991e5a5dd317f5dea239d95", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^3.5", - "illuminate/config": "^10.0", - "illuminate/console": "^10.0", - "illuminate/database": "^10.0", - "illuminate/support": "^10.0", - "krlove/code-generator": "^1.0", - "php": "^8.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.5.10" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Krlove\\EloquentModelGenerator\\Provider\\GeneratorServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Krlove\\EloquentModelGenerator\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Krlove\\Tests\\Integration\\": "tests/integration" - } - }, - "license": [ - "MIT" - ], - "description": "Eloquent Model Generator", - "support": { - "source": "https://github.com/laravel-shift/eloquent-model-generator/tree/l10-compatibility" - }, - "time": "2023-01-30T20:15:06+00:00" - }, { "name": "larastan/larastan", "version": "v2.9.2", @@ -12431,9 +12347,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "krlove/eloquent-model-generator": 20 - }, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/database/migrations/2024_08_02_155528_update_slides_table.php b/database/migrations/2024_08_02_155528_update_slides_table.php index c66cfcd..cd7c757 100644 --- a/database/migrations/2024_08_02_155528_update_slides_table.php +++ b/database/migrations/2024_08_02_155528_update_slides_table.php @@ -1,5 +1,7 @@ string('content', 300)->nullable()->comment('Slide content.')->change(); + $table->string('content', 500)->nullable()->comment('Slide content.')->change(); $table->string('picture')->nullable()->comment('Slide picture path.')->change(); $table->string('picture_alt')->nullable()->comment('Slide picture alt attribute.')->change(); $table->string('picture_title')->nullable()->comment('Slide picture title attribute.')->change(); + $table->boolean('button_status')->default(0)->comment('Slide button status.')->change(); + $table->boolean('button_new_tab')->default(0)->comment('Open the slide button url in a new tab.')->change(); }); + + if (Slide::query()->where('type', SliderTypeEnum::team)->count() === 0) { + // phpcs:disable Generic.Files.LineLength.TooLong + $datas = [ + [ + 'title' => 'Culture d’entreprise inclusive et collaborative :', + 'content' => 'Notre entreprise valorise la diversité des perspectives et favorise un environnement où chacun se sent écouté et respecté. Nous croyons en la force de la collaboration et encourageons l’innovation à tous les niveaux.', + ], + [ + 'title' => 'Opportunités de développement professionnel :', + 'content' => 'En nous rejoignant, vous aurez accès à des programmes de formation et de développement pour renforcer vos compétences et progresser dans votre carrière. Nous encourageons la croissance personnelle et professionnelle de nos employés.', + ], + [ + 'title' => 'Implication dans des projets innovants :', + 'content' => 'Nous travaillons sur des projets stimulants et innovants qui offre l’opportunité de faire une réelle différence pour les consommateurs. Rejoindre notre équipe vous permettra de contribuer à des initiatives passionnantes et impactantes.

Et en plus, on est sympas.', + ] + ]; + //phpcs:enable + + foreach ($datas as $data) { + $slide = new Slide(); + $slide->type = SliderTypeEnum::team; + $slide->title = $data['title']; + $slide->content = $data['content']; + $slide->button_status = 0; + $slide->saveOrFail(); + } + } //end if } /** * Reverse the migrations. + * + * @return void */ public function down(): void { + Slide::query()->where('type', SliderTypeEnum::team)->delete(); + Schema::table('slides', function (Blueprint $table) { $table->string('content', 255)->nullable()->comment('Slide content.')->change(); $table->string('picture')->comment('Slide picture path.')->change(); diff --git a/database/seeders/Mandatory/TeamSlideSeeder.php b/database/seeders/Mandatory/TeamSlideSeeder.php new file mode 100644 index 0000000..58062d5 --- /dev/null +++ b/database/seeders/Mandatory/TeamSlideSeeder.php @@ -0,0 +1,61 @@ +updateOrCreate( + [ + 'type' => SliderTypeEnum::team, + 'title' => 'Culture d’entreprise inclusive et collaborative :', + ], + [ + 'title' => 'Culture d’entreprise inclusive et collaborative :', + 'content' => 'Notre entreprise valorise la diversité des perspectives et favorise un environnement où + chacun se sent écouté et respecté. Nous croyons en la force de la collaboration et encourageons + l’innovation à tous les niveaux.', + ] + ); + Slide::query()->updateOrCreate( + [ + 'type' => SliderTypeEnum::team, + 'title' => 'Opportunités de développement professionnel :', + ], + [ + 'title' => 'Culture d’entreprise inclusive et collaborative :', + 'content' => 'En nous rejoignant, vous aurez accès à des programmes de formation et de développement + pour renforcer vos compétences et progresser dans votre carrière. Nous encourageons la croissance + personnelle et professionnelle de nos employés.', + ] + ); + Slide::query()->updateOrCreate( + [ + 'type' => SliderTypeEnum::team, + 'title' => 'Implication dans des projets innovants :', + ], + [ + 'title' => 'Culture d’entreprise inclusive et collaborative :', + 'content' => 'Nous travaillons sur des projets stimulants et innovants qui offre l’opportunité de faire + une réelle différence pour les consommateurs. Rejoindre notre équipe vous permettra de contribuer à des + initiatives passionnantes et impactantes. +
+
+ Et en plus, on est sympas.', + ] + ); + } +} diff --git a/resources/ts/bo/components/CkEditorComponent.vue b/resources/ts/bo/components/CkEditorComponent.vue index d4b0673..521ce02 100644 --- a/resources/ts/bo/components/CkEditorComponent.vue +++ b/resources/ts/bo/components/CkEditorComponent.vue @@ -1,342 +1,390 @@ - - diff --git a/resources/ts/index.d.ts b/resources/ts/index.d.ts index 97068c4..add6f30 100644 --- a/resources/ts/index.d.ts +++ b/resources/ts/index.d.ts @@ -70,6 +70,7 @@ declare global { type LaravelPaginator = Paginator; type LaravelPaginatorLink = PaginatorLink; type ValueOf = T[keyof T]; + type LaravelValidationErrors = Record; type Enum = EnumInterface; diff --git a/resources/views/bo/pages/slides/form.blade.php b/resources/views/bo/pages/slides/form.blade.php index 418396e..da820a7 100644 --- a/resources/views/bo/pages/slides/form.blade.php +++ b/resources/views/bo/pages/slides/form.blade.php @@ -29,7 +29,7 @@ 'label' => __(':field :inter:model', [ 'field' => Str::ucfirst(__('validation.attributes.title')), 'inter' => __('validation.custom.of_the.female'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), 'hasWordCounter' => true, 'name' => 'title', @@ -39,7 +39,7 @@ 'attribute' => __(':field :inter:model', [ 'field' => __('validation.attributes.title'), 'inter' => __('validation.custom.of_the.female'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), 'min' => 3, 'max' => 100, @@ -51,30 +51,30 @@
{{-- CONTENT --}} -
+
{{ Str::ucfirst(__('validation.attributes.content')) }}
- @include('bo.partials.inputs.varchar-multiline', [ + @include('bo.partials.inputs.text-html', [ 'id' => 'slideContent', 'label' => __(':field :inter:model', [ 'field' => Str::ucfirst(__('validation.attributes.content')), 'inter' => __('validation.custom.of_the.female'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), - 'hasWordCounter' => true, 'name' => 'content', - 'required' => false, 'model' => $slideModel ?? null, + 'required' => false, + 'editorConfig' => \App\Enums\CkEditorConfigName::minimal->label(), 'helper' => __('validation.between.string', [ 'attribute' => __(':field :inter:model', [ 'field' => __('validation.attributes.content'), 'inter' => __('validation.custom.of_the.female'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), 'min' => 3, - 'max' => 255, + 'max' => 275, ]), 'placeholder' => __('Contenu textuel de la slide'), ]) @@ -93,7 +93,7 @@ 'label' => __(':field :inter:model', [ 'field' => Str::ucfirst(__('validation.custom.video_id')), 'inter' => __('validation.custom.of_the.female'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), 'hasWordCounter' => true, 'name' => 'video_id', @@ -104,7 +104,7 @@ 'attribute' => __(':field :inter:model', [ 'field' => __('validation.custom.video_id'), 'inter' => __('validation.custom.of_the.female'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), 'min' => 3, 'max' => 11, @@ -129,7 +129,7 @@ 'inter1' => __('validation.custom.of_the.male'), 'field2' => __('validation.attributes.image'), 'inter2' => __('validation.custom.of_the.male'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), 'hasWordCounter' => true, 'name' => 'picture_alt', @@ -141,7 +141,7 @@ 'inter1' => __('validation.custom.of_the.male'), 'field2' => __('validation.attributes.image'), 'inter2' => __('validation.custom.of_the.male'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), ])
@@ -154,7 +154,7 @@ 'inter1' => __('validation.custom.of_the.male'), 'field2' => __('validation.attributes.image'), 'inter2' => __('validation.custom.of_the.male'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), 'hasWordCounter' => true, 'name' => 'picture_title', @@ -166,7 +166,7 @@ 'inter1' => __('validation.custom.of_the.male'), 'field2' => __('validation.attributes.image'), 'inter2' => __('validation.custom.of_the.male'), - 'model' => trans_choice('models.classes.site', 1), + 'model' => trans_choice('models.classes.slide', 1), ]), ])
diff --git a/resources/views/bo/partials/inputs/text-html.blade.php b/resources/views/bo/partials/inputs/text-html.blade.php index 36361f2..ca86978 100644 --- a/resources/views/bo/partials/inputs/text-html.blade.php +++ b/resources/views/bo/partials/inputs/text-html.blade.php @@ -19,6 +19,9 @@ $data = [ 'name' => $name, 'text' => old($name, $model->{$name} ?? ($value ?? '')), + 'placeholder' => $placeholder ?? __('Un text riche'), + 'errors' => $errors->getBag('default')->getMessages() ?? [], + 'editorConfig' => $editorConfig ?? \App\Enums\CkEditorConfigName::basic->label(), ]; @endphp
diff --git a/resources/views/fo/pages/home.blade.php b/resources/views/fo/pages/home.blade.php index fb913c4..a58bf1f 100644 --- a/resources/views/fo/pages/home.blade.php +++ b/resources/views/fo/pages/home.blade.php @@ -144,13 +144,13 @@ @foreach ($slideTeams as $slide)

{{ $slide->title }}

-

{{ $slide->content }}

+
{!! clean($slide->content) !!}
@endforeach
+ class="swiper-pagination swiper-teams-pagination d-flex justify-content-evenly align-items-center w-100">