T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/domains/soundstudiopro.com/public_html/api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/soundstudiopro.com/public_html/api/get_artist_playlist.php
<?php
session_start();
header('Content-Type: application/json');

require_once '../config/database.php';

try {
    $pdo = getDBConnection();
    
    // Get artist ID from request
    $artist_id = isset($_GET['artist_id']) ? (int)$_GET['artist_id'] : null;
    
    if (!$artist_id) {
        throw new Exception('Artist ID is required');
    }
    
    // OPTIMIZED: Using JOINs instead of correlated subqueries for better performance
    // Get artist's primary playlist with tracks
    $stmt = $pdo->prepare("
        SELECT 
            ap.id as playlist_id,
            ap.name as playlist_name,
            ap.description as playlist_description,
            ap.is_primary,
            mt.id as track_id,
            mt.title,
            mt.prompt,
            mt.audio_url,
            mt.duration,
            mt.created_at,
            mt.user_id,
            u.name as artist_name,
            pt.position,
            COALESCE(like_stats.like_count, 0) as like_count,
            COALESCE(play_stats.play_count, 0) as play_count
        FROM artist_playlists ap
        LEFT JOIN playlist_tracks pt ON ap.id = pt.playlist_id
        LEFT JOIN music_tracks mt ON pt.track_id = mt.id
        LEFT JOIN users u ON mt.user_id = u.id
        LEFT JOIN (SELECT track_id, COUNT(*) as like_count FROM track_likes GROUP BY track_id) like_stats ON mt.id = like_stats.track_id
        LEFT JOIN (SELECT track_id, COUNT(*) as play_count FROM track_plays GROUP BY track_id) play_stats ON mt.id = play_stats.track_id
        WHERE ap.user_id = ? 
        AND ap.is_primary = TRUE
        AND mt.status = 'complete'
        ORDER BY pt.position ASC, mt.created_at DESC
    ");
    
    $stmt->execute([$artist_id]);
    $results = $stmt->fetchAll();
    
    if (empty($results)) {
        // No playlist found, return empty result
        echo json_encode([
            'success' => true,
            'playlist' => [
                'id' => null,
                'name' => 'No Playlist',
                'description' => 'This artist has no tracks yet',
                'tracks' => []
            ]
        ]);
        exit;
    }
    
    // Organize data into playlist structure
    $playlist = [
        'id' => $results[0]['playlist_id'],
        'name' => $results[0]['playlist_name'],
        'description' => $results[0]['playlist_description'],
        'tracks' => []
    ];
    
    foreach ($results as $row) {
        if ($row['track_id']) {
            // Decode HTML entities in title and artist name (e.g., &#039; → ')
            $title = $row['title'] ?: substr($row['prompt'], 0, 50) . '...';
            $title = html_entity_decode($title, ENT_QUOTES | ENT_HTML5, 'UTF-8');
            $artistName = html_entity_decode($row['artist_name'] ?? '', ENT_QUOTES | ENT_HTML5, 'UTF-8');
            
            $playlist['tracks'][] = [
                'id' => $row['track_id'],
                'title' => $title,
                'artist_name' => $artistName,
                'audio_url' => $row['audio_url'],
                'duration' => $row['duration'],
                'created_at' => $row['created_at'],
                'user_id' => $row['user_id'],
                'position' => $row['position'],
                'like_count' => $row['like_count'],
                'play_count' => $row['play_count']
            ];
        }
    }
    
    echo json_encode([
        'success' => true,
        'playlist' => $playlist
    ]);
    
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ]);
}
?> 

CasperSecurity Mini