Files
mtdb_movie/app/Actions/Videos/CrupdateVideo.php
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

80 lines
2.3 KiB
PHP
Executable File

<?php
namespace App\Actions\Videos;
use App\Models\Episode;
use App\Models\Video;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
class CrupdateVideo
{
public function execute(array $params, int $videoId = null): Video
{
if (Arr::get($params, 'episode_num')) {
$episode = Episode::where('title_id', $params['title_id'])
->where('episode_number', $params['episode_num'])
->where('season_number', $params['season_num'])
->firstOrFail();
$params['episode_id'] = $episode->id;
}
$params['positive_votes'] = 0;
$params['negative_votes'] = 0;
$params['origin'] = 'local';
$captions = Arr::pull($params, 'captions');
if ($videoId) {
$video = Video::findOrFail($videoId);
$video->fill($params)->save();
} else {
$params['approved'] = $this->shouldAutoApprove();
$params['user_id'] = Auth::id();
$video = Video::create($params);
}
if (isset($captions)) {
$this->syncCaptions($video, $captions);
}
return $video;
}
private function shouldAutoApprove(): bool
{
return settings('streaming.auto_approve') ||
Auth::user()->hasPermission('admin');
}
protected function syncCaptions(Video $video, array $captions): void
{
$captions = collect($captions);
// delete captions that were removed
$captionIds = $captions->pluck('id')->filter();
$video
->captions()
->whereNotIn('id', $captionIds)
->delete();
$captions->each(function ($caption, $index) use ($video) {
if (isset($caption['id'])) {
$video
->captions()
->where('id', $caption['id'])
->update([
'name' => $caption['name'],
'language' => $caption['language'],
'url' => $caption['url'],
'order' => $index,
]);
} else {
$caption['user_id'] = Auth::id();
$caption['order'] = $index;
$video->captions()->create($caption);
}
});
}
}