media list processing fix and all public lists page

This commit is contained in:
Doar Mihai
2026-03-08 13:03:14 +02:00
parent 370f8f3431
commit 5792fde58f
7 changed files with 86 additions and 1 deletions
@@ -14,6 +14,17 @@ use Illuminate\Support\Str;
class MediaListController extends Controller class MediaListController extends Controller
{ {
public function publicLists()
{
$lists = MediaList::with('user')
->whereNotIn('name', MediaList::SPECIAL_LISTS)
->where('public', true)
->orderBy('created_at', 'desc')
->paginate(20);
return view('lists.public', compact('lists'));
}
public function index(string $slug) public function index(string $slug)
{ {
$lists = MediaList::whereNotIn('name', MediaList::SPECIAL_LISTS) $lists = MediaList::whereNotIn('name', MediaList::SPECIAL_LISTS)
@@ -50,6 +61,7 @@ class MediaListController extends Controller
'name' => $request->get('name'), 'name' => $request->get('name'),
'slug' => $slug, 'slug' => $slug,
'user_id' => Auth::user()->id, 'user_id' => Auth::user()->id,
'public' => $request->has('public') ? true : false,
]); ]);
return redirect()->route('profile.list.show', [Auth::user()->slug, $slug]); return redirect()->route('profile.list.show', [Auth::user()->slug, $slug]);
+6
View File
@@ -30,5 +30,11 @@ class MediaList extends Model
'slug', 'slug',
'poster_path', 'poster_path',
'user_id', 'user_id',
'public',
]; ];
public function user()
{
return $this->belongsTo(User::class);
}
} }
@@ -515,6 +515,7 @@ class MovieProcessingService implements ProcessingInterface
unset($tmdbList['id']); unset($tmdbList['id']);
if (!$list) { if (!$list) {
$tmdbList['slug'] = Str::slug($tmdbList['name']);
$list = MediaList::create($tmdbList); $list = MediaList::create($tmdbList);
} }
+6
View File
@@ -55,6 +55,12 @@
Forums Forums
</a> </a>
</li> </li>
<li class="nav-item">
<a href="{{ route('lists.public') }}" class="nav-link d-flex align-items-center">
<span class="iconify me-1" data-icon="mdi-playlist-play"></span>
Lists
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<button id="themeSwitcher" class="nav-link d-flex align-items-center theme-switcher"> <button id="themeSwitcher" class="nav-link d-flex align-items-center theme-switcher">
<span class="iconify me-1" data-icon="mdi-weather-sunny"></span> <span class="iconify me-1" data-icon="mdi-weather-sunny"></span>
+59
View File
@@ -0,0 +1,59 @@
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-10">
<div class="card mb-4">
<div class="card-header">
<h4 class="mb-0">Public Lists</h4>
</div>
<div class="card-body">
@if($lists->count())
@foreach($lists as $list)
<div class="card mb-3">
<div class="card-body">
<div class="row">
<div class="col-md-2">
@if($list->poster_path)
<img src="http://image.tmdb.org/t/p/w185{{ $list->poster_path }}" alt="{{ $list->name }}" class="img-fluid rounded">
@else
<div class="bg-secondary text-white d-flex align-items-center justify-content-center rounded" style="height: 150px;">
<span class="iconify" data-icon="mdi-playlist-play" data-width="48"></span>
</div>
@endif
</div>
<div class="col-md-10">
<h5>
<a href="{{ route('profile.list.show', [$list->user->slug, $list->slug]) }}">
{{ $list->name }}
</a>
</h5>
<p class="text-muted mb-2">
by <a href="{{ route('profile.show', $list->user->slug) }}">{{ $list->user->name }}</a>
&bull; {{ $list->item_count }} items
&bull; Created {{ $list->created_at->diffForHumans() }}
</p>
@if($list->description)
<p class="mb-0">{{ $list->description }}</p>
@endif
</div>
</div>
</div>
</div>
@endforeach
<div class="d-flex justify-content-center">
{{ $lists->links() }}
</div>
@else
<div class="alert alert-info">
<p class="mb-0">No public lists have been created yet.</p>
</div>
@endif
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -19,7 +19,7 @@
<textarea name="description" id="" cols="30" rows="10" class="form-control"></textarea> <textarea name="description" id="" cols="30" rows="10" class="form-control"></textarea>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for=""><input type="checkbox" checked> Public</label> <label for=""><input type="checkbox" name="public" checked> Public</label>
</div> </div>
<div class="float-end"> <div class="float-end">
<input type="submit" class="btn btn-primary" value="Save!"> <input type="submit" class="btn btn-primary" value="Save!">
+1
View File
@@ -47,6 +47,7 @@ Route::prefix('forums')->group(function () {
}); });
Route::prefix('lists')->group(function () { Route::prefix('lists')->group(function () {
Route::get('/', [\App\Http\Controllers\MediaListController::class, 'publicLists'])->name('lists.public');
Route::get('/{listSlug}/{itemId}/{itemType}', [\App\Http\Controllers\MediaListController::class, 'toggleListItem'])->name('list.toggle'); Route::get('/{listSlug}/{itemId}/{itemType}', [\App\Http\Controllers\MediaListController::class, 'toggleListItem'])->name('list.toggle');
}); });