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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/soundstudiopro.com/public_html/my_purchases.php
<?php
session_start();

// Check if user is logged in
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

require_once 'config/database.php';

try {
    $pdo = getDBConnection();
    
    // Get user's purchases
    $stmt = $pdo->prepare("
        SELECT 
            tp.id as purchase_id,
            tp.price_paid,
            tp.credits_used,
            tp.purchase_date,
            tp.download_count,
            tp.last_downloaded,
            mt.id as track_id,
            mt.title,
            mt.audio_url,
            mt.duration,
            mt.music_type,
            mt.metadata,
            u.name as artist_name,
            u.id as artist_id
        FROM track_purchases tp
        JOIN music_tracks mt ON tp.track_id = mt.id
        JOIN users u ON mt.user_id = u.id
        WHERE tp.user_id = ?
        ORDER BY tp.purchase_date DESC
    ");
    
    $stmt->execute([$_SESSION['user_id']]);
    $purchases = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
} catch (Exception $e) {
    error_log("Error loading purchases: " . $e->getMessage());
    $purchases = [];
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Purchases - SoundStudioPro</title>
    <link rel="stylesheet" href="assets/css/style.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        .purchases-container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 2rem;
        }
        
        .purchases-header {
            text-align: center;
            margin-bottom: 3rem;
        }
        
        .purchases-title {
            font-size: 3rem;
            font-weight: 700;
            background: linear-gradient(135deg, #667eea, #764ba2);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            margin-bottom: 1rem;
        }
        
        .purchases-subtitle {
            font-size: 1.4rem;
            color: #a0aec0;
        }
        
        .purchases-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
            gap: 2rem;
        }
        
        .purchase-card {
            background: rgba(255, 255, 255, 0.05);
            border: 1px solid rgba(255, 255, 255, 0.1);
            border-radius: 16px;
            padding: 2rem;
            transition: all 0.3s ease;
        }
        
        .purchase-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
            border-color: rgba(102, 126, 234, 0.3);
        }
        
        .purchase-header {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            margin-bottom: 1.5rem;
        }
        
        .purchase-title {
            font-size: 1.8rem;
            font-weight: 600;
            color: white;
            margin-bottom: 0.5rem;
        }
        
        .purchase-artist {
            font-size: 1.2rem;
            color: #667eea;
        }
        
        .purchase-price {
            background: linear-gradient(135deg, #48bb78, #38a169);
            color: white;
            padding: 0.5rem 1rem;
            border-radius: 8px;
            font-size: 1.2rem;
            font-weight: 600;
        }
        
        .purchase-info {
            display: flex;
            gap: 1rem;
            margin-bottom: 1.5rem;
            font-size: 1.2rem;
            color: #a0aec0;
        }
        
        .purchase-date {
            color: #a0aec0;
            font-size: 1.1rem;
            margin-bottom: 1.5rem;
        }
        
        .purchase-actions {
            display: flex;
            gap: 1rem;
        }
        
        .purchase-btn {
            flex: 1;
            padding: 1rem;
            border: none;
            border-radius: 8px;
            font-size: 1.4rem;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s ease;
            text-decoration: none;
            text-align: center;
        }
        
        .download-btn {
            background: linear-gradient(135deg, #667eea, #764ba2);
            color: white;
        }
        
        .download-btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
        }
        
        .play-btn {
            background: rgba(255, 255, 255, 0.1);
            color: #a0aec0;
            border: 1px solid rgba(255, 255, 255, 0.2);
        }
        
        .play-btn:hover {
            background: rgba(255, 255, 255, 0.2);
            color: white;
        }
        
        .empty-purchases {
            text-align: center;
            padding: 4rem;
            color: #a0aec0;
        }
        
        .empty-purchases i {
            font-size: 4rem;
            margin-bottom: 1rem;
            color: #667eea;
        }
        
        .empty-purchases h3 {
            font-size: 2rem;
            color: white;
            margin-bottom: 1rem;
        }
        
        .empty-purchases p {
            font-size: 1.4rem;
            margin-bottom: 2rem;
        }
        
        .browse-btn {
            background: linear-gradient(135deg, #667eea, #764ba2);
            color: white;
            padding: 1rem 2rem;
            border-radius: 8px;
            text-decoration: none;
            font-weight: 600;
            transition: all 0.3s ease;
        }
        
        .browse-btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
        }
    </style>
</head>
<body>
    <?php include 'includes/header.php'; ?>
    
    <div class="purchases-container">
        <div class="purchases-header">
            <h1 class="purchases-title">My Purchases</h1>
            <p class="purchases-subtitle">Your music collection</p>
        </div>
        
        <?php if (empty($purchases)): ?>
            <div class="empty-purchases">
                <i class="fas fa-music"></i>
                <h3>No Purchases Yet</h3>
                <p>Start building your music collection by purchasing tracks from our artists!</p>
                <a href="artists.php" class="browse-btn">
                    <i class="fas fa-search"></i>
                    Browse Artists
                </a>
            </div>
        <?php else: ?>
            <div class="purchases-grid">
                <?php foreach ($purchases as $purchase): ?>
                    <div class="purchase-card">
                        <div class="purchase-header">
                            <div>
                                <div class="purchase-title"><?= htmlspecialchars($purchase['title']) ?></div>
                                <div class="purchase-artist">by <?= htmlspecialchars($purchase['artist_name']) ?></div>
                            </div>
                            <div class="purchase-price">$<?= number_format($purchase['price_paid'], 2) ?></div>
                        </div>
                        
                        <div class="purchase-info">
                            <span><i class="fas fa-clock"></i> <?= $purchase['duration'] ? gmdate("i:s", $purchase['duration']) : 'Unknown' ?></span>
                            <span><i class="fas fa-music"></i> <?= ucfirst($purchase['music_type']) ?></span>
                            <span><i class="fas fa-download"></i> <?= $purchase['download_count'] ?> downloads</span>
                        </div>
                        
                        <div class="purchase-date">
                            Purchased on <?= date('M j, Y', strtotime($purchase['purchase_date'])) ?>
                        </div>
                        
                        <div class="purchase-actions">
                            <button class="purchase-btn play-btn" onclick="playTrack('<?= htmlspecialchars($purchase['audio_url']) ?>', '<?= htmlspecialchars($purchase['title']) ?>')">
                                <i class="fas fa-play"></i>
                                Play
                            </button>
                            <a href="<?= htmlspecialchars($purchase['audio_url']) ?>" download class="purchase-btn download-btn" onclick="recordDownload(<?= $purchase['purchase_id'] ?>)">
                                <i class="fas fa-download"></i>
                                Download
                            </a>
                        </div>
                    </div>
                <?php endforeach; ?>
            </div>
        <?php endif; ?>
    </div>
    
    
    <!-- Include footer for consistent layout and global player -->
    <?php include 'includes/footer.php'; ?>
    
    <script>
        function playTrack(audioUrl, title) {
            if (typeof window.playTrackWithGlobalPlayer === 'function') {
                window.playTrackWithGlobalPlayer(audioUrl, title, 'Purchased Track');
            } else {
                // Fallback
                const audio = new Audio(audioUrl);
                audio.play();
            }
        }
        
        function recordDownload(purchaseId) {
            // Record download in database
            fetch('/api/record_download.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                    purchase_id: purchaseId
                })
            }).catch(error => {
                console.error('Error recording download:', error);
            });
        }
    </script> 

CasperSecurity Mini