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"
/>