Fix Media duplicate
- put in transaction - set arcadia_id to null
This commit is contained in:
parent
14aeec5e2a
commit
0194d8e0c1
1 changed files with 73 additions and 70 deletions
|
|
@ -438,93 +438,96 @@ class MediaController extends Controller
|
|||
*/
|
||||
public function duplicateMedia(Media $media): JsonResponse
|
||||
{
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
return DB::transaction(function () use ($media) {
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
|
||||
$user->authorizeRoles([
|
||||
config('roles.const.ADMIN'),
|
||||
config('roles.const.REDACTEUR'),
|
||||
config('roles.const.CONTRIBUTEUR')
|
||||
]);
|
||||
|
||||
if ($media->isLocked) {
|
||||
return \response()->json([
|
||||
'status' => false,
|
||||
'error' => trans('Le média est en attente d\'un retour d\'Arcadia.')
|
||||
$user->authorizeRoles([
|
||||
config('roles.const.ADMIN'),
|
||||
config('roles.const.REDACTEUR'),
|
||||
config('roles.const.CONTRIBUTEUR')
|
||||
]);
|
||||
}
|
||||
|
||||
$clonedMedia = $media->replicate();
|
||||
if ($media->isLocked) {
|
||||
return \response()->json([
|
||||
'status' => false,
|
||||
'error' => trans('Le média est en attente d\'un retour d\'Arcadia.')
|
||||
]);
|
||||
}
|
||||
|
||||
/** @var \Illuminate\Filesystem\FilesystemAdapter */
|
||||
$storage = Storage::disk('media');
|
||||
$clonedMedia = $media->replicate();
|
||||
|
||||
$clonedMedia->uid = Str::uuid();
|
||||
$clonedMedia->extension = MediaExtension::jpg;
|
||||
// * Remove Arcadia ID (cloned is not linked to arcadia)
|
||||
$clonedMedia->arcadia_id = null;
|
||||
|
||||
if (!Storage::exists('assets/images/default.jpg')) {
|
||||
throw new \RuntimeException('Missing default picture');
|
||||
}
|
||||
/** @var \Illuminate\Filesystem\FilesystemAdapter */
|
||||
$storage = Storage::disk('media');
|
||||
|
||||
$fileContent = Storage::get('assets/images/default.jpg');
|
||||
$clonedMedia->uid = Str::uuid();
|
||||
$clonedMedia->extension = MediaExtension::jpg;
|
||||
|
||||
if (!$storage->put($clonedMedia->relative_path, $fileContent)) {
|
||||
throw new \RuntimeException('Failed to copy default picture');
|
||||
}
|
||||
if (!Storage::exists('assets/images/default.jpg')) {
|
||||
throw new \RuntimeException('Missing default picture');
|
||||
}
|
||||
|
||||
$clonedMedia->libelle = Str::limit("{$clonedMedia->libelle}_copy", 45);
|
||||
$clonedMedia->taille = \strlen($fileContent);
|
||||
$fileContent = Storage::get('assets/images/default.jpg');
|
||||
|
||||
$dimensions = ToolboxHelper::getImageDimensions(Storage::path('assets/images/default.jpg'));
|
||||
if (!$storage->put($clonedMedia->relative_path, $fileContent)) {
|
||||
throw new \RuntimeException('Failed to copy default picture');
|
||||
}
|
||||
|
||||
if ($dimensions) {
|
||||
$clonedMedia->resolution = $dimensions['resolutionX'];
|
||||
$clonedMedia->largeur = $dimensions['width'];
|
||||
$clonedMedia->hauteur = $dimensions['height'];
|
||||
$clonedMedia->largeur_mm = !empty($media->resolution) ? ceil($media->largeur * 10) : 0;
|
||||
$clonedMedia->hauteur_mm = !empty($media->resolution) ? ceil($media->hauteur * 10) : 0;
|
||||
}
|
||||
$clonedMedia->libelle = Str::limit("{$clonedMedia->libelle}_copy", 45);
|
||||
$clonedMedia->taille = \strlen($fileContent);
|
||||
|
||||
$clonedMedia->isDefault = true;
|
||||
$clonedMedia->owner()->associate($user);
|
||||
$dimensions = ToolboxHelper::getImageDimensions(Storage::path('assets/images/default.jpg'));
|
||||
|
||||
$clonedMedia->typeMedia()->associate(TypeMedia::getMediaType($clonedMedia->extension));
|
||||
if ($dimensions) {
|
||||
$clonedMedia->resolution = $dimensions['resolutionX'];
|
||||
$clonedMedia->largeur = $dimensions['width'];
|
||||
$clonedMedia->hauteur = $dimensions['height'];
|
||||
$clonedMedia->largeur_mm = !empty($media->resolution) ? ceil($media->largeur * 10) : 0;
|
||||
$clonedMedia->hauteur_mm = !empty($media->resolution) ? ceil($media->hauteur * 10) : 0;
|
||||
}
|
||||
|
||||
// ---- Creation des vignettes de base
|
||||
$clonedMedia->createThumbnail();
|
||||
// ---- Creation des vignettes en lien avec le sujet du média
|
||||
$clonedMedia->createSubjectThumbnails();
|
||||
$clonedMedia->isDefault = true;
|
||||
$clonedMedia->owner()->associate($user);
|
||||
|
||||
$clonedMedia->isDuplicate = true;
|
||||
$clonedMedia->typeMedia()->associate(TypeMedia::getMediaType($clonedMedia->extension));
|
||||
|
||||
$clonedMedia->saveOrFail();
|
||||
// ---- Creation des vignettes de base
|
||||
$clonedMedia->createThumbnail();
|
||||
// ---- Creation des vignettes en lien avec le sujet du média
|
||||
$clonedMedia->createSubjectThumbnails();
|
||||
|
||||
// Manage relations after the model has been saved.
|
||||
$media->articles->map(function (Article $article) use ($clonedMedia) {
|
||||
$clonedMedia->articles()->attach($article);
|
||||
$clonedMedia->save();
|
||||
|
||||
// * Add relations after having a media id
|
||||
$media->articles->map(function (Article $article) use ($clonedMedia) {
|
||||
$clonedMedia->articles()->attach($article);
|
||||
});
|
||||
$media->marques->map(function (Marque $marque) use ($clonedMedia) {
|
||||
$clonedMedia->marques()->attach($marque);
|
||||
});
|
||||
$media->societes->map(function (Societe $societe) use ($clonedMedia) {
|
||||
$clonedMedia->societes()->attach($societe);
|
||||
});
|
||||
$media->tags->map(function (Tag $tag) use ($clonedMedia) {
|
||||
$clonedMedia->tags()->attach($tag);
|
||||
});
|
||||
|
||||
|
||||
/** @throws \RuntimeException */
|
||||
$clonedMedia->addToElasticSearch();
|
||||
|
||||
// * Get props inserted by DB.
|
||||
$clonedMedia->refresh();
|
||||
|
||||
return \response()->json([
|
||||
'status' => true,
|
||||
'sujet_id' => $clonedMedia->sujet_id,
|
||||
'datas' => $clonedMedia
|
||||
]);
|
||||
});
|
||||
$media->marques->map(function (Marque $marque) use ($clonedMedia) {
|
||||
$clonedMedia->marques()->attach($marque);
|
||||
});
|
||||
$media->societes->map(function (Societe $societe) use ($clonedMedia) {
|
||||
$clonedMedia->societes()->attach($societe);
|
||||
});
|
||||
$media->tags->map(function (Tag $tag) use ($clonedMedia) {
|
||||
$clonedMedia->tags()->attach($tag);
|
||||
});
|
||||
|
||||
|
||||
/** @throws \RuntimeException */
|
||||
$clonedMedia->addToElasticSearch();
|
||||
|
||||
// * Get props inserted by DB.
|
||||
$clonedMedia->refresh();
|
||||
|
||||
return \response()->json([
|
||||
'status' => true,
|
||||
'sujet_id' => $clonedMedia->sujet_id,
|
||||
'datas' => $clonedMedia
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -762,7 +765,7 @@ class MediaController extends Controller
|
|||
}
|
||||
|
||||
$history = Historique::query()
|
||||
->whereHas('media', fn (Builder $q) => $q->where('id', $media->id))
|
||||
->whereHas('media', fn(Builder $q) => $q->where('id', $media->id))
|
||||
->with('user')
|
||||
->orderBy('created_date', 'DESC')
|
||||
->get();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue