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/private_html/utils/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/soundstudiopro.com/private_html/utils/winamp_player.php
<?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();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SoundStudioPro - Winamp Player</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: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            overflow-x: hidden;
        }

        /* Winamp-style Player */
        .winamp-container {
            position: fixed;
            bottom: 0;
            left: 0;
            right: 0;
            z-index: 1000;
            background: linear-gradient(90deg, #2c3e50, #34495e);
            border-top: 2px solid #3498db;
            box-shadow: 0 -5px 20px rgba(0,0,0,0.3);
        }

        .player-main {
            display: flex;
            align-items: center;
            padding: 10px 20px;
            height: 80px;
        }

        .player-controls {
            display: flex;
            align-items: center;
            gap: 15px;
            flex: 1;
        }

        .control-btn {
            background: #3498db;
            border: none;
            color: white;
            padding: 8px 12px;
            border-radius: 5px;
            cursor: pointer;
            transition: all 0.3s;
        }

        .control-btn:hover {
            background: #2980b9;
            transform: scale(1.05);
        }

        .play-btn {
            background: #27ae60;
            padding: 12px 16px;
            border-radius: 50%;
        }

        .play-btn:hover {
            background: #229954;
        }

        .track-info {
            flex: 1;
            margin: 0 20px;
        }

        .track-title {
            font-weight: bold;
            font-size: 14px;
            margin-bottom: 5px;
        }

        .track-artist {
            font-size: 12px;
            opacity: 0.8;
        }

        .progress-container {
            flex: 1;
            margin: 0 20px;
        }

        .progress-bar {
            width: 100%;
            height: 6px;
            background: #34495e;
            border-radius: 3px;
            overflow: hidden;
            cursor: pointer;
        }

        .progress-fill {
            height: 100%;
            background: linear-gradient(90deg, #3498db, #27ae60);
            width: 0%;
            transition: width 0.1s;
        }

        .time-display {
            font-size: 12px;
            margin-top: 5px;
            text-align: center;
        }

        .volume-control {
            display: flex;
            align-items: center;
            gap: 10px;
            margin-left: 20px;
        }

        .volume-slider {
            width: 80px;
            height: 4px;
            background: #34495e;
            border-radius: 2px;
            cursor: pointer;
        }

        /* Playlist Panel */
        .playlist-panel {
            position: fixed;
            right: 0;
            top: 0;
            bottom: 80px;
            width: 350px;
            background: rgba(44, 62, 80, 0.95);
            backdrop-filter: blur(10px);
            border-left: 2px solid #3498db;
            transform: translateX(100%);
            transition: transform 0.3s ease;
            z-index: 999;
        }

        .playlist-panel.open {
            transform: translateX(0);
        }

        .playlist-header {
            padding: 20px;
            border-bottom: 1px solid #34495e;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .playlist-title {
            font-size: 18px;
            font-weight: bold;
        }

        .close-playlist {
            background: none;
            border: none;
            color: white;
            font-size: 20px;
            cursor: pointer;
        }

        .playlist-tabs {
            display: flex;
            border-bottom: 1px solid #34495e;
        }

        .playlist-tab {
            flex: 1;
            padding: 15px;
            text-align: center;
            cursor: pointer;
            border-bottom: 3px solid transparent;
            transition: all 0.3s;
        }

        .playlist-tab.active {
            border-bottom-color: #3498db;
            background: rgba(52, 152, 219, 0.1);
        }

        .playlist-content {
            height: calc(100% - 140px);
            overflow-y: auto;
        }

        .playlist-item {
            display: flex;
            align-items: center;
            padding: 15px 20px;
            border-bottom: 1px solid #34495e;
            cursor: pointer;
            transition: background 0.3s;
        }

        .playlist-item:hover {
            background: rgba(52, 152, 219, 0.1);
        }

        .playlist-item.playing {
            background: rgba(39, 174, 96, 0.2);
            border-left: 4px solid #27ae60;
        }

        .playlist-item-info {
            flex: 1;
        }

        .playlist-item-title {
            font-weight: bold;
            font-size: 14px;
            margin-bottom: 5px;
        }

        .playlist-item-artist {
            font-size: 12px;
            opacity: 0.8;
        }

        .playlist-item-duration {
            font-size: 12px;
            opacity: 0.6;
        }

        .playlist-actions {
            display: flex;
            gap: 5px;
        }

        .playlist-action-btn {
            background: none;
            border: none;
            color: white;
            padding: 5px;
            cursor: pointer;
            opacity: 0.7;
            transition: opacity 0.3s;
        }

        .playlist-action-btn:hover {
            opacity: 1;
        }

        /* Main Content */
        .main-content {
            padding: 20px;
            padding-bottom: 100px;
        }

        .content-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 30px;
        }

        .page-title {
            font-size: 28px;
            font-weight: bold;
        }

        .toggle-playlist {
            background: #3498db;
            border: none;
            color: white;
            padding: 12px 20px;
            border-radius: 5px;
            cursor: pointer;
            font-size: 16px;
        }

        /* Music Grid */
        .music-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
            gap: 20px;
            margin-bottom: 40px;
        }

        .music-card {
            background: rgba(255, 255, 255, 0.1);
            border-radius: 10px;
            padding: 20px;
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.2);
            transition: transform 0.3s, box-shadow 0.3s;
        }

        .music-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 10px 30px rgba(0,0,0,0.3);
        }

        .music-card-header {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            margin-bottom: 15px;
        }

        .music-card-title {
            font-size: 18px;
            font-weight: bold;
            margin-bottom: 5px;
        }

        .music-card-artist {
            font-size: 14px;
            opacity: 0.8;
        }

        .music-card-status {
            padding: 5px 10px;
            border-radius: 15px;
            font-size: 12px;
            font-weight: bold;
        }

        .status-complete {
            background: #27ae60;
            color: white;
        }

        .status-processing {
            background: #f39c12;
            color: white;
        }

        .music-card-actions {
            display: flex;
            gap: 10px;
            margin-top: 15px;
        }

        .music-action-btn {
            background: #3498db;
            border: none;
            color: white;
            padding: 8px 12px;
            border-radius: 5px;
            cursor: pointer;
            font-size: 12px;
            transition: background 0.3s;
        }

        .music-action-btn:hover {
            background: #2980b9;
        }

        .add-to-playlist {
            background: #27ae60;
        }

        .add-to-playlist:hover {
            background: #229954;
        }

        /* Album Builder */
        .album-builder {
            background: rgba(255, 255, 255, 0.1);
            border-radius: 10px;
            padding: 20px;
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.2);
        }

        .album-builder h3 {
            margin-bottom: 20px;
            font-size: 20px;
        }

        .album-form {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 20px;
            margin-bottom: 20px;
        }

        .form-group {
            display: flex;
            flex-direction: column;
        }

        .form-group label {
            margin-bottom: 5px;
            font-weight: bold;
        }

        .form-group input, .form-group textarea {
            padding: 10px;
            border: none;
            border-radius: 5px;
            background: rgba(255, 255, 255, 0.2);
            color: white;
        }

        .form-group input::placeholder, .form-group textarea::placeholder {
            color: rgba(255, 255, 255, 0.7);
        }

        .album-tracks {
            margin-top: 20px;
        }

        .album-track {
            display: flex;
            align-items: center;
            padding: 10px;
            background: rgba(255, 255, 255, 0.1);
            border-radius: 5px;
            margin-bottom: 10px;
        }

        .album-track-info {
            flex: 1;
        }

        .album-track-title {
            font-weight: bold;
        }

        .album-track-artist {
            font-size: 12px;
            opacity: 0.8;
        }

        .remove-track {
            background: #e74c3c;
            border: none;
            color: white;
            padding: 5px 10px;
            border-radius: 3px;
            cursor: pointer;
        }

        .save-album {
            background: #27ae60;
            border: none;
            color: white;
            padding: 12px 24px;
            border-radius: 5px;
            cursor: pointer;
            font-size: 16px;
            margin-top: 20px;
        }

        .save-album:hover {
            background: #229954;
        }

        /* Audio Element */
        #audio-player {
            display: none;
        }
    </style>
</head>
<body>
    <!-- Winamp-style Player -->
    <div class="winamp-container">
        <div class="player-main">
            <div class="player-controls">
                <button class="control-btn" onclick="previousTrack()">
                    <i class="fas fa-step-backward"></i>
                </button>
                <button class="control-btn play-btn" onclick="togglePlay()" id="playBtn">
                    <i class="fas fa-play" id="playIcon"></i>
                </button>
                <button class="control-btn" onclick="nextTrack()">
                    <i class="fas fa-step-forward"></i>
                </button>
                <button class="control-btn" onclick="togglePlaylist()">
                    <i class="fas fa-list"></i>
                </button>
            </div>
            
            <div class="track-info">
                <div class="track-title" id="currentTitle">No track selected</div>
                <div class="track-artist" id="currentArtist">SoundStudioPro</div>
            </div>
            
            <div class="progress-container">
                <div class="progress-bar" onclick="seek(event)">
                    <div class="progress-fill" id="progressFill"></div>
                </div>
                <div class="time-display">
                    <span id="currentTime">0:00</span> / <span id="totalTime">0:00</span>
                </div>
            </div>
            
            <div class="volume-control">
                <i class="fas fa-volume-up"></i>
                <input type="range" class="volume-slider" min="0" max="100" value="50" onchange="setVolume(this.value)">
            </div>
        </div>
    </div>

    <!-- Playlist Panel -->
    <div class="playlist-panel" id="playlistPanel">
        <div class="playlist-header">
            <div class="playlist-title">Playlist</div>
            <button class="close-playlist" onclick="togglePlaylist()">
                <i class="fas fa-times"></i>
            </button>
        </div>
        
        <div class="playlist-tabs">
            <div class="playlist-tab active" onclick="switchTab('playlist')">Current Playlist</div>
            <div class="playlist-tab" onclick="switchTab('albums')">My Albums</div>
            <div class="playlist-tab" onclick="switchTab('builder')">Album Builder</div>
        </div>
        
        <div class="playlist-content" id="playlistContent">
            <!-- Playlist items will be loaded here -->
        </div>
    </div>

    <!-- Main Content -->
    <div class="main-content">
        <div class="content-header">
            <h1 class="page-title">My Music Collection</h1>
            <button class="toggle-playlist" onclick="togglePlaylist()">
                <i class="fas fa-list"></i> Playlist
            </button>
        </div>

        <!-- Music Grid -->
        <div class="music-grid" id="musicGrid">
            <!-- Music cards will be loaded here -->
        </div>

        <!-- Album Builder Section -->
        <div class="album-builder" id="albumBuilder" style="display: none;">
            <h3>Create New Album</h3>
            <form class="album-form">
                <div class="form-group">
                    <label>Album Title</label>
                    <input type="text" id="albumTitle" placeholder="Enter album title">
                </div>
                <div class="form-group">
                    <label>Artist Name</label>
                    <input type="text" id="albumArtist" placeholder="Enter artist name">
                </div>
                <div class="form-group">
                    <label>Genre</label>
                    <input type="text" id="albumGenre" placeholder="Enter genre">
                </div>
                <div class="form-group">
                    <label>Price ($)</label>
                    <input type="number" id="albumPrice" placeholder="0.00" step="0.01" min="0">
                </div>
                <div class="form-group" style="grid-column: 1 / -1;">
                    <label>Description</label>
                    <textarea id="albumDescription" rows="3" placeholder="Enter album description"></textarea>
                </div>
            </form>
            
            <div class="album-tracks" id="albumTracks">
                <h4>Album Tracks</h4>
                <!-- Album tracks will be listed here -->
            </div>
            
            <button class="save-album" onclick="saveAlbum()">Save Album</button>
        </div>
    </div>

    <!-- Hidden Audio Element -->
    <audio id="audioPlayer" preload="metadata"></audio>

    <script>
        // Global variables
        let currentPlaylist = [];
        let currentTrackIndex = 0;
        let isPlaying = false;
        let currentTab = 'playlist';
        let userTracks = [];
        let userAlbums = [];

        // Initialize
        document.addEventListener('DOMContentLoaded', function() {
            loadUserTracks();
            loadUserAlbums();
            updatePlaylist();
        });

        // Load user tracks
        async function loadUserTracks() {
            try {
                const response = await fetch('/api/get_user_tracks.php');
                const data = await response.json();
                if (data.success) {
                    userTracks = data.tracks;
                    renderMusicGrid();
                }
            } catch (error) {
                console.error('Error loading tracks:', error);
            }
        }

        // Load user albums
        async function loadUserAlbums() {
            try {
                const response = await fetch('/api/get_user_albums.php');
                const data = await response.json();
                if (data.success) {
                    userAlbums = data.albums;
                }
            } catch (error) {
                console.error('Error loading albums:', error);
            }
        }

        // Render music grid
        function renderMusicGrid() {
            const grid = document.getElementById('musicGrid');
            grid.innerHTML = '';

            userTracks.forEach(track => {
                const card = document.createElement('div');
                card.className = 'music-card';
                card.innerHTML = `
                    <div class="music-card-header">
                        <div>
                            <div class="music-card-title">${track.title}</div>
                            <div class="music-card-artist">${track.prompt}</div>
                        </div>
                        <div class="music-card-status ${track.status === 'complete' ? 'status-complete' : 'status-processing'}">
                            ${track.status}
                        </div>
                    </div>
                    <div class="music-card-actions">
                        ${track.status === 'complete' ? `
                            <button class="music-action-btn" onclick="playTrack('${track.task_id}')">
                                <i class="fas fa-play"></i> Play
                            </button>
                            <button class="music-action-btn add-to-playlist" onclick="addToPlaylist('${track.task_id}')">
                                <i class="fas fa-plus"></i> Add to Playlist
                            </button>
                        ` : `
                            <button class="music-action-btn" disabled>
                                <i class="fas fa-clock"></i> Processing
                            </button>
                        `}
                    </div>
                `;
                grid.appendChild(card);
            });
        }

        // Play track
        function playTrack(taskId) {
            const track = userTracks.find(t => t.task_id === taskId);
            if (track && track.status === 'complete') {
                const audio = document.getElementById('audioPlayer');
                audio.src = track.audio_url;
                // Auto-play disabled - user must click play button
                // audio.play();
                
                document.getElementById('currentTitle').textContent = track.title;
                document.getElementById('currentArtist').textContent = track.prompt;
                
                // isPlaying = true;
                updatePlayButton(); // This will show play button since isPlaying is false
            }
        }

        // Add to playlist
        function addToPlaylist(taskId) {
            const track = userTracks.find(t => t.task_id === taskId);
            if (track && !currentPlaylist.find(t => t.task_id === taskId)) {
                currentPlaylist.push(track);
                updatePlaylist();
            }
        }

        // Toggle play/pause
        function togglePlay() {
            const audio = document.getElementById('audioPlayer');
            if (isPlaying) {
                audio.pause();
                isPlaying = false;
            } else {
                audio.play();
                isPlaying = true;
            }
            updatePlayButton();
        }

        // Update play button
        function updatePlayButton() {
            const icon = document.getElementById('playIcon');
            icon.className = isPlaying ? 'fas fa-pause' : 'fas fa-play';
        }

        // Next track
        function nextTrack() {
            if (currentPlaylist.length > 0) {
                currentTrackIndex = (currentTrackIndex + 1) % currentPlaylist.length;
                playCurrentTrack();
            }
        }

        // Previous track
        function previousTrack() {
            if (currentPlaylist.length > 0) {
                currentTrackIndex = currentTrackIndex === 0 ? currentPlaylist.length - 1 : currentTrackIndex - 1;
                playCurrentTrack();
            }
        }

        // Play current track
        function playCurrentTrack() {
            if (currentPlaylist.length > 0) {
                const track = currentPlaylist[currentTrackIndex];
                playTrack(track.task_id);
            }
        }

        // Toggle playlist panel
        function togglePlaylist() {
            const panel = document.getElementById('playlistPanel');
            panel.classList.toggle('open');
        }

        // Switch tabs
        function switchTab(tab) {
            currentTab = tab;
            document.querySelectorAll('.playlist-tab').forEach(t => t.classList.remove('active'));
            event.target.classList.add('active');
            
            if (tab === 'builder') {
                document.getElementById('albumBuilder').style.display = 'block';
            } else {
                document.getElementById('albumBuilder').style.display = 'none';
            }
            
            updatePlaylist();
        }

        // Update playlist display
        function updatePlaylist() {
            const content = document.getElementById('playlistContent');
            
            if (currentTab === 'playlist') {
                content.innerHTML = currentPlaylist.map((track, index) => `
                    <div class="playlist-item ${index === currentTrackIndex ? 'playing' : ''}" onclick="playPlaylistTrack(${index})">
                        <div class="playlist-item-info">
                            <div class="playlist-item-title">${track.title}</div>
                            <div class="playlist-item-artist">${track.prompt}</div>
                        </div>
                        <div class="playlist-item-duration">30s</div>
                        <div class="playlist-actions">
                            <button class="playlist-action-btn" onclick="removeFromPlaylist(${index})">
                                <i class="fas fa-trash"></i>
                            </button>
                        </div>
                    </div>
                `).join('');
            } else if (currentTab === 'albums') {
                content.innerHTML = userAlbums.map(album => `
                    <div class="playlist-item">
                        <div class="playlist-item-info">
                            <div class="playlist-item-title">${album.title}</div>
                            <div class="playlist-item-artist">${album.artist}</div>
                        </div>
                        <div class="playlist-item-duration">$${album.price}</div>
                        <div class="playlist-actions">
                            <button class="playlist-action-btn" onclick="editAlbum(${album.id})">
                                <i class="fas fa-edit"></i>
                            </button>
                        </div>
                    </div>
                `).join('');
            }
        }

        // Play playlist track
        function playPlaylistTrack(index) {
            currentTrackIndex = index;
            playCurrentTrack();
        }

        // Remove from playlist
        function removeFromPlaylist(index) {
            currentPlaylist.splice(index, 1);
            if (currentTrackIndex >= currentPlaylist.length) {
                currentTrackIndex = 0;
            }
            updatePlaylist();
        }

        // Save album
        async function saveAlbum() {
            const albumData = {
                title: document.getElementById('albumTitle').value,
                artist: document.getElementById('albumArtist').value,
                genre: document.getElementById('albumGenre').value,
                price: document.getElementById('albumPrice').value,
                description: document.getElementById('albumDescription').value,
                tracks: currentPlaylist.map(t => t.task_id)
            };

            try {
                const response = await fetch('/api/save_album.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify(albumData)
                });
                
                const data = await response.json();
                if (data.success) {
                    alert('Album saved successfully!');
                    loadUserAlbums();
                    switchTab('albums');
                }
            } catch (error) {
                console.error('Error saving album:', error);
            }
        }

        // Audio event listeners
        document.getElementById('audioPlayer').addEventListener('timeupdate', function() {
            const audio = this;
            const progress = (audio.currentTime / audio.duration) * 100;
            document.getElementById('progressFill').style.width = progress + '%';
            
            const currentTime = formatTime(audio.currentTime);
            const totalTime = formatTime(audio.duration);
            document.getElementById('currentTime').textContent = currentTime;
            document.getElementById('totalTime').textContent = totalTime;
        });

        document.getElementById('audioPlayer').addEventListener('ended', function() {
            nextTrack();
        });

        // Utility functions
        function formatTime(seconds) {
            const mins = Math.floor(seconds / 60);
            const secs = Math.floor(seconds % 60);
            return `${mins}:${secs.toString().padStart(2, '0')}`;
        }

        function setVolume(value) {
            document.getElementById('audioPlayer').volume = value / 100;
        }

        function seek(event) {
            const audio = document.getElementById('audioPlayer');
            const rect = event.target.getBoundingClientRect();
            const percent = (event.clientX - rect.left) / rect.width;
            audio.currentTime = percent * audio.duration;
        }
    </script>
</body>
</html> 

CasperSecurity Mini