![]() 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/private_html/ |
<?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>