![]() 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/utils/ |
<?php
session_start();
require_once 'config/database.php';
// Check if user is logged in
if (!isset($_SESSION['user_id'])) {
header('Location: /auth/login.php');
exit;
}
$pdo = getDBConnection();
$userId = $_GET['user_id'] ?? $_SESSION['user_id'];
// Get user info
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$user = $stmt->fetch();
// Get user albums
$stmt = $pdo->prepare("
SELECT
ua.id,
ua.title,
ua.artist,
ua.genre,
ua.price,
ua.description,
ua.created_at,
COUNT(at.id) as track_count
FROM user_albums ua
LEFT JOIN album_tracks at ON ua.id = at.album_id
WHERE ua.user_id = ?
GROUP BY ua.id
ORDER BY ua.created_at DESC
");
$stmt->execute([$userId]);
$albums = $stmt->fetchAll();
// Get user tracks
$stmt = $pdo->prepare("
SELECT * FROM music_tracks
WHERE user_id = ? AND status = 'complete'
ORDER BY created_at DESC
");
$stmt->execute([$userId]);
$tracks = $stmt->fetchAll();
?>
<!DOCTYPE html>
<?php
// Include header for color scheme
include 'includes/header.php';
?>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= htmlspecialchars($user['name']) ?> - Band Profile | SoundStudioPro</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background: var(--primary-gradient);
color: var(--text-primary);
min-height: 100vh;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.header {
text-align: center;
margin-bottom: 40px;
}
.artist-name {
font-size: 48px;
font-weight: bold;
margin-bottom: 10px;
text-shadow: 2px 2px 4px var(--bg-overlay);
}
.artist-bio {
font-size: 18px;
opacity: 0.9;
max-width: 600px;
margin: 0 auto;
line-height: 1.6;
}
.stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin: 40px 0;
}
.stat-card { background: var(--bg-card);
border-radius: 15px;
padding: 30px;
text-align: center;
backdrop-filter: blur(10px);
border: 1px solid var(--border-medium);
}
.stat-number {
font-size: 36px;
font-weight: bold;
margin-bottom: 10px;
}
.stat-label {
font-size: 14px;
opacity: 0.8;
text-transform: uppercase;
letter-spacing: 1px;
}
.section {
margin: 60px 0;
}
.section-title {
font-size: 32px;
font-weight: bold;
margin-bottom: 30px;
text-align: center;
}
.albums-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 30px;
}
.album-card {
background: var(--bg-card);
border-radius: 20px;
padding: 30px;
backdrop-filter: blur(10px);
border: 1px solid var(--border-medium);
transition: transform 0.3s, box-shadow 0.3s;
position: relative;
overflow: hidden;
}
.album-card:hover {
transform: translateY(-10px);
box-shadow: 0 20px 40px var(--bg-overlay);
}
.album-cover {
width: 100%;
height: 200px;
background: linear-gradient(45deg, #3498db, #9b59b6);
border-radius: 15px;
margin-bottom: 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
color: var(--text-primary);
}
.album-title {
font-size: 24px;
font-weight: bold;
margin-bottom: 10px;
}
.album-artist {
font-size: 16px;
opacity: 0.8;
margin-bottom: 15px;
}
.album-genre {
background: rgba(52, 152, 219, 0.3);
padding: 5px 15px;
border-radius: 20px;
font-size: 12px;
display: inline-block;
margin-bottom: 15px;
}
.album-description {
font-size: 14px;
line-height: 1.6;
margin-bottom: 20px;
opacity: 0.9;
}
.album-meta {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.album-tracks {
font-size: 14px;
opacity: 0.8;
}
.album-price {
font-size: 24px;
font-weight: bold;
color: var(--text-primary);
}
.album-actions {
display: flex;
gap: 10px;
}
.btn {
padding: 12px 24px;
border: none;
border-radius: 25px;
cursor: pointer;
font-size: 14px;
font-weight: bold;
transition: all 0.3s;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 8px;
}
.btn-primary { background: var(--primary-gradient);
color: var(--text-primary);
}
.btn-primary:hover {
background: var(--bg-card);
transform: scale(1.05);
}
.btn-success {
background: var(--bg-card);
color: var(--text-primary);
}
.btn-success:hover {
background: var(--bg-card);
transform: scale(1.05);
}
.btn-secondary { background: var(--bg-card);
color: var(--text-primary);
}
.btn-secondary:hover {
background: rgba(255, 255, 255, 0.3);
transform: scale(1.05);
}
.tracks-list {
background: var(--bg-card);
border-radius: 20px;
padding: 30px;
backdrop-filter: blur(10px);
border: 1px solid var(--border-medium);
}
.track-item {
display: flex;
align-items: center;
padding: 15px;
border-bottom: 1px solid var(--bg-card);
transition: background 0.3s;
}
.track-item:hover {
background: var(--bg-card);
}
.track-item:last-child {
border-bottom: none;
}
.track-number {
width: 40px;
font-weight: bold;
opacity: 0.7;
}
.track-info {
flex: 1;
margin: 0 20px;
}
.track-title {
font-weight: bold;
margin-bottom: 5px;
}
.track-prompt {
font-size: 14px;
opacity: 0.8;
}
.track-duration {
font-size: 14px;
opacity: 0.7;
}
.track-actions {
display: flex;
gap: 10px;
}
.edit-profile {
position: fixed;
top: 20px;
right: 20px;
background: var(--bg-card);
color: var(--text-primary);
padding: 12px 20px;
border-radius: 25px;
text-decoration: none;
font-weight: bold;
transition: all 0.3s;
}
.edit-profile:hover {
background: var(--bg-card);
transform: scale(1.05);
}
.navigation {
position: fixed;
top: 20px;
left: 20px;
display: flex;
gap: 10px;
}
.nav-btn {
background: var(--border-medium);
color: var(--text-primary);
padding: 10px 15px;
border-radius: 20px;
text-decoration: none;
font-weight: bold;
transition: all 0.3s;
}
.nav-btn:hover {
background: rgba(255, 255, 255, 0.3);
transform: scale(1.05);
}
@media (max-width: 768px) {
.container {
padding: 10px;
}
.artist-name {
font-size: 32px;
}
.albums-grid {
grid-template-columns: 1fr;
}
.stats {
grid-template-columns: repeat(2, 1fr);
}
}
</style>
</head>
<body>
<!-- Navigation -->
<div class="navigation">
<a href="/dashboard.php" class="nav-btn">
<i class="fas fa-home"></i> Dashboard
</a>
<a href="/winamp_player.php" class="nav-btn">
<i class="fas fa-music"></i> Player
</a>
</div>
<!-- Edit Profile Button (only for own profile) -->
<?php if ($userId == $_SESSION['user_id']): ?>
<a href="/edit_profile.php" class="edit-profile">
<i class="fas fa-edit"></i> Edit Profile
</a>
<?php endif; ?>
<div class="container">
<!-- Header -->
<div class="header">
<h1 class="artist-name"><?= htmlspecialchars($user['name']) ?></h1>
<p class="artist-bio">
<?= htmlspecialchars($user['bio'] ?? 'A talented artist creating amazing music with AI.') ?>
</p>
</div>
<!-- Stats -->
<div class="stats">
<div class="stat-card">
<div class="stat-number"><?= count($albums) ?></div>
<div class="stat-label">Albums</div>
</div>
<div class="stat-card">
<div class="stat-number"><?= count($tracks) ?></div>
<div class="stat-label">Tracks</div>
</div>
<div class="stat-card">
<div class="stat-number"><?= array_sum(array_column($albums, 'track_count')) ?></div>
<div class="stat-label">Total Songs</div>
</div>
<div class="stat-card">
<div class="stat-number">$<?= number_format(array_sum(array_column($albums, 'price')), 2) ?></div>
<div class="stat-label">Total Value</div>
</div>
</div>
<!-- Albums Section -->
<div class="section">
<h2 class="section-title">Albums</h2>
<div class="albums-grid">
<?php foreach ($albums as $album): ?>
<div class="album-card">
<div class="album-cover">
<i class="fas fa-compact-disc"></i>
</div>
<h3 class="album-title"><?= htmlspecialchars($album['title']) ?></h3>
<p class="album-artist"><?= htmlspecialchars($album['artist']) ?></p>
<span class="album-genre"><?= htmlspecialchars($album['genre']) ?></span>
<p class="album-description"><?= htmlspecialchars($album['description']) ?></p>
<div class="album-meta">
<span class="album-tracks"><?= $album['track_count'] ?> tracks</span>
<span class="album-price">$<?= number_format($album['price'], 2) ?></span>
</div>
<div class="album-actions">
<a href="/album_detail.php?id=<?= $album['id'] ?>" class="btn btn-primary">
<i class="fas fa-eye"></i> View
</a>
<?php if ($userId == $_SESSION['user_id']): ?>
<a href="/edit_album.php?id=<?= $album['id'] ?>" class="btn btn-secondary">
<i class="fas fa-edit"></i> Edit
</a>
<?php else: ?>
<button class="btn btn-success" onclick="buyAlbum(<?= $album['id'] ?>)">
<i class="fas fa-shopping-cart"></i> Buy
</button>
<?php endif; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<!-- Tracks Section -->
<div class="section">
<h2 class="section-title">Latest Tracks</h2>
<div class="tracks-list">
<?php foreach (array_slice($tracks, 0, 10) as $index => $track): ?>
<div class="track-item">
<div class="track-number"><?= $index + 1 ?></div>
<div class="track-info">
<div class="track-title"><?= htmlspecialchars($track['title']) ?></div>
<div class="track-prompt"><?= htmlspecialchars($track['prompt']) ?></div>
</div>
<div class="track-duration">30s</div>
<div class="track-actions">
<button class="btn btn-primary" onclick="playTrack('<?= $track['task_id'] ?>')">
<i class="fas fa-play"></i> Play
</button>
<button class="btn btn-secondary" onclick="addToPlaylist('<?= $track['task_id'] ?>')">
<i class="fas fa-plus"></i> Add
</button>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<script>
function playTrack(taskId) {
// Open in Winamp player
window.open('/winamp_player.php?play=' + taskId, '_blank');
}
function addToPlaylist(taskId) {
// Add to playlist functionality
alert('Track added to playlist!');
}
function buyAlbum(albumId) {
// Purchase functionality
if (confirm('Purchase this album?')) {
// Implement payment processing
alert('Purchase successful!');
}
}
</script>
</body>
</html>