public function latest() { $tracks = Track::summary()->userDetails()->listed()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user')->take(10)->get(); $tracks = $tracks->map(function (Track $track) { return Track::mapPublicTrackSummary($track); }); $json = ['total_tracks' => $tracks->count(), 'tracks' => $tracks->toArray()]; return Response::json($json, 200); }
public function getIndex() { $recentQuery = Track::summary()->with(['genre', 'user', 'cover', 'user.avatar'])->whereIsLatest(true)->listed()->userDetails()->explicitFilter()->published()->orderBy('published_at', 'desc')->take(30); $recentTracks = []; foreach ($recentQuery->get() as $track) { $recentTracks[] = Track::mapPublicTrackSummary($track); } return Response::json(['recent_tracks' => $recentTracks, 'popular_tracks' => Track::popular(30, Auth::check() && Auth::user()->can_see_explicit_content)], 200); }
public function getTracks() { $query = Favourite::whereUserId(Auth::user()->id)->whereNotNull('track_id')->with(['track' => function ($query) { $query->userDetails()->published(); }, 'track.user', 'track.genre', 'track.cover', 'track.album', 'track.album.user']); $tracks = []; foreach ($query->get() as $fav) { if ($fav->track == null) { continue; } $tracks[] = Track::mapPublicTrackSummary($fav->track); } return Response::json(["tracks" => $tracks], 200); }
public static function mapPublicPlaylistShow(Playlist $playlist) { $tracks = []; foreach ($playlist->tracks as $track) { /** @var $track Track */ $tracks[] = Track::mapPublicTrackSummary($track); } $formats = []; foreach (Track::$Formats as $name => $format) { $formats[] = ['name' => $name, 'extension' => $format['extension'], 'url' => $playlist->getDownloadUrl($name), 'size' => Helpers::formatBytes($playlist->getFilesize($name)), 'isCacheable' => in_array($name, Track::$CacheableFormats) ? true : false]; } $comments = []; foreach ($playlist->comments as $comment) { $comments[] = Comment::mapPublic($comment); } $data = self::mapPublicPlaylistSummary($playlist); $data['tracks'] = $tracks; $data['comments'] = $comments; $data['formats'] = $formats; $data['share'] = ['url' => action('PlaylistsController@getShortlink', ['id' => $playlist->id]), 'tumblrUrl' => 'http://www.tumblr.com/share/link?url=' . urlencode($playlist->url) . '&name=' . urlencode($playlist->title) . '&description=' . urlencode($playlist->description), 'twitterUrl' => 'https://platform.twitter.com/widgets/tweet_button.html?text=' . $playlist->title . ' by ' . $playlist->user->display_name . ' on Pony.fm']; return $data; }
public static function popular($count, $allowExplicit = false) { $trackIds = Cache::remember('popular_tracks' . $count . '-' . ($allowExplicit ? 'explicit' : 'safe'), 5, function () use($allowExplicit, $count) { $query = static::published()->listed()->join(DB::raw(' ( SELECT `track_id`, `created_at` FROM `resource_log_items` WHERE track_id IS NOT NULL AND log_type = 3 AND `created_at` > now() - INTERVAL 1 DAY ) AS ranged_plays'), 'tracks.id', '=', 'ranged_plays.track_id')->groupBy('id')->orderBy('plays', 'desc')->take($count); if (!$allowExplicit) { $query->whereIsExplicit(false); } $results = []; foreach ($query->get(['*', DB::raw('count(*) as plays')]) as $track) { $results[] = $track->id; } return $results; }); if (!count($trackIds)) { return []; } $tracks = Track::summary()->userDetails()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user')->whereIn('id', $trackIds); $processed = []; foreach ($tracks->get() as $track) { $processed[] = Track::mapPublicTrackSummary($track); } // Songs that get played more should drop down // in the list so they don't hog the top spots. array_reverse($processed); return $processed; }
public function getIndex() { $page = 1; $perPage = 45; if (Input::has('page')) { $page = Input::get('page'); } $query = Track::summary()->userDetails()->listed()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user'); $this->applyFilters($query); $totalCount = $query->count(); $query->take($perPage)->skip($perPage * ($page - 1)); $tracks = []; $ids = []; foreach ($query->get(['tracks.*']) as $track) { $tracks[] = Track::mapPublicTrackSummary($track); $ids[] = $track->id; } return Response::json(["tracks" => $tracks, "current_page" => $page, "total_pages" => ceil($totalCount / $perPage)], 200); }
public function getShow($slug) { $user = User::whereSlug($slug)->whereNull('disabled_at')->userDetails()->with(['comments' => function ($query) { $query->with('user'); }])->first(); if (!$user) { App::abort(404); } $trackQuery = Track::summary()->published()->explicitFilter()->listed()->with('genre', 'cover', 'user')->userDetails()->whereUserId($user->id)->whereNotNull('published_at')->orderBy('created_at', 'desc')->take(20); $latestTracks = []; foreach ($trackQuery->get() as $track) { $latestTracks[] = Track::mapPublicTrackSummary($track); } $comments = []; foreach ($user->comments as $comment) { $comments[] = Comment::mapPublic($comment); } $userData = ['is_following' => false]; if ($user->users->count()) { $userRow = $user->users[0]; $userData = ['is_following' => (bool) $userRow->is_followed]; } return Response::json(['artist' => ['id' => (int) $user->id, 'name' => $user->display_name, 'slug' => $user->slug, 'is_archived' => (bool) $user->is_archived, 'avatars' => ['small' => $user->getAvatarUrl(Image::SMALL), 'normal' => $user->getAvatarUrl(Image::NORMAL)], 'created_at' => $user->created_at, 'followers' => [], 'following' => [], 'latest_tracks' => $latestTracks, 'comments' => $comments, 'bio' => $user->bio, 'mlpforums_username' => $user->username, 'message_url' => $user->message_url, 'user_data' => $userData]], 200); }