From 602ea5946004733d7d1cefda7b1fd5968b8d4163 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Thu, 9 Oct 2025 15:19:40 +0200 Subject: [PATCH] Add music management to admin area --- .../Controllers/Admin/AdminGameController.php | 3 +- .../Admin/AdminMusicController.php | 75 +++--- resources/views/admin/music-edit.blade.php | 236 ++++++++++++++++++ resources/views/admin/music-list.blade.php | 145 +++++++++++ resources/views/partials/admin-menu.blade.php | 14 ++ 5 files changed, 441 insertions(+), 32 deletions(-) create mode 100644 resources/views/admin/music-edit.blade.php create mode 100644 resources/views/admin/music-list.blade.php diff --git a/app/Http/Controllers/Admin/AdminGameController.php b/app/Http/Controllers/Admin/AdminGameController.php index 2c87bb470..2e97cc741 100644 --- a/app/Http/Controllers/Admin/AdminGameController.php +++ b/app/Http/Controllers/Admin/AdminGameController.php @@ -22,7 +22,7 @@ class AdminGameController extends BasePageController // Get search parameter $search = $request->input('gamesearch', ''); - if (!empty($search)) { + if (! empty($search)) { $gamelist = $game->getRange($search); $lastSearch = $search; } else { @@ -88,6 +88,7 @@ class AdminGameController extends BasePageController case 'view': default: $genres = $gen->getGenres(Genres::GAME_TYPE); + return view('admin.game-edit', compact('title', 'meta_title', 'game', 'genres')); } } diff --git a/app/Http/Controllers/Admin/AdminMusicController.php b/app/Http/Controllers/Admin/AdminMusicController.php index 8a5b15635..f11633c24 100644 --- a/app/Http/Controllers/Admin/AdminMusicController.php +++ b/app/Http/Controllers/Admin/AdminMusicController.php @@ -7,41 +7,42 @@ use Blacklight\Genres; use Blacklight\Music; use Blacklight\utility\Utility; use Illuminate\Http\Request; +use Illuminate\Support\Carbon; class AdminMusicController extends BasePageController { /** - * @throws \Exception + * Display a listing of music */ - public function index(): void + public function index(Request $request) { - $this->setAdminPrefs(); - $meta_title = $title = 'Music List'; - $musicList = Utility::getRange('musicinfo'); + // Get search parameter + $search = $request->input('musicsearch', ''); - $this->smarty->assign('musiclist', $musicList); + if (! empty($search)) { + $musicList = Utility::getRange('musicinfo', $search); + $lastSearch = $search; + } else { + $musicList = Utility::getRange('musicinfo'); + $lastSearch = ''; + } - $content = $this->smarty->fetch('music-list.tpl'); - $this->smarty->assign(compact('title', 'meta_title', 'content')); - $this->adminrender(); + return view('admin.music-list', compact('title', 'meta_title', 'musicList', 'lastSearch')); } /** - * @return \Illuminate\Http\RedirectResponse|void - * - * @throws \Exception + * Show the form for editing music */ public function edit(Request $request) { - $this->setAdminPrefs(); $music = new Music; $gen = new Genres; $meta_title = $title = 'Music Edit'; - // set the current action + // Set the current action $action = $request->input('action') ?? 'view'; if ($request->has('id')) { @@ -49,40 +50,52 @@ class AdminMusicController extends BasePageController $mus = $music->getMusicInfo($id); if (! $mus) { - $this->show404(); + abort(404, 'Music not found'); } switch ($action) { case 'submit': $coverLoc = storage_path('covers/music/'.$id.'.jpg'); - if ($_FILES['cover']['size'] > 0) { - $tmpName = $_FILES['cover']['tmp_name']; - $file_info = getimagesize($tmpName); + if ($request->hasFile('cover') && $request->file('cover')->isValid()) { + $file = $request->file('cover'); + $file_info = getimagesize($file->getPathname()); if (! empty($file_info)) { - move_uploaded_file($_FILES['cover']['tmp_name'], $coverLoc); + $file->move(storage_path('covers/music/'), $id.'.jpg'); } } - $request->merge(['cover' => file_exists($coverLoc) ? 1 : 0]); - $request->merge(['salesrank' => (empty($request->input('salesrank')) || ! ctype_digit($request->input('salesrank'))) ? 'null' : $request->input('salesrank')]); - $request->merge(['releasedate' => (empty($request->input('releasedate')) || ! strtotime($request->input('releasedate'))) ? $mus['releasedate'] : Carbon::parse($request->input('releasedate'))->timestamp]); + $cover = file_exists($coverLoc) ? 1 : 0; + $salesrank = (empty($request->input('salesrank')) || ! ctype_digit($request->input('salesrank'))) ? null : $request->input('salesrank'); + $releasedate = (empty($request->input('releasedate')) || ! strtotime($request->input('releasedate'))) + ? $mus['releasedate'] + : Carbon::parse($request->input('releasedate'))->timestamp; - $music->update($id, $request->input('title'), $request->input('asin'), $request->input('url'), $request->input('salesrank'), $request->input('artist'), $request->input('publisher'), $request->input('releasedate'), $request->input('year'), $request->input('tracks'), $request->input('cover'), $request->input('genre')); + $music->update( + $id, + $request->input('title'), + $request->input('asin'), + $request->input('url'), + $salesrank, + $request->input('artist'), + $request->input('publisher'), + $releasedate, + $request->input('year'), + $request->input('tracks'), + $cover, + $request->input('genre') + ); - return redirect()->to('admin/music-list'); + return redirect()->route('admin.music-list')->with('success', 'Music updated successfully'); - break; case 'view': default: - $this->smarty->assign('music', $mus); - $this->smarty->assign('genres', $gen->getGenres(Genres::MUSIC_TYPE)); - break; + $genres = $gen->getGenres(Genres::MUSIC_TYPE); + + return view('admin.music-edit', compact('title', 'meta_title', 'mus', 'genres')); } } - $content = $this->smarty->fetch('music-edit.tpl'); - $this->smarty->assign(compact('title', 'meta_title', 'content')); - $this->adminrender(); + abort(404, 'Music ID required'); } } diff --git a/resources/views/admin/music-edit.blade.php b/resources/views/admin/music-edit.blade.php new file mode 100644 index 000000000..3fa9cb80e --- /dev/null +++ b/resources/views/admin/music-edit.blade.php @@ -0,0 +1,236 @@ +@extends('layouts.admin') + +@section('content') +
+
+ +
+

+ {{ $title }} +

+
+ + + @if(session('success')) +
+

+ {{ session('success') }} +

+
+ @endif + + @if(session('error')) +
+

+ {{ session('error') }} +

+
+ @endif + + @if(session('warning')) +
+

+ {{ session('warning') }} +

+
+ @endif + + +
+ @csrf + + + +
+ +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + @if(!empty($mus['cover']) && $mus['cover'] == 1) +
+ Album Cover +
+ @endif + +

+ Upload a new cover image (JPG format) +

+
+ + +
+ + @if(!empty($mus['cover']) && $mus['cover'] == 1) + + Cover Available + + @else + + No Cover + + @endif +
+
+
+ + +
+ + + Back to Music List + +
+
+
+
+@endsection + diff --git a/resources/views/admin/music-list.blade.php b/resources/views/admin/music-list.blade.php new file mode 100644 index 000000000..35fb5d773 --- /dev/null +++ b/resources/views/admin/music-list.blade.php @@ -0,0 +1,145 @@ +@extends('layouts.admin') + +@section('content') +
+
+ +
+
+

+ {{ $title }} +

+
+
+ + + @if(session('success')) +
+

+ {{ session('success') }} +

+
+ @endif + + @if(session('error')) +
+

+ {{ session('error') }} +

+
+ @endif + + @if(session('warning')) +
+

+ {{ session('warning') }} +

+
+ @endif + + +
+
+
+
+
+ +
+ +
+ + @if(!empty($lastSearch)) + + Clear + + @endif +
+
+
+ + + @if(!empty($musicList) && count($musicList) > 0) +
+ + + + + + + + + + + + + + + + @foreach($musicList as $music) + + + + + + + + + + + + @endforeach + +
IDTitleArtistPublisherYearGenreTracksCoverActions
+ {{ $music['id'] ?? 'N/A' }} + +
+ {{ $music['title'] ?? 'N/A' }} +
+
+ {{ $music['artist'] ?? 'N/A' }} + + {{ $music['publisher'] ?? 'N/A' }} + + {{ $music['year'] ?? 'N/A' }} + + {{ \Illuminate\Support\Str::limit($music['genre'] ?? 'N/A', 30) }} + + {{ $music['tracks'] ?? 'N/A' }} + + @if(!empty($music['cover']) && $music['cover'] == 1) + + Yes + + @else + + No + + @endif + + + Edit + +
+
+ @else +
+ +

+ @if(!empty($lastSearch)) + No music found matching "{{ $lastSearch }}". + @else + No music found in the database. + @endif +

+
+ @endif +
+
+@endsection + diff --git a/resources/views/partials/admin-menu.blade.php b/resources/views/partials/admin-menu.blade.php index 2040f6f2d..5f2dac114 100644 --- a/resources/views/partials/admin-menu.blade.php +++ b/resources/views/partials/admin-menu.blade.php @@ -81,6 +81,20 @@ + +
+ + +
+