From: Vincent Vanwaelscappel Date: Thu, 17 Nov 2022 10:15:57 +0000 (+0100) Subject: . X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=f3ea7f4d66fa3f62552d74ae7f3a49adf23e8533;p=songbook.git . --- diff --git a/app/Field/CollectionList.php b/app/Field/CollectionList.php index 68312fc..47216b7 100644 --- a/app/Field/CollectionList.php +++ b/app/Field/CollectionList.php @@ -22,11 +22,11 @@ class CollectionList extends SelectFromArrayMultiple } } self::$___options[$item->id] = $item->name; + if (count($thisLists)) { self::$___options[$item->id] .= ' - ' . __('Liste principale'); - self::$___options = array_merge(self::$___options, $thisLists); + self::$___options += $thisLists; } - } } return self::$___options; diff --git a/app/Http/Controllers/FrontController.php b/app/Http/Controllers/FrontController.php index f8bb936..39a7413 100644 --- a/app/Http/Controllers/FrontController.php +++ b/app/Http/Controllers/FrontController.php @@ -67,10 +67,10 @@ class FrontController extends Controller return $p; } $lists = CollectionList::withoutGlobalScope('ownerclause')->where('collection', $collection->id)->get(); - $partition=false; - $lyrics_html=''; + $partition = false; + $lyrics_html = ''; - if($song->chorale) { + if ($song->chorale) { try { $partition = $song->getFirstMediaInField('partition'); if ($partition) { diff --git a/app/Jobs/DownloadAudioTracks.php b/app/Jobs/DownloadAudioTracks.php index 4d1c08c..6fcf745 100644 --- a/app/Jobs/DownloadAudioTracks.php +++ b/app/Jobs/DownloadAudioTracks.php @@ -20,7 +20,7 @@ class DownloadAudioTracks implements ShouldQueue public function handle() { PHP::neverStop(); - foreach (Song::all() as $song) { + foreach (Song::withoutGlobalScope('ownerclause')->all() as $song) { $data = $song->getPageData(); $tracks = $data->audio; if (null === $tracks) { diff --git a/app/Jobs/OptimizeMP3.php b/app/Jobs/OptimizeMP3.php new file mode 100644 index 0000000..ee56e9e --- /dev/null +++ b/app/Jobs/OptimizeMP3.php @@ -0,0 +1,41 @@ +inRandomOrder()->get() as $song) { + $tracks = $song->getAudioTracks(); + foreach ($tracks as $track) { + $mp3 = $track['path']; + if (!file_exists($mp3)) { + continue; + } + $opt = str_replace('.mp3', '.opt.mp3', $mp3); + + if (!file_exists($opt)) { + $ff = new CommandLine('ffmpeg'); + $ff->setTimeout(300); + $ff->setArg('y'); + $ff->setManualArg('-nostdin'); + $ff->setArg('i', $mp3); + $ff->setManualArg('-ab 320k'); + $ff->setArg(null, $opt); + $ff->execute(); + } + + } + } + } +} diff --git a/app/Jobs/PitchShiftAudio.php b/app/Jobs/PitchShiftAudio.php index 61d4cfd..7488186 100644 --- a/app/Jobs/PitchShiftAudio.php +++ b/app/Jobs/PitchShiftAudio.php @@ -23,7 +23,7 @@ class PitchShiftAudio implements ShouldQueue DownloadAudioTracks::dispatchSync(); - foreach (Song::inRandomOrder()->get() as $song) { + foreach (Song::withoutGlobalScope('ownerclause')->inRandomOrder()->get() as $song) { $tracks = $song->getAudioTracks(); foreach ($tracks as $track) { $mp3 = $track['path']; diff --git a/app/Models/Collection.php b/app/Models/Collection.php index a552b87..ee5960d 100644 --- a/app/Models/Collection.php +++ b/app/Models/Collection.php @@ -30,17 +30,7 @@ class Collection extends CubistMagicAbstractModel if (Auth::user()->hasPermissionTo('song:admin')) { return; } - - //$builder->whereIn('id', Auth::user()->getOwnedCollections()); - -// $cols=backpack_user()->collections; -// if(!$cols){ - -// $cols=[]; -// } -// $builder->whereIn('id', $cols); - - + $builder->whereIn('id', Auth::user()->getOwnedCollections()); } public function setfields() diff --git a/app/Models/CollectionList.php b/app/Models/CollectionList.php index 0ad996e..fa2d433 100644 --- a/app/Models/CollectionList.php +++ b/app/Models/CollectionList.php @@ -7,6 +7,8 @@ use Cubist\Backpack\Magic\Fields\Integer; use Cubist\Backpack\Magic\Fields\SelectFromModel; use Cubist\Backpack\Magic\Fields\Text; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Facades\Auth; class CollectionList extends CubistMagicAbstractModel { @@ -15,6 +17,17 @@ class CollectionList extends CubistMagicAbstractModel 'singular' => 'list', 'plural' => 'lists']; + public static function addOwnerClause(Builder $builder) + { + if (backpack_user() === null || Auth::guest()) { + return; + } + if (Auth::user()->hasPermissionTo('song:admin')) { + return; + } + $builder->whereIn('collection', Auth::user()->getOwnedCollections()); + } + public function setFields() { parent::setFields(); diff --git a/app/Models/Song.php b/app/Models/Song.php index 850cf5f..36049f9 100644 --- a/app/Models/Song.php +++ b/app/Models/Song.php @@ -7,6 +7,7 @@ use App\Field\Tempo; use App\Field\Tone; use App\Http\Controllers\Admin\Operations\Song\ImportOperation; use App\Jobs\DownloadAudioTracks; +use App\Jobs\OptimizeMP3; use App\SubForm\AudioTrack; use App\SubForm\SongPortion; use Cubist\Backpack\Magic\Fields\BunchOfFieldsMultiple; @@ -54,8 +55,8 @@ class Song extends CubistMagicAbstractModel parent::setFields(); // $this->addField('slug', 'Slug', 'Slug', ['column' => true]); - $this->addField('title', 'Text', __('Titre de la chanson'), ['column' => true]); - $this->addField('artist', 'Text', __('Artiste'), ['column' => true]); + $this->addField('title', 'Text', __('Titre de la chanson'), ['column' => true, 'tab' => __('Paramètres')]); + $this->addField('artist', 'Text', __('Artiste'), ['column' => true, 'tab' => __('Paramètres')]); $this->addField([ 'name' => 'owner', 'label' => __('Ajouté par'), @@ -67,17 +68,22 @@ class Song extends CubistMagicAbstractModel 'attribute' => 'companyWithName', 'default' => Auth::id(), 'non_default_tracking' => false, + 'tab' => __('Paramètres') ]); - $this->addField('key', Tone::class, __('Key'), ['column' => true]); - $this->addField('mode', Mode::class, __('Mode'), ['column' => true]); - $this->addField('chorale', Checkbox::class, __('Chorale'), ['default' => false, 'database_default' => false]); - $this->addField('collections', \App\Field\CollectionList::class, 'Collections'); - $this->addField('tempo', Tempo::class, __('Suggested tempo'), ['column' => true, 'default' => 80]); - $this->addField('partition', Files::class, __('Partition'), ['acceptedFiles' => 'application/pdf', 'when' => ['chorale' => 1]]); - $this->addField('lyrics_doc', Files::class, __('Paroles'), ['acceptedFiles' => 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,text/plain,text/html', 'when' => ['chorale' => 1]]); - $this->addField('audio', BunchOfFieldsMultiple::class, __('Audio tracks'), ['bunch' => AudioTrack::class, 'new_label' => 'New audio track']); - $this->addField('lyrics', BunchOfFieldsMultiple::class, __('Song Parts'), ['bunch' => SongPortion::class, 'new_label' => 'New song part', 'when' => ['chorale' => 0]]); - $this->addField('credits', 'Textarea', __('Credits')); + + $this->addField('collections', \App\Field\CollectionList::class, 'Collections', ['tab' => __('Paramètres')]); + + $this->addField('chorale', Checkbox::class, __('Chorale'), ['default' => false, 'database_default' => false, 'tab' => __('Paramètres')]); + + $this->addField('key', Tone::class, __('Key'), ['column' => true, 'tab' => __('Paroles et accords')]); + $this->addField('mode', Mode::class, __('Mode'), ['column' => true, 'tab' => __('Paroles et accords')]); + $this->addField('tempo', Tempo::class, __('Suggested tempo'), ['column' => true, 'default' => 80, 'tab' => __('Paroles et accords')]); + $this->addField('partition', Files::class, __('Partition'), ['acceptedFiles' => 'application/pdf', 'when' => ['chorale' => 1], 'tab' => __('Paroles et accords')]); + $this->addField('lyrics', BunchOfFieldsMultiple::class, __('Song Parts'), ['bunch' => SongPortion::class, 'add_label' => 'Nouvelle partie', 'when' => ['chorale' => 0], 'tab' => __('Paroles et accords')]); + $this->addField('lyrics_doc', Files::class, __('Paroles'), ['acceptedFiles' => 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,text/plain,text/html', 'when' => ['chorale' => 1], 'tab' => __('Paroles et accords')]); + $this->addField('audio', BunchOfFieldsMultiple::class, __('Audio tracks'), ['bunch' => AudioTrack::class, 'add_label' => 'Ajouter un audio', 'tab' => __('Audios')]); + $this->addField('credits', 'Textarea', __('Credits'), ['tab' => __('Autres informations')]); + } public function preSave() @@ -91,6 +97,7 @@ class Song extends CubistMagicAbstractModel public function postSave() { DownloadAudioTracks::dispatch(); + OptimizeMP3::dispatch(); parent::postSave(); } @@ -236,7 +243,10 @@ class Song extends CubistMagicAbstractModel if (!$url) { continue; } - $res[$i] = ['i' => $i, 'name' => $audio['name'], 'url' => $url, 'path' => $path]; + + $opt_path = str_replace('.mp3', '.opt.mp3', $path); + + $res[$i] = ['i' => $i, 'name' => $audio['name'], 'url' => $url, 'path' => $path, 'opturl' => file_exists($opt_path) ? str_replace('.mp3', '.opt.mp3', $url) : $url]; if (isset($audio['tone'])) { $res[$i]['tone'] = $audio['tone']; } diff --git a/config/backpack/base.php b/config/backpack/base.php index af6f628..bd96340 100644 --- a/config/backpack/base.php +++ b/config/backpack/base.php @@ -32,7 +32,7 @@ return [ // The string below will be passed through the url() helper. // - default: '' (project root) // - alternative: 'admin' (the admin's dashboard) - 'home_link' => '', + 'home_link' => 'admin', // Content of the HTML meta robots tag to prevent indexing and link following 'meta_robots_content' => 'noindex, nofollow', diff --git a/resources/views/song.blade.php b/resources/views/song.blade.php index eec7f34..93db950 100644 --- a/resources/views/song.blade.php +++ b/resources/views/song.blade.php @@ -45,7 +45,7 @@
@foreach($audioTracks as $audio) @if($collection->transpose) @for($i=1;$i<=11;$i++) diff --git a/resources/views/vendor/backpack/base/dashboard.blade.php b/resources/views/vendor/backpack/base/dashboard.blade.php index 782d092..5d18fdb 100644 --- a/resources/views/vendor/backpack/base/dashboard.blade.php +++ b/resources/views/vendor/backpack/base/dashboard.blade.php @@ -1,14 +1,2 @@ @extends(backpack_view('blank')) - -@php - $widgets['before_content'][] = [ - 'type' => 'jumbotron', - 'heading' => trans('backpack::base.welcome'), - 'content' => trans('backpack::base.use_sidebar'), - 'button_link' => backpack_url('logout'), - 'button_text' => trans('backpack::base.logout'), - ]; -@endphp - -@section('content') -@endsection \ No newline at end of file +