From e5d497fa76af3c00a3811a90f5cdc21d281e175c Mon Sep 17 00:00:00 2001 From: Noah Lancien Date: Tue, 12 May 2026 10:32:12 +0200 Subject: [PATCH] feat: :sparkles: Added AnglePriseVue + NatureFichier + TypeContenu --- app/Http/Controllers/MediaController.php | 19 +++++-- .../Requests/Bo/Ajax/UpdateMediaRequest.php | 6 ++ app/Lib/ArcadiaLinkUtilities.php | 6 ++ app/Models/AnglePriseVue.php | 27 +++++++++ app/Models/Media.php | 36 ++++++++++++ app/Models/NatureFichier.php | 27 +++++++++ app/Models/TypeContenu.php | 27 +++++++++ ...06_144656_create_nature_fichiers_table.php | 51 +++++++++++++++++ ...6_144713_create_angle_prise_vues_table.php | 55 +++++++++++++++++++ ...5_06_144729_create_type_contenus_table.php | 55 +++++++++++++++++++ ...5_06_153355_add_new_relations_to_media.php | 55 +++++++++++++++++++ .../media-editor/MmEditComponent.vue | 10 ++++ .../media-editor/tabs/MeEditComponent.vue | 53 +++++++++++++++++- resources/views/layouts/media_edit.blade.php | 3 + 14 files changed, 424 insertions(+), 6 deletions(-) create mode 100644 app/Models/AnglePriseVue.php create mode 100644 app/Models/NatureFichier.php create mode 100644 app/Models/TypeContenu.php create mode 100644 database/migrations/2026_05_06_144656_create_nature_fichiers_table.php create mode 100644 database/migrations/2026_05_06_144713_create_angle_prise_vues_table.php create mode 100644 database/migrations/2026_05_06_144729_create_type_contenus_table.php create mode 100644 database/migrations/2026_05_06_153355_add_new_relations_to_media.php diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php index 6ba47b4..8a9ba8f 100644 --- a/app/Http/Controllers/MediaController.php +++ b/app/Http/Controllers/MediaController.php @@ -18,6 +18,7 @@ use App\Http\Requests\Bo\LoadMediaRequest; use App\Http\Requests\Bo\ShowInterfaceRequest; use App\Lib\ArcadiaLinkUtilities; use App\Lib\ToolboxHelper; +use App\Models\AnglePriseVue; use App\Models\Article; use App\Models\Copyright; use App\Models\Dossier; @@ -27,11 +28,13 @@ use App\Models\Historique; use App\Models\Langue; use App\Models\Marque; use App\Models\Media; +use App\Models\NatureFichier; use App\Models\Recherche; use App\Models\Setting; use App\Models\Societe; use App\Models\Sujet; use App\Models\Tag; +use App\Models\TypeContenu; use App\Models\TypeMedia; use App\Traits\Http\HandlesMedia; use Illuminate\Contracts\Database\Eloquent\Builder; @@ -73,11 +76,14 @@ class MediaController extends Controller /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Societe> */ $societes = Societe::orderBy('libelle')->get(); - $typesmedia = TypeMedia::all(); - $langues = Langue::all(); - $copyrights = Copyright::all(); - $etiquettes = Etiquette::all(); - $marques = Marque::all(); + $typesmedia = TypeMedia::all(); + $langues = Langue::all(); + $copyrights = Copyright::all(); + $etiquettes = Etiquette::all(); + $marques = Marque::all(); + $naturesfichier = NatureFichier::all(); + $typescontenu = TypeContenu::all(); + $anglesprisevue = AnglePriseVue::all(); /** @var int|null */ $dossier_id = $request->d; @@ -122,6 +128,9 @@ class MediaController extends Controller return view('media_manager')->with([ 'sujets' => $sujets, 'typesmedia' => $typesmedia, + 'naturesfichier' => $naturesfichier, + 'typescontenu' => $typescontenu, + 'anglesprisevue' => $anglesprisevue, 'langues' => $langues, 'copyrights' => $copyrights, 'etiquettes' => $etiquettes, diff --git a/app/Http/Requests/Bo/Ajax/UpdateMediaRequest.php b/app/Http/Requests/Bo/Ajax/UpdateMediaRequest.php index 14de2ad..f403dc5 100644 --- a/app/Http/Requests/Bo/Ajax/UpdateMediaRequest.php +++ b/app/Http/Requests/Bo/Ajax/UpdateMediaRequest.php @@ -45,6 +45,9 @@ class UpdateMediaRequest extends FormRequest 'type_vue_id' => 'required|exists:type_vues,codeTypevue', 'variante_id' => 'required|exists:variantes,codeVariante', 'langue_id' => 'required|exists:langues,langue_id', + 'angle_prise_vue_id' => 'required|exists:angle_prise_vues,id', + 'nature_fichier_id' => 'required|exists:nature_fichiers,id', + 'type_contenu_id' => 'required|exists:type_contenus,id', ]; // ? Est lié à arcadia ? @@ -57,6 +60,9 @@ class UpdateMediaRequest extends FormRequest unset($rules['type_vue_id']); unset($rules['variante_id']); unset($rules['langue_id']); + unset($rules['angle_prise_vue_id']); + unset($rules['nature_fichier_id']); + unset($rules['type_contenu_id']); } // Article. diff --git a/app/Lib/ArcadiaLinkUtilities.php b/app/Lib/ArcadiaLinkUtilities.php index 9a96b80..df81272 100644 --- a/app/Lib/ArcadiaLinkUtilities.php +++ b/app/Lib/ArcadiaLinkUtilities.php @@ -217,6 +217,12 @@ class ArcadiaLinkUtilities ->appendChild($dom->createCDATASection("$media->copyright_id")); $root->appendChild($dom->createElement('codeVariante')) ->appendChild($dom->createCDATASection("$media->variante_id")); + $root->appendChild($dom->createElement('codeAnglePriseVue')) + ->appendChild($dom->createCDATASection($media->angleprisevue->value)); + $root->appendChild($dom->createElement('codeNatureFichier')) + ->appendChild($dom->createCDATASection($media->naturefichier->value)); + $root->appendChild($dom->createElement('codeTypeContenu')) + ->appendChild($dom->createCDATASection($media->typecontenu->value)); $root->appendChild($dom->createElement('dateCreation')) ->appendChild($dom->createCDATASection("$media->created_at")); $root->appendChild($dom->createElement('dateModification')) diff --git a/app/Models/AnglePriseVue.php b/app/Models/AnglePriseVue.php new file mode 100644 index 0000000..e7844de --- /dev/null +++ b/app/Models/AnglePriseVue.php @@ -0,0 +1,27 @@ +hasMany(Media::class); + } +} diff --git a/app/Models/Media.php b/app/Models/Media.php index b65a88c..b35a034 100644 --- a/app/Models/Media.php +++ b/app/Models/Media.php @@ -76,6 +76,9 @@ class Media extends Model 'copyright_id', 'etiquette_id', 'langue_id', + 'angle_prise_vue_id', + 'nature_fichier_id', + 'type_contenu_id', 'commentaire', 'version', 'statut', @@ -461,6 +464,39 @@ class Media extends Model return $this->belongsTo(User::class, 'created_by'); } + /** + * BelongsTo TypeContenu relation + * Get the TypeContenu that belongs to the media. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function typecontenu() + { + return $this->belongsTo(TypeContenu::class, 'type_contenu_id'); + } + + /** + * BelongsTo AnglePriseVue relation + * Get the AnglePriseVue that belongs to the media. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function angleprisevue() + { + return $this->belongsTo(AnglePriseVue::class, 'angle_prise_vue_id'); + } + + /** + * BelongsTo NatureFichier relation + * Get the NatureFichier that belongs to the media. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function naturefichier() + { + return $this->belongsTo(NatureFichier::class, 'nature_fichier_id'); + } + /** * HasMany historiques relation * Get the historiques for the media. diff --git a/app/Models/NatureFichier.php b/app/Models/NatureFichier.php new file mode 100644 index 0000000..e3fa570 --- /dev/null +++ b/app/Models/NatureFichier.php @@ -0,0 +1,27 @@ +hasMany(Media::class); + } +} diff --git a/app/Models/TypeContenu.php b/app/Models/TypeContenu.php new file mode 100644 index 0000000..387122c --- /dev/null +++ b/app/Models/TypeContenu.php @@ -0,0 +1,27 @@ +hasMany(Media::class); + } +} diff --git a/database/migrations/2026_05_06_144656_create_nature_fichiers_table.php b/database/migrations/2026_05_06_144656_create_nature_fichiers_table.php new file mode 100644 index 0000000..5b3ee25 --- /dev/null +++ b/database/migrations/2026_05_06_144656_create_nature_fichiers_table.php @@ -0,0 +1,51 @@ +id(); + $table->string('value'); + $table->string('label'); + $table->timestamps(); + }); + + NatureFichier::query()->create([ + 'value' => 'Undefined', + 'label' => 'Non défini' + ]); + NatureFichier::query()->create([ + 'value' => 'A', + 'label' => 'Photographie d\'un produit en definition standard' + ]); + NatureFichier::query()->create([ + 'value' => 'C', + 'label' => 'Photographie d\'un produit en Haute Definition' + ]); + NatureFichier::query()->create([ + 'value' => 'H', + 'label' => 'Mobile Ready Hero Image = autre (dessin, illustration, logotype, pictogramme)' + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('nature_fichiers'); + } +}; diff --git a/database/migrations/2026_05_06_144713_create_angle_prise_vues_table.php b/database/migrations/2026_05_06_144713_create_angle_prise_vues_table.php new file mode 100644 index 0000000..a5eced9 --- /dev/null +++ b/database/migrations/2026_05_06_144713_create_angle_prise_vues_table.php @@ -0,0 +1,55 @@ +id(); + $table->string('value'); + $table->string('label'); + $table->timestamps(); + }); + + AnglePriseVue::query()->create([ + 'value' => 'Undefined', + 'label' => 'Non défini' + ]); + AnglePriseVue::query()->create([ + 'value' => 'C', + 'label' => 'Centre, angle de plongee 15 degres' + ]); + AnglePriseVue::query()->create([ + 'value' => 'L', + 'label' => '3/4 gauche' + ]); + AnglePriseVue::query()->create([ + 'value' => 'N', + 'label' => 'Centre, sans angle de plongee' + ]); + AnglePriseVue::query()->create([ + 'value' => 'R', + 'label' => '3/4 droit' + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('angle_prise_vues'); + } +}; diff --git a/database/migrations/2026_05_06_144729_create_type_contenus_table.php b/database/migrations/2026_05_06_144729_create_type_contenus_table.php new file mode 100644 index 0000000..5d544e1 --- /dev/null +++ b/database/migrations/2026_05_06_144729_create_type_contenus_table.php @@ -0,0 +1,55 @@ +id(); + $table->string('value'); + $table->string('label'); + $table->timestamps(); + }); + + TypeContenu::query()->create([ + 'value' => 'Undefined', + 'label' => 'Non défini' + ]); + TypeContenu::query()->create([ + 'value' => 'D', + 'label' => 'Produit prepare (monte, pour les produits a assembler)' + ]); + TypeContenu::query()->create([ + 'value' => 'G', + 'label' => 'Mise en situation (produits emballes ou deballes, suggestion de presentation)' + ]); + TypeContenu::query()->create([ + 'value' => '0', + 'label' => 'Produit nu/deballe' + ]); + TypeContenu::query()->create([ + 'value' => '1', + 'label' => 'produit emballe/packshot' + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('type_contenus'); + } +}; diff --git a/database/migrations/2026_05_06_153355_add_new_relations_to_media.php b/database/migrations/2026_05_06_153355_add_new_relations_to_media.php new file mode 100644 index 0000000..b13d2c5 --- /dev/null +++ b/database/migrations/2026_05_06_153355_add_new_relations_to_media.php @@ -0,0 +1,55 @@ +unsignedBigInteger('angle_prise_vue_id') + ->after('variante_id') + ->default(1); + $table->foreign('angle_prise_vue_id') + ->references('id') + ->on('angle_prise_vues'); + + $table->unsignedBigInteger('nature_fichier_id') + ->after('angle_prise_vue_id') + ->default(1); + $table->foreign('nature_fichier_id') + ->references('id') + ->on('nature_fichiers'); + + $table->unsignedBigInteger('type_contenu_id') + ->after('nature_fichier_id') + ->default(1); + $table->foreign('type_contenu_id') + ->references('id') + ->on('type_contenus'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('media', function (Blueprint $table) { + $table->dropColumn([ + 'angle_prise_vue_id', + 'nature_fichier_id', + 'type_contenu_id', + ]); + }); + } +}; diff --git a/resources/js/components/media-manager/media-editor/MmEditComponent.vue b/resources/js/components/media-manager/media-editor/MmEditComponent.vue index e506a9c..bd2907e 100644 --- a/resources/js/components/media-manager/media-editor/MmEditComponent.vue +++ b/resources/js/components/media-manager/media-editor/MmEditComponent.vue @@ -89,6 +89,9 @@ :marques="marques" :etiquettes="etiquettes" :copyrights="copyrights" + :naturesfichier="naturesfichier" + :typescontenu="typescontenu" + :anglesprisevue="anglesprisevue" @closeEdit="close" /> @@ -125,6 +128,10 @@ export default { this.marques = data.marques; this.etiquettes = data.etiquettes; this.copyrights = data.copyrights; + this.naturesfichier = data.naturesfichier; + this.typescontenu = data.typescontenu; + this.anglesprisevue = data.anglesprisevue; + console.log("MmEditComponent - naturesfichier : ", data.naturesfichier); if (this.open !== undefined) { this.$store.commit({ type: "updateMedia", @@ -163,6 +170,9 @@ export default { marques: [], etiquettes: [], copyrights: [], + naturesfichier: [], + typescontenu: [], + anglesprisevue: [], }; }, watch: { diff --git a/resources/js/components/media-manager/media-editor/tabs/MeEditComponent.vue b/resources/js/components/media-manager/media-editor/tabs/MeEditComponent.vue index 81aff6e..04d6437 100644 --- a/resources/js/components/media-manager/media-editor/tabs/MeEditComponent.vue +++ b/resources/js/components/media-manager/media-editor/tabs/MeEditComponent.vue @@ -98,6 +98,57 @@ +
+ + +
+
+ + +
+
+ + +