feat: adds ability for approved users to approve artwork
This commit is contained in:
@@ -37,9 +37,7 @@ class ArtworkController extends Controller
|
||||
->orderBy('episode_number', 'desc')
|
||||
->orderBy('artworks.created_at', 'desc')
|
||||
->paginate($perPage = 52, $columns = ['*'], $pageName = 'artworks');
|
||||
$podcasts = Cache::remember('publishedPodcasts', 30, function() {
|
||||
return Podcast::where('published', true)->get();
|
||||
});
|
||||
$podcasts = $this->publishedPodcasts();
|
||||
return view('explore.artworks', [
|
||||
'user' => $user,
|
||||
'pageTitle' => 'Explore',
|
||||
@@ -56,9 +54,7 @@ class ArtworkController extends Controller
|
||||
public function create()
|
||||
{
|
||||
$user = auth()->user();
|
||||
$podcasts = Cache::remember('publishedPodcasts', 30, function() {
|
||||
return Podcast::where('published', true)->get();
|
||||
});
|
||||
$podcasts = $this->publishedPodcasts();
|
||||
return view('artworks.submit', [
|
||||
'user' => $user,
|
||||
'pageTitle' => 'Submit New Artwork',
|
||||
@@ -66,6 +62,41 @@ class ArtworkController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function pendingApproval(Request $request)
|
||||
{
|
||||
$user = auth()->user();
|
||||
if ($request->user()->cannot('approve', Artwork::class)) {
|
||||
abort(403);
|
||||
}
|
||||
$artworks = Artwork::whereNull('approved_by')
|
||||
->orderBy('created_at', 'desc')
|
||||
->paginate(50);
|
||||
$podcasts = $this->publishedPodcasts();
|
||||
return view('artworks.approvals', [
|
||||
'user' => $user,
|
||||
'pageTitle' => 'Approve Artworks',
|
||||
'podcasts' => $podcasts,
|
||||
'artworks' => $artworks,
|
||||
]);
|
||||
}
|
||||
|
||||
public function approve(Request $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
if ($request->user()->cannot('approve', Artwork::class)) {
|
||||
abort(403);
|
||||
}
|
||||
$validated = $request->validate([
|
||||
'artwork_id' => 'required|exists:artworks,id'
|
||||
]);
|
||||
$artwork = Artwork::find($request->artwork_id);
|
||||
if (is_null($artwork->approved_by)) {
|
||||
$artwork->approved_by = $user->artists->first()->id;
|
||||
$artwork->save();
|
||||
}
|
||||
return redirect('/approve-artworks');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
@@ -108,7 +139,7 @@ class ArtworkController extends Controller
|
||||
'description' => $request->description,
|
||||
'overlay_id' => null,
|
||||
'podcast_id' => $podcast->id,
|
||||
'episode_id' => $episode->id,
|
||||
'episode_id' => $episode->id,
|
||||
//'approved_by' => 4,
|
||||
'filename' => $filename,
|
||||
'created_at' => now(),
|
||||
@@ -190,16 +221,6 @@ class ArtworkController extends Controller
|
||||
//
|
||||
}
|
||||
|
||||
public function approve(Artwork $artwork)
|
||||
{
|
||||
$user = auth()->user();
|
||||
$awatingApproval = Artwork::whereNull('approved_by')
|
||||
->with('podcast')
|
||||
->with('podcast.episode')
|
||||
->orderBy('created_at', 'asc')
|
||||
->get();
|
||||
}
|
||||
|
||||
public function legacyArtLink(Request $request, $any = null)
|
||||
{
|
||||
phpinfo();
|
||||
@@ -228,4 +249,11 @@ class ArtworkController extends Controller
|
||||
->header('Content-Disposition', 'attachment; filename="naartgen-archivelist-' . $type . '.txt"');
|
||||
}
|
||||
|
||||
private function publishedPodcasts() {
|
||||
$podcasts = Cache::remember('publishedPodcasts', 30, function() {
|
||||
return Podcast::where('published', true)->get();
|
||||
});
|
||||
return $podcasts;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ class EpisodeController extends Controller
|
||||
->with('artworks')
|
||||
->with('artwork')
|
||||
->with('podcast')
|
||||
->whereNotNull('artworks.approved_by')
|
||||
->firstOrFail();
|
||||
$podcasts = Podcast::where('published', true)->with('episodes', function ($query) {
|
||||
$query->orderBy('episode_number', 'desc');
|
||||
|
||||
@@ -65,9 +65,9 @@ class User extends Authenticatable
|
||||
return $this->hasManyThrough(Artwork::class, Artist::class);
|
||||
}
|
||||
|
||||
public function episodes()
|
||||
public function selectedForEpisodes()
|
||||
{
|
||||
return $this->hasManyThrough(Episode::class, Artwork::class);
|
||||
return $this->artists()->first()->episodes;
|
||||
}
|
||||
|
||||
public function wallets()
|
||||
|
||||
34
site/app/Policies/ArtworkPolicy.php
Normal file
34
site/app/Policies/ArtworkPolicy.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Artwork;
|
||||
|
||||
class ArtworkPolicy
|
||||
{
|
||||
/**
|
||||
* Create a new policy instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function viewAny(?User $user): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function approve(User $user): bool
|
||||
{
|
||||
if ($user->id == 4) {
|
||||
return true;
|
||||
}
|
||||
$selectedCount = $user->selectedForEpisodes()->count();
|
||||
if ($selectedCount > 5) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ namespace App\Providers;
|
||||
|
||||
// use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||
use App\Policies\ArtworkPolicy;
|
||||
use App\Models\Artwork;
|
||||
|
||||
class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
@@ -13,7 +15,7 @@ class AuthServiceProvider extends ServiceProvider
|
||||
* @var array<class-string, class-string>
|
||||
*/
|
||||
protected $policies = [
|
||||
//
|
||||
Artwork::class => ArtworkPolicy::class,
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user