feat(media): save audio, images, transcripts and chapters to media for episode and persons

This commit is contained in:
Yassine Doghri 2021-12-20 17:12:12 +00:00
commit 58e2a00a87
22 changed files with 144 additions and 129 deletions

View file

@ -15,9 +15,10 @@ use App\Entities\EpisodeComment;
use App\Entities\Location;
use App\Entities\Podcast;
use App\Entities\Post;
use App\Models\ClipsModel;
use App\Models\ClipModel;
use App\Models\EpisodeCommentModel;
use App\Models\EpisodeModel;
use App\Models\MediaModel;
use App\Models\PodcastModel;
use App\Models\PostModel;
use CodeIgniter\Exceptions\PageNotFoundException;
@ -125,6 +126,9 @@ class EpisodeController extends BaseController
->with('errors', $this->validator->getErrors());
}
$db = db_connect();
$db->transStart();
$newEpisode = new Episode([
'podcast_id' => $this->podcast->id,
'title' => $this->request->getPost('title'),
@ -143,10 +147,10 @@ class EpisodeController extends BaseController
? $this->request->getPost('parental_advisory')
: null,
'number' => $this->request->getPost('episode_number')
? $this->request->getPost('episode_number')
? (int) $this->request->getPost('episode_number')
: null,
'season_number' => $this->request->getPost('season_number')
? $this->request->getPost('season_number')
? (int) $this->request->getPost('season_number')
: null,
'type' => $this->request->getPost('type'),
'is_blocked' => $this->request->getPost('block') === 'yes',
@ -156,9 +160,6 @@ class EpisodeController extends BaseController
'published_at' => null,
]);
$db = db_connect();
$db->transStart();
$transcriptChoice = $this->request->getPost('transcript-choice');
if ($transcriptChoice === 'upload-file') {
$newEpisode->setTranscript($this->request->getFile('transcript_file'));
@ -178,8 +179,8 @@ class EpisodeController extends BaseController
}
$episodeModel = new EpisodeModel();
if (! ($newEpisodeId = $episodeModel->insert($newEpisode, true))) {
$db->transRollback();
return redirect()
->back()
->withInput()
@ -195,6 +196,7 @@ class EpisodeController extends BaseController
$podcastModel = new PodcastModel();
if (! $podcastModel->update($this->podcast->id, $this->podcast)) {
$db->transRollback();
return redirect()
->back()
->withInput()
@ -202,6 +204,8 @@ class EpisodeController extends BaseController
}
}
$db->transComplete();
return redirect()->route('episode-view', [$this->podcast->id, $newEpisodeId]);
}
@ -268,36 +272,34 @@ class EpisodeController extends BaseController
if ($transcriptChoice === 'upload-file') {
$transcriptFile = $this->request->getFile('transcript_file');
if ($transcriptFile !== null && $transcriptFile->isValid()) {
$this->episode->transcript_file = $transcriptFile;
$this->episode->setTranscript($transcriptFile);
$this->episode->transcript_remote_url = null;
}
} elseif ($transcriptChoice === 'remote-url') {
if (
($transcriptFileRemoteUrl = $this->request->getPost('transcript_remote_url')) &&
(($transcriptFile = $this->episode->transcript_file) !== null)
($transcriptRemoteUrl = $this->request->getPost('transcript_remote_url')) &&
(($transcriptFile = $this->episode->transcript_id) !== null)
) {
unlink((string) $transcriptFile);
$this->episode->transcript->file_path = null;
(new MediaModel())->deleteMedia($this->episode->transcript);
}
$this->episode->transcript_remote_url = $transcriptFileRemoteUrl === '' ? null : $transcriptFileRemoteUrl;
$this->episode->transcript_remote_url = $transcriptRemoteUrl === '' ? null : $transcriptRemoteUrl;
}
$chaptersChoice = $this->request->getPost('chapters-choice');
if ($chaptersChoice === 'upload-file') {
$chaptersFile = $this->request->getFile('chapters_file');
if ($chaptersFile !== null && $chaptersFile->isValid()) {
$this->episode->chapters = $chaptersFile;
$this->episode->setChapters($chaptersFile);
$this->episode->chapters_remote_url = null;
}
} elseif ($chaptersChoice === 'remote-url') {
if (
($chaptersFileRemoteUrl = $this->request->getPost('chapters_remote_url')) &&
(($chaptersFile = $this->episode->chapters_file) !== null)
($chaptersRemoteUrl = $this->request->getPost('chapters_remote_url')) &&
(($chaptersFile = $this->episode->chapters) !== null)
) {
unlink((string) $chaptersFile);
$this->episode->chapters->file_path = null;
(new MediaModel())->deleteMedia($this->episode->chapters);
}
$this->episode->chapters_remote_url = $chaptersFileRemoteUrl === '' ? null : $chaptersFileRemoteUrl;
$this->episode->chapters_remote_url = $chaptersRemoteUrl === '' ? null : $chaptersRemoteUrl;
}
$db = db_connect();
@ -338,16 +340,12 @@ class EpisodeController extends BaseController
public function transcriptDelete(): RedirectResponse
{
unlink((string) $this->episode->transcript_file);
$this->episode->transcript->file_path = null;
$episodeModel = new EpisodeModel();
if (! $episodeModel->update($this->episode->id, $this->episode)) {
$mediaModel = new MediaModel();
if (! $mediaModel->deleteMedia($this->episode->transcript)) {
return redirect()
->back()
->withInput()
->with('errors', $episodeModel->errors());
->with('errors', $mediaModel->errors());
}
return redirect()->back();
@ -355,16 +353,12 @@ class EpisodeController extends BaseController
public function chaptersDelete(): RedirectResponse
{
unlink((string) $this->episode->chapters_file);
$this->episode->chapters->file_path = null;
$episodeModel = new EpisodeModel();
if (! $episodeModel->update($this->episode->id, $this->episode)) {
$mediaModel = new MediaModel();
if (! $mediaModel->deleteMedia($this->episode->chapters)) {
return redirect()
->back()
->withInput()
->with('errors', $episodeModel->errors());
->with('errors', $mediaModel->errors());
}
return redirect()->back();
@ -797,7 +791,7 @@ class EpisodeController extends BaseController
public function soundbiteDelete(string $clipId): RedirectResponse
{
(new ClipsModel())->deleteClip($this->podcast->id, $this->episode->id, (int) $clipId);
(new ClipModel())->deleteClip($this->podcast->id, $this->episode->id, (int) $clipId);
return redirect()->route('clips-edit', [$this->podcast->id, $this->episode->id]);
}

View file

@ -76,24 +76,29 @@ class PersonController extends BaseController
->with('errors', $this->validator->getErrors());
}
$db = db_connect();
$db->transStart();
$person = new Person([
'avatar' => $this->request->getFile('avatar'),
'full_name' => $this->request->getPost('full_name'),
'unique_name' => $this->request->getPost('unique_name'),
'information_url' => $this->request->getPost('information_url'),
'avatar' => $this->request->getFile('avatar'),
'created_by' => user_id(),
'updated_by' => user_id(),
]);
$personModel = new PersonModel();
if (! $personModel->insert($person)) {
$db->transRollback();
return redirect()
->back()
->withInput()
->with('errors', $personModel->errors());
}
$db->transComplete();
return redirect()->route('person-list');
}
@ -128,11 +133,7 @@ class PersonController extends BaseController
$this->person->full_name = $this->request->getPost('full_name');
$this->person->unique_name = $this->request->getPost('unique_name');
$this->person->information_url = $this->request->getPost('information_url');
$avatarFile = $this->request->getFile('avatar');
if ($avatarFile !== null && $avatarFile->isValid()) {
$this->person->avatar = new Image($avatarFile);
}
$this->person->setAvatar($this->request->getFile('avatar'));
$this->person->updated_by = user_id();

View file

@ -192,6 +192,9 @@ class PodcastController extends BaseController
$partnerImageUrl = null;
}
$db = db_connect();
$db->transStart();
$newPodcast = new Podcast([
'title' => $this->request->getPost('title'),
'handle' => $this->request->getPost('handle'),
@ -226,9 +229,6 @@ class PodcastController extends BaseController
'updated_by' => user_id(),
]);
$db = db_connect();
$db->transStart();
$podcastModel = new PodcastModel();
if (! ($newPodcastId = $podcastModel->insert($newPodcast, true))) {
$db->transRollback();
@ -363,10 +363,8 @@ class PodcastController extends BaseController
return redirect()->back();
}
$this->podcast->banner->deleteFile();
$mediaModel = new MediaModel();
if (! $mediaModel->deleteMedia((int) $this->podcast->banner_id)) {
if (! $mediaModel->deleteMedia($this->podcast->banner)) {
return redirect()
->back()
->withInput()

View file

@ -131,6 +131,10 @@ class PodcastImportController extends BaseController
if (property_exists($nsPodcast, 'guid') && $nsPodcast->guid !== null) {
$guid = (string) $nsPodcast->guid;
}
$db = db_connect();
$db->transStart();
$podcast = new Podcast([
'guid' => $guid,
'handle' => $this->request->getPost('handle'),
@ -139,7 +143,7 @@ class PodcastImportController extends BaseController
'title' => (string) $feed->channel[0]->title,
'description_markdown' => $converter->convert($channelDescriptionHtml),
'description_html' => $channelDescriptionHtml,
'cover' => new Image($coverFile),
'cover' => $coverFile,
'banner' => null,
'language_code' => $this->request->getPost('language'),
'category_id' => $this->request->getPost('category'),
@ -185,10 +189,6 @@ class PodcastImportController extends BaseController
}
$podcastModel = new PodcastModel();
$db = db_connect();
$db->transStart();
if (! ($newPodcastId = $podcastModel->insert($podcast, true))) {
$db->transRollback();
return redirect()
@ -249,7 +249,7 @@ class PodcastImportController extends BaseController
'full_name' => $fullName,
'unique_name' => slugify($fullName),
'information_url' => $podcastPerson->attributes()['href'],
'avatar' => new Image(download_file((string) $podcastPerson->attributes()['img'])),
'avatar' => download_file((string) $podcastPerson->attributes()['img']),
'created_by' => user_id(),
'updated_by' => user_id(),
]);
@ -326,7 +326,7 @@ class PodcastImportController extends BaseController
property_exists($nsItunes, 'image') && $nsItunes->image !== null &&
$nsItunes->image->attributes()['href'] !== null
) {
$episodeCover = new Image(download_file((string) $nsItunes->image->attributes()['href']));
$episodeCover = download_file((string) $nsItunes->image->attributes()['href']);
} else {
$episodeCover = null;
}
@ -402,7 +402,7 @@ class PodcastImportController extends BaseController
'full_name' => $fullName,
'unique_name' => slugify($fullName),
'information_url' => $episodePerson->attributes()['href'],
'avatar' => new Image(download_file((string) $episodePerson->attributes()['img'])),
'avatar' => download_file((string) $episodePerson->attributes()['img']),
'created_by' => user_id(),
'updated_by' => user_id(),
]);

View file

@ -48,12 +48,10 @@ class AddActivities extends Migration
'type' => 'ENUM',
'constraint' => ['queued', 'delivered'],
'null' => true,
'default' => null,
],
'scheduled_at' => [
'type' => 'DATETIME',
'null' => true,
'default' => null,
],
'created_at' => [
'type' => 'DATETIME',