diff --git a/app/Console/Commands/RebuildArtists.php b/app/Console/Commands/RebuildArtists.php new file mode 100644 index 00000000..3c540711 --- /dev/null +++ b/app/Console/Commands/RebuildArtists.php @@ -0,0 +1,67 @@ +. + */ + +namespace Poniverse\Ponyfm\Console\Commands; + +use Illuminate\Console\Command; +use Poniverse\Ponyfm\User; + +class RebuildArtists extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'rebuild:artists'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Recounts every user\'s tracks, ensuring that the artist directory isn\'t missing anyone.'; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + foreach(User::with(['tracks' => function($query) { + $query->published()->listed(); + }])->get() as $user) { + $user->track_count = $user->tracks->count(); + $user->save(); + $this->info('Updated user #'.$user->id.'!'); + } + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 9f97521d..ca89fb41 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -37,6 +37,7 @@ class Kernel extends ConsoleKernel \Poniverse\Ponyfm\Console\Commands\ClassifyMLPMA::class, \Poniverse\Ponyfm\Console\Commands\PublishUnclassifiedMlpmaTracks::class, \Poniverse\Ponyfm\Console\Commands\RebuildTags::class, + \Poniverse\Ponyfm\Console\Commands\RebuildArtists::class, \Poniverse\Ponyfm\Console\Commands\FixYearZeroLogs::class, \Poniverse\Ponyfm\Console\Commands\BootstrapLocalEnvironment::class, \Poniverse\Ponyfm\Console\Commands\PoniverseApiSetup::class, diff --git a/app/Http/Controllers/PlaylistsController.php b/app/Http/Controllers/PlaylistsController.php index 7b9c6f48..92655ae2 100644 --- a/app/Http/Controllers/PlaylistsController.php +++ b/app/Http/Controllers/PlaylistsController.php @@ -63,7 +63,7 @@ class PlaylistsController extends Controller public function getDownload($id, $extension) { $playlist = Playlist::with('tracks', 'user', 'tracks.album')->find($id); - if (!$playlist || !$playlist->is_public) { + if (!$playlist || (!$playlist->is_public && !Auth::check()) || (!$playlist->is_public && ($playlist->user_id !== Auth::user()->id))) { App::abort(404); } diff --git a/app/User.php b/app/User.php index 12050c80..6fb45c93 100644 --- a/app/User.php +++ b/app/User.php @@ -66,6 +66,11 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon return $this->hasMany('Poniverse\Ponyfm\Comment', 'profile_id')->orderBy('created_at', 'desc'); } + public function tracks() + { + return $this->hasMany('Poniverse\Ponyfm\Track', 'user_id'); + } + public function getIsArchivedAttribute() { return (bool)$this->attributes['is_archived'];