diff --git a/app/Database/Seeds/AuthSeeder.php b/app/Database/Seeds/AuthSeeder.php index eb9af6a760a57f971135b813551fa569e6737a3b..a887cf210f907c1abd5e8a1792c6e530bb837ce9 100644 --- a/app/Database/Seeds/AuthSeeder.php +++ b/app/Database/Seeds/AuthSeeder.php @@ -296,18 +296,24 @@ class AuthSeeder extends Seeder } } - $this->db - ->table('auth_permissions') - ->ignore(true) - ->insertBatch($dataPermissions); - $this->db - ->table('auth_groups') - ->ignore(true) - ->insertBatch($dataGroups); - $this->db - ->table('auth_groups_permissions') - ->ignore(true) - ->insertBatch($dataGroupsPermissions); + if ($this->db->table('auth_groups')->countAll() < count($dataPermissions)) { + $this->db + ->table('auth_permissions') + ->ignore(true) + ->insertBatch($dataPermissions); + } + if ($this->db->table('auth_groups')->countAll() < count($dataGroups)) { + $this->db + ->table('auth_groups') + ->ignore(true) + ->insertBatch($dataGroups); + } + if ($this->db->table('auth_groups_permissions')->countAll() < count($dataGroupsPermissions)) { + $this->db + ->table('auth_groups_permissions') + ->ignore(true) + ->insertBatch($dataGroupsPermissions); + } } /** diff --git a/app/Database/Seeds/CategorySeeder.php b/app/Database/Seeds/CategorySeeder.php index f5117542104eb4b6d75263a25ad4669fa04f64e1..bc365b521657cd3cb3d8e75d8c7ed08d043269ff 100644 --- a/app/Database/Seeds/CategorySeeder.php +++ b/app/Database/Seeds/CategorySeeder.php @@ -791,9 +791,11 @@ class CategorySeeder extends Seeder ], ]; - $this->db - ->table('categories') - ->ignore(true) - ->insertBatch($data); + foreach ($data as $categoryLine) { + $this->db + ->table('categories') + ->ignore(true) + ->insert($categoryLine); + } } } diff --git a/app/Database/Seeds/LanguageSeeder.php b/app/Database/Seeds/LanguageSeeder.php index d054661a6849a96ab1f4a37711a8bb256b34cb44..aae362227cc57943bd74322f4f84d9b814766cab 100644 --- a/app/Database/Seeds/LanguageSeeder.php +++ b/app/Database/Seeds/LanguageSeeder.php @@ -763,9 +763,11 @@ class LanguageSeeder extends Seeder ], ]; - $this->db - ->table('languages') - ->ignore(true) - ->insertBatch($data); + foreach ($data as $languageLine) { + $this->db + ->table('languages') + ->ignore(true) + ->insert($languageLine); + } } } diff --git a/app/Entities/Clip/VideoClip.php b/app/Entities/Clip/VideoClip.php index 0cbf9b9d27df4e371b28bb61db75b989e55f2de1..c8cc3b6bbfe6da7b7381d9fa444a6d64bf5863fd 100644 --- a/app/Entities/Clip/VideoClip.php +++ b/app/Entities/Clip/VideoClip.php @@ -69,6 +69,11 @@ class VideoClip extends BaseClip return $this; } + if ($this->attributes['media_id'] !== null) { + // media is already set, do nothing + return $this; + } + helper('media'); $file = new File(media_path($filePath)); diff --git a/app/Models/ClipModel.php b/app/Models/ClipModel.php index 446e8ded498f7194bee6ea1cf2c9c04a476294b6..253568e24f42d4647883a9b7a9fb245321ff74dc 100644 --- a/app/Models/ClipModel.php +++ b/app/Models/ClipModel.php @@ -144,6 +144,27 @@ class ClipModel extends Model return (int) $result[0]['running_count']; } + public function doesVideoClipExist(VideoClip $videoClip): int | false + { + $result = $this->select('id') + ->where([ + 'podcast_id' => $videoClip->podcast_id, + 'episode_id' => $videoClip->episode_id, + 'start_time' => $videoClip->start_time, + 'duration' => $videoClip->duration, + ]) + ->where('JSON_EXTRACT(`metadata`, "$.format")', $videoClip->format) + ->where('JSON_EXTRACT(`metadata`, "$.theme.name")', $videoClip->theme['name']) + ->get() + ->getResultArray(); + + if ($result === []) { + return false; + } + + return (int) $result[0]['id']; + } + public function deleteVideoClip(int $podcastId, int $episodeId, int $clipId): BaseResult | bool { $this->clearVideoClipCache($clipId); diff --git a/modules/Admin/Controllers/VideoClipsController.php b/modules/Admin/Controllers/VideoClipsController.php index 2a7b81a26854dfa72f0d2130ae64bf87affdcbbc..c971d09b5e13892a06d1b6e3096e8b21e4e9929a 100644 --- a/modules/Admin/Controllers/VideoClipsController.php +++ b/modules/Admin/Controllers/VideoClipsController.php @@ -176,11 +176,20 @@ class VideoClipsController extends BaseController 'updated_by' => user_id(), ]); + // Check if video clip exists before inserting a new line + if ((new ClipModel())->doesVideoClipExist($videoClip)) { + // video clip already exists + return redirect() + ->back() + ->withInput() + ->with('error', lang('VideoClip.messages.alreadyExistingError')); + } + (new ClipModel())->insert($videoClip); return redirect()->route('video-clips-list', [$this->podcast->id, $this->episode->id])->with( 'message', - lang('Settings.images.regenerationSuccess') + lang('VideoClip.messages.addToQueueSuccess') ); } diff --git a/modules/Admin/Language/en/VideoClip.php b/modules/Admin/Language/en/VideoClip.php index 84dfe89cd1cd7f55fa77ba92b5f2650cfa9571d9..c8335c629688f791a71b0f2fee377ef71b5bba73 100644 --- a/modules/Admin/Language/en/VideoClip.php +++ b/modules/Admin/Language/en/VideoClip.php @@ -35,7 +35,8 @@ return [ 'delete' => 'Delete clip', 'logs' => 'Job logs', 'messages' => [ - 'createSuccess' => 'Video clip has been successfully created!', + 'alreadyExistingError' => 'The video clip you are trying to create already exists!', + 'addToQueueSuccess' => 'Video clip has been added to queue, awaiting to be created!', 'deleteSuccess' => 'Video clip has been successfully removed!', ], 'format' => [ diff --git a/modules/Admin/Language/fr/VideoClip.php b/modules/Admin/Language/fr/VideoClip.php index c81eee5eebf315f2447d687e3dc02cdd5bb74928..6154a2246744832671c06c9c6d9bd385a228b601 100644 --- a/modules/Admin/Language/fr/VideoClip.php +++ b/modules/Admin/Language/fr/VideoClip.php @@ -35,7 +35,8 @@ return [ 'delete' => 'Supprimer l’extrait', 'logs' => 'Historique d’exécution', 'messages' => [ - 'createSuccess' => 'L’extrait vidéo a été créé avec succès !', + 'alreadyExistingError' => 'L’extrait vidéo que vous essayez de créer existe déjà !', + 'addToQueueSuccess' => 'L’extrait vidéo a été ajouté à la file d’attente, en attente de création !', 'deleteSuccess' => 'L’extrait vidéo a bien été supprimé !', ], 'format' => [